includedir_internal headers are not self-contained

From: Christoph Berg <cb(at)df7cb(dot)de>
To: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: includedir_internal headers are not self-contained
Date: 2014-04-26 12:25:48
Message-ID: 20140426122548.GA7249@msgid.df7cb.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Debian is shipping client headers in /usr/include/postgresql in the
libpq-dev package. The server headers go into
/usr/include/postgresql/<major>/server in postgresql-server-dev-<major>,
so we can have the headers for several majors installed in parallel.

Historically, a few server headers were also included in libpq-dev
because 9 years ago, there were some client apps that needed them.
We've finally got around to fix that [1], now the layout is:

libpq-dev:
/usr/include/postgresql/internal/*
/usr/include/postgresql/libpq-fe.h
/usr/include/postgresql/libpq-events.h
/usr/include/postgresql/libpq/libpq-fs.h
/usr/include/postgresql/pg_config*.h
/usr/include/postgresql/postgres_ext.h

postgresql-server-dev-<major>:
/usr/include/postgresql/<major>/server/*

Unfortunately the files in internal/ are not self-contained:
internal/postgres_fe.h includes
common/fe_memutils.h which includes
utils/palloc.h

Both common/ and utils/ are server-only, so you can't build client
apps which need postgres_fe.h with only libpq-dev installed.

common/ was introduced in 8396447cdbdff0b62914748de2fec04281dc9114,
and added to src/include/Makefile in c153530dc10bf5ff6dc5a89249f9cb596dd71a63.

I believe common/ should be also be installed by includedir_internal.
utils/ should probably also be installed there, alternatively only the
headers referred to from common/, the files directly referred being:

$ grep -r include 9.4/server/common/ | grep \"
9.4/server/common/fe_memutils.h:#include "utils/palloc.h"
9.4/server/common/relpath.h:#include "catalog/catversion.h" /* pgrminclude ignore */
9.4/server/common/relpath.h:#include "storage/relfilenode.h"

I'd write a patch for src/include/Makefile, but we'd need to sort out
the layout first.

On a sidenote, I don't see why utils/errcodes.h and utils/fmgroids.h
need a separate INSTALL_DATA call when they are installed by into
utils/ anyway.

(Another issue is that client apps frequently seem to want
catalog/pg_type.h to get the OID definitions, it might make sense to
move that also to internal/.)

Christoph

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=314427
--
cb(at)df7cb(dot)de | http://www.df7cb.de/

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Fetter 2014-04-26 12:40:21 Re: Decrease MAX_BACKENDS to 2^16
Previous Message David Fetter 2014-04-26 12:15:01 Re: Hashable custom types