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