[Buildroot] [git commit] package/meson: update rpath patch to upstream version

Thomas Petazzoni thomas.petazzoni at bootlin.com
Wed Aug 5 20:52:43 UTC 2020


commit: https://git.buildroot.net/buildroot/commit/?id=16ed1d9fbae55779ff4000241366b0461c40977f
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

The version of this patch merged by upstream has some changes to rpath
syntax matching and handling for additional syntax edge cases.

Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
---
 .../0003-backends-fix-rpath-match-pattern.patch    | 77 ++++++++++++++++++----
 1 file changed, 63 insertions(+), 14 deletions(-)

diff --git a/package/meson/0003-backends-fix-rpath-match-pattern.patch b/package/meson/0003-backends-fix-rpath-match-pattern.patch
index 5fd5b73ade..f4477b59d2 100644
--- a/package/meson/0003-backends-fix-rpath-match-pattern.patch
+++ b/package/meson/0003-backends-fix-rpath-match-pattern.patch
@@ -1,4 +1,4 @@
-From af4ac0284714842535106f3d5f8a973c20e95105 Mon Sep 17 00:00:00 2001
+From 1ce4258c219fe08b6d6eaa6aa944f27d91d054cb Mon Sep 17 00:00:00 2001
 From: James Hilliard <james.hilliard1 at gmail.com>
 Date: Sat, 18 Jul 2020 17:01:33 -0600
 Subject: [PATCH] backends: fix rpath match pattern
@@ -6,23 +6,45 @@ Subject: [PATCH] backends: fix rpath match pattern
 Since -Wl,-rpath= is not the only valid rpath ldflags syntax we
 need to try and match all valid rpath ldflags.
 
+In addition we should prevent -Wl,--just-symbols from being used to
+set rpath due to inconsistent compiler support.
+
 Signed-off-by: James Hilliard <james.hilliard1 at gmail.com>
-[Upstream status:
-https://github.com/mesonbuild/meson/pull/7472]
+[james.hilliard1 at gmail.com: backport from upstream commit
+1ce4258c219fe08b6d6eaa6aa944f27d91d054cb]
 ---
- mesonbuild/backend/backends.py |  6 ++++--
- run_unittests.py               | 26 +++++++++++++++-----------
- 2 files changed, 19 insertions(+), 13 deletions(-)
+ mesonbuild/backend/backends.py | 30 ++++++++++++++++++++++++--
+ run_unittests.py               | 39 +++++++++++++++++++++++-----------
+ 2 files changed, 55 insertions(+), 14 deletions(-)
 
 diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
-index cfd3a397f..6f44abc13 100644
+index cfd3a397f..e053f67e6 100644
 --- a/mesonbuild/backend/backends.py
 +++ b/mesonbuild/backend/backends.py
-@@ -455,9 +455,11 @@ class Backend:
+@@ -14,6 +14,7 @@
+ 
+ from collections import OrderedDict
+ from functools import lru_cache
++from pathlib import Path
+ import enum
+ import json
+ import os
+@@ -455,10 +456,35 @@ class Backend:
                  args.extend(self.environment.coredata.get_external_link_args(target.for_machine, lang))
              except Exception:
                  pass
-+        rpath_regex = re.compile(r'-Wl,-rpath(?:-link)?[=,]([^,@\-][^,]+)')
++        # Match rpath formats:
++        # -Wl,-rpath=
++        # -Wl,-rpath,
++        rpath_regex = re.compile(r'-Wl,-rpath[=,]([^,]+)')
++        # Match solaris style compat runpath formats:
++        # -Wl,-R
++        # -Wl,-R,
++        runpath_regex = re.compile(r'-Wl,-R[,]?([^,]+)')
++        # Match symbols formats:
++        # -Wl,--just-symbols=
++        # -Wl,--just-symbols,
++        symbols_regex = re.compile(r'-Wl,--just-symbols[=,]([^,]+)')
          for arg in args:
 -            if arg.startswith('-Wl,-rpath='):
 -                for dir in arg.replace('-Wl,-rpath=','').split(':'):
@@ -30,15 +52,30 @@ index cfd3a397f..6f44abc13 100644
 +            if rpath_match:
 +                for dir in rpath_match.group(1).split(':'):
                      dirs.add(dir)
++            runpath_match = runpath_regex.match(arg)
++            if runpath_match:
++                for dir in runpath_match.group(1).split(':'):
++                    # The symbols arg is an rpath if the path is a directory
++                    if Path(dir).is_dir():
++                        dirs.add(dir)
++            symbols_match = symbols_regex.match(arg)
++            if symbols_match:
++                for dir in symbols_match.group(1).split(':'):
++                    # Prevent usage of --just-symbols to specify rpath
++                    if Path(dir).is_dir():
++                        raise MesonException('Invalid arg for --just-symbols, {} is a directory.'.format(dir))
          return dirs
  
+     def rpaths_for_bundled_shared_libraries(self, target, exclude_system=True):
 diff --git a/run_unittests.py b/run_unittests.py
-index 820b705b5..2c3ffc2e9 100755
+index b5294b9f8..73131c75b 100755
 --- a/run_unittests.py
 +++ b/run_unittests.py
-@@ -6421,17 +6421,21 @@ class LinuxlikeTests(BasePlatformTests):
+@@ -6473,19 +6473,34 @@ class LinuxlikeTests(BasePlatformTests):
+         self.init(yonder_dir)
+         self.build()
          self.install(use_destdir=False)
-         self.new_builddir()
+-        self.new_builddir()
  
 -        # Build an app that uses that installed library.
 -        # Supply the rpath to the installed library via LDFLAGS
@@ -53,14 +90,26 @@ index 820b705b5..2c3ffc2e9 100755
 -        self.assertEqual(got_rpath, yonder_libdir)
 +        # Since rpath has multiple valid formats we need to
 +        # test that they are all properly used.
-+        rpath_formats = ['-Wl,-rpath=', '-Wl,-rpath,', '-Wl,-rpath-link=', '-Wl,-rpath-link,']
-+        for rpath_format in rpath_formats:
++        rpath_formats = [
++            ('-Wl,-rpath=', False),
++            ('-Wl,-rpath,', False),
++            ('-Wl,--just-symbols=', True),
++            ('-Wl,--just-symbols,', True),
++            ('-Wl,-R', False),
++            ('-Wl,-R,', False)
++        ]
++        for rpath_format, exception in rpath_formats:
 +            # Build an app that uses that installed library.
 +            # Supply the rpath to the installed library via LDFLAGS
 +            # (as systems like buildroot and guix are wont to do)
 +            # and verify install preserves that rpath.
++            self.new_builddir()
 +            env = {'LDFLAGS': rpath_format + yonder_libdir,
 +                   'PKG_CONFIG_PATH': os.path.join(yonder_libdir, 'pkgconfig')}
++            if exception:
++                with self.assertRaises(subprocess.CalledProcessError):
++                    self.init(testdir, override_envvars=env)
++                break
 +            self.init(testdir, override_envvars=env)
 +            self.build()
 +            self.install(use_destdir=False)


More information about the buildroot mailing list