Re: [PATCHES] Proposed patch to remove .so pattern rules from platform Makefiles

2005-07-26 Thread Rocco Altier
Please disregard this patch.  I have a ton of lib%.exp and similar files
created currently.

I am working on a new patch to deal with the MODULES expansion
correctly.

Thanks,
-rocco

 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Rocco Altier
 Sent: Monday, July 25, 2005 1:17 PM
 To: Tom Lane; pgsql-patches@postgresql.org
 Subject: Re: [PATCHES] Proposed patch to remove .so pattern 
 rules from platform Makefiles
 
 
 The patch works on AIX with one small tweak to Makefile.shlib
 (attached).  This is needed because of the clever trick with 
 using % as
 name, and when its evaulated for the mkldexport.
 
 Also, it appears that the changes for regress/GNUmakefile are already
 applied.
 
 I am able to build everything and pass the regression tests.  
 This just
 leaves the contrib/pgport issue from letting AIX go green on the
 buildfarm.
 
 Thanks for getting this simplification done!
 
   -rocco
 
 
  -Original Message-
  From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED] On Behalf Of Tom Lane
  Sent: Sunday, July 24, 2005 6:00 PM
  To: pgsql-patches@postgresql.org
  Subject: [PATCHES] Proposed patch to remove .so pattern rules 
  from platform Makefiles
  
  
  I've wanted for a long time to get rid of the pattern rules in the
  port-specific Makefiles that generate shared libraries from single
  object files.  These patterns duplicate (or, more often, fail to
  completely duplicate) the knowledge in Makefile.shlib.  So from
  a maintenance point of view centralizing that knowledge is a good
  thing.
  
  The stumbling block has been partly that the 
 regression-test makefile
  depended on the pattern rules (easily fixed by using Makefile.shlib)
  and partly that pgxs.mk (and its predecessor 
  contrib-global.mk) depended
  on the pattern rules to handle Makefiles that wanted to 
 build multiple
  .so files.  Since Makefile.shlib is designed to handle only 
 one shlib
  per build, there wasn't any obvious way to fix that.
  
  The attached proposed patch gets around this by invoking 
  Makefile.shlib
  in a way that produces a pattern rule lib%.so : %.o.  This is
  moderately ugly but it gets the job done without changing 
  Makefile.shlib
  itself.  Possibly it could be done more cleanly if we were willing
  to introduce pattern rules inside Makefile.shlib.
  
  I am not sure if the patch works on non-Unix platforms --- 
  could someone
  test on Win32 and Cygwin, in particular?  AIX is weird 
 enough to need
  testing too.
  
  Any other comments?
  
  regards, tom lane
  
  
 

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [PATCHES] Proposed patch to remove .so pattern rules from platform Makefiles

2005-07-26 Thread Rocco Altier
 -Original Message-
 From: Tom Lane [mailto:[EMAIL PROTECTED] 
 
 Rocco Altier [EMAIL PROTECTED] writes:
  Please disregard this patch.  I have a ton of lib%.exp and 
  similar files created currently.
 
 Yeah, that was one of the reasons I called it ugly :-(.  I 
 had put in an
 rm step to get rid of lib%.so, you could probably fix the extraneous
 .exp files similarly.
 
If they are part of the rule, they get expanded, but if its part of the
commands to run, they don't, which is where I was getting the lib%.exp
from.

I have gotten them to where they will be expanded for the .exp, so that
there are the multiple files correctly, instead of just the one
lib%.exp.  I will look at doing the same for lib%.so, etc.

 Alternatively we could look at expanding Makefile.shlib to 
 provide %.so pattern rules directly. 

If I am reading the affect on the makefiles correctly, that is basically
what is happening.  We get a bunch of pattern rules...

From gmake -p (in contrib/spi - a multiple MODULES rule):
lib%.a: %.o
#  commands to execute (from `../../src/Makefile.shlib', line 281):
$(LINK.static) $@ $^
$(RANLIB) $@


lib%.so: lib%.a
#  commands to execute (from `../../src/Makefile.shlib', line 313):
$(MKLDEXPORT) $  $(subst .a,$(EXPSUFF),$)
$(COMPILER) $(LDFLAGS_SL) -o $@ $ $(LDFLAGS) $(SHLIB_LINK)
-Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP) -Wl,-bE:$(subst
.a,$(EXPSUFF),$)


%.so: lib%.so
#  commands to execute (from `../../src/makefiles/pgxs.mk', line 85):
rm -f $@
ln $ $@
rm -f $(shlib_major)
...
(Substituted rules with autoinc later..)


 My patch was more intended as proof of concept
 than anything we necessarily wanted to apply as-is.
 
I have been trying to iron out some of the wrinkles, but over all its
definitely a good place to start.

Thanks,
-rocco


---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [PATCHES] Proposed patch to remove .so pattern rules from platform Makefiles

2005-07-25 Thread Rocco Altier
The patch works on AIX with one small tweak to Makefile.shlib
(attached).  This is needed because of the clever trick with using % as
name, and when its evaulated for the mkldexport.

Also, it appears that the changes for regress/GNUmakefile are already
applied.

I am able to build everything and pass the regression tests.  This just
leaves the contrib/pgport issue from letting AIX go green on the
buildfarm.

Thanks for getting this simplification done!

-rocco


 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Tom Lane
 Sent: Sunday, July 24, 2005 6:00 PM
 To: pgsql-patches@postgresql.org
 Subject: [PATCHES] Proposed patch to remove .so pattern rules 
 from platform Makefiles
 
 
 I've wanted for a long time to get rid of the pattern rules in the
 port-specific Makefiles that generate shared libraries from single
 object files.  These patterns duplicate (or, more often, fail to
 completely duplicate) the knowledge in Makefile.shlib.  So from
 a maintenance point of view centralizing that knowledge is a good
 thing.
 
 The stumbling block has been partly that the regression-test makefile
 depended on the pattern rules (easily fixed by using Makefile.shlib)
 and partly that pgxs.mk (and its predecessor 
 contrib-global.mk) depended
 on the pattern rules to handle Makefiles that wanted to build multiple
 .so files.  Since Makefile.shlib is designed to handle only one shlib
 per build, there wasn't any obvious way to fix that.
 
 The attached proposed patch gets around this by invoking 
 Makefile.shlib
 in a way that produces a pattern rule lib%.so : %.o.  This is
 moderately ugly but it gets the job done without changing 
 Makefile.shlib
 itself.  Possibly it could be done more cleanly if we were willing
 to introduce pattern rules inside Makefile.shlib.
 
 I am not sure if the patch works on non-Unix platforms --- 
 could someone
 test on Win32 and Cygwin, in particular?  AIX is weird enough to need
 testing too.
 
 Any other comments?
 
   regards, tom lane
 
 


makefile.shlib
Description: makefile.shlib

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

   http://archives.postgresql.org


[PATCHES] Proposed patch to remove .so pattern rules from platform Makefiles

2005-07-24 Thread Tom Lane
I've wanted for a long time to get rid of the pattern rules in the
port-specific Makefiles that generate shared libraries from single
object files.  These patterns duplicate (or, more often, fail to
completely duplicate) the knowledge in Makefile.shlib.  So from
a maintenance point of view centralizing that knowledge is a good
thing.

The stumbling block has been partly that the regression-test makefile
depended on the pattern rules (easily fixed by using Makefile.shlib)
and partly that pgxs.mk (and its predecessor contrib-global.mk) depended
on the pattern rules to handle Makefiles that wanted to build multiple
.so files.  Since Makefile.shlib is designed to handle only one shlib
per build, there wasn't any obvious way to fix that.

The attached proposed patch gets around this by invoking Makefile.shlib
in a way that produces a pattern rule lib%.so : %.o.  This is
moderately ugly but it gets the job done without changing Makefile.shlib
itself.  Possibly it could be done more cleanly if we were willing
to introduce pattern rules inside Makefile.shlib.

I am not sure if the patch works on non-Unix platforms --- could someone
test on Win32 and Cygwin, in particular?  AIX is weird enough to need
testing too.

Any other comments?

regards, tom lane

*** src/makefiles/Makefile.aix.orig Wed Oct  9 12:21:54 2002
--- src/makefiles/Makefile.aix  Sun Jul 24 16:19:25 2005
***
*** 23,33 
  
  MKLDEXPORT=$(top_srcdir)/src/backend/port/aix/mkldexport.sh
  
- %$(EXPSUFF): %.o
-   $(MKLDEXPORT) $*.o  $*$(EXPSUFF)
- 
- %$(DLSUFFIX): %.o %$(EXPSUFF)
-   @echo Making shared library $@ from $*.o, $*$(EXPSUFF) and postgres.imp
-   $(CC) $(LDFLAGS) $(LDFLAGS_SL) -o $@ $*.o 
-Wl,-bI:$(top_builddir)/src/backend/$(POSTGRES_IMP) -Wl,-bE:$*$(EXPSUFF) $(LIBS)
- 
  sqlmansect = 7
--- 23,26 
*** src/makefiles/Makefile.beos.origThu Dec 16 22:49:58 2004
--- src/makefiles/Makefile.beos Sun Jul 24 16:19:25 2005
***
*** 8,19 
  DLSUFFIX = .so
  CFLAGS_SL = -fpic -DPIC
  
- %.so: %.o
- ifdef PGXS
-   ln -fs $(DESTDIR)$(bindir)/postgres _APP_
- else
-   ln -fs $(top_builddir)/src/backend/postgres _APP_
- endif
-   $(CC) -nostart -Xlinker -soname=$@ -o $@ _APP_ $
- 
  sqlmansect = 7
--- 8,11 
*** src/makefiles/Makefile.bsdi.origTue Dec 21 13:42:04 2004
--- src/makefiles/Makefile.bsdi Sun Jul 24 16:19:26 2005
***
*** 20,26 
  CFLAGS_SL =
  endif
  
- %.so: %.o
-   $(CC) -shared -o $@ $
- 
  sqlmansect = 7
--- 20,23 
*** src/makefiles/Makefile.cygwin.orig  Thu Dec 16 22:52:48 2004
--- src/makefiles/Makefile.cygwin   Sun Jul 24 16:19:26 2005
***
*** 16,26 
  DLSUFFIX = .dll
  CFLAGS_SL =
  
- %.dll: %.o
-   $(DLLTOOL) --export-all --output-def $*.def $
-   $(DLLWRAP) -o $@ --def $*.def $ $(DLLINIT) $(SHLIB_LINK)
-   rm -f $*.def
- 
  ifneq (,$(findstring backend,$(subdir)))
  ifeq (,$(findstring conversion_procs,$(subdir)))
  override CPPFLAGS+= -DBUILDING_DLL
--- 16,21 
*** src/makefiles/Makefile.darwin.orig  Thu Dec 16 22:49:59 2004
--- src/makefiles/Makefile.darwin   Sun Jul 24 16:19:27 2005
***
*** 10,18 
  BE_DLLLIBS= -bundle_loader $(top_builddir)/src/backend/postgres
  endif
  
- # Rule for building shared libs (currently used only for regression test
- # shlib ... should go away, since this is not really enough knowledge)
- %.so: %.o
-   $(CC) -bundle -o $@ $ $(BE_DLLLIBS)
- 
  sqlmansect = 7
--- 10,13 
*** src/makefiles/Makefile.dgux.origWed Aug 29 15:14:40 2001
--- src/makefiles/Makefile.dgux Sun Jul 24 16:19:27 2005
***
*** 2,8 
  DLSUFFIX = .so
  CFLAGS_SL = -fpic
  
- %.so: %.o
-   $(CC) -shared -o $@ $
- 
  sqlmansect = 5
--- 2,5 
*** src/makefiles/Makefile.freebsd.orig Tue Dec 21 13:42:10 2004
--- src/makefiles/Makefile.freebsd  Sun Jul 24 16:19:28 2005
***
*** 13,30 
  CFLAGS_SL = -fpic -DPIC
  endif
  
- 
- %.so: %.o
- ifdef ELF_SYSTEM
-   $(LD) -x -shared -o $@ $
- else
-   $(LD) $(LDREL) $(LDOUT) $.obj -x $
-   @echo building shared object $@
-   @rm -f [EMAIL PROTECTED]
-   @${AR} cq [EMAIL PROTECTED] `lorder $.obj | tsort`
-   ${RANLIB} [EMAIL PROTECTED]
-   @rm -f $@
-   $(LD) -x -Bshareable -Bforcearchive -o $@ [EMAIL PROTECTED]
- endif
- 
  sqlmansect = 7
--- 13,16 
*** src/makefiles/Makefile.hpux.origTue Dec 21 13:42:14 2004
--- src/makefiles/Makefile.hpux Sun Jul 24 16:10:28 2005
***
*** 49,69 
 CFLAGS_SL = +z
  endif
  
- # Rule for building shared libs (currently used only for regression test
- # shlib ... should go away, since this is not really enough knowledge)
- %$(DLSUFFIX): %.o
- ifeq ($(GCC), yes)
-   ifeq ($(with_gnu_ld), yes)
-   $(CC) $(LDFLAGS) -shared -o $@ $ `$(CC) $(LDFLAGS) 
-print-libgcc-file-name`
-   else
-   $(LD) -b -o $@ $ `$(CC) $(LDFLAGS) -print-libgcc-file-name`
-   endif
- else
-   ifeq