Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Bruce Momjian

OK, I found the cause.  Using tests from Magnus and Andrew, I could
reproduce Magnus's success and Andrew's failure in an 8.1.2 pginstaller
install using MinGW.  The difference between Magnus's and Andrew's is
that Magnus used MODULE_big (which means create a shared library), while
Andrew used MODULES.  So, Magnus's only worked because he was creating a
DLL and that brought in the -L from MODULE_big.

I have applied the following patch to change /bin to /lib for Cygwin and
Win32.  Looking at Darwin and AIX, both those are pointing to the
postgres binary, so they should be using /bin, so we are OK on those.

I patched CVS HEAD, and 8.1.X and 8.0.X.  Earlier releases didn't
support pgxs.

---

Andrew Dunstan wrote:
 
 
 Bruce Momjian wrote:
 
 
 OK, thanks.  Next question --- are the installed file locations the same
 for a MinGW install and a pginstaller install?  I don't think
 pginstaller does a MinGW install because it doesn't have the build
 environment in the tarball.
 
 However, the big difference seems to be that Magnus has -Llib and -Lbin,
 while you have only the -Lbin.  I have MinGW and pginstaller installed
 here.  How can I set things up to test this?
 
 
 
 Now looking at the Makefile.global in the 8.1.2 pginstaller install, in
 Makefile.global, $libdir is set in a pgxs-specific block:
 
  libdir := $(shell pg_config --libdir)
 
 and that seems to work:
 
  C:\Program Files\PostgreSQL\8.1\binpg_config --libdir
  C:/PROGRA~1/POSTGR~1/8.1/lib
 
 and that is set to LDFLAGS, which is later propogated to SHLIB_LINK,
 though SHLIB_LINK moves all the -L flags to the front, so what you see
 on the link line is not the ordering used to create the value.
 
 Andrew, can you try echoing $libdir and $SHLIB_LINK in the Makefile to
 find those values?
 
   
 
 
 here is a test case log (including a test makefile). I ran the tests as 
 you can see with both installer 8.1 and mingw installed CVS tip, with 
 the same results.
 
 
 cheers
 
 andrew
 
 $ touch foo.c
 $ cat Makefile
 
 MODULES = foo
 SRCS += foo.c
 OBJS = $(SRCS:.c=.o)
 PGXS := $(shell pg_config --pgxs)
 include $(PGXS)
 override CFLAGS := $(filter-out -Wendif-labels 
 -Wdeclaration-after-statement, $(shell pg_config --cflags))
 showme:
 @echo libdir = $(libdir)
 @echo SHLIB_LINK = $(SHLIB_LINK)
 $ which pg_config
 /c/Program Files/PostgreSQL/8.1/bin/pg_config
 $ rm -f foo.dll
 $ make
 gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
 -fno-strict-aliasing -I. -Ic:/PROGRA~1/POSTGR~1/8.1/include/server 
 -Ic:/PROGRA~1/POSTGR~1/8.1/include/internal -I./src/include/port/win32 
 -DEXEC_BACKEND  -I/mingw/include/krb5 
 -Ic:/PROGRA~1/POSTGR~1/8.1/lib/pgxs/src/MAKEFI~1/../../src/include/port/win32
  
 -Ic:/PROGRA~1/POSTGR~1/8.1/include/server/port/win32  -c -o foo.o foo.c
 dlltool --export-all --output-def foo.def foo.o
 dllwrap -o foo.dll --def foo.def foo.o 
 c:/PROGRA~1/POSTGR~1/8.1/lib/pgxs/src/MAKEFI~1/../../src/utils/dllinit.o 
 -Lc:/PROGRA~1/POSTGR~1/8.1/bin -lpostgres
 c:\mingw\bin\..\lib\gcc-lib\mingw32\3.2.3\..\..\..\..\mingw32\bin\ld.exe: 
 cannot find -lpostgres
 c:\mingw\bin\dllwrap.exe: c:\mingw\bin\gcc exited with status 1
 make: *** [foo.dll] Error 1
 rm foo.o
 $ make showme
 libdir = c:/PROGRA~1/POSTGR~1/8.1/lib
 SHLIB_LINK = -Lc:/PROGRA~1/POSTGR~1/8.1/bin -lpostgres
 $ export PATH=/usr/local/pgsql/bin:$PATH
 $ which pg_config
 /usr/local/pgsql/bin/pg_config
 $ rm -f foo.dll
 $ make
 gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
 -fno-strict-aliasing -I. -IC:/msys/1.0/local/pgsql/include/server 
 -IC:/msys/1.0/local/pgsql/include/internal -I./src/include/port/win32 
 -DEXEC_BACKEND  
 -IC:/msys/1.0/local/pgsql/lib/pgxs/src/MAKEFI~1/../../src/include/port/win32
  
 -IC:/msys/1.0/local/pgsql/include/server/port/win32  -c -o foo.o foo.c
 dlltool --export-all --output-def foo.def foo.o
 dllwrap -o foo.dll --def foo.def foo.o 
 C:/msys/1.0/local/pgsql/lib/pgxs/src/MAKEFI~1/../../src/utils/dllinit.o 
 -LC:/msys/1.0/local/pgsql/bin -lpostgres
 c:\mingw\bin\..\lib\gcc-lib\mingw32\3.2.3\..\..\..\..\mingw32\bin\ld.exe: 
 cannot find -lpostgres
 c:\mingw\bin\dllwrap.exe: c:\mingw\bin\gcc exited with status 1
 make: *** [foo.dll] Error 1
 rm foo.o
 $ make showme
 libdir = C:/msys/1.0/local/pgsql/lib
 SHLIB_LINK = -LC:/msys/1.0/local/pgsql/bin -lpostgres
 
 
 ---(end of broadcast)---
 TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly
 

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/makefiles/Makefile.cygwin

Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Tom Lane
Bruce Momjian pgman@candle.pha.pa.us writes:
 The difference between Magnus's and Andrew's is
 that Magnus used MODULE_big (which means create a shared library), while
 Andrew used MODULES.  So, Magnus's only worked because he was creating a
 DLL and that brought in the -L from MODULE_big.

Ah, good catch.

 I have applied the following patch to change /bin to /lib for Cygwin and
 Win32.

What about the question of whether $(DESTDIR) belongs there or not?
I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
because that's only for install-time stuff.

regards, tom lane

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Bruce Momjian
Tom Lane wrote:
 Bruce Momjian pgman@candle.pha.pa.us writes:
  The difference between Magnus's and Andrew's is
  that Magnus used MODULE_big (which means create a shared library), while
  Andrew used MODULES.  So, Magnus's only worked because he was creating a
  DLL and that brought in the -L from MODULE_big.
 
 Ah, good catch.
 
  I have applied the following patch to change /bin to /lib for Cygwin and
  Win32.
 
 What about the question of whether $(DESTDIR) belongs there or not?
 I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
 because that's only for install-time stuff.

I considered that a separate issue and didn't explore it, but I think
you are right that $(DESTDIR) makes no sense so I will remove it.

Patch attached.

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/makefiles/Makefile.cygwin
===
RCS file: /cvsroot/pgsql/src/makefiles/Makefile.cygwin,v
retrieving revision 1.7
diff -c -c -r1.7 Makefile.cygwin
*** src/makefiles/Makefile.cygwin   19 Jan 2006 20:00:54 -  1.7
--- src/makefiles/Makefile.cygwin   19 Jan 2006 20:42:50 -
***
*** 2,8 
  DLLTOOL= dlltool
  DLLWRAP= dllwrap
  ifdef PGXS
! BE_DLLLIBS= -L$(DESTDIR)$(libdir) -lpostgres
  else
  BE_DLLLIBS= -L$(top_builddir)/src/backend -lpostgres
  endif
--- 2,8 
  DLLTOOL= dlltool
  DLLWRAP= dllwrap
  ifdef PGXS
! BE_DLLLIBS= -L$(libdir) -lpostgres
  else
  BE_DLLLIBS= -L$(top_builddir)/src/backend -lpostgres
  endif
Index: src/makefiles/Makefile.win32
===
RCS file: /cvsroot/pgsql/src/makefiles/Makefile.win32,v
retrieving revision 1.8
diff -c -c -r1.8 Makefile.win32
*** src/makefiles/Makefile.win3219 Jan 2006 20:00:54 -  1.8
--- src/makefiles/Makefile.win3219 Jan 2006 20:42:50 -
***
*** 6,12 
  DLLTOOL= dlltool
  DLLWRAP= dllwrap
  ifdef PGXS
! BE_DLLLIBS= -L$(DESTDIR)$(libdir) -lpostgres
  else
  BE_DLLLIBS= -L$(top_builddir)/src/backend -lpostgres
  endif
--- 6,12 
  DLLTOOL= dlltool
  DLLWRAP= dllwrap
  ifdef PGXS
! BE_DLLLIBS= -L$(libdir) -lpostgres
  else
  BE_DLLLIBS= -L$(top_builddir)/src/backend -lpostgres
  endif

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Tom Lane
Bruce Momjian pgman@candle.pha.pa.us writes:
 Tom Lane wrote:
 What about the question of whether $(DESTDIR) belongs there or not?
 I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
 because that's only for install-time stuff.

 I considered that a separate issue and didn't explore it, but I think
 you are right that $(DESTDIR) makes no sense so I will remove it.

 Patch attached.

If these are bogus then so are the uses in Makefile.aix and
Makefile.darwin.

I'm a bit bothered by the ones in pgxs.mk, too, although I suspect we
have to leave those there for the benefit of contrib?

regards, tom lane

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Bruce Momjian
Tom Lane wrote:
 Bruce Momjian pgman@candle.pha.pa.us writes:
  Tom Lane wrote:
  What about the question of whether $(DESTDIR) belongs there or not?
  I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
  because that's only for install-time stuff.
 
  I considered that a separate issue and didn't explore it, but I think
  you are right that $(DESTDIR) makes no sense so I will remove it.
 
  Patch attached.
 
 If these are bogus then so are the uses in Makefile.aix and
 Makefile.darwin.

Done, and backpatched.

 I'm a bit bothered by the ones in pgxs.mk, too, although I suspect we
 have to leave those there for the benefit of contrib?

No idea, sorry.

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/makefiles/Makefile.aix
===
RCS file: /cvsroot/pgsql/src/makefiles/Makefile.aix,v
retrieving revision 1.23
diff -c -c -r1.23 Makefile.aix
*** src/makefiles/Makefile.aix  28 Oct 2005 17:32:22 -  1.23
--- src/makefiles/Makefile.aix  19 Jan 2006 21:16:36 -
***
*** 22,28 
  POSTGRES_IMP= postgres$(IMPSUFF)
  
  ifdef PGXS
! BE_DLLLIBS= -Wl,-bI:$(DESTDIR)$(bindir)/postgres/$(POSTGRES_IMP)
  else
  BE_DLLLIBS= -Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP)
  endif
--- 22,28 
  POSTGRES_IMP= postgres$(IMPSUFF)
  
  ifdef PGXS
! BE_DLLLIBS= -Wl,-bI:$(bindir)/postgres/$(POSTGRES_IMP)
  else
  BE_DLLLIBS= -Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP)
  endif
Index: src/makefiles/Makefile.darwin
===
RCS file: /cvsroot/pgsql/src/makefiles/Makefile.darwin,v
retrieving revision 1.8
diff -c -c -r1.8 Makefile.darwin
*** src/makefiles/Makefile.darwin   17 Dec 2004 03:52:48 -  1.8
--- src/makefiles/Makefile.darwin   19 Jan 2006 21:16:36 -
***
*** 5,11 
  CFLAGS_SL =
  
  ifdef PGXS
! BE_DLLLIBS= -bundle_loader $(DESTDIR)$(bindir)/postgres
  else
  BE_DLLLIBS= -bundle_loader $(top_builddir)/src/backend/postgres
  endif
--- 5,11 
  CFLAGS_SL =
  
  ifdef PGXS
! BE_DLLLIBS= -bundle_loader $(bindir)/postgres
  else
  BE_DLLLIBS= -bundle_loader $(top_builddir)/src/backend/postgres
  endif

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Rocco Altier
If I understand correctly, atleast for the AIX case, the reason that
Makefile.aix is referencing DESTDIR is for the PGXS case.

I thought that PGXS was supposed to be able to be run after things were
installed, and you might not have the compile tree anymore.  Basically,
if you wanted to build some extensions on top of a precompiled set of
binaries.

If we take the DESTDIR out of here, where should we get the POSTGRES_IMP
file from?

-rocco

 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Tom Lane
 Sent: Thursday, January 19, 2006 3:54 PM
 To: Bruce Momjian
 Cc: Andrew Dunstan; Magnus Hagander; PostgreSQL-patches
 Subject: Re: [PATCHES] [HACKERS] pgxs/windows 
 
 
 Bruce Momjian pgman@candle.pha.pa.us writes:
  Tom Lane wrote:
  What about the question of whether $(DESTDIR) belongs there or not?
  I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
  because that's only for install-time stuff.
 
  I considered that a separate issue and didn't explore it, 
 but I think
  you are right that $(DESTDIR) makes no sense so I will remove it.
 
  Patch attached.
 
 If these are bogus then so are the uses in Makefile.aix and
 Makefile.darwin.
 
 I'm a bit bothered by the ones in pgxs.mk, too, although I suspect we
 have to leave those there for the benefit of contrib?
 
   regards, tom lane
 
 ---(end of 
 broadcast)---
 TIP 5: don't forget to increase your free space map settings
 

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Andrew Dunstan
On Thu, 2006-01-19 at 15:33 -0500, Tom Lane wrote:
 Bruce Momjian pgman@candle.pha.pa.us writes:
  The difference between Magnus's and Andrew's is
  that Magnus used MODULE_big (which means create a shared library), while
  Andrew used MODULES.  So, Magnus's only worked because he was creating a
  DLL and that brought in the -L from MODULE_big.
 
 Ah, good catch.

As I understand the docs, one can use either to produce a dll. The
difference is how it processes the name.

 
  I have applied the following patch to change /bin to /lib for Cygwin and
  Win32.
 
 What about the question of whether $(DESTDIR) belongs there or not?
 I think we had concluded that PGXS shouldn't ever use $(DESTDIR),
 because that's only for install-time stuff.


Looks that way to me - IIRC it's only used by the regression suite.

cheers

andrew


---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [PATCHES] [HACKERS] pgxs/windows

2006-01-19 Thread Tom Lane
Rocco Altier [EMAIL PROTECTED] writes:
 If we take the DESTDIR out of here, where should we get the POSTGRES_IMP
 file from?

In the PGXS case, $(bindir) has been gotten from pg_config, and it's
correct as-is by definition.  Adding $(DESTDIR) to it cannot be right.

regards, tom lane

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq