concretizer: swap priority of selecting provider and default variant (#20182)

refers #20040

Before this PR optimization rules would have selected default
providers at a higher priority than default variants. Here we
swap this priority and we consider variants that are forced by
any means (root spec or spec in depends_on clause) the same as
if they were with a default value.

This prevents the solver from avoiding expected configurations
just because they contain directives like:

depends_on('pkg+foo')

and `+foo` is not the default variant value for pkg.
This commit is contained in:
Massimiliano Culpo
2020-12-01 07:45:48 +01:00
committed by Tamara Dahlgren
parent 96283867d6
commit 22d7937c50
5 changed files with 72 additions and 13 deletions

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 ConditionalConstrainedDependencies(Package):
"""Package that has a variant which adds a dependency forced to
use non default values.
"""
homepage = "https://dev.null"
version('1.0')
# This variant is on by default and attaches a dependency
# with a lot of variants set at their non-default values
variant('dep', default=True, description='nope')
depends_on('dep-with-variants+foo+bar+baz', when='+dep')

View File

@@ -0,0 +1,15 @@
# 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 DepWithVariants(Package):
"""Package that has a variant which adds a dependency forced to
use non default values.
"""
homepage = "https://dev.null"
version('1.0')
variant('foo', default=False, description='nope')
variant('bar', default=False, description='nope')
variant('baz', default=False, description='nope')

View File

@@ -0,0 +1,14 @@
# 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 EcpVizSdk(Package):
"""Package that has a dependency with a variant which
adds a transitive dependency forced to use non default
values.
"""
homepage = "https://dev.null"
version('1.0')
depends_on('conditional-constrained-dependencies')