summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/concretize.py18
-rw-r--r--lib/spack/spack/test/cmd/env.py15
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())