summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-12-04 16:27:03 +0100
committerTamara Dahlgren <dahlgren1@llnl.gov>2021-02-17 17:07:22 -0800
commita6d433b937ee7d418289b23585a6d53343f1f14e (patch)
treec2f07e7c293eb13839f3de61cc9d1a81afb181c5
parentb4f79f3cb7e9cd0482784e5f7a33fbf8e1a3c1ae (diff)
downloadspack-a6d433b937ee7d418289b23585a6d53343f1f14e.tar.gz
spack-a6d433b937ee7d418289b23585a6d53343f1f14e.tar.bz2
spack-a6d433b937ee7d418289b23585a6d53343f1f14e.tar.xz
spack-a6d433b937ee7d418289b23585a6d53343f1f14e.zip
concretizer: restrict maximizing variant values to MV variants (#20194)
-rw-r--r--lib/spack/spack/solver/concretize.lp8
-rw-r--r--lib/spack/spack/test/concretize.py4
-rw-r--r--var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop-root/package.py11
-rw-r--r--var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop/package.py12
4 files changed, 33 insertions, 2 deletions
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index 2de7030ddf..acfed6f599 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -508,7 +508,9 @@ root(Dependency, 1) :- not root(Dependency), node(Dependency).
% need to maximize their number below to ensure they're all set
#maximize {
1@13,Package,Variant,Value
- : variant_not_default(Package, Variant, Value, Weight), root(Package)
+ : variant_not_default(Package, Variant, Value, Weight),
+ not variant_single_value(Package, Variant),
+ root(Package)
}.
#minimize{
Weight@13,Provider
@@ -531,7 +533,9 @@ root(Dependency, 1) :- not root(Dependency), node(Dependency).
% need to maximize their number below to ensure they're all set
#maximize {
1@8,Package,Variant,Value
- : variant_not_default(Package, Variant, Value, Weight), not root(Package)
+ : variant_not_default(Package, Variant, Value, Weight),
+ not variant_single_value(Package, Variant),
+ not root(Package)
}.
% Try to maximize the number of compiler matches in the DAG,
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index fed0432f91..2e96eea4af 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -975,3 +975,7 @@ class TestConcretize(object):
spec.concretize()
assert ((uuidpatch, localpatch) ==
spec['libelf'].variants['patches'].value)
+
+ def test_dont_select_version_that_brings_more_variants_in(self):
+ s = Spec('dep-with-variants-if-develop-root').concretized()
+ assert s['dep-with-variants-if-develop'].satisfies('@1.0')
diff --git a/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop-root/package.py b/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop-root/package.py
new file mode 100644
index 0000000000..00162ee200
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop-root/package.py
@@ -0,0 +1,11 @@
+# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+class DepWithVariantsIfDevelopRoot(Package):
+ """Package that adds a dependency with many variants only at @develop"""
+ homepage = "https://dev.null"
+
+ version('1.0')
+
+ depends_on('dep-with-variants-if-develop')
diff --git a/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop/package.py b/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop/package.py
new file mode 100644
index 0000000000..ecb11224b3
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/dep-with-variants-if-develop/package.py
@@ -0,0 +1,12 @@
+# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+class DepWithVariantsIfDevelop(Package):
+ """Package that adds a dependency with many variants only at @develop"""
+ homepage = "https://dev.null"
+
+ version('develop')
+ version('1.0')
+
+ depends_on('dep-with-variants', when='@develop')