Use --strip-unneeded when stripping static libraries with GNU strip.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Apr 2023 22:12:32 +0000 (18:12 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Apr 2023 22:12:32 +0000 (18:12 -0400)
We've long used "--strip-unneeded" for shared libraries but plain
"-x" for static libraries when stripping symbols with GNU strip.
There doesn't seem to be any really good reason for that though,
since --strip-unneeded produces smaller output (as "-x" alone
does not remove debug symbols).  Moreover it seems that
llvm-strip, although it identifies as GNU strip, misbehaves when
given "-x" for this purpose.  It's unclear whether that's
intentional or a bug in llvm-strip, but in any case it seems like
changing to use --strip-unneeded in all cases should be a win.

Note that this doesn't change our behavior when dealing with
non-GNU strip.

Per gripes from Ed Maste and Palle Girgensohn.  Back-patch,
in case anyone wants to use llvm-strip with stable branches.

Discussion: https://postgr.es/m/17898-5308d09543463266@postgresql.org
Discussion: https://postgr.es/m/20230420153338.bbj2g5jiyy3afhjz@awork3.anarazel.de

config/programs.m4
configure
src/makefiles/meson.build

index ce831555923d8666981cebd9ced7cd502011a4a4..8a118b4e03483539b9ca4c6df49736b4a7f572ff 100644 (file)
@@ -307,7 +307,7 @@ AC_DEFUN([PGAC_CHECK_STRIP],
 
   AC_MSG_CHECKING([whether it is possible to strip libraries])
   if test x"$STRIP" != x"" && "$STRIP" -V 2>&1 | grep "GNU strip" >/dev/null; then
-    STRIP_STATIC_LIB="$STRIP -x"
+    STRIP_STATIC_LIB="$STRIP --strip-unneeded"
     STRIP_SHARED_LIB="$STRIP --strip-unneeded"
     AC_MSG_RESULT(yes)
   else
index e585b28bff6715955c6053826c00428483637b7f..15daccc87f2597d8a316416972e940189e6342a1 100755 (executable)
--- a/configure
+++ b/configure
@@ -9712,7 +9712,7 @@ fi
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is possible to strip libraries" >&5
 $as_echo_n "checking whether it is possible to strip libraries... " >&6; }
   if test x"$STRIP" != x"" && "$STRIP" -V 2>&1 | grep "GNU strip" >/dev/null; then
-    STRIP_STATIC_LIB="$STRIP -x"
+    STRIP_STATIC_LIB="$STRIP --strip-unneeded"
     STRIP_SHARED_LIB="$STRIP --strip-unneeded"
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
index 7635771c5ae46949f9a8b64c1f3e6bf0d5e41256..13045cbd6e494ea05988d79967f0573a1f1c12c1 100644 (file)
@@ -16,7 +16,7 @@ if strip_bin.found()
       strip_version.stdout().contains('GNU strip') or
       strip_version.stderr().contains('GNU strip'))
     working_strip = true
-    strip_static_cmd = strip_cmd + ['-x']
+    strip_static_cmd = strip_cmd + ['--strip-unneeded']
     strip_shared_cmd = strip_cmd + ['--strip-unneeded']
   elif host_system == 'darwin'
     working_strip = true