summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2024-11-10 16:00:34 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2024-11-11 01:54:57 -0800
commit6961514122e04f3509c5e4a095060b056c38f5e9 (patch)
tree70d98bbd256aa700dae2b4f1387cbb0780f74001
parenta9e60749964e976382fc87bf5e8b9a0d40b816d2 (diff)
downloadspack-6961514122e04f3509c5e4a095060b056c38f5e9.tar.gz
spack-6961514122e04f3509c5e4a095060b056c38f5e9.tar.bz2
spack-6961514122e04f3509c5e4a095060b056c38f5e9.tar.xz
spack-6961514122e04f3509c5e4a095060b056c38f5e9.zip
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 <me@harmenstoppels.nl> Signed-off-by: Todd Gamblin <tgamblin@llnl.gov>
-rw-r--r--lib/spack/spack/directives.py10
-rw-r--r--lib/spack/spack/package.py7
-rw-r--r--lib/spack/spack/variant.py11
-rw-r--r--var/spack/repos/builtin/packages/geant4/package.py4
-rw-r--r--var/spack/repos/builtin/packages/vecgeom/package.py4
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: