Commit ea2d322 for zlib
commit ea2d322a1daa8d0d5ed693293fc43dfd50f7b76e
Author: Mark Adler <git@madler.net>
Date: Mon Nov 2 09:46:01 2026 -0800
Generate and use a .exp file for shared symbols on AIX.
diff --git a/Makefile.in b/Makefile.in
index ccb3c4f..55c8fb0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -40,6 +40,8 @@ ARFLAGS=rc
RANLIB=ranlib
LDCONFIG=ldconfig
LDSHAREDLIBC=-lc
+SHAREDEXP=
+SHAREDEXPFLAG=
TAR=tar
SHELL=/bin/sh
EXE=
@@ -285,13 +287,21 @@ gzwrite.lo: $(SRCDIR)gzwrite.c
-@mv objs/gzwrite.o $@
-placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a $(SRCDIR)zlib.map
- $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
+placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a $(SRCDIR)zlib.map $(SHAREDEXP)
+ $(LDSHARED) $(SFLAGS) $(SHAREDEXPFLAG) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
rm -f $(SHAREDLIB) $(SHAREDLIBM)
ln -s $@ $(SHAREDLIB)
ln -s $@ $(SHAREDLIBM)
-@rmdir objs
+libz.exp: $(PIC_OBJS)
+ dump -tov -X 32_64 $(PIC_OBJS) | \
+ awk '$$1 ~ /^\[[0-9]+\]$$/ && $$2 == "m" && \
+ $$4 ~ /^\.(text|data|bss)$$/ && ($$6 == "extern" || $$6 == "weak") && \
+ $$7 != "HIDDEN" && $$7 != "INTERNAL" && $$NF !~ /^\./ { print $$NF }' | \
+ sort -u > $@
+ @test -s $@ || { echo "no symbols found for $@" >&2; rm -f $@; false; }
+
example$(EXE): example.o $(STATICLIB)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ example.o $(TEST_LIBS)
diff --git a/configure b/configure
index 4a02de8..e75e573 100755
--- a/configure
+++ b/configure
@@ -321,7 +321,9 @@ if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
esac ;;
AIX*)
LDSHARED=${LDSHARED-"$cc -shared"}
- LDFLAGS="${LDFLAGS} -Wl,-brtl" ;;
+ LDFLAGS="${LDFLAGS} -Wl,-brtl"
+ SHAREDEXP=libz.exp
+ SHAREDEXPFLAG=-Wl,-bE:libz.exp ;;
Darwin* | darwin* | *-darwin*)
shared_ext='.dylib'
SHAREDLIB=libz$shared_ext
@@ -1039,6 +1041,8 @@ sed < ${SRCDIR}Makefile.in "
/^RANLIB *=/s#=.*#=$RANLIB#
/^LDCONFIG *=/s#=.*#=$LDCONFIG#
/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
+/^SHAREDEXP *=/s#=.*#=$SHAREDEXP#
+/^SHAREDEXPFLAG *=/s#=.*#=$SHAREDEXPFLAG#
/^EXE *=/s#=.*#=$EXE#
/^SRCDIR *=/s#=.*#=$SRCDIR#
/^ZINC *=/s#=.*#=$ZINC#