Обсуждение: 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