concretizer: call inject_patches_variants() on the roots of the specs (#20203)

As was done in the old concretizer. Fixes an issue where conditionally
patched dependencies did not show up in spec (gdal+jasper)
This commit is contained in:
Andrew W Elble 2020-12-03 10:28:34 -05:00 committed by Tamara Dahlgren
parent b78cc5b43d
commit 92de484228
5 changed files with 31 additions and 4 deletions

View File

@ -1827,8 +1827,8 @@ def build_specs(self, function_tuples):
# fix flags after all specs are constructed
self.reorder_flags()
for s in self._specs.values():
spack.spec.Spec.inject_patches_variant(s)
for root in set([spec.root for spec in self._specs.values()]):
spack.spec.Spec.inject_patches_variant(root)
# Add external paths to specs with just external modules
for s in self._specs.values():

View File

@ -23,7 +23,8 @@ def test_immediate_dependents(mock_packages):
'libdwarf',
'patch-a-dependency',
'patch-several-dependencies',
'quantum-espresso'
'quantum-espresso',
'conditionally-patch-dependency'
])
@ -38,7 +39,8 @@ def test_transitive_dependents(mock_packages):
'multivalue-variant',
'singlevalue-variant-dependent',
'patch-a-dependency', 'patch-several-dependencies',
'quantum-espresso'
'quantum-espresso',
'conditionally-patch-dependency'
])

View File

@ -967,3 +967,11 @@ def test_custom_compiler_version(self):
s = Spec('a %gcc@foo os=redhat6').concretized()
assert '%gcc@foo' in s
def test_all_patches_applied(self):
uuidpatch = 'a60a42b73e03f207433c5579de207c6ed61d58e4d12dd3b5142eb525728d89ea'
localpatch = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
spec = spack.spec.Spec('conditionally-patch-dependency+jasper')
spec.concretize()
assert ((uuidpatch, localpatch) ==
spec['libelf'].variants['patches'].value)

View File

@ -0,0 +1,16 @@
# Copyright 2013-2020 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)
class ConditionallyPatchDependency(Package):
"""Package that conditionally requries a patched version
of a dependency."""
homepage = "http://www.example.com"
url = "http://www.example.com/patch-a-dependency-1.0.tar.gz"
version('1.0', '0123456789abcdef0123456789abcdef')
variant('jasper', default=False)
depends_on('libelf@0.8.10', patches=[patch('uuid.patch')], when='+jasper')