What generates pg_config.h?
Hi, I have postgres 9.5 and 9.6 installed. pg_config points to 9.6. I am trying to compile a postgresql plugin (Timescaledb). I am getting an error: --- /usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION" redefined #define PACKAGE_VERSION "10.0" ^ In file included from /usr/include/postgresql/9.6/server/c.h:53:0, from /usr/include/postgresql/9.6/server/postgres.h:47, from /mnt/data/timescaledb/src/init.c:1: /usr/include/postgresql/9.6/server/pg_config.h:740:0: note: this is the location of the previous definition #define PACKAGE_VERSION "9.6.5" - The command pg_config gives the following: --- BINDIR = /usr/lib/postgresql/9.6/bin DOCDIR = /usr/share/doc/postgresql-doc-9.6 HTMLDIR = /usr/share/doc/postgresql-doc-9.6 INCLUDEDIR = /usr/include/postgresql PKGINCLUDEDIR = /usr/include/postgresql INCLUDEDIR-SERVER = /usr/include/postgresql/9.6/server LIBDIR = /usr/lib/x86_64-linux-gnu PKGLIBDIR = /usr/lib/postgresql/9.6/lib LOCALEDIR = /usr/share/locale MANDIR = /usr/share/postgresql/9.6/man SHAREDIR = /usr/share/postgresql/9.6 SYSCONFDIR = /etc/postgresql-common PGXS = /usr/lib/postgresql/9.6/lib/pgxs/src/makefiles/pgxs.mk CONFIGURE = '--with-tcl' '--with-perl' '--with-python' '--with-pam' '--with-openssl' '--with-libxml' '--with-libxslt' '--with-tclconfig=/usr/lib/x86_64-linux-gnu/tcl8.6' '--with-includes=/usr/include/tcl8.6' 'PYTHON=/usr/bin/python' '--mandir=/usr/share/postgresql/9.6/man' '--docdir=/usr/share/doc/postgresql-doc-9.6' '--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/' '--datadir=/usr/share/postgresql/9.6' '--bindir=/usr/lib/postgresql/9.6/bin' '--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/' '--includedir=/usr/include/postgresql/' '--enable-nls' '--enable-integer-datetimes' '--enable-thread-safety' '--enable-tap-tests' '--enable-debug' '--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld' '--with-pgport=5432' '--with-system-tzdata=/usr/share/zoneinfo' '--with-systemd' 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -pie -fno-omit-frame-pointer' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' '--with-gssapi' '--with-ldap' '--with-includes=/usr/include/mit-krb5' '--with-libs=/usr/lib/mit-krb5' '--with-libs=/usr/lib/x86_64-linux-gnu/mit-krb5' '--with-selinux' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' CC = gcc CPPFLAGS = -DFRONTEND -Wdate-time -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include/mit-krb5 CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -pie -fno-omit-frame-pointer CFLAGS_SL = -fPIC LDFLAGS = -L../../src/common -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -L/usr/lib/x86_64-linux-gnu/mit-krb5 -Wl,--as-needed LDFLAGS_EX = LDFLAGS_SL = LIBS = -lpgcommon -lpgport -lselinux -lxslt -lxml2 -lpam -lssl -lcrypto -lgssapi_krb5 -lz -ledit -lrt -lcrypt -ldl -lm VERSION = PostgreSQL 9.6.5 - So my question is: what is generating the /usr/include/postgresql/pg_config.h file? Why is it different than the /usr/include/postgresql/9.6/server/pg_config.h file? Thanks! Travis
Re: What generates pg_config.h?
Distro and version: Ubuntu 16.04 LTS. If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get, where I followed the instructions from this site: https://www.postgresql.org/download/linux/ubuntu/ I also have an anaconda installation of postgresql, but that is a version less than 9.6. Here are the results for postgresql using dpkg-query -l ii postgresql 9.5+173 all object-relational SQL database (supported version) ii postgresql-9.5 9.5.3-0ubuntu0.16.04 amd64 object-relational SQL database, version 9.5 server ii postgresql-9.6 9.6.5-1.pgdg16.04+2 amd64 object-relational SQL database, version 9.6 server ii postgresql-client-9.5 9.5.3-0ubuntu0.16.04 amd64 front-end programs for PostgreSQL 9.5 ii postgresql-client-9.6 9.6.5-1.pgdg16.04+2 amd64 front-end programs for PostgreSQL 9.6 ii postgresql-client-common 173 all manager for multiple PostgreSQL client versions ii postgresql-common 173 all PostgreSQL database-cluster manager ii postgresql-contrib-9.5 9.5.3-0ubuntu0.16.04 amd64 additional facilities for PostgreSQL ii postgresql-contrib-9.6 9.6.5-1.pgdg16.04+2 amd64 additional facilities for PostgreSQL ii postgresql-server-dev-9.5 9.5.3-0ubuntu0.16.04 amd64 development files for PostgreSQL 9.5 server-side programming ii postgresql-server-dev-9.6 9.6.5-1.pgdg16.04+2 amd64 development files for PostgreSQL 9.6 server-side programming On Fri, Jan 5, 2018 at 10:24 AM, Adrian Klaver wrote: > On 01/05/2018 09:07 AM, Travis Allison wrote: > >> Hi, >> >> I have postgres 9.5 and 9.6 installed. pg_config points to 9.6. >> I am trying to compile a postgresql plugin (Timescaledb). I am getting >> an error: >> --- >> /usr/include/postgresql/pg_config.h:733:0: warning: "PACKAGE_VERSION" >> redefined >> #define PACKAGE_VERSION "10.0" >> ^ >> In file included from /usr/include/postgresql/9.6/server/c.h:53:0, >> from /usr/include/postgresql/9.6/server/postgres.h:47, >> from /mnt/data/timescaledb/src/init.c:1: >> /usr/include/postgresql/9.6/server/pg_config.h:740:0: note: this is the >> location of the previous definition >> #define PACKAGE_VERSION "9.6.5" >> - >> >> The command pg_config gives the following: >> >> --- >> BINDIR = /usr/lib/postgresql/9.6/bin >> DOCDIR = /usr/share/doc/postgresql-doc-9.6 >> HTMLDIR = /usr/share/doc/postgresql-doc-9.6 >> INCLUDEDIR = /usr/include/postgresql >> PKGINCLUDEDIR = /usr/include/postgresql >> INCLUDEDIR-SERVER = /usr/include/postgresql/9.6/server >> LIBDIR = /usr/lib/x86_64-linux-gnu >> PKGLIBDIR = /usr/lib/postgresql/9.6/lib >> LOCALEDIR = /usr/share/locale >> MANDIR = /usr/share/postgresql/9.6/man >> SHAREDIR = /usr/share/postgresql/9.6 >> SYSCONFDIR = /etc/postgresql-common >> PGXS = /usr/lib/postgresql/9.6/lib/pgxs/src/makefiles/pgxs.mk < >> http://pgxs.mk> >> CONFIGURE = '--with-tcl' '--with-perl' '--with-python' '--with-pam' >> '--with-openssl' '--with-libxml' '--with-libxslt' >> '--with-tclconfig=/usr/lib/x86_64-linux-gnu/tcl8.6' >> '--with-includes=/usr/include/tcl8.6' 'PYTHON=/usr/bin/python' >> '--mandir=/usr/share/postgresql/9.6/man' >> '--docdir=/usr/share/doc/postgresql-doc-9.6' >> '--sysconfdir=/etc/postgresql-common' '--datarootdir=/usr/share/' >> '--datadir=/usr/share/postgresql/9.6' '--bindir=/usr/lib/postgresql/9.6/bin' >> '--libdir=/usr/lib/x86_64-linux-gnu/' '--libexecdir=/usr/lib/postgresql/' >> '--includedir=/usr/include/postgresql/' '--enable-nls' >> '--enable-integer-datetimes' '--enable-thread-safety' '--enable-tap-tests' >> '--enable-debug' '--disable-rpath' '--with-uuid=e2fs' '--with-gnu-ld' >> '--with-pgport=5432' '--with-system-tzdata=/usr/share/zoneinfo' >> '--with-systemd' 'CFLAGS=-g -O2 -fstack-protector-strong -Wformat >> -Werror=for
Re: What generates pg_config.h?
No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg -S /usr/include/postgresql/pg_config.h Result: libpq-dev: /usr/include/postgresql/pg_config.h Here is the result from dpkg-query -l | grep libpq ii libpq-dev 10.0-1.pgdg16.04+1 amd64header files for libpq5 (PostgreSQL library) ii libpq5:amd64 10.0-1.pgdg16.04+1 amd64PostgreSQL C client library So thanks to all of your help, I've identified the culprit. Any suggestions on what to do next? On Fri, Jan 5, 2018 at 12:19 PM, Adrian Klaver wrote: > On 01/05/2018 11:57 AM, Travis Allison wrote: > >> Distro and version: Ubuntu 16.04 LTS. >> >> If memory serves, I installed 9.5 using synaptic and 9.6 using apt-get, >> where I followed the instructions from this site: >> https://www.postgresql.org/download/linux/ubuntu/ >> >> I also have an anaconda installation of postgresql, but that is a version >> less than 9.6. >> >> Here are the results for postgresql using dpkg-query -l >> > > Well somehow a Postgres 10 version of pg_config.h got installed. > Is there an instance of Postgres 10 running? > > > >> ii postgresql 9.5+173 all >> object-relational SQL database (supported version) >> ii postgresql-9.5 9.5.3-0ubuntu0.16.04 amd64 >>object-relational SQL database, version 9.5 server >> ii postgresql-9.6 9.6.5-1.pgdg16.04+2 >> amd64object-relational SQL database, version 9.6 server >> ii postgresql-client-9.5 9.5.3-0ubuntu0.16.04 amd64 >>front-end programs for PostgreSQL 9.5 >> ii postgresql-client-9.6 9.6.5-1.pgdg16.04+2 >> amd64front-end programs for PostgreSQL 9.6 >> ii postgresql-client-common 173 all >> manager for multiple PostgreSQL client versions >> ii postgresql-common 173 all >> PostgreSQL database-cluster manager >> ii postgresql-contrib-9.5 9.5.3-0ubuntu0.16.04 amd64 >>additional facilities for PostgreSQL >> ii postgresql-contrib-9.6 9.6.5-1.pgdg16.04+2 >> amd64additional facilities for PostgreSQL >> ii postgresql-server-dev-9.5 9.5.3-0ubuntu0.16.04 amd64 >>development files for PostgreSQL 9.5 server-side >> programming >> ii postgresql-server-dev-9.6 9.6.5-1.pgdg16.04+2 >> amd64development files for PostgreSQL 9.6 server-side >> programming >> >> >> > > > -- > Adrian Klaver > adrian.kla...@aklaver.com >
Re: What generates pg_config.h?
Tom, where's the -l switch exactly? What command is it attached to? (I'm not sure what to look for.) Thanks, Travis On Fri, Jan 5, 2018 at 2:56 PM, Tom Lane wrote: > Alvaro Herrera writes: > > Travis Allison wrote: > >> No instance of Postgres 10 running. I took Tom's suggestion: I ran dpkg > -S > >> /usr/include/postgresql/pg_config.h > >> Result: libpq-dev: /usr/include/postgresql/pg_config.h > > Ah, thanks for clearing that up. > > >> Any suggestions on what to do next? > > > I wonder if there is a mistake in the use of INCLUDEDIR vs. > > INCLUDEDIR-SERVER for -I. Maybe both are being used, and looks like > > only the latter should be. It seems odd that there are two pg_config.h > > files getting included ... > > Yeah ... > > > but I do wonder why is there a pg_config.h in libpq-dev. > > Now I seem to recall some discussion with a packager who felt that > providing just the latest-and-greatest libpq was sufficient for > clients, and only server-side code needed to depend on the server > version. So I'm betting that the intention on the Ubuntu packager's > end is that you use a -I for /usr/include/postgresql when building > client code, while if you want to build a server extension, you > point at the appropriate version subdirectory. Meanwhile, the > extension Travis is trying to build is unfamiliar with that idea > and is throwing in a bunch of -I switches willy-nilly. > > In short, yeah, try removing the -I that's pointing at the upper > directory. > > regards, tom lane >
Re: What generates pg_config.h?
I suppose an easy workaround is to copy my version 9.6 pg_config.h into my user/include/postgresql directory and replace the one installed by libpq-dev. Can you think of any detrimental side-effects from doing that? Travis On Fri, Jan 5, 2018 at 3:40 PM, Adrian Klaver wrote: > On 01/05/2018 03:29 PM, Tom Lane wrote: > >> Travis Allison writes: >> >>> Tom, where's the -l switch exactly? What command is it attached to? (I'm >>> not sure what to look for.) >>> >> >> Look into the extension's Makefile for something roughly along the lines >> of >> > > Assuming the OP is talking about this: > > https://github.com/timescale/timescaledb > > I believe there is an intervening step: > > # Bootstrap the build system > ./bootstrap > > If I am following correctly the -I are in: > > CMakeLists.txt > > # Get PostgreSQL configuration from pg_config > execute_process( > COMMAND ${PG_CONFIG} --includedir > OUTPUT_VARIABLE PG_INCLUDEDIR > OUTPUT_STRIP_TRAILING_WHITESPACE) > execute_process( > COMMAND ${PG_CONFIG} --includedir-server > OUTPUT_VARIABLE PG_INCLUDEDIR_SERVER > OUTPUT_STRIP_TRAILING_WHITESPACE) > > > There does seem to be an apt install: > > http://docs.timescale.com/v0.8/getting-started/installation/ > linux/installation-apt > > with the following caveats: > " > Note: PostgreSQL 9.6 is required for TimescaleDB on Ubuntu distros. > Releases with PostgreSQL 10 are coming soon > Prerequisites > > Ubuntu 16.04 or later > > Build & Install > > WARNING:If you have another PostgreSQL installation not via apt, this > will likely cause problems. If you wish to maintain your current version of > PostgreSQL outside of apt, we recommend installing from source. Otherwise > please be sure to remove non-apt installations before using this method. > > " > > >> CPPFLAGS = -I/usr/include/postgresql >> >> Very likely there's some amount of macro-ization involved, so it might >> look more like >> >> INCLUDEDIR = /usr/include/postgresql >> ... >> CPPFLAGS = -I$(INCLUDEDIR) >> >> Furthermore, given our current theory, there's going to be more than >> one -I switch on that line, and you want to get rid of just one. >> >> regards, tom lane >> >> > > -- > Adrian Klaver > adrian.kla...@aklaver.com >
Re: What generates pg_config.h?
Tom, I guess I don't understand the point of having a different pg_config.h in my user/include/postgresql directory than the postgresql server that I am running. You mentioned building client code that would reference the pg_config.h in user/include/postgresql. A couple of questions: What type of client code are you referring to? What is the point of having a pg_config.h for a server that I am not even running? Travis On Fri, Jan 5, 2018 at 8:05 PM, Tom Lane wrote: > Travis Allison writes: > > I suppose an easy workaround is to copy my version 9.6 pg_config.h into > my > > user/include/postgresql directory and replace the one installed by > > libpq-dev. > > > Can you think of any detrimental side-effects from doing that? > > I would not recommend that: it's likely to break code that's expecting > the Ubuntu-standard layout. I think your best course is to adapt the > particular package you're having trouble with to work with that layout. > Maybe contact its author for help? > > regards, tom lane >
Re: What generates pg_config.h?
I wanted to thank all of you for solving my problem. You have all been unbelievably helpful! Travis On Sat, Jan 6, 2018 at 7:42 AM, Christoph Berg wrote: > Re: Adrian Klaver 2018-01-06 <67591f85-a910-2e0b-1fdd- > 9c774eacd...@aklaver.com> > > The problem you are running into is that the build process is using both > the > > older(9.6.5) and newer(10.0) pg_config.h at the same time. > > Fwiw, all issues I've seen so far of that kind could be resolved by > putting -I$(pg_config --includedir-server) before -I$(pg_config > --includedir) in the Makefile. > > I don't know of any PG extension existing in the wild that does not > work with having both /usr/include/postgresql/$version/server/pg_config.h > and /usr/include/postgresql/pg_config.h installed - and we are > packaging a lot of extensions for apt.postgresql.org for non-latest > majors. > > Christoph >