diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2020-12-20 13:38:53 -0800 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2021-01-06 14:53:07 +0530 |
commit | 303bd624ea46e63c3e630cf5bba5529e24ef29ae (patch) | |
tree | 3683c56bc750051b1bd3d6095a71e306ea767a70 | |
parent | 9eee46a2adb1773800e090f4436cfccf70fade4b (diff) | |
download | meson-303bd624ea46e63c3e630cf5bba5529e24ef29ae.zip meson-303bd624ea46e63c3e630cf5bba5529e24ef29ae.tar.gz meson-303bd624ea46e63c3e630cf5bba5529e24ef29ae.tar.bz2 |
linkers: add rpath_dirs_to_remove support to SolarisDynamicLinker
Applies the changes made to GnuLikeDynamicLinkerMixin by
commit d7235c5905fa98207d90f3ad34bf590493498d5b to SolarisDynamicLinker
This makes test_build_rpath pass with the Solaris linker, where before
this change it failed with:
New rpath must not be longer than the old one.
Old: $ORIGIN/sub:/foo/bar
New: /baz:$ORIGIN/sub:/foo/bar
FAILED: meson-install
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r-- | mesonbuild/linkers.py | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py index 589945c..67cfb6b 100644 --- a/mesonbuild/linkers.py +++ b/mesonbuild/linkers.py @@ -1219,8 +1219,13 @@ class SolarisDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker): return ([], set()) processed_rpaths = prepare_rpaths(rpath_paths, build_dir, from_dir) all_paths = mesonlib.OrderedSet([os.path.join('$ORIGIN', p) for p in processed_rpaths]) + rpath_dirs_to_remove = set() + for p in all_paths: + rpath_dirs_to_remove.add(p.encode('utf8')) if build_rpath != '': all_paths.add(build_rpath) + for p in build_rpath.split(':'): + rpath_dirs_to_remove.add(p.encode('utf8')) # In order to avoid relinking for RPATH removal, the binary needs to contain just # enough space in the ELF header to hold the final installation RPATH. @@ -1231,7 +1236,7 @@ class SolarisDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker): paths = padding else: paths = paths + ':' + padding - return (self._apply_prefix('-rpath,{}'.format(paths)), set()) + return (self._apply_prefix('-rpath,{}'.format(paths)), rpath_dirs_to_remove) def get_soname_args(self, env: 'Environment', prefix: str, shlib_name: str, suffix: str, soversion: str, darwin_versions: T.Tuple[str, str], |