diff options
author | Richarda Butler <39577672+RikkiButler20@users.noreply.github.com> | 2023-11-03 12:09:39 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-03 12:09:39 -0700 |
commit | 8fc1ba2d7a27109a8f5a4836c23c2dacd3d2dd10 (patch) | |
tree | 105cc12b502e59cd8cf356b068359246c9107654 /lib | |
parent | 668a5b45e5ca5b5c16ea042d0121c5a958564089 (diff) | |
download | spack-8fc1ba2d7a27109a8f5a4836c23c2dacd3d2dd10.tar.gz spack-8fc1ba2d7a27109a8f5a4836c23c2dacd3d2dd10.tar.bz2 spack-8fc1ba2d7a27109a8f5a4836c23c2dacd3d2dd10.tar.xz spack-8fc1ba2d7a27109a8f5a4836c23c2dacd3d2dd10.zip |
Bugfix: propagation of multivalued variants (#39833)
Don't encourage use of default value if propagating a multivalued variant.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/solver/concretize.lp | 1 | ||||
-rw-r--r-- | lib/spack/spack/test/concretize.py | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index 2207fa9f9a..340e1b04ee 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -881,6 +881,7 @@ variant_default_not_used(node(ID, Package), Variant, Value) :- variant_default_value(Package, Variant, Value), node_has_variant(node(ID, Package), Variant), not attr("variant_value", node(ID, Package), Variant, Value), + not attr("variant_propagate", node(ID, Package), Variant, _, _), attr("node", node(ID, Package)). % The variant is set in an external spec diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py index 915f6ca39b..0af689ddd5 100644 --- a/lib/spack/spack/test/concretize.py +++ b/lib/spack/spack/test/concretize.py @@ -472,6 +472,18 @@ class TestConcretize: assert spec.satisfies("^openblas+shared") + @pytest.mark.only_clingo("Original concretizer is allowed to forego variant propagation") + def test_concretize_propagate_multivalue_variant(self): + """Test that multivalue variants are propagating the specified value(s) + to their dependecies. The dependencies should not have the default value""" + spec = Spec("multivalue-variant foo==baz,fee") + spec.concretize() + + assert spec.satisfies("^a foo=baz,fee") + assert spec.satisfies("^b foo=baz,fee") + assert not spec.satisfies("^a foo=bar") + assert not spec.satisfies("^b foo=bar") + def test_no_matching_compiler_specs(self, mock_low_high_config): # only relevant when not building compilers as needed with spack.concretize.enable_compiler_existence_check(): |