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