fix extendee_spec for transitive dependencies on potential extendees (#48025)
* fix extendee_spec for transitive dependencies on potential extendees * regression test * resolve conditional extensions on direct deps * remove outdated comment Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl> --------- Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
This commit is contained in:
parent
6e10fac7ae
commit
5983f72439
@ -462,8 +462,7 @@ def _execute_extends(pkg):
|
||||
if dep_spec.name == "python" and not pkg.name == "python-venv":
|
||||
_depends_on(pkg, spack.spec.Spec("python-venv"), when=when, type=("build", "run"))
|
||||
|
||||
# TODO: the values of the extendees dictionary are not used. Remove in next refactor.
|
||||
pkg.extendees[dep_spec.name] = (dep_spec, None)
|
||||
pkg.extendees[dep_spec.name] = (dep_spec, when_spec)
|
||||
|
||||
return _execute_extends
|
||||
|
||||
|
@ -1288,12 +1288,13 @@ def extendee_spec(self):
|
||||
if not self.extendees:
|
||||
return None
|
||||
|
||||
deps = []
|
||||
|
||||
# If the extendee is in the spec's deps already, return that.
|
||||
for dep in self.spec.traverse(deptype=("link", "run")):
|
||||
if dep.name in self.extendees:
|
||||
deps.append(dep)
|
||||
deps = [
|
||||
dep
|
||||
for dep in self.spec.dependencies(deptype=("link", "run"))
|
||||
for d, when in self.extendees.values()
|
||||
if dep.satisfies(d) and self.spec.satisfies(when)
|
||||
]
|
||||
|
||||
if deps:
|
||||
assert len(deps) == 1
|
||||
|
@ -67,6 +67,20 @@ def test_extends_spec(config, mock_packages):
|
||||
assert extender.package.extends(extendee)
|
||||
|
||||
|
||||
@pytest.mark.regression("48024")
|
||||
def test_conditionally_extends_transitive_dep(config, mock_packages):
|
||||
spec = spack.spec.Spec("conditionally-extends-transitive-dep").concretized()
|
||||
|
||||
assert not spec.package.extendee_spec
|
||||
|
||||
|
||||
@pytest.mark.regression("48025")
|
||||
def test_conditionally_extends_direct_dep(config, mock_packages):
|
||||
spec = spack.spec.Spec("conditionally-extends-direct-dep").concretized()
|
||||
|
||||
assert not spec.package.extendee_spec
|
||||
|
||||
|
||||
@pytest.mark.regression("34368")
|
||||
def test_error_on_anonymous_dependency(config, mock_packages):
|
||||
pkg = spack.repo.PATH.get_pkg_class("pkg-a")
|
||||
|
@ -0,0 +1,18 @@
|
||||
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class ConditionallyExtendsDirectDep(Package):
|
||||
"""Package that tests if the extends directive supports a spec."""
|
||||
|
||||
homepage = "http://www.example.com"
|
||||
url = "http://www.example.com/example-1.0.tar.gz"
|
||||
|
||||
version("1.0", md5="0123456789abcdef0123456789abcdef")
|
||||
|
||||
extends("extendee", when="@2:") # will not satisfy version
|
||||
depends_on("extendee")
|
@ -0,0 +1,18 @@
|
||||
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
from spack.package import *
|
||||
|
||||
|
||||
class ConditionallyExtendsTransitiveDep(Package):
|
||||
"""Package that tests if the extends directive supports a spec."""
|
||||
|
||||
homepage = "http://www.example.com"
|
||||
url = "http://www.example.com/example-1.0.tar.gz"
|
||||
|
||||
version("1.0", md5="0123456789abcdef0123456789abcdef")
|
||||
|
||||
extends("extendee", when="@2:") # will not satisfy version
|
||||
depends_on("extension1")
|
Loading…
Reference in New Issue
Block a user