summaryrefslogtreecommitdiff
path: root/src/Makefile.shlib
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2022-09-09 19:11:49 -0700
committerAndres Freund <andres@anarazel.de>2022-09-09 19:11:49 -0700
commitfe6a64a58ab3e5bda3aceee2f1ee3e8efdb03865 (patch)
tree15c12008a2f7d17ef651236ec19a33cadb445b80 /src/Makefile.shlib
parentb7050e2584803a6abe71fb0b94a63b63e59cff9c (diff)
downloadpostgresql-fe6a64a58ab3e5bda3aceee2f1ee3e8efdb03865.tar.gz
aix: No need to use mkldexport when we want to export all symbols
When building a shared library with exports.txt there's no need to build an intermediary static library, we can just pass -Wl,-bE:... when generating the .so. When building a shared library without exports.txt, there's no need to call mkldexport.sh to export all symbols, because all symbols are exported anyway, and we don't need the export file on the import side (like we do for postgres.imp). This makes building .so's on aix a lot more similar to building on other platforms. In particular, we don't create and remove a .a of the same name but different contents anymore. Discussion: https://postgr.es/m/20220820174213.d574qde4ptwdzoqz@awork3.anarazel.de
Diffstat (limited to 'src/Makefile.shlib')
-rw-r--r--src/Makefile.shlib45
1 files changed, 18 insertions, 27 deletions
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
index 1e09ab8ea6..db466b3b84 100644
--- a/src/Makefile.shlib
+++ b/src/Makefile.shlib
@@ -107,12 +107,17 @@ override CPPFLAGS += -DSO_MAJOR_VERSION=$(SO_MAJOR_VERSION)
endif
ifeq ($(PORTNAME), aix)
+ LINK.shared = $(COMPILER)
ifdef SO_MAJOR_VERSION
shlib = lib$(NAME)$(DLSUFFIX).$(SO_MAJOR_VERSION)
endif
haslibarule = yes
# $(exports_file) is also usable as an import file
exports_file = lib$(NAME).exp
+ BUILD.exports = ( echo '\#! $(shlib)'; $(AWK) '/^[^\#]/ {printf "%s\n",$$1}' $< ) > $@
+ ifneq (,$(SHLIB_EXPORTS))
+ LINK.shared += -Wl,-bE:$(exports_file)
+ endif
endif
ifeq ($(PORTNAME), darwin)
@@ -259,9 +264,15 @@ $(stlib): $(OBJS) | $(SHLIB_PREREQS)
touch $@
endif #haslibarule
+# AIX wraps shared libraries inside a static library, can be used both
+# for static and shared linking
+ifeq ($(PORTNAME), aix)
+$(stlib): $(shlib)
+ rm -f $(stlib)
+ $(AR) $(AROPT) $(stlib) $(shlib)
+endif # aix
ifeq (,$(filter cygwin win32,$(PORTNAME)))
-ifneq ($(PORTNAME), aix)
# Normal case
$(shlib): $(OBJS) | $(SHLIB_PREREQS)
@@ -274,9 +285,12 @@ ifneq ($(shlib), $(shlib_major))
endif
# Make sure we have a link to a name without any version numbers
ifneq ($(shlib), $(shlib_bare))
+# except on AIX, where that's not a thing
+ifneq ($(PORTNAME), aix)
rm -f $(shlib_bare)
$(LN_S) $(shlib) $(shlib_bare)
-endif
+endif # aix
+endif # shlib_bare
endif # shlib_major
# Where possible, restrict the symbols exported by the library to just the
@@ -285,36 +299,13 @@ endif # shlib_major
# libpgport along with libpq.
ifneq (,$(SHLIB_EXPORTS))
ifdef BUILD.exports
-$(shlib): $(SHLIB_EXPORTS:%.txt=%.list)
+$(shlib): $(exports_file)
-$(SHLIB_EXPORTS:%.txt=%.list): %.list: %.txt
+$(exports_file): $(SHLIB_EXPORTS)
$(BUILD.exports)
endif
endif
-else # PORTNAME == aix
-
-# AIX case
-
-# See notes in src/backend/parser/Makefile about the following two rules
-$(stlib): $(shlib)
- touch $@
-
-$(shlib): $(OBJS) | $(SHLIB_PREREQS)
- rm -f $(stlib)
- $(LINK.static) $(stlib) $^
- $(RANLIB) $(stlib)
-ifeq (,$(SHLIB_EXPORTS))
- $(MKLDEXPORT) $(stlib) $(shlib) >$(exports_file)
-else
- ( echo '#! $(shlib)'; $(AWK) '/^[^#]/ {printf "%s\n",$$1}' ${srcdir}/$(SHLIB_EXPORTS) ) >$(exports_file)
-endif
- $(COMPILER) -o $(shlib) $(stlib) -Wl,-bE:$(exports_file) $(LDFLAGS) $(LDFLAGS_SL) $(SHLIB_LINK)
- rm -f $(stlib)
- $(AR) $(AROPT) $(stlib) $(shlib)
-
-endif # PORTNAME == aix
-
else # PORTNAME == cygwin || PORTNAME == win32
ifeq ($(PORTNAME), cygwin)