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 fbd9a7908b..900009e283 100644 --- a/lib/spack/spack/concretize.py +++ b/lib/spack/spack/concretize.py @@ -724,6 +724,24 @@ def concretize_specs_together(*abstract_specs, **kwargs): 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 5665b41fac..5ff0f0de9f 100644 --- a/lib/spack/spack/test/cmd/env.py +++ b/lib/spack/spack/test/cmd/env.py @@ -2454,3 +2454,18 @@ def test_does_not_rewrite_rel_dev_path_when_keep_relative_is_set(tmpdir): print(e.dev_specs) assert e.dev_specs['mypkg1']['path'] == '../build_folder' assert e.dev_specs['mypkg2']['path'] == '/some/other/path' + + +@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()) |