diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index a6bec0612..8153ff7b8 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -394,12 +394,11 @@ class Backend: return paths def determine_rpath_dirs(self, target): - link_deps = target.get_all_link_deps() - result = OrderedSet() - for ld in link_deps: - if ld is target: - continue - result.add(self.get_target_dir(ld)) + if self.environment.coredata.get_builtin_option('layout') == 'mirror': + result = target.get_link_dep_subdirs() + else: + result = OrderedSet() + result.add('meson-out') result.update(self.rpaths_for_bundled_shared_libraries(target)) return list(result) diff --git a/mesonbuild/build.py b/mesonbuild/build.py index e8af2b641..b86c84d96 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -21,7 +21,7 @@ from functools import lru_cache from . import environment from . import dependencies from . import mlog -from .mesonlib import File, MesonException, listify, extract_as_list +from .mesonlib import File, MesonException, listify, extract_as_list, OrderedSet from .mesonlib import typeslistify, stringlistify, classify_unity_sources from .mesonlib import get_filenames_templates_dict, substitute_values from .mesonlib import for_windows, for_darwin, for_cygwin, for_android, has_path_sep @@ -676,6 +676,14 @@ class BuildTarget(Target): result += i.get_all_link_deps() return result + @lru_cache(maxsize=None) + def get_link_dep_subdirs(self): + result = OrderedSet() + for i in self.link_targets: + result.add(i.get_subdir()) + result.update(i.get_link_dep_subdirs()) + return result + def get_custom_install_dir(self): return self.install_dir