summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/solver/concretize.lp3
-rw-r--r--lib/spack/spack/test/concretize.py7
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index e444faffec..b85d2f798a 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -28,6 +28,9 @@ version_declared(Package, Version) :- version_declared(Package, Version, _).
1 { version(Package, Version) : version_declared(Package, Version) } 1
:- node(Package).
+% A virtual package may have or not a version, but never has more than one
+:- virtual_node(Package), 2 { version(Package, _) }.
+
% If we select a deprecated version, mark the package as deprecated
deprecated(Package, Version) :- version(Package, Version), deprecated_version(Package, Version).
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index cb09f41c66..d30191f4f2 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -1267,3 +1267,10 @@ class TestConcretize(object):
s = spack.spec.Spec('root-adds-virtual').concretized()
assert s['leaf-adds-virtual'].satisfies('@2.0')
assert 'blas' in s
+
+ @pytest.mark.regression('26718')
+ def test_versions_in_virtual_dependencies(self):
+ # Ensure that a package that needs a given version of a virtual
+ # package doesn't end up using a later implementation
+ s = spack.spec.Spec('hpcviewer@2019.02').concretized()
+ assert s['java'].satisfies('virtual-with-versions@1.8.0')