pg_config --pgxs

Started by George Weaveralmost 20 years ago13 messages
#1George Weaver
gweaver@shaw.ca

Hi,

I am trying to create a makefile for installing some C functions.

When I include the following in the makefile:

PGXS := $(shell pg_config --pgxs)
include $(PGXS)

I get the following error:

$ make
pg_config: invalid argument: --pgxs
Try 'pg_config --help' for more information.
Makefile:10: no file name for `include'
make: *** No targets. Stop.

When I run pg_config -- help, I don't see any options for the --pgxs
argument.

I am using MinGW under XP.

What am I missing??

Thanks,
George

#2Michael Fuhr
mike@fuhr.org
In reply to: George Weaver (#1)
Re: pg_config --pgxs

On Thu, Mar 02, 2006 at 09:12:26AM -0600, George Weaver wrote:

$ make
pg_config: invalid argument: --pgxs
Try 'pg_config --help' for more information.

What does "pg_config --version" show? PGXS is available in 8.0 and
later.

--
Michael Fuhr

#3George Weaver
gweaver@shaw.ca
In reply to: George Weaver (#1)
Re: pg_config --pgxs

Michael Fuhr wrote:

What does "pg_config --version" show? PGXS is available in 8.0 and
later.

Interesting...

$ pg_config --version
PostgreSQL 7.3.2

$ pg_config --configure
'--enable-multibyte' '--with-python' '--with-perl' '--with-java'
'--with-CXX' '--prefix=/usr' '--sysconfdir=/etc'
'--docdir=/usr/doc/postgresql-7.3.2'

I am running 8.1 and ran configure under MSys to build the 8.1 source tree
for installing the XML2 contrib module!

I do have a cygwin version of 7.3.2 installed on my system as well - I'll
have to figure out where the conflict is arising.

Thanks, Michael, for pointing me in the right direction.

Regards,
George

#4George Weaver
gweaver@shaw.ca
In reply to: George Weaver (#1)
Re: pg_config --pgxs

Michael Fuhr wrote:

What does "pg_config --version" show? PGXS is available in 8.0 and
later.

Hi Michael;

pg_config --version now shows:

$ pg_config --version
PostgreSQL 8.1.0

However, when I try pg_config --pgxs it returns nothing:

$ pg_config --pgxs

$

The following are all undefined:

--includedir
--pkgincludedir
--includedir-server
--localedir
--mandir
--sysconfdir
--pgxs
--cflags_sl
--ldflags_sl

Is there a way to configure these?

Thanks,
George

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: George Weaver (#4)
Re: [NOVICE] pg_config --pgxs

George Weaver <gweaver@shaw.ca> writes:

pg_config --version now shows:

$ pg_config --version
PostgreSQL 8.1.0

However, when I try pg_config --pgxs it returns nothing:

$ pg_config --pgxs

$

If you're on Windows this probably means that GetShortPathName() is
failing. I'm not sure what conditions cause that, exactly. It might be
a good idea if we fixed pg_config to print out the error code rather
than just silently failing.

regards, tom lane

#6George Weaver
gweaver@shaw.ca
In reply to: George Weaver (#1)
Re: [NOVICE] pg_config --pgxs

On March 2 Tom Lane wrote:

If you're on Windows this probably means that GetShortPathName() is
failing. I'm not sure what conditions cause that, exactly. It might be
a good idea if we fixed pg_config to print out the error code rather
than just silently failing.

Hi Tom,

I am using Windows (XP).

Regards,
George

#7Thomas Hallgren
thomas@tada.se
In reply to: George Weaver (#6)
Re: [NOVICE] pg_config --pgxs

George Weaver wrote:

On March 2 Tom Lane wrote:

If you're on Windows this probably means that GetShortPathName() is
failing. I'm not sure what conditions cause that, exactly. It might be
a good idea if we fixed pg_config to print out the error code rather
than just silently failing.

Hi Tom,

I am using Windows (XP).

GetShortPathName() seems to work well on my XP machine:

C:\>pg_config --version
PostgreSQL 8.1.1

C:\>pg_config --pgxs
C:/PROGRA~1/POSTGR~1/8.1/lib/pgxs/src/MAKEFI~1/pgxs.mk

Regards,
Thomas Hallgren

#8Dave Page
dpage@vale-housing.co.uk
In reply to: Thomas Hallgren (#7)
Re: [NOVICE] pg_config --pgxs

-----Original Message-----
From: pgsql-hackers-owner@postgresql.org
[mailto:pgsql-hackers-owner@postgresql.org] On Behalf Of
Thomas Hallgren
Sent: 03 March 2006 14:18
To: George Weaver
Cc: Michael Fuhr; pgsql-novice@postgresql.org;
pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] [NOVICE] pg_config --pgxs

George Weaver wrote:

On March 2 Tom Lane wrote:

If you're on Windows this probably means that GetShortPathName() is
failing. I'm not sure what conditions cause that,

exactly. It might be

a good idea if we fixed pg_config to print out the error

code rather

than just silently failing.

Hi Tom,

I am using Windows (XP).

GetShortPathName() seems to work well on my XP machine:

C:\>pg_config --version
PostgreSQL 8.1.1

C:\>pg_config --pgxs
C:/PROGRA~1/POSTGR~1/8.1/lib/pgxs/src/MAKEFI~1/pgxs.mk

It might be that short filenames are disabled - George, what's the value
of the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisab
le8dot3NameCreation

I did test it with and without short names disabled when I rewrote that
code for Win32, but perhaps there's something odd on your system that's
related.

Regards, Dave.

#9George Weaver
gweaver@shaw.ca
In reply to: Dave Page (#8)
Re: [NOVICE] pg_config --pgxs

From: "Dave Page"
Sent: Friday, March 03, 2006 8:24 AM

It might be that short filenames are disabled - George, what's the value
of the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisab
le8dot3NameCreation

Hi Dave;

The value is 0. Does that mean short filenames are disabled?

Regards,
George

#10Dave Page
dpage@vale-housing.co.uk
In reply to: George Weaver (#9)
Re: [NOVICE] pg_config --pgxs

-----Original Message-----
From: George Weaver [mailto:gweaver@shaw.ca]
Sent: 03 March 2006 14:55
To: Dave Page
Cc: Thomas Hallgren; pgsql-hackers@postgresql.org;
pgsql-novice@postgresql.org; Michael Fuhr
Subject: Re: [HACKERS] [NOVICE] pg_config --pgxs

From: "Dave Page"
Sent: Friday, March 03, 2006 8:24 AM

It might be that short filenames are disabled - George,

what's the value

of the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSyste

m\NtfsDisab

le8dot3NameCreation

Hi Dave;

The value is 0. Does that mean short filenames are disabled?

No, 1 means disabled, 0 (or non-existant) means enabled, so unless
there's another way of doing it that I don't know of, that's unlikely to
be the problem.

Regards, Dave.

#11George Weaver
gweaver@shaw.ca
In reply to: George Weaver (#1)
Re: [NOVICE] pg_config --pgxs

----- Original Message -----
From: "Tom Lane"

If you're on Windows this probably means that GetShortPathName() is
failing. I'm not sure what conditions cause that, exactly. It might be
a good idea if we fixed pg_config to print out the error code rather
than just silently failing.

I think I have figured out what the problem is.

I installed the binary version of 8.1 via the msi-installer which creates
the PostgreSQL bin directory as "C:\Program Files\PostgreSQL\8.1\bin".

I then downloaded and installed the source code in order to compile and
install the xml2 contrib module. When I extracted
"postgresql-8.1.0.tar.bz2" to the "C:\Program Files\PostgreSQL" directory,
it creates the directory "C:\Program Files\PostgreSQL\postgresql-8.1.0". I
did not need to make and install the entire package from source in order to
build and install the xml2 module, so the directories remain as above.

When pg_config is run, it's assuming that bindir is "C:/Program
Files/PostgreSQL/8.1/bin" and starts all its path searches basis this
directory.

For pgxs, it concatentates the libdir with "/pgxs/src/makefiles/pgxs.mk" so
its looking for "C:/Program
Files/PostgreSQL/8.1/lib/pgxs/src/makefiles/pgxs.mk" which doesn't exist.
In fact under the source tree for 8.1.0 there is no directory "pgxs". If I
create a directory "/pgxs/src/makefiles" under "C:/Program
Files/PostgreSQL/8.1/lib/" and copy pgxs.mk to this directory, pg_config
finds it correctly:

C:\>pg_config --pgxs
C:/PROGRA~1/POSTGR~1/8.1/lib/pgxs/src/MAKEFI~1/pgxs.mk

If I made the entire package from source and installed it, would it have
created the directory "/pgxs/src/makefiles" under "C:/Program
Files/PostgreSQL/8.1/lib/"?

Regards,
George

#12Tom Lane
tgl@sss.pgh.pa.us
In reply to: George Weaver (#11)
Re: [NOVICE] pg_config --pgxs

George Weaver <gweaver@shaw.ca> writes:

For pgxs, it concatentates the libdir with "/pgxs/src/makefiles/pgxs.mk" so
its looking for "C:/Program
Files/PostgreSQL/8.1/lib/pgxs/src/makefiles/pgxs.mk" which doesn't exist.
...
If I made the entire package from source and installed it, would it have
created the directory "/pgxs/src/makefiles" under "C:/Program
Files/PostgreSQL/8.1/lib/"?

Yes, it should have. I think the issue here is that GetShortPathName
insists on the target path actually existing, whereas the Unix
environment imposes no such requirement.

Not sure if we should try to do anything about this --- if the file is
not there, it isn't going to help a lot for pg_config to print out where
it should have been, so really there's not much functionality loss
involved here.

regards, tom lane

#13Thomas Hallgren
thomas@tada.se
In reply to: Tom Lane (#12)
Re: pg_config --pgxs

Tom Lane wrote:

Not sure if we should try to do anything about this --- if the file is
not there, it isn't going to help a lot for pg_config to print out where
it should have been, so really there's not much functionality loss
involved here.

A check if the GetShortPathName produces an empty filename (or whatever it is that's causing
that output) resulting in a 'file not found' or something that makes more sense than mere
silence seems appropriate. It would prevent this topic from popping up again.

Regards,
Thomas Hallgren