diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 9014d09fb..4dda63a96 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -1888,6 +1888,20 @@ class BuildTarget(Target): def get_rpath_dirs_from_link_args(cls, args: T.List[str]) -> T.Set[str]: dirs: T.Set[str] = set() + nix_ldflags = os.environ.get('NIX_LDFLAGS', '').split() + next_is_path = False + # Try to add rpaths set by user or ld-wrapper so that they are not removed. + # Based on https://github.com/NixOS/nixpkgs/blob/69711a2f5ffe8cda208163be5258266172ff527f/pkgs/build-support/bintools-wrapper/ld-wrapper.sh#L148-L177 + for flag in nix_ldflags: + if flag == '-rpath' or flag == '-L': + next_is_path = True + elif next_is_path or flag.startswith('-L/'): + if flag.startswith('-L/'): + flag = flag[2:] + if flag.startswith('@storeDir@'): + dirs.add(flag) + next_is_path = False + for arg in args: if not arg.startswith('-Wl,'): continue