From fc683b87f11235935d2f208e0bf10cbb46f2896e Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Sat, 11 Jan 2025 14:31:37 +0100 Subject: [PATCH] builtin: reduce boilerplate when accessing package attributes --- var/spack/repos/builtin/packages/clingo/package.py | 2 +- var/spack/repos/builtin/packages/cray-mpich/package.py | 8 ++++---- .../repos/builtin/packages/cray-mvapich2/package.py | 8 ++++---- var/spack/repos/builtin/packages/gcc-runtime/package.py | 2 +- var/spack/repos/builtin/packages/go/package.py | 4 ++-- var/spack/repos/builtin/packages/gtk-doc/package.py | 2 +- var/spack/repos/builtin/packages/libtheora/package.py | 2 +- var/spack/repos/builtin/packages/libxml2/package.py | 2 +- var/spack/repos/builtin/packages/migraphx/package.py | 3 +-- var/spack/repos/builtin/packages/ncurses/package.py | 6 +++--- var/spack/repos/builtin/packages/nvhpc/package.py | 6 +++--- var/spack/repos/builtin/packages/openssl/package.py | 2 +- var/spack/repos/builtin/packages/pdftk/package.py | 2 +- .../repos/builtin/packages/perl-bio-bigfile/package.py | 6 +++--- var/spack/repos/builtin/packages/perl/package.py | 6 +++--- var/spack/repos/builtin/packages/plasma/package.py | 2 +- var/spack/repos/builtin/packages/precice/package.py | 2 +- var/spack/repos/builtin/packages/py-gpaw/package.py | 2 +- var/spack/repos/builtin/packages/py-scipy/package.py | 9 ++++----- var/spack/repos/builtin/packages/python/package.py | 6 +++--- var/spack/repos/builtin/packages/qgis/package.py | 2 +- var/spack/repos/builtin/packages/redis-ai/package.py | 4 +--- var/spack/repos/builtin/packages/turbine/package.py | 2 +- var/spack/repos/builtin/packages/zlib-ng/package.py | 2 +- 24 files changed, 44 insertions(+), 48 deletions(-) diff --git a/var/spack/repos/builtin/packages/clingo/package.py b/var/spack/repos/builtin/packages/clingo/package.py index 3b1ac8c8a4c..f1ae1d87ae3 100644 --- a/var/spack/repos/builtin/packages/clingo/package.py +++ b/var/spack/repos/builtin/packages/clingo/package.py @@ -100,7 +100,7 @@ def cmake_py_shared(self): def cmake_args(self): try: - self.spec["cxx"].package.standard_flag(language="cxx", standard="14") + self["cxx"].standard_flag(language="cxx", standard="14") except UnsupportedCompilerFlag: InstallError("clingo requires a C++14-compliant C++ compiler") diff --git a/var/spack/repos/builtin/packages/cray-mpich/package.py b/var/spack/repos/builtin/packages/cray-mpich/package.py index b92cef379b5..c345116258b 100644 --- a/var/spack/repos/builtin/packages/cray-mpich/package.py +++ b/var/spack/repos/builtin/packages/cray-mpich/package.py @@ -76,14 +76,14 @@ def setup_run_environment(self, env): return if self.spec.dependencies(virtuals=("c",)): - env.set("MPICC", self.spec["c"].package.cc) + env.set("MPICC", self["c"].cc) if self.spec.dependencies(virtuals=("cxx",)): - env.set("MPICXX", self.spec["cxx"].package.cxx) + env.set("MPICXX", self["cxx"].cxx) if self.spec.dependencies(virtuals=("fortran",)): - env.set("MPIFC", self.spec["fortran"].package.fc) - env.set("MPIF77", self.spec["fortran"].package.fc) + env.set("MPIFC", self["fortran"].fc) + env.set("MPIF77", self["fortran"].fc) def setup_dependent_package(self, module, dependent_spec): spec = self.spec diff --git a/var/spack/repos/builtin/packages/cray-mvapich2/package.py b/var/spack/repos/builtin/packages/cray-mvapich2/package.py index 5c2da4c7b7e..01231b50280 100644 --- a/var/spack/repos/builtin/packages/cray-mvapich2/package.py +++ b/var/spack/repos/builtin/packages/cray-mvapich2/package.py @@ -30,14 +30,14 @@ class CrayMvapich2(MpichEnvironmentModifications, Package): def setup_run_environment(self, env): if self.spec.dependencies(virtuals=("c",)): - env.set("MPICC", self.spec["c"].package.cc) + env.set("MPICC", self["c"].cc) if self.spec.dependencies(virtuals=("cxx",)): - env.set("MPICXX", self.spec["cxx"].package.cxx) + env.set("MPICXX", self["cxx"].cxx) if self.spec.dependencies(virtuals=("fortran",)): - env.set("MPIFC", self.spec["fortran"].package.fc) - env.set("MPIF77", self.spec["fortran"].package.fc) + env.set("MPIFC", self["fortran"].fc) + env.set("MPIF77", self["fortran"].fc) def install(self, spec, prefix): raise InstallError( diff --git a/var/spack/repos/builtin/packages/gcc-runtime/package.py b/var/spack/repos/builtin/packages/gcc-runtime/package.py index b9ae56c0211..ebecd00a31e 100644 --- a/var/spack/repos/builtin/packages/gcc-runtime/package.py +++ b/var/spack/repos/builtin/packages/gcc-runtime/package.py @@ -78,7 +78,7 @@ def install(self, spec, prefix): def _get_libraries_macho(self): """Same as _get_libraries_elf but for Mach-O binaries""" - cc = Executable(self.spec["gcc"].package.cc) + cc = Executable(self["gcc"].cc) path_and_install_name = [] for name in self.LIBRARIES: diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py index 208c4ac799a..9c89199b97c 100644 --- a/var/spack/repos/builtin/packages/go/package.py +++ b/var/spack/repos/builtin/packages/go/package.py @@ -104,8 +104,8 @@ def setup_build_environment(self, env): env.set("GOROOT_FINAL", self.spec.prefix.go) # We need to set CC/CXX_FOR_TARGET, otherwise cgo will use the # internal Spack wrappers and fail. - env.set("CC_FOR_TARGET", self.spec["c"].package.cc) - env.set("CXX_FOR_TARGET", self.spec["cxx"].package.cxx) + env.set("CC_FOR_TARGET", self["c"].cc) + env.set("CXX_FOR_TARGET", self["cxx"].cxx) env.set("GOMAXPROCS", make_jobs) def build(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/gtk-doc/package.py b/var/spack/repos/builtin/packages/gtk-doc/package.py index dcc170e79f4..9730bd2e387 100644 --- a/var/spack/repos/builtin/packages/gtk-doc/package.py +++ b/var/spack/repos/builtin/packages/gtk-doc/package.py @@ -70,5 +70,5 @@ def url_for_version(self, version): return url.format(version) def configure_args(self): - args = ["--with-xml-catalog={0}".format(self.spec["docbook-xml"].package.catalog)] + args = ["--with-xml-catalog={0}".format(self["docbook-xml"].catalog)] return args diff --git a/var/spack/repos/builtin/packages/libtheora/package.py b/var/spack/repos/builtin/packages/libtheora/package.py index 457c611f5bb..cf765402a27 100644 --- a/var/spack/repos/builtin/packages/libtheora/package.py +++ b/var/spack/repos/builtin/packages/libtheora/package.py @@ -88,7 +88,7 @@ def setup_build_environment(self, env): # devenv is needed to convert ancient MSbuild project to modern # msbuild project so MSBuild versions older than 2010 can build this # project - devenv_path = os.path.join(self.spec["msvc"].package.vs_root, "Common7", "IDE") + devenv_path = os.path.join(self["msvc"].vs_root, "Common7", "IDE") env.prepend_path("PATH", devenv_path) @property diff --git a/var/spack/repos/builtin/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py index 724236b2705..c7f3c5ab40e 100644 --- a/var/spack/repos/builtin/packages/libxml2/package.py +++ b/var/spack/repos/builtin/packages/libxml2/package.py @@ -110,7 +110,7 @@ def url_for_version(self, version): def flag_handler(self, name, flags): if name == "cflags" and self.spec.satisfies("+pic"): - flags.append(self.spec["c"].package.pic_flag) + flags.append(self["c"].pic_flag) flags.append("-DPIC") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/migraphx/package.py b/var/spack/repos/builtin/packages/migraphx/package.py index 87f5f3c7a69..a32b40707d8 100644 --- a/var/spack/repos/builtin/packages/migraphx/package.py +++ b/var/spack/repos/builtin/packages/migraphx/package.py @@ -118,8 +118,7 @@ def cmake_python_hints(self): """Include the python include path to the CMake based on current spec """ - python = self.spec["python"] - return [self.define("Python_INCLUDE_DIR", python.package.config_vars["include"])] + return [self.define("Python_INCLUDE_DIR", self["python"].config_vars["include"])] @classmethod def determine_version(cls, lib): diff --git a/var/spack/repos/builtin/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py index 451d1cc73fc..555550b7931 100644 --- a/var/spack/repos/builtin/packages/ncurses/package.py +++ b/var/spack/repos/builtin/packages/ncurses/package.py @@ -106,9 +106,9 @@ def setup_build_environment(self, env): def flag_handler(self, name, flags): if name == "cflags": - flags.append(self.spec["c"].package.pic_flag) + flags.append(self["c"].pic_flag) elif name == "cxxflags": - flags.append(self.spec["cxx"].package.pic_flag) + flags.append(self["cxx"].pic_flag) # ncurses@:6.0 fails in definition of macro 'mouse_trafo' without -P if self.spec.satisfies("@:6.0 %gcc@5.0:"): @@ -118,7 +118,7 @@ def flag_handler(self, name, flags): # ncurses@:6.0 uses dynamic exception specifications not allowed in c++17 if self.spec.satisfies("@:5"): if name == "cxxflags": - flags.append(self.spec["cxx"].package.standard_flag(language="cxx", standard="14")) + flags.append(self["cxx"].standard_flag(language="cxx", standard="14")) return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/nvhpc/package.py b/var/spack/repos/builtin/packages/nvhpc/package.py index 8e5624ac17f..e0f89bef8cb 100644 --- a/var/spack/repos/builtin/packages/nvhpc/package.py +++ b/var/spack/repos/builtin/packages/nvhpc/package.py @@ -521,11 +521,11 @@ def install(self, spec, prefix): makelocalrc_args = [ "-gcc", - spec["gcc"].package.cc, + self["gcc"].cc, "-gpp", - spec["gcc"].package.cxx, + self["gcc"].cxx, "-g77", - spec["gcc"].package.fortran, + self["gcc"].fortran, "-x", compilers_bin, ] diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py index 2c256e67811..52ce8b57559 100644 --- a/var/spack/repos/builtin/packages/openssl/package.py +++ b/var/spack/repos/builtin/packages/openssl/package.py @@ -156,7 +156,7 @@ def install(self, spec, prefix): if spec.satisfies("@1.0"): options.append("no-krb5") # clang does not support the .arch directive in assembly files. - if "clang" in self.spec["c"].package.cc and spec.target.family == "aarch64": + if "clang" in self["c"].cc and spec.target.family == "aarch64": options.append("no-asm") elif "%nvhpc" in spec: # Last tested on nvidia@22.3 for x86_64: diff --git a/var/spack/repos/builtin/packages/pdftk/package.py b/var/spack/repos/builtin/packages/pdftk/package.py index 7d9435ddd05..c82fa33a33e 100644 --- a/var/spack/repos/builtin/packages/pdftk/package.py +++ b/var/spack/repos/builtin/packages/pdftk/package.py @@ -49,7 +49,7 @@ def edit(self, spec, prefix): vars = [ ("VERSUFF", "-%s" % gcc_version), ("CXX", compiler.cxx), - ("GCJ", spec["eclipse-gcj-parser"].package.gcj), + ("GCJ", self["eclipse-gcj-parser"].gcj), ("GCJH", join_path(gcc_base, "bin", "gcjh")), ("GJAR", join_path(gcc_base, "bin", "gjar")), ("LIBGCJ", join_path(gcc_base, "share", "java", "libgcj-{0}.jar".format(gcc_version))), diff --git a/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py b/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py index d8c3022af99..671841689bb 100644 --- a/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py +++ b/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py @@ -67,9 +67,9 @@ def build_pl_args(self): def setup_build_environment(self, env): # These variables are exected by by the Build.PL file # even though we override the results via PERL_MB_OPT - kent = self.spec["kentutils"] - env.set("KENT_SRC", kent.prefix) - env.set("MACHTYPE", kent.package.machtype) + kent_pkg = self["kentutils"] + env.set("KENT_SRC", kent_pkg.prefix) + env.set("MACHTYPE", kent_pkg.machtype) # Overriding this explicitly as an environmental variable # as the Build.PL script doesn't honnor the command line diff --git a/var/spack/repos/builtin/packages/perl/package.py b/var/spack/repos/builtin/packages/perl/package.py index 6bdb66e0392..484d03485aa 100644 --- a/var/spack/repos/builtin/packages/perl/package.py +++ b/var/spack/repos/builtin/packages/perl/package.py @@ -337,7 +337,7 @@ def do_stage(self, mirror_only=False): def nmake_arguments(self): args = [] if self.spec.satisfies("%msvc"): - args.append("CCTYPE=%s" % self.spec["msvc"].package.short_msvc_version) + args.append("CCTYPE=%s" % self["msvc"].short_msvc_version) else: raise RuntimeError("Perl unsupported for non MSVC compilers on Windows") args.append("INST_TOP=%s" % windows_sfn(self.prefix.replace("/", "\\"))) @@ -384,7 +384,7 @@ def configure_args(self): # https://github.com/spack/spack/pull/3081 and # https://github.com/spack/spack/pull/4416 if spec.satisfies("%intel"): - config_args.append("-Accflags={0}".format(self.spec["cc"].package.pic_flag)) + config_args.append("-Accflags={0}".format(self["c"].pic_flag)) if "+shared" in spec: config_args.append("-Duseshrplib") @@ -546,7 +546,7 @@ def filter_config_dot_pm(self): "-MModule::Loaded", "-MConfig", "-e", "print is_loaded(Config)", output=str ) - c_compiler = self.spec["c"].package.cc + c_compiler = self["c"].cc with self.make_briefly_writable(config_dot_pm): match = "cc *=>.*" substitute = "cc => '{cc}',".format(cc=c_compiler) diff --git a/var/spack/repos/builtin/packages/plasma/package.py b/var/spack/repos/builtin/packages/plasma/package.py index eec32b08cce..ec9ec5a6e96 100644 --- a/var/spack/repos/builtin/packages/plasma/package.py +++ b/var/spack/repos/builtin/packages/plasma/package.py @@ -120,7 +120,7 @@ def cmake_args(self): options.append(self.define("{}_PROVIDER".format(lib), provider)) if "cray-libsci" in self.spec: for lib in ("CBLAS", "LAPACKE"): - libsci_prefix = self.spec["cray-libsci"].package.external_prefix + libsci_prefix = self["cray-libsci"].external_prefix options.append(self.define("{}_PROVIDER".format(lib), "generic")) options.append( self.define("{}_INCLUDE_DIRS".format(lib), join_path(libsci_prefix, "include")) diff --git a/var/spack/repos/builtin/packages/precice/package.py b/var/spack/repos/builtin/packages/precice/package.py index 2b9e8512111..6006af08704 100644 --- a/var/spack/repos/builtin/packages/precice/package.py +++ b/var/spack/repos/builtin/packages/precice/package.py @@ -194,7 +194,7 @@ def cmake_args(self): python_library = spec["python"].libs[0] python_include = spec["python"].headers.directories[0] numpy_include = join_path( - spec["py-numpy"].package.module.python_platlib, "numpy", "core", "include" + self["py-numpy"].module.python_platlib, "numpy", "core", "include" ) cmake_args.extend( [ diff --git a/var/spack/repos/builtin/packages/py-gpaw/package.py b/var/spack/repos/builtin/packages/py-gpaw/package.py index c5244573779..850337688e5 100644 --- a/var/spack/repos/builtin/packages/py-gpaw/package.py +++ b/var/spack/repos/builtin/packages/py-gpaw/package.py @@ -60,7 +60,7 @@ def patch(self): python_include = spec["python"].headers.directories[0] numpy_include = join_path( - spec["py-numpy"].package.module.python_platlib, "numpy", "core", "include" + self["py-numpy"].module.python_platlib, "numpy", "core", "include" ) libs = blas.libs + lapack.libs + libxc.libs diff --git a/var/spack/repos/builtin/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py index 03e1b5ffebb..ecba41029c7 100644 --- a/var/spack/repos/builtin/packages/py-scipy/package.py +++ b/var/spack/repos/builtin/packages/py-scipy/package.py @@ -264,11 +264,11 @@ def setup_build_environment(self, env): # Pick up BLAS/LAPACK from numpy if self.spec.satisfies("@:1.8"): - self.spec["py-numpy"].package.setup_build_environment(env) + self["py-numpy"].setup_build_environment(env) @when("@1.9:") def config_settings(self, spec, prefix): - blas, lapack = self.spec["py-numpy"].package.blas_lapack_pkg_config() + blas, lapack = self["py-numpy"].blas_lapack_pkg_config() if spec.satisfies("%aocc") or spec.satisfies("%clang@18:"): fortran_std = "none" @@ -286,10 +286,9 @@ def config_settings(self, spec, prefix): }, } - @when("@:1.8") - @run_before("install") + @run_before("install", when="@:1.8") def set_blas_lapack(self): - self.spec["py-numpy"].package.blas_lapack_site_cfg() + self["py-numpy"].blas_lapack_site_cfg() @run_after("install") @on_package_attributes(run_tests=True) diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index 1590806a84b..bed6499d8dd 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -586,7 +586,7 @@ def configure_args(self): config_args.append("--without-ensurepip") if "+pic" in spec: - cflags.append(self.spec["c"].package.pic_flag) + cflags.append(self["c"].pic_flag) if "+ssl" in spec: config_args.append("--with-openssl={0}".format(spec["openssl"].prefix)) @@ -704,9 +704,9 @@ def filter_compilers(self): filenames = [self.get_sysconfigdata_name(), self.config_vars["makefile_filename"]] - filter_file(spack_cc, self.spec["c"].package.cc, *filenames, **kwargs) + filter_file(spack_cc, self["c"].cc, *filenames, **kwargs) if spack_cxx: - filter_file(spack_cxx, self.spec["cxx"].package.cxx, *filenames, **kwargs) + filter_file(spack_cxx, self["cxx"].cxx, *filenames, **kwargs) @run_after("install") def symlink(self): diff --git a/var/spack/repos/builtin/packages/qgis/package.py b/var/spack/repos/builtin/packages/qgis/package.py index cbc87e63618..f49cc5249b0 100644 --- a/var/spack/repos/builtin/packages/qgis/package.py +++ b/var/spack/repos/builtin/packages/qgis/package.py @@ -198,7 +198,7 @@ class Qgis(CMakePackage): @run_before("cmake", when="^py-pyqt5") def fix_pyqt5_cmake(self): cmfile = FileFilter(join_path("cmake", "FindPyQt5.cmake")) - pyqtpath = join_path(self.spec["py-pyqt5"].package.module.python_platlib, "PyQt5") + pyqtpath = join_path(self["py-pyqt5"].module.python_platlib, "PyQt5") cmfile.filter( 'SET(PYQT5_MOD_DIR "${Python_SITEARCH}/PyQt5")', 'SET(PYQT5_MOD_DIR "' + pyqtpath + '")', diff --git a/var/spack/repos/builtin/packages/redis-ai/package.py b/var/spack/repos/builtin/packages/redis-ai/package.py index 9c34b582259..e5364c698ad 100644 --- a/var/spack/repos/builtin/packages/redis-ai/package.py +++ b/var/spack/repos/builtin/packages/redis-ai/package.py @@ -77,9 +77,7 @@ def with_torch(self): @property def torch_dir(self): return ( - join_path(self.spec["py-torch"].package.cmake_prefix_paths[0], "Torch") - if self.with_torch - else None + join_path(self["py-torch"].cmake_prefix_paths[0], "Torch") if self.with_torch else None ) @property diff --git a/var/spack/repos/builtin/packages/turbine/package.py b/var/spack/repos/builtin/packages/turbine/package.py index 7bf28e15a10..8bda89db0fe 100644 --- a/var/spack/repos/builtin/packages/turbine/package.py +++ b/var/spack/repos/builtin/packages/turbine/package.py @@ -63,7 +63,7 @@ def configure_args(self): ] if self.spec.satisfies("^intel-oneapi-mpi"): - args.append("--with-mpi=" + self.spec["intel-oneapi-mpi"].package.component_prefix) + args.append("--with-mpi=" + self["intel-oneapi-mpi"].component_prefix) else: args.append("--with-mpi=" + self.spec["mpi"].prefix) diff --git a/var/spack/repos/builtin/packages/zlib-ng/package.py b/var/spack/repos/builtin/packages/zlib-ng/package.py index ffd10edb706..c38897ebd55 100644 --- a/var/spack/repos/builtin/packages/zlib-ng/package.py +++ b/var/spack/repos/builtin/packages/zlib-ng/package.py @@ -71,7 +71,7 @@ def libs(self): def flag_handler(self, name, flags): if name == "cflags" and self.spec.satisfies("+pic build_system=autotools"): - flags.append(self.spec["c"].package.pic_flag) + flags.append(self["c"].pic_flag) return (flags, None, None)