What generates pg_config.h?

2018-01-05 Thread Travis Allison
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?

2018-01-05 Thread Travis Allison
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?

2018-01-05 Thread Travis Allison
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?

2018-01-05 Thread Travis Allison
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?

2018-01-05 Thread Travis Allison
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?

2018-01-05 Thread Travis Allison
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?

2018-01-06 Thread Travis Allison
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
>