diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py index f83c93a6c9c..853047fde80 100644 --- a/lib/spack/spack/build_environment.py +++ b/lib/spack/spack/build_environment.py @@ -91,6 +91,7 @@ from spack.util.environment import ( SYSTEM_DIR_CASE_ENTRY, EnvironmentModifications, + ModificationList, PrependPath, env_flag, filter_system_paths, @@ -761,10 +762,23 @@ def setup_package(pkg, dirty, context: Context = Context.BUILD): tty.debug("setup_package: collected all modifications from dependencies") tty.debug("setup_package: adding compiler wrappers paths") - for x in env_mods.group_by_name()["SPACK_ENV_PATH"]: + env_by_name = env_mods.group_by_name() + for x in env_by_name["SPACK_ENV_PATH"]: assert isinstance(x, PrependPath), "unexpected setting used for SPACK_ENV_PATH" env_mods.prepend_path("PATH", x.value) + # Check whether we want to force RPATH or RUNPATH + enable_var_name, disable_var_name = "SPACK_ENABLE_NEW_DTAGS", "SPACK_DISABLE_NEW_DTAGS" + if enable_var_name in env_by_name and disable_var_name in env_by_name: + enable_new_dtags = _extract_dtags_arg(env_by_name, var_name=enable_var_name) + disable_new_dtags = _extract_dtags_arg(env_by_name, var_name=disable_var_name) + if spack.config.CONFIG.get("config:shared_linking:type") == "rpath": + env_mods.set("SPACK_DTAGS_TO_STRIP", enable_new_dtags) + env_mods.set("SPACK_DTAGS_TO_ADD", disable_new_dtags) + else: + env_mods.set("SPACK_DTAGS_TO_STRIP", disable_new_dtags) + env_mods.set("SPACK_DTAGS_TO_ADD", enable_new_dtags) + if context == Context.TEST: env_mods.prepend_path("PATH", ".") elif context == Context.BUILD and not dirty and not env_mods.is_unset("CPATH"): @@ -789,6 +803,14 @@ def setup_package(pkg, dirty, context: Context = Context.BUILD): return env_base +def _extract_dtags_arg(env_by_name: Dict[str, ModificationList], *, var_name: str) -> str: + try: + enable_new_dtags = env_by_name[var_name][0].value # type: ignore[union-attr] + except (KeyError, IndexError, AttributeError): + enable_new_dtags = "" + return enable_new_dtags + + class EnvironmentVisitor: def __init__(self, *roots: spack.spec.Spec, context: Context): # For the roots (well, marked specs) we follow different edges diff --git a/var/spack/repos/builtin/packages/compiler-wrapper/package.py b/var/spack/repos/builtin/packages/compiler-wrapper/package.py index cf924bda6ae..59ca1c111bd 100644 --- a/var/spack/repos/builtin/packages/compiler-wrapper/package.py +++ b/var/spack/repos/builtin/packages/compiler-wrapper/package.py @@ -11,7 +11,6 @@ from llnl.util import lang import spack.compilers.libraries -import spack.config import spack.package_base from spack.package import * @@ -213,13 +212,8 @@ def setup_dependent_build_environment(self, env, dependent_spec): implicit_rpaths = lang.dedupe(implicit_rpaths) env.set("SPACK_COMPILER_IMPLICIT_RPATHS", ":".join(implicit_rpaths)) - # Check whether we want to force RPATH or RUNPATH - if spack.config.CONFIG.get("config:shared_linking:type") == "rpath": - env.set("SPACK_DTAGS_TO_STRIP", self.enable_new_dtags) - env.set("SPACK_DTAGS_TO_ADD", self.disable_new_dtags) - else: - env.set("SPACK_DTAGS_TO_STRIP", self.disable_new_dtags) - env.set("SPACK_DTAGS_TO_ADD", self.enable_new_dtags) + env.set("SPACK_ENABLE_NEW_DTAGS", self.enable_new_dtags) + env.set("SPACK_DISABLE_NEW_DTAGS", self.disable_new_dtags) for item in env_paths: env.prepend_path("SPACK_ENV_PATH", item)