From 5640861aebbf3a56715ce0e311ffb365872a8a4d Mon Sep 17 00:00:00 2001 From: "Seth R. Johnson" Date: Thu, 19 Dec 2024 07:29:08 -0500 Subject: [PATCH] Improve package recipes for some HEP packages (#48185) * Improve variant robustness for dd4hep and edm4hep Now variants won't be "false" if there's a typo. * Use libs instead of manual prefix paths * Improve cmake for another hep package * Fix variant use and style * Use directories for ODD --- .../repos/builtin/packages/dd4hep/package.py | 43 ++++++++----------- .../repos/builtin/packages/edm4hep/package.py | 11 +++-- .../repos/builtin/packages/gaudi/package.py | 4 +- .../packages/opendatadetector/package.py | 7 ++- 4 files changed, 28 insertions(+), 37 deletions(-) diff --git a/var/spack/repos/builtin/packages/dd4hep/package.py b/var/spack/repos/builtin/packages/dd4hep/package.py index aadaa4651d5..48cf21dfd43 100644 --- a/var/spack/repos/builtin/packages/dd4hep/package.py +++ b/var/spack/repos/builtin/packages/dd4hep/package.py @@ -174,32 +174,25 @@ def cmake_args(self): # However, with spack it is preferrable to have a proper external # dependency, so we disable it. self.define("DD4HEP_LOAD_ASSIMP", False), - "-DCMAKE_CXX_STANDARD={0}".format(cxxstd), - "-DBUILD_TESTING={0}".format(self.run_tests), - "-DBOOST_ROOT={0}".format(spec["boost"].prefix), - "-DBoost_NO_BOOST_CMAKE=ON", + self.define("CMAKE_CXX_STANDARD", cxxstd), + self.define("BUILD_TESTING", self.run_tests), + self.define("BOOST_ROOT", spec["boost"].prefix), + self.define("Boost_NO_BOOST_CMAKE", True), ] - subpackages = [] - if spec.satisfies("+ddg4"): - subpackages += ["DDG4"] - if spec.satisfies("+ddcond"): - subpackages += ["DDCond"] - if spec.satisfies("+ddcad"): - subpackages += ["DDCAD"] - if spec.satisfies("+ddrec"): - subpackages += ["DDRec"] - if spec.satisfies("+dddetectors"): - subpackages += ["DDDetectors"] - if spec.satisfies("+ddalign"): - subpackages += ["DDAlign"] - if spec.satisfies("+dddigi"): - subpackages += ["DDDigi"] - if spec.satisfies("+ddeve"): - subpackages += ["DDEve"] - if spec.satisfies("+utilityapps"): - subpackages += ["UtilityApps"] - subpackages = " ".join(subpackages) - args += [self.define("DD4HEP_BUILD_PACKAGES", subpackages)] + + packages = [ + "DDG4", + "DDCond", + "DDCAD", + "DDRec", + "DDDetectors", + "DDAlign", + "DDDigi", + "DDEve", + "UtilityApps", + ] + enabled_packages = [p for p in packages if self.spec.variants[package.lower()].value] + args.append(self.define("DD4HEP_BUILD_PACKAGES", " ".join(enabled_packages))) return args def setup_run_environment(self, env): diff --git a/var/spack/repos/builtin/packages/edm4hep/package.py b/var/spack/repos/builtin/packages/edm4hep/package.py index 97c32283b06..b3d60afa1e1 100644 --- a/var/spack/repos/builtin/packages/edm4hep/package.py +++ b/var/spack/repos/builtin/packages/edm4hep/package.py @@ -92,12 +92,11 @@ class Edm4hep(CMakePackage): extends("python", when="@0.10.6:") def cmake_args(self): - args = [] - # C++ Standard - args.append(self.define("CMAKE_CXX_STANDARD", self.spec.variants["cxxstd"].value)) - args.append(self.define("BUILD_TESTING", self.run_tests)) - if self.spec.satisfies("@0.99.2: +json"): - args.append(self.define_from_variant("EDM4HEP_WITH_JSON", "json")) + args = [ + self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"), + self.define("BUILD_TESTING", self.run_tests), + self.define_from_variant("EDM4HEP_WITH_JSON", "json"), + ] return args def setup_run_environment(self, env): diff --git a/var/spack/repos/builtin/packages/gaudi/package.py b/var/spack/repos/builtin/packages/gaudi/package.py index b580eeec77c..02b5598b324 100644 --- a/var/spack/repos/builtin/packages/gaudi/package.py +++ b/var/spack/repos/builtin/packages/gaudi/package.py @@ -167,8 +167,8 @@ def setup_run_environment(self, env): # environment as in Gaudi.xenv env.prepend_path("PATH", self.prefix.scripts) env.prepend_path("PYTHONPATH", self.prefix.python) - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib) - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64) + for d in self.libs.directories: + env.prepend_path("LD_LIBRARY_PATH", d) def url_for_version(self, version): major = str(version[0]) diff --git a/var/spack/repos/builtin/packages/opendatadetector/package.py b/var/spack/repos/builtin/packages/opendatadetector/package.py index 6953fbd115a..2dbf828c179 100644 --- a/var/spack/repos/builtin/packages/opendatadetector/package.py +++ b/var/spack/repos/builtin/packages/opendatadetector/package.py @@ -31,11 +31,10 @@ class Opendatadetector(CMakePackage): depends_on("boost") def cmake_args(self): - args = [] - args.append("-DCMAKE_CXX_STANDARD=%s" % self.spec["root"].variants["cxxstd"].value) + args = [self.define("CMAKE_CXX_STANDARD", self.spec["root"].variants["cxxstd"].value)] return args def setup_run_environment(self, env): env.set("OPENDATADETECTOR_DATA", join_path(self.prefix.share, "OpenDataDetector")) - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib) - env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64) + for d in self.libs.directories: + env.prepend_path("LD_LIBRARY_PATH", d)