Обсуждение: pkglibdir versus libdir?
Peter, I'm a little confused about the difference between the libdir and
pkglibdir settings created by configure. What's supposed to go where?
I got a complaint from a Red Hat person that the regression tests failed
on a 64-bit machine. Some investigation revealed that the problem was
that plpgsql.so got installed into $libdir while pg_regress.sh expected
to find it in $pkglibdir. (The fact that they were different was an
RPM configuration bug, but if we are going to have two variables we
certainly ought to support their being different...) I don't know how
to decide which one is wrong.
regards, tom lane
Tom Lane writes: > Peter, I'm a little confused about the difference between the libdir and > pkglibdir settings created by configure. What's supposed to go where? libdir is for build-time linkable libraries, anything that you might want to pass as -lxxx. So typical locations are /usr/lib, /usr/local/lib, or /usr/local/pgsql/lib. pkglibdir is for dynamically loadable libraries, or in general any architecture-specific files that don't need to be in a particular place, the intent being to keep them out of shared directories like /usr/lib. Typical locations are /usr/lib/postgresql or /usr/local/lib/postgresql. There is the additional trick that if libdir already contains the string "postgres", that is, you have already configured libdir to be a private directory, then pkglibdir is equal to libdir. This was mainly meant as a transition scheme (from formerly having everything in libdir); if it's too confusing we can take it out. > I got a complaint from a Red Hat person that the regression tests failed > on a 64-bit machine. Some investigation revealed that the problem was > that plpgsql.so got installed into $libdir while pg_regress.sh expected > to find it in $pkglibdir. Umm... from src/pl/plpgsql/src/Makefile: install: installdirs all ifeq ($(enable_shared), yes) $(INSTALL_SHLIB) $(shlib) $(DESTDIR)$(pkglibdir)/plpgsql$(DLSUFFIX) else @echo "*****"; \ echo "* PL/pgSQL was not installed due to lack of shared library support."; \ echo"*****" endif > (The fact that they were different was an RPM configuration bug, but if > we are going to have two variables we certainly ought to support their > being different...) I don't know how to decide which one is wrong. In an RPM installation they certainly should be different. -- Peter Eisentraut peter_e@gmx.net
Peter Eisentraut <peter_e@gmx.net> writes:
> Tom Lane writes:
>> Peter, I'm a little confused about the difference between the libdir and
>> pkglibdir settings created by configure. What's supposed to go where?
> libdir is for build-time linkable libraries, anything that you might want
> to pass as -lxxx. So typical locations are /usr/lib, /usr/local/lib, or
> /usr/local/pgsql/lib. pkglibdir is for dynamically loadable
> libraries,
Okay, so anything meant to be loaded by the backend goes in pkglibdir?
>> I got a complaint from a Red Hat person that the regression tests failed
>> on a 64-bit machine. Some investigation revealed that the problem was
>> that plpgsql.so got installed into $libdir while pg_regress.sh expected
>> to find it in $pkglibdir.
> Umm... from src/pl/plpgsql/src/Makefile:
Actually, further investigation revealed that there is brain damage in the
rpm patches: some places have been hacked to have hard-wired paths.
As soon as $libdir is not /usr/lib, the rpm patches roll over and die.
We mistakenly blamed this on a libdir-vs-pkglibdir discrepancy, until we
noticed what was actually getting executed ...
Thanks for the response.
regards, tom lane