From bdaf90b70f50e3bf39e5ad52359e39e0e534a9a0 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Tue, 26 Feb 2008 10:45:24 +0000
Subject: [PATCH] Reorganize some of the exports list generation code.  It
 seems that this has been reinvented about four different times throughout
 history (aix, cygwin, win32, darwin/linux) and a lot of the concepts are
 actually shared, which the code now shows better.

---
 src/Makefile.shlib         | 73 ++++++++++++++------------------------
 src/makefiles/Makefile.aix | 13 +++----
 2 files changed, 32 insertions(+), 54 deletions(-)

diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index b2adc2eb05f..34d6b3fbb65 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -6,7 +6,7 @@
 # Copyright (c) 1998, Regents of the University of California
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/Makefile.shlib,v 1.111 2008/02/26 10:30:06 petere Exp $
+#    $PostgreSQL: pgsql/src/Makefile.shlib,v 1.112 2008/02/26 10:45:24 petere Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -99,6 +99,7 @@ soname = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
 ifeq ($(PORTNAME), aix)
   shlib			= lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
   haslibarule   = yes
+  exports_file		= lib$(NAME).exp
 endif
 
 ifeq ($(PORTNAME), darwin)
@@ -117,8 +118,9 @@ ifeq ($(PORTNAME), darwin)
   shlib			= lib$(NAME).$(SO_MAJOR_VERSION).$(SO_MINOR_VERSION)$(DLSUFFIX)
   shlib_major		= lib$(NAME).$(SO_MAJOR_VERSION)$(DLSUFFIX)
   BUILD.exports		= $(AWK) '/^[^\#]/ {printf "_%s\n",$$1}' $< >$@
-  ifneq (,$(SHLIB_EXPORTS))
-    exported_symbols_list = -exported_symbols_list $(SHLIB_EXPORTS:%.txt=%.list)
+  exports_file		= $(SHLIB_EXPORTS:%.txt=%.list)
+  ifneq (,$(exports_file))
+    exported_symbols_list = -exported_symbols_list $(exports_file)
   endif
 endif
 
@@ -193,8 +195,9 @@ endif
 ifeq ($(PORTNAME), linux)
   LINK.shared		= $(COMPILER) -shared -Wl,-soname,$(soname)
   BUILD.exports		= ( echo '{ global:'; $(AWK) '/^[^\#]/ {printf "%s;\n",$$1}' $<; echo ' local: *; };' ) >$@
-  ifneq (,$(SHLIB_EXPORTS))
-    LINK.shared		+= -Wl,--version-script=$(SHLIB_EXPORTS:%.txt=%.list)
+  exports_file		= $(SHLIB_EXPORTS:%.txt=%.list)
+  ifneq (,$(exports_file))
+    LINK.shared		+= -Wl,--version-script=$(exports_file)
   endif
 endif
 
@@ -284,8 +287,7 @@ endif #haslibarule
 
 ifeq ($(enable_shared), yes)
 
-ifneq ($(PORTNAME), win32)
-ifneq ($(PORTNAME), cygwin)
+ifeq (,$(filter cygwin win32,$(PORTNAME)))
 ifneq ($(PORTNAME), aix)
 
 # Normal case
@@ -321,46 +323,35 @@ else # PORTNAME == aix
 $(shlib) lib$(NAME).a: $(OBJS)
 	$(LINK.static) lib$(NAME).a $^
 	$(RANLIB) lib$(NAME).a
-	$(MKLDEXPORT) lib$(NAME).a > lib$(NAME)$(EXPSUFF)
-	$(COMPILER) $(LDFLAGS_NO_L) $(LDFLAGS_SL) -o $(shlib) lib$(NAME).a -Wl,-bE:lib$(NAME)$(EXPSUFF) $(SHLIB_LINK)
+	$(MKLDEXPORT) lib$(NAME).a >$(exports_file)
+	$(COMPILER) $(LDFLAGS_NO_L) $(LDFLAGS_SL) -o $(shlib) lib$(NAME).a -Wl,-bE:$(exports_file) $(SHLIB_LINK)
 	rm -f lib$(NAME).a
 	$(AR) $(AROPT) lib$(NAME).a $(shlib)
 
 endif # PORTNAME == aix
 
-else # PORTNAME == cygwin
+else # PORTNAME == cygwin || PORTNAME == win32
 
-# Cygwin case
-$(shlib) lib$(NAME).a: $(OBJS)
-ifndef DLL_DEFFILE
-	$(DLLTOOL) --export-all $(DLLTOOL_DEFFLAGS) --output-def $(NAME).def $(OBJS)
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(NAME).def $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(NAME).def --output-lib lib$(NAME).a
-else
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib lib$(NAME).a
-endif
+# Cygwin or Win32 case
 
-endif # PORTNAME == cygwin
+DLL_DEFFILE = lib$(NAME)dll.def
 
-else # PORTNAME == win32
+# If SHLIB_EXPORTS is set, the rules below will build a .def file from
+# that.  Else we build a temporary one here.
+ifeq (,$(SHLIB_EXPORTS))
+exports_file = $(DLL_DEFFILE)
 
-ifneq (,$(SHLIB_EXPORTS))
-DLL_DEFFILE = lib$(NAME)dll.def
+$(exports_file): $(OBJS)
+	$(DLLTOOL) --export-all $(DLLTOOL_DEFFLAGS) --output-def $@ $^
 endif
 
-# win32 case
-$(shlib) lib$(NAME).a: $(OBJS)
-ifndef DLL_DEFFILE
-	$(DLLTOOL) --export-all $(DLLTOOL_DEFFLAGS) --output-def $(NAME).def $(OBJS)
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(NAME).def $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(NAME).def --output-lib lib$(NAME).a
-else
-	$(DLLWRAP) $(LDFLAGS_SL) -o $(shlib) --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK)
-	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib lib$(NAME).a
-endif
+$(shlib): $(OBJS) $(DLL_DEFFILE)
+	$(DLLWRAP) $(LDFLAGS_SL) -o $@ --dllname $(shlib) $(DLLWRAP_FLAGS) --def $(DLL_DEFFILE) $(OBJS) $(SHLIB_LINK)
+
+lib$(NAME).a: $(shlib) $(DLL_DEFFILE)
+	$(DLLTOOL) --dllname $(shlib) $(DLLTOOL_LIBFLAGS) --def $(DLL_DEFFILE) --output-lib $@
 
-endif # PORTNAME == win32
+endif # PORTNAME == cygwin || PORTNAME == win32
 
 endif # enable_shared
 
@@ -464,17 +455,7 @@ endif # enable_shared
 clean-lib:
 	rm -f lib$(NAME).a
 ifeq ($(enable_shared), yes)
-	rm -f $(shlib_bare) $(shlib_major) $(shlib) $(SHLIB_EXPORTS:%.txt=%.list)
-ifdef EXPSUFF
-	rm -f lib$(NAME)$(EXPSUFF)
-endif
-endif
-ifeq ($(PORTNAME), cygwin)
-	rm -f $(NAME).dll $(NAME).def
-endif
-
-ifeq ($(PORTNAME), win32)
-	rm -f $(NAME).dll $(NAME).def
+	rm -f $(shlib_bare) $(shlib_major) $(shlib) $(exports_file)
 endif
 
 ifneq (,$(SHLIB_EXPORTS))
diff --git a/src/makefiles/Makefile.aix b/src/makefiles/Makefile.aix
index 8a789352b63..ea825a7ca6b 100644
--- a/src/makefiles/Makefile.aix
+++ b/src/makefiles/Makefile.aix
@@ -24,10 +24,7 @@ else
 endif
 
 
-EXPSUFF= .exp
-IMPSUFF= .imp
-
-POSTGRES_IMP= postgres$(IMPSUFF)
+POSTGRES_IMP= postgres.imp
 
 ifdef PGXS
 BE_DLLLIBS= -Wl,-bI:$(bindir)/postgres/$(POSTGRES_IMP)
@@ -37,10 +34,10 @@ endif
 
 MKLDEXPORT=$(top_srcdir)/src/backend/port/aix/mkldexport.sh
 
-%$(EXPSUFF): %.o
-	$(MKLDEXPORT) $*.o > $*$(EXPSUFF)
+%.exp: %.o
+	$(MKLDEXPORT) $^ >$@
 
-%$(DLSUFFIX): %.o %$(EXPSUFF)
-	$(CC) $(LDFLAGS) $(LDFLAGS_SL) -o $@ $*.o -Wl,-bE:$*$(EXPSUFF) $(SHLIB_LINK)
+%$(DLSUFFIX): %.o %.exp
+	$(CC) $(LDFLAGS) $(LDFLAGS_SL) -o $@ $*.o -Wl,-bE:$*.exp $(SHLIB_LINK)
 
 sqlmansect = 7
-- 
GitLab