Fix build-many-glibcs.py --strip for installed library renaming

Message ID alpine.DEB.2.22.394.2109150122200.1167011@digraph.polyomino.org.uk
State Committed
Commit 876e51548cc5d96af5ea13febd0a1a75bfc04497
Headers
Series Fix build-many-glibcs.py --strip for installed library renaming |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

Joseph Myers Sept. 15, 2021, 1:24 a.m. UTC
  The renaming of installed shared libraries to use the SONAME directly
rather than linking to a versioned name stopped build-many-glibcs.py
--strip (used to facilitate comparing binaries before and after
changes that aren't meant to change any generated code in installed
glibc shared libraries) from stripping most of the installed shared
libraries, because it stripped only the *.so names.  Fix it to strip
*.so* names instead and to detect the case of linker scripts using
grep instead of hardcoding particular files that are linker scripts.

Tested with build-many-glibcs.py --strip.
  

Comments

Florian Weimer Sept. 16, 2021, 12:08 p.m. UTC | #1
* Joseph Myers:

> diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
> index 54bef43429..258a1be27d 100755
> --- a/scripts/build-many-glibcs.py
> +++ b/scripts/build-many-glibcs.py
> @@ -1553,15 +1553,13 @@ class GlibcPolicyForBuild(GlibcPolicyDefault):
>  
>      def extra_commands(self, cmdlist):
>          if self.strip:
> -            # Avoid picking up libc.so and libpthread.so, which are
> -            # linker scripts stored in /lib on Hurd.  libc and
> -            # libpthread are still stripped via their libc-X.YY.so
> -            # implementation files.
> -            find_command = (('find %s/lib* -name "*.so"'
> -                             + r' \! -name libc.so \! -name libpthread.so')
> -                            % self.installdir)
> -            cmdlist.add_command('strip', ['sh', '-c', ('%s $(%s)' %
> -                                  (self.strip, find_command))])
> +            # Avoid stripping libc.so and libpthread.so, which are
> +            # linker scripts stored in /lib on Hurd.
> +            find_command = 'find %s/lib* -name "*.so*"' % self.installdir
> +            cmdlist.add_command('strip', ['sh', '-c', (
> +                'set -e; for f in $(%s); do '
> +                'if ! head -c16 $f | grep -q "GNU ld script"; then %s $f; fi; '
> +                'done' % (find_command, self.strip))])
>          cmdlist.add_command('check', ['make', 'check'])
>          cmdlist.add_command('save-logs', [self.save_logs], always_run=True)

Looks okay.  Thanks for fixing this.

Florian
  

Patch

diff --git a/scripts/build-many-glibcs.py b/scripts/build-many-glibcs.py
index 54bef43429..258a1be27d 100755
--- a/scripts/build-many-glibcs.py
+++ b/scripts/build-many-glibcs.py
@@ -1553,15 +1553,13 @@  class GlibcPolicyForBuild(GlibcPolicyDefault):
 
     def extra_commands(self, cmdlist):
         if self.strip:
-            # Avoid picking up libc.so and libpthread.so, which are
-            # linker scripts stored in /lib on Hurd.  libc and
-            # libpthread are still stripped via their libc-X.YY.so
-            # implementation files.
-            find_command = (('find %s/lib* -name "*.so"'
-                             + r' \! -name libc.so \! -name libpthread.so')
-                            % self.installdir)
-            cmdlist.add_command('strip', ['sh', '-c', ('%s $(%s)' %
-                                  (self.strip, find_command))])
+            # Avoid stripping libc.so and libpthread.so, which are
+            # linker scripts stored in /lib on Hurd.
+            find_command = 'find %s/lib* -name "*.so*"' % self.installdir
+            cmdlist.add_command('strip', ['sh', '-c', (
+                'set -e; for f in $(%s); do '
+                'if ! head -c16 $f | grep -q "GNU ld script"; then %s $f; fi; '
+                'done' % (find_command, self.strip))])
         cmdlist.add_command('check', ['make', 'check'])
         cmdlist.add_command('save-logs', [self.save_logs], always_run=True)