From f2fc4ee9afcb1a159853b4037a8747949d65f7d9 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 5 Apr 2022 02:37:57 +0200 Subject: 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 --- .../conditional-values-in-variant/package.py | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 var/spack/repos/builtin.mock/packages/conditional-values-in-variant/package.py (limited to 'var/spack/repos/builtin.mock/packages') diff --git a/var/spack/repos/builtin.mock/packages/conditional-values-in-variant/package.py b/var/spack/repos/builtin.mock/packages/conditional-values-in-variant/package.py new file mode 100644 index 0000000000..74895cb7c0 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/conditional-values-in-variant/package.py @@ -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' + ) -- cgit v1.2.3-60-g2f50