summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/solver/concretize.lp14
-rw-r--r--lib/spack/spack/test/concretize.py15
-rw-r--r--lib/spack/spack/test/data/config/compilers.yaml9
3 files changed, 32 insertions, 6 deletions
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index b27b80dc6e..d012bc3cf3 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -537,9 +537,6 @@ root(Dependency, 1) :- not root(Dependency), node(Dependency).
1@8,Package,Variant,Value
: variant_not_default(Package, Variant, Value, Weight), not root(Package)
}.
-#minimize{
- Weight@8,Package : version_weight(Package, Weight)
-}.
% Try to maximize the number of compiler matches in the DAG,
% while minimizing the number of nodes. This is done because
@@ -548,10 +545,15 @@ root(Dependency, 1) :- not root(Dependency), node(Dependency).
#minimize{ 1@7,Package : node(Package) }.
#maximize{ Weight@7,Package : compiler_version_match(Package, Weight) }.
+% Choose more recent versions for nodes
+#minimize{
+ Weight@6,Package : version_weight(Package, Weight)
+}.
+
% Try to use preferred compilers
-#minimize{ Weight@6,Package : compiler_weight(Package, Weight) }.
+#minimize{ Weight@5,Package : compiler_weight(Package, Weight) }.
% Maximize the number of matches for targets in the DAG, try
% to select the preferred target.
-#maximize{ Weight@5,Package : node_target_match(Package, Weight) }.
-#minimize{ Weight@4,Package : node_target_weight(Package, Weight) }.
+#maximize{ Weight@4,Package : node_target_match(Package, Weight) }.
+#minimize{ Weight@3,Package : node_target_weight(Package, Weight) }.
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index 8640c91a9e..11c2764822 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -923,3 +923,18 @@ class TestConcretize(object):
msg = "Test dependency in package '{0}' is unexpected"
node = s[pkg_name]
assert not node.dependencies(deptype='test'), msg.format(pkg_name)
+
+ @pytest.mark.regression('20019')
+ def test_compiler_match_is_preferred_to_newer_version(self):
+ if spack.config.get('config:concretizer') == 'original':
+ pytest.xfail('Known failure of the original concretizer')
+
+ # This spec depends on openblas. Openblas has a conflict
+ # that doesn't allow newer versions with gcc@4.4.0. Check
+ # that an old version of openblas is selected, rather than
+ # a different compiler for just that node.
+ spec_str = 'simple-inheritance+openblas %gcc@4.4.0 os=redhat6'
+ s = Spec(spec_str).concretized()
+
+ assert 'openblas@0.2.13' in s
+ assert s['openblas'].satisfies('%gcc@4.4.0')
diff --git a/lib/spack/spack/test/data/config/compilers.yaml b/lib/spack/spack/test/data/config/compilers.yaml
index 3a2db05e72..3a63796941 100644
--- a/lib/spack/spack/test/data/config/compilers.yaml
+++ b/lib/spack/spack/test/data/config/compilers.yaml
@@ -103,6 +103,15 @@ compilers:
fflags: -O0 -g
modules: 'None'
- compiler:
+ spec: gcc@4.4.0
+ operating_system: redhat6
+ paths:
+ cc: /path/to/gcc440
+ cxx: /path/to/g++440
+ f77: /path/to/gfortran440
+ fc: /path/to/gfortran440
+ modules: 'None'
+- compiler:
spec: clang@3.5
operating_system: redhat6
paths: