diff options
author | Matthew LeGendre <legendre1@llnl.gov> | 2016-03-10 17:00:27 -0800 |
---|---|---|
committer | Matthew LeGendre <legendre1@llnl.gov> | 2016-03-10 17:00:27 -0800 |
commit | ac88cab68ffa16d4ff448de5f186d746cb36b40a (patch) | |
tree | 0e2fa3a7b0153c65015312ed19b59ca657a5a7af | |
parent | 670024cf7762044c300b874607ede940eef47556 (diff) | |
download | spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.gz spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.bz2 spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.tar.xz spack-ac88cab68ffa16d4ff448de5f186d746cb36b40a.zip |
Fix issue with preferred satisfies not being respected
-rw-r--r-- | lib/spack/spack/concretize.py | 17 |
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): |