From 6961514122e04f3509c5e4a095060b056c38f5e9 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sun, 10 Nov 2024 16:00:34 -0800 Subject: imports: move `conditional` to `directives.py` `conditional()`, which defines conditional variant values, and the other ways to declare variant values should probably be in a layer above `spack.variant`. This does the simple thing and moves *just* `conditional()` to `spack.directives` to avoid a circular import. We can revisit the public variant interface later, when we split packages from core. Co-authored-by: Harmen Stoppels Signed-off-by: Todd Gamblin --- lib/spack/spack/directives.py | 10 ++++++++++ lib/spack/spack/package.py | 7 +------ lib/spack/spack/variant.py | 11 ++--------- var/spack/repos/builtin/packages/geant4/package.py | 4 ++-- var/spack/repos/builtin/packages/vecgeom/package.py | 4 ++-- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py index 8f9e43bf8b..7a3657e222 100644 --- a/lib/spack/spack/directives.py +++ b/lib/spack/spack/directives.py @@ -64,6 +64,7 @@ __all__ = [ "DirectiveMeta", "DisableRedistribute", "version", + "conditional", "conflicts", "depends_on", "extends", @@ -577,6 +578,15 @@ def patch( return _execute_patch +def conditional(*values: List[Any], when: Optional[WhenType] = None): + """Conditional values that can be used in variant declarations.""" + # _make_when_spec returns None when the condition is statically false. + when = _make_when_spec(when) + return spack.variant.ConditionalVariantValues( + spack.variant.Value(x, when=when) for x in values + ) + + @directive("variants") def variant( name: str, diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index bf8538032a..f8028d9eca 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -103,12 +103,7 @@ from spack.package_completions import * from spack.spec import InvalidSpecDetected, Spec from spack.util.executable import * from spack.util.filesystem import file_command, fix_darwin_install_name, mime_type -from spack.variant import ( - any_combination_of, - auto_or_any_combination_of, - conditional, - disjoint_sets, -) +from spack.variant import any_combination_of, auto_or_any_combination_of, disjoint_sets from spack.version import Version, ver # These are just here for editor support; they will be replaced when the build env diff --git a/lib/spack/spack/variant.py b/lib/spack/spack/variant.py index e5a5ddfa3c..e5dcf72f36 100644 --- a/lib/spack/spack/variant.py +++ b/lib/spack/spack/variant.py @@ -266,7 +266,7 @@ def _flatten(values) -> Collection: flattened: List = [] for item in values: - if isinstance(item, _ConditionalVariantValues): + if isinstance(item, ConditionalVariantValues): flattened.extend(item) else: flattened.append(item) @@ -884,17 +884,10 @@ def prevalidate_variant_value( ) -class _ConditionalVariantValues(lang.TypedMutableSequence): +class ConditionalVariantValues(lang.TypedMutableSequence): """A list, just with a different type""" -def conditional(*values: List[Any], when: Optional["spack.directives.WhenType"] = None): - """Conditional values that can be used in variant declarations.""" - # _make_when_spec returns None when the condition is statically false. - when = spack.directives._make_when_spec(when) - return _ConditionalVariantValues([Value(x, when=when) for x in values]) - - class DuplicateVariantError(error.SpecError): """Raised when the same variant occurs in a spec twice.""" diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py index 8dd3f18b5d..38ebb060fb 100644 --- a/var/spack/repos/builtin/packages/geant4/package.py +++ b/var/spack/repos/builtin/packages/geant4/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * -from spack.variant import _ConditionalVariantValues +from spack.variant import ConditionalVariantValues class Geant4(CMakePackage): @@ -180,7 +180,7 @@ class Geant4(CMakePackage): def std_when(values): for v in values: - if isinstance(v, _ConditionalVariantValues): + if isinstance(v, ConditionalVariantValues): for c in v: yield (c.value, c.when) else: diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py index d48585ad13..ff0fdd145d 100644 --- a/var/spack/repos/builtin/packages/vecgeom/package.py +++ b/var/spack/repos/builtin/packages/vecgeom/package.py @@ -5,7 +5,7 @@ from spack.package import * -from spack.variant import _ConditionalVariantValues +from spack.variant import ConditionalVariantValues class Vecgeom(CMakePackage, CudaPackage): @@ -196,7 +196,7 @@ class Vecgeom(CMakePackage, CudaPackage): def std_when(values): for v in values: - if isinstance(v, _ConditionalVariantValues): + if isinstance(v, ConditionalVariantValues): for c in v: yield (c.value, c.when) else: -- cgit v1.2.3-70-g09d2