summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMatthew LeGendre <legendre1@llnl.gov>2016-03-10 17:00:27 -0800
committerMatthew LeGendre <legendre1@llnl.gov>2016-03-10 17:00:27 -0800
commitac88cab68ffa16d4ff448de5f186d746cb36b40a (patch)
tree0e2fa3a7b0153c65015312ed19b59ca657a5a7af /lib
parent670024cf7762044c300b874607ede940eef47556 (diff)
downloadspack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.gz
spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.bz2
spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.xz
spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.zip
Fix issue with preferred satisfies not being respected
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/concretize.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py
index bad67c34e3..2268084e56 100644
--- a/lib/spack/spack/concretize.py
+++ b/lib/spack/spack/concretize.py
@@ -70,20 +70,23 @@ class DefaultConcretizer(object):
# For each candidate package, if it has externals add those to the candidates
# if it's a nobuild, then only add the externals.
- result = []
+ candidates = []
all_compilers = spack.compilers.all_compilers()
for pkg in packages:
externals = spec_externals(pkg)
buildable = not is_spec_nobuild(pkg)
if buildable:
- result.append((pkg, None))
+ candidates.append((pkg, None))
for ext in externals:
if ext[0].satisfies(spec):
- result.append(ext)
- if not result:
+ candidates.append(ext)
+ if not candidates:
raise NoBuildError(spec)
def cmp_externals(a, b):
+ if a[0].name != b[0].name:
+ #We're choosing between different providers. Maintain order from above sort
+ return candidates.index(a) - candidates.index(b)
result = cmp_specs(a[0], b[0])
if result != 0:
return result
@@ -91,10 +94,10 @@ class DefaultConcretizer(object):
return 1
if not b[1] and a[1]:
return -1
- return cmp_specs(a[1], b[1])
+ return cmp(a[1], b[1])
- result = sorted(result, cmp=cmp_externals)
- return result
+ candidates = sorted(candidates, cmp=cmp_externals)
+ return candidates
def concretize_virtual_and_external(self, spec):