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#