Re: [PATCHES] Proposed patch to remove .so pattern rules from platform Makefiles
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
-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
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
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