Allow conditional possible values in variants (#29530)
Allow declaring possible values for variants with an associated condition. If the variant takes one of those values, the condition is imposed as a further constraint. The idea of this PR is to implement part of the mechanisms needed for modeling [packages with multiple build-systems]( https://github.com/spack/seps/pull/3). After this PR the build-system directive can be implemented as: ```python variant( 'build-system', default='cmake', values=( 'autotools', conditional('cmake', when='@X.Y:') ), description='...', ) ``` Modifications: - [x] Allow conditional possible values in variants - [x] Add a unit-test for the feature - [x] Add documentation
This commit is contained in:

committed by
GitHub

parent
d64de54ebe
commit
f2fc4ee9af
@@ -0,0 +1,34 @@
|
||||
# Copyright 2013-2022 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 ConditionalValuesInVariant(Package):
|
||||
"""Package with conditional possible values in a variant"""
|
||||
homepage = "https://dev.null"
|
||||
|
||||
version('1.73.0')
|
||||
version('1.72.0')
|
||||
version('1.62.0')
|
||||
version('1.60.0')
|
||||
version('1.50.0')
|
||||
|
||||
variant(
|
||||
'cxxstd', default='98',
|
||||
values=(
|
||||
'98', '11', '14',
|
||||
# C++17 is not supported by Boost < 1.63.0.
|
||||
conditional('17', when='@1.63.0:'),
|
||||
# C++20/2a is not support by Boost < 1.73.0
|
||||
conditional('2a', when='@1.73.0:')
|
||||
),
|
||||
multi=False,
|
||||
description='Use the specified C++ standard when building.',
|
||||
when='@1.60.0:'
|
||||
)
|
||||
|
||||
variant(
|
||||
'staging', values=any_combination_of(
|
||||
conditional('flexpath', 'dataspaces', when='@1.73.0:')
|
||||
),
|
||||
description='Enable dataspaces and/or flexpath staging transports'
|
||||
)
|
@@ -140,7 +140,13 @@ def libs(self):
|
||||
|
||||
variant('cxxstd',
|
||||
default='98',
|
||||
values=('98', '11', '14', '17', '2a'),
|
||||
values=(
|
||||
'98', '11', '14',
|
||||
# C++17 is not supported by Boost < 1.63.0.
|
||||
conditional('17', when='@1.63.0:'),
|
||||
# C++20/2a is not support by Boost < 1.73.0
|
||||
conditional('2a', when='@1.73.0:')
|
||||
),
|
||||
multi=False,
|
||||
description='Use the specified C++ standard when building.')
|
||||
variant('debug', default=False,
|
||||
@@ -193,12 +199,6 @@ def libs(self):
|
||||
conflicts('cxxstd=98', when='+fiber') # Fiber requires >=C++11.
|
||||
conflicts('~context', when='+fiber') # Fiber requires Context.
|
||||
|
||||
# C++20/2a is not support by Boost < 1.73.0
|
||||
conflicts('cxxstd=2a', when='@:1.72')
|
||||
|
||||
# C++17 is not supported by Boost<1.63.0.
|
||||
conflicts('cxxstd=17', when='@:1.62')
|
||||
|
||||
conflicts('+taggedlayout', when='+versionedlayout')
|
||||
conflicts('+numpy', when='~python')
|
||||
|
||||
|
Reference in New Issue
Block a user