Thread: pkglibdir versus libdir?

pkglibdir versus libdir?

From
Tom Lane
Date:
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


Re: pkglibdir versus libdir?

From
Peter Eisentraut
Date:
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


Re: pkglibdir versus libdir?

From
Tom Lane
Date:
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