diff --git a/spack-repo/packages/singularity-eos/package.py b/spack-repo/packages/singularity-eos/package.py index ac8bd9f44e..5d5c58617e 100644 --- a/spack-repo/packages/singularity-eos/package.py +++ b/spack-repo/packages/singularity-eos/package.py @@ -5,7 +5,25 @@ import os +from spack.error import SpackError from spack.package import * +from spack.directives import directive + + +@directive("singularity_eos_plugins") +def singularity_eos_plugin(name, path): + def _execute_register(pkg): + pkg.plugins[name] = path + + return _execute_register + + +def plugin_validator(pkg_name, variant_name, values): + if values == ("none",): + return + for v in values: + if v not in SingularityEos.plugins: + raise SpackError(f"Unknown Singularity-EOS plugin '{v}'") class SingularityEos(CMakePackage, CudaPackage): @@ -63,6 +81,20 @@ class SingularityEos(CMakePackage, CudaPackage): variant("closure", default=True, description="Build closure module") + plugins = {} + + singularity_eos_plugin("dust", "example/plugin") + + variant( + "plugins", + multi=True, + default="none", + validator=plugin_validator, + description="list of plugins to build", + when="@main" + ) + variant("variant", default="default", description="include path used for variant header", when="@main") + # building/testing/docs depends_on("cmake@3.19:") depends_on("catch2@3.0.1:", when="@main +tests") @@ -183,6 +215,14 @@ def cmake_args(self): self.define("SINGULARITY_USE_EOSPAC", "^eospac" in self.spec), ] + if self.spec.satisfies("@main"): + if "none" not in self.spec.variants["plugins"].value: + pdirs = [join_path(self.stage.source_path, self.plugins[p]) for p in self.spec.variants["plugins"].value] + args.append(self.define("SINGULARITY_PLUGINS", ";".join(pdirs))) + + if self.spec.variants["variant"].value != "default": + args.append(self.define_from_variant("SINGULARITY_VARIANT", "variant")) + #TODO: do we need this? if "+kokkos+cuda" in self.spec: args.append(self.define("CMAKE_CXX_COMPILER", self.spec["kokkos"].kokkos_cxx)) diff --git a/spack-repo/repo.yaml b/spack-repo/repo.yaml index 9e4c10e980..d580ee9103 100644 --- a/spack-repo/repo.yaml +++ b/spack-repo/repo.yaml @@ -3,4 +3,4 @@ # ### repo: - namespace: singularity-eos + namespace: singularity_eos