wafsamba/symbols: change regex to match both rpath and runpath for different readelf...
authorJoe Guo <joeg@catalyst.net.nz>
Thu, 14 Feb 2019 22:46:22 +0000 (11:46 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 18 Feb 2019 08:25:21 +0000 (09:25 +0100)
In `wafsamba.dumplicate_symbols` test, it will use Popen to call:

    readelf --dynamic bin/default/source3/lib/netapi/examples/netlogon/netlogon_control2

then try to find rpath lib lines from output with regex:

    re_rpath     = re.compile(b'Library rpath: \[(.*)\]')

In ubuntu 14.04 docker image, which current CI is using, the actual output
from `readelf` is `runpath` instead of 'rpath':

    ...
    Library runpath: [/home/gitlab-runner/samba/bin/shared:/home/gitlab-runner/samba/bin/shared/private]\n'
    ...

So the regex never matched, and hide a bug.

In Ubuntu 1604 docker image, the output changes to `rpath` and matched the
regex, which expose the error in previous commit.

Improve the regex to match both `rpath` and `runpath`.

Signed-off-by: Joe Guo <joeg@catalyst.net.nz>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
buildtools/wafsamba/symbols.py

index 505c0bac7eac58fa487676ba3ff8b3321a189f09..3eca3d46bd71cf0780b3c8e36a26b96bd3aa3b83 100644 (file)
@@ -120,7 +120,8 @@ def find_ldd_path(bld, libname, binary):
 
 # some regular expressions for parsing readelf output
 re_sharedlib = re.compile(b'Shared library: \[(.*)\]')
-re_rpath     = re.compile(b'Library rpath: \[(.*)\]')
+# output from readelf could be `Library rpath` or `Libray runpath`
+re_rpath     = re.compile(b'Library (rpath|runpath): \[(.*)\]')
 
 def get_libs(bld, binname):
     '''find the list of linked libraries for any binary or library
@@ -147,7 +148,7 @@ def get_libs(bld, binname):
         m = re_rpath.search(line)
         if m:
             # output from Popen is always bytestr even in py3
-            rpath.extend(m.group(1).split(b":"))
+            rpath.extend(m.group(2).split(b":"))
 
     ret = set()
     for lib in libs: