[Exherbo-dev] PostgreSQL packge split and slotting
loki at lokis-chaos.de
Fri Aug 24 10:09:03 UTC 2018
After some discussion on gitlab, i now provided also an exlib,
to support the build of PostgreSQL extensions for multiple slots.
As one of the main concerns seems to be the split of the client from the main
postgresql package, i want to be more verbose on the reasons behind that.
PostgreSQL ships a tool `pg_config`. This is used to build server extensions
and client applications.
An example output of pg_config ( from a gentoo system, to demonstrate why this
is a bad idea):
> ~ # pg_config
> BINDIR = /usr/lib64/postgresql-10/bin
> INCLUDEDIR = /usr/include/postgresql-10
> PKGINCLUDEDIR = /usr/include/postgresql-10
> INCLUDEDIR-SERVER = /usr/include/postgresql-10/server
> LIBDIR = /usr/lib64/postgresql-10/lib64
> PKGLIBDIR = /usr/lib64/postgresql-10/lib64
> PGXS = /usr/lib64/postgresql-10/lib64/pgxs/src/makefiles/pgxs.mk
> LIBS = -lpgcommon -lpgport -lpthread -lxslt -lxml2 -lpam -lssl -lcrypto -lz
-lreadline -lrt -lcrypt -ldl -lm
The most important part is the `LIBDIR`.
If we use alternatives light to handle the PostgreSQL client binaries, and
always link to the latest version we will always link against the library in
the version specific directory, unless we either patch every single package or
patch pg_config. And both are bad ideas in my opinion.
We also could depend on the best installed slot during installation of a
postgresql package, but i also would consider this bad design, as this could
lead to issues, if multiple libraries, used together, are linked and build
against different versions of libpq.
This is what happens in gentoo far to often.
My proposed solution does not have this issues, as postgresql-client installs
in version-independent locations. The `pg_config` from postgresql-client
For server-side builds the correct `pg_config` version must be chosen. This is
done by postgresql.exlib
More information about the Exherbo-dev