diff options
-rw-r--r-- | lib/spack/spack/concretize.py | 18 | ||||
-rw-r--r-- | lib/spack/spack/test/cmd/env.py | 15 |
2 files changed, 33 insertions, 0 deletions
diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py index 7e180eb91e..7c00b4dd55 100644 --- a/lib/spack/spack/concretize.py +++ b/lib/spack/spack/concretize.py @@ -724,6 +724,24 @@ def concretize_specs_together(*abstract_specs): Returns: List of concretized specs """ + if spack.config.get('config:concretizer') == 'original': + return _concretize_specs_together_original(*abstract_specs, **kwargs) + return _concretize_specs_together_new(*abstract_specs, **kwargs) + + +def _concretize_specs_together_new(*abstract_specs, **kwargs): + import spack.solver.asp + result = spack.solver.asp.solve(abstract_specs) + + if not result.satisfiable: + result.print_cores() + tty.die("Unsatisfiable spec.") + + opt, i, answer = min(result.answers) + return [answer[s.name].copy() for s in abstract_specs] + + +def _concretize_specs_together_original(*abstract_specs, **kwargs): def make_concretization_repository(abstract_specs): """Returns the path to a temporary repository created to contain a fake package that depends on all of the abstract specs. diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py index 44b5caf5f9..f43ea4ff32 100644 --- a/lib/spack/spack/test/cmd/env.py +++ b/lib/spack/spack/test/cmd/env.py @@ -2369,3 +2369,18 @@ spack: e.clear() e.write() assert os.path.exists(str(spack_lock)) + + +@pytest.mark.regression('23440') +def test_custom_version_concretize_together(tmpdir): + # Custom versions should be permitted in specs when + # concretizing together + e = ev.create('custom_version') + e.concretization = 'together' + + # Concretize a first time using 'mpich' as the MPI provider + e.add('hdf5@myversion') + e.add('mpich') + e.concretize() + + assert any('hdf5@myversion' in spec for _, spec in e.concretized_specs()) |