From 0960c0810c387a8fff1788ecda13ab4a11eac332 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Fri, 10 Dec 2021 06:30:21 -0600 Subject: Extends: support spec, not just package name (#27754) --- lib/spack/spack/directives.py | 3 ++- lib/spack/spack/test/directives.py | 9 +++++++++ .../repos/builtin.mock/packages/extends-spec/package.py | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin.mock/packages/extends-spec/package.py diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py index f7400f4da9..c23146125a 100644 --- a/lib/spack/spack/directives.py +++ b/lib/spack/spack/directives.py @@ -466,7 +466,8 @@ def extends(spec, type=('build', 'run'), **kwargs): return _depends_on(pkg, spec, when=when, type=type) - pkg.extendees[spec] = (spack.spec.Spec(spec), kwargs) + spec_obj = spack.spec.Spec(spec) + pkg.extendees[spec_obj.name] = (spec_obj, kwargs) return _execute_extends diff --git a/lib/spack/spack/test/directives.py b/lib/spack/spack/test/directives.py index 31038ebb47..ad7c98bdb9 100644 --- a/lib/spack/spack/test/directives.py +++ b/lib/spack/spack/test/directives.py @@ -51,3 +51,12 @@ def test_constraints_from_context_are_merged(mock_packages): assert pkg_cls.dependencies assert spack.spec.Spec('@0.14:15 ^b@3.8:4.0') in pkg_cls.dependencies['c'] + + +@pytest.mark.regression('27754') +def test_extends_spec(config, mock_packages): + extender = spack.spec.Spec('extends-spec').concretized() + extendee = spack.spec.Spec('extendee').concretized() + + assert extender.dependencies + assert extender.package.extends(extendee) diff --git a/var/spack/repos/builtin.mock/packages/extends-spec/package.py b/var/spack/repos/builtin.mock/packages/extends-spec/package.py new file mode 100644 index 0000000000..56e887b772 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/extends-spec/package.py @@ -0,0 +1,17 @@ +# Copyright 2013-2021 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 import * + + +class ExtendsSpec(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', '0123456789abcdef0123456789abcdef') + + extends('extendee@1:') -- cgit v1.2.3-70-g09d2