From 2d9c6c32228f94e3e5595283b52ae7cc5a160e16 Mon Sep 17 00:00:00 2001 From: kwryankrattiger <80296582+kwryankrattiger@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:31:16 -0600 Subject: [PATCH] CMakePackage pass python hints automatically (#42201) This commit ensures that CMake packages that also have Python as a build/link dep get a couple defines for the Python path so that CMake's builtin `FindPython3`, `FindPython`, `FindPythonInterp` modules can locate Python correctly. The main problem with those CMake modules is that they first search for Python versions known at the time of release, meaning that old CMake maybe find older system Python 3.8 even though Python 3.11 comes first in `CMAKE_PREFIX_PATH` and `PATH`. Package maintainers can opt out of this by overriding the `find_python_hints = False` attribute in the package class. --- lib/spack/spack/build_systems/cmake.py | 42 ++++++++++++++++--- .../repos/builtin/packages/acts/package.py | 4 -- .../repos/builtin/packages/adios2/package.py | 4 -- .../repos/builtin/packages/bohrium/package.py | 2 - .../repos/builtin/packages/caliper/package.py | 1 - .../repos/builtin/packages/clingo/package.py | 18 -------- .../repos/builtin/packages/cvise/package.py | 3 -- .../repos/builtin/packages/dd4hep/package.py | 1 - .../repos/builtin/packages/dealii/package.py | 11 ----- .../repos/builtin/packages/doxygen/package.py | 9 ---- .../repos/builtin/packages/eccodes/package.py | 3 -- .../repos/builtin/packages/ecflow/package.py | 1 - .../builtin/packages/ecmwf-atlas/package.py | 1 - .../repos/builtin/packages/faiss/package.py | 3 -- .../repos/builtin/packages/fckit/package.py | 1 - .../repos/builtin/packages/flann/package.py | 4 -- .../repos/builtin/packages/gnina/package.py | 5 +-- .../builtin/packages/gnuradio/package.py | 5 +-- .../repos/builtin/packages/halide/package.py | 1 - .../repos/builtin/packages/henson/package.py | 7 +--- .../builtin/packages/hoomd-blue/package.py | 5 +-- .../repos/builtin/packages/lammps/package.py | 3 -- .../builtin/packages/libmolgrid/package.py | 7 +--- .../builtin/packages/libpressio/package.py | 1 - .../builtin/packages/llvm-doe/package.py | 7 ---- .../repos/builtin/packages/llvm/package.py | 7 ---- .../repos/builtin/packages/neuron/package.py | 3 -- .../repos/builtin/packages/nlopt/package.py | 8 +--- .../repos/builtin/packages/odgi/package.py | 6 +-- .../builtin/packages/omnitrace/package.py | 5 --- .../repos/builtin/packages/open3d/package.py | 7 +--- .../builtin/packages/openbabel/package.py | 8 +--- .../repos/builtin/packages/opencv/package.py | 1 + .../builtin/packages/openmolcas/package.py | 6 +-- .../builtin/packages/openpmd-api/package.py | 8 +--- .../packages/openspeedshop-utils/package.py | 33 ++++++--------- .../builtin/packages/openspeedshop/package.py | 34 ++++++--------- .../builtin/packages/openturns/package.py | 4 +- .../builtin/packages/openwsman/package.py | 1 - .../repos/builtin/packages/pagmo/package.py | 4 +- .../builtin/packages/paraview/package.py | 1 - .../repos/builtin/packages/pfunit/package.py | 1 - .../repos/builtin/packages/precice/package.py | 3 +- .../builtin/packages/py-pybind11/package.py | 5 +-- .../packages/py-pykokkos-base/package.py | 4 -- .../builtin/packages/py-tfdlpack/package.py | 9 +--- .../repos/builtin/packages/qmcpack/package.py | 1 - .../builtin/packages/rdma-core/package.py | 7 ---- .../repos/builtin/packages/root/package.py | 4 -- .../packages/scine-database/package.py | 5 +-- .../packages/scine-molassembler/package.py | 5 +-- .../builtin/packages/scine-readuct/package.py | 5 +-- .../packages/scine-serenity/package.py | 5 +-- .../builtin/packages/scine-sparrow/package.py | 5 +-- .../packages/scine-utilities/package.py | 6 +-- .../builtin/packages/scine-xtb/package.py | 5 +-- .../repos/builtin/packages/sensei/package.py | 32 +++++++------- .../builtin/packages/serenity/package.py | 5 +-- .../repos/builtin/packages/sollve/package.py | 1 - .../repos/builtin/packages/spectre/package.py | 1 - .../repos/builtin/packages/steps/package.py | 1 - .../builtin/packages/tasmanian/package.py | 5 --- .../builtin/packages/templight/package.py | 1 - .../repos/builtin/packages/tfel/package.py | 2 + .../builtin/packages/timemory/package.py | 5 --- .../builtin/packages/tiramisu/package.py | 5 +-- .../repos/builtin/packages/vdt/package.py | 5 +-- .../repos/builtin/packages/vtk/package.py | 2 - .../repos/builtin/packages/xcfun/package.py | 1 - .../repos/builtin/packages/xrootd/package.py | 7 +--- .../packages/xtensor-python/package.py | 8 ---- 71 files changed, 111 insertions(+), 325 deletions(-) diff --git a/lib/spack/spack/build_systems/cmake.py b/lib/spack/spack/build_systems/cmake.py index 73f88d4e8e1..a92cb1b6b5b 100644 --- a/lib/spack/spack/build_systems/cmake.py +++ b/lib/spack/spack/build_systems/cmake.py @@ -15,6 +15,7 @@ import spack.build_environment import spack.builder +import spack.deptypes as dt import spack.package_base from spack.directives import build_system, conflicts, depends_on, variant from spack.multimethod import when @@ -31,8 +32,30 @@ def _extract_primary_generator(generator): primary generator from the generator string which may contain an optional secondary generator. """ - primary_generator = _primary_generator_extractor.match(generator).group(1) - return primary_generator + return _primary_generator_extractor.match(generator).group(1) + + +def _maybe_set_python_hints(pkg: spack.package_base.PackageBase, args: List[str]) -> None: + """Set the PYTHON_EXECUTABLE, Python_EXECUTABLE, and Python3_EXECUTABLE CMake variables + if the package has Python as build or link dep and ``find_python_hints`` is set to True. See + ``find_python_hints`` for context.""" + if not getattr(pkg, "find_python_hints", False): + return + pythons = pkg.spec.dependencies("python", dt.BUILD | dt.LINK) + if len(pythons) != 1: + return + try: + python_executable = pythons[0].package.command.path + except RuntimeError: + return + + args.extend( + [ + CMakeBuilder.define("PYTHON_EXECUTABLE", python_executable), + CMakeBuilder.define("Python_EXECUTABLE", python_executable), + CMakeBuilder.define("Python3_EXECUTABLE", python_executable), + ] + ) def generator(*names: str, default: Optional[str] = None): @@ -86,6 +109,13 @@ class CMakePackage(spack.package_base.PackageBase): #: Legacy buildsystem attribute used to deserialize and install old specs legacy_buildsystem = "cmake" + #: When this package depends on Python and ``find_python_hints`` is set to True, pass the + #: defines {Python3,Python,PYTHON}_EXECUTABLE explicitly, so that CMake locates the right + #: Python in its builtin FindPython3, FindPython, and FindPythonInterp modules. Spack does + #: CMake's job because CMake's modules by default only search for Python versions known at the + #: time of release. + find_python_hints = True + build_system("cmake") with when("build_system=cmake"): @@ -241,9 +271,9 @@ def std_cmake_args(self): """Standard cmake arguments provided as a property for convenience of package writers """ - std_cmake_args = CMakeBuilder.std_args(self.pkg, generator=self.generator) - std_cmake_args += getattr(self.pkg, "cmake_flag_args", []) - return std_cmake_args + args = CMakeBuilder.std_args(self.pkg, generator=self.generator) + args += getattr(self.pkg, "cmake_flag_args", []) + return args @staticmethod def std_args(pkg, generator=None): @@ -288,6 +318,8 @@ def std_args(pkg, generator=None): [define("CMAKE_FIND_FRAMEWORK", "LAST"), define("CMAKE_FIND_APPBUNDLE", "LAST")] ) + _maybe_set_python_hints(pkg, args) + # Set up CMake rpath args.extend( [ diff --git a/var/spack/repos/builtin/packages/acts/package.py b/var/spack/repos/builtin/packages/acts/package.py index b3eef6dfa6c..a6226090871 100644 --- a/var/spack/repos/builtin/packages/acts/package.py +++ b/var/spack/repos/builtin/packages/acts/package.py @@ -458,10 +458,6 @@ def plugin_cmake_variant(plugin_name, spack_variant): if cuda_arch != "none": args.append(f"-DCUDA_FLAGS=-arch=sm_{cuda_arch[0]}") - if "+python" in spec: - python = spec["python"].command.path - args.append(f"-DPython_EXECUTABLE={python}") - args.append(self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd")) return args diff --git a/var/spack/repos/builtin/packages/adios2/package.py b/var/spack/repos/builtin/packages/adios2/package.py index b345f5e4c53..2f70cd0582c 100644 --- a/var/spack/repos/builtin/packages/adios2/package.py +++ b/var/spack/repos/builtin/packages/adios2/package.py @@ -292,10 +292,6 @@ def cmake_args(self): if "%fj" in spec: args.extend(["-DCMAKE_Fortran_SUBMODULE_EXT=.smod", "-DCMAKE_Fortran_SUBMODULE_SEP=."]) - if "+python" in spec or self.run_tests: - args.append(f"-DPYTHON_EXECUTABLE:FILEPATH={spec['python'].command.path}") - args.append(f"-DPython_EXECUTABLE:FILEPATH={spec['python'].command.path}") - # hip support if "+cuda" in spec: args.append(self.builder.define_cuda_architectures(self)) diff --git a/var/spack/repos/builtin/packages/bohrium/package.py b/var/spack/repos/builtin/packages/bohrium/package.py index ec77b886339..64ad8c100e0 100644 --- a/var/spack/repos/builtin/packages/bohrium/package.py +++ b/var/spack/repos/builtin/packages/bohrium/package.py @@ -119,8 +119,6 @@ def cmake_args(self): # different hosts. args = [ - # Choose a particular python version - "-DPYTHON_EXECUTABLE:FILEPATH=" + spec["python"].command.path, # # Hard-disable Jupyter, since this would override a config # file in the user's home directory in some cases during diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py index e66fa571460..f1ae9a92ccb 100644 --- a/var/spack/repos/builtin/packages/caliper/package.py +++ b/var/spack/repos/builtin/packages/caliper/package.py @@ -129,7 +129,6 @@ def cmake_args(self): spec = self.spec args = [ - ("-DPYTHON_EXECUTABLE=%s" % spec["python"].command.path), "-DBUILD_TESTING=Off", "-DBUILD_DOCS=Off", self.define_from_variant("BUILD_SHARED_LIBS", "shared"), diff --git a/var/spack/repos/builtin/packages/clingo/package.py b/var/spack/repos/builtin/packages/clingo/package.py index 46b3f5278b0..ac242c57cd3 100644 --- a/var/spack/repos/builtin/packages/clingo/package.py +++ b/var/spack/repos/builtin/packages/clingo/package.py @@ -91,22 +91,6 @@ def patch(self): "clasp/libpotassco/CMakeLists.txt", ) - @property - def cmake_python_hints(self): - """Return standard CMake defines to ensure that the - current spec is the one found by CMake find_package(Python, ...) - """ - python = self.spec["python"] - return [ - self.define("Python_EXECUTABLE", python.command.path), - self.define("Python_INCLUDE_DIR", python.headers.directories[0]), - self.define("Python_LIBRARIES", python.libs[0]), - # XCode command line tools on macOS has no python-config executable, and - # CMake assumes you have python 2 if it does not find a python-config, - # so we set the version explicitly so that it's passed to FindPython. - self.define("CLINGO_PYTHON_VERSION", python.version.up_to(2)), - ] - @property def cmake_py_shared(self): return self.define("CLINGO_BUILD_PY_SHARED", "ON") @@ -127,8 +111,6 @@ def cmake_args(self): "-DPYCLINGO_USE_INSTALL_PREFIX=ON", self.cmake_py_shared, ] - if self.spec["cmake"].satisfies("@3.16.0:"): - args += self.cmake_python_hints else: args += ["-DCLINGO_BUILD_WITH_PYTHON=OFF"] diff --git a/var/spack/repos/builtin/packages/cvise/package.py b/var/spack/repos/builtin/packages/cvise/package.py index 5a4e2f7b7e2..48def2cf00a 100644 --- a/var/spack/repos/builtin/packages/cvise/package.py +++ b/var/spack/repos/builtin/packages/cvise/package.py @@ -33,6 +33,3 @@ class Cvise(CMakePackage): depends_on("py-pytest", when="+pytest", type=("build", "run")) depends_on("colordiff", when="+colordiff", type=("build", "run")) - - def cmake_args(self): - return ["-DPYTHON_EXECUTABLE=" + self.spec["python"].command.path] diff --git a/var/spack/repos/builtin/packages/dd4hep/package.py b/var/spack/repos/builtin/packages/dd4hep/package.py index 0f6965fdb9c..d8b7d3549c8 100644 --- a/var/spack/repos/builtin/packages/dd4hep/package.py +++ b/var/spack/repos/builtin/packages/dd4hep/package.py @@ -232,7 +232,6 @@ def cmake_args(self): "-DBUILD_TESTING={0}".format(self.run_tests), "-DBOOST_ROOT={0}".format(spec["boost"].prefix), "-DBoost_NO_BOOST_CMAKE=ON", - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path), ] subpackages = [] if spec.satisfies("+ddg4"): diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py index ee181553a37..f9ec14adf3a 100644 --- a/var/spack/repos/builtin/packages/dealii/package.py +++ b/var/spack/repos/builtin/packages/dealii/package.py @@ -539,17 +539,6 @@ def cmake_args(self): # Python bindings if spec.satisfies("@8.5.0:"): options.append(self.define_from_variant("DEAL_II_COMPONENT_PYTHON_BINDINGS", "python")) - if "+python" in spec: - python_exe = spec["python"].command.path - python_library = spec["python"].libs[0] - python_include = spec["python"].headers.directories[0] - options.extend( - [ - self.define("PYTHON_EXECUTABLE", python_exe), - self.define("PYTHON_INCLUDE_DIR", python_include), - self.define("PYTHON_LIBRARY", python_library), - ] - ) # Simplex support (no longer experimental) if spec.satisfies("@9.3.0:9.4.0"): diff --git a/var/spack/repos/builtin/packages/doxygen/package.py b/var/spack/repos/builtin/packages/doxygen/package.py index b47a6f7aea1..e6c099cb57f 100644 --- a/var/spack/repos/builtin/packages/doxygen/package.py +++ b/var/spack/repos/builtin/packages/doxygen/package.py @@ -124,12 +124,3 @@ def patch(self): join_path("cmake", "FindIconv.cmake"), string=True, ) - - def cmake_args(self): - args = [ - # Doxygen's build system uses CMake's deprecated `FindPythonInterp`, - # which can get confused by other `python` executables in the PATH. - # See issue: https://github.com/spack/spack/issues/28215 - self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path) - ] - return args diff --git a/var/spack/repos/builtin/packages/eccodes/package.py b/var/spack/repos/builtin/packages/eccodes/package.py index 362d0de274e..66967690dbe 100644 --- a/var/spack/repos/builtin/packages/eccodes/package.py +++ b/var/spack/repos/builtin/packages/eccodes/package.py @@ -351,9 +351,6 @@ def cmake_args(self): # Prevent overriding by environment variables AEC_DIR and AEC_PATH: args.append(self.define("AEC_DIR", self.spec["libaec"].prefix)) - if "+memfs" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", python.path)) - return args @run_after("install") diff --git a/var/spack/repos/builtin/packages/ecflow/package.py b/var/spack/repos/builtin/packages/ecflow/package.py index 4ee103b983d..ea447d5f482 100644 --- a/var/spack/repos/builtin/packages/ecflow/package.py +++ b/var/spack/repos/builtin/packages/ecflow/package.py @@ -91,7 +91,6 @@ def cmake_args(self): self.define_from_variant("ENABLE_SSL", "ssl"), # https://jira.ecmwf.int/browse/SUP-2641#comment-208943 self.define_from_variant("ENABLE_STATIC_BOOST_LIBS", "static_boost"), - self.define("Python3_EXECUTABLE", spec["python"].package.command), self.define("BOOST_ROOT", spec["boost"].prefix), self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), ] diff --git a/var/spack/repos/builtin/packages/ecmwf-atlas/package.py b/var/spack/repos/builtin/packages/ecmwf-atlas/package.py index 25fe5e78f90..f1320c92660 100644 --- a/var/spack/repos/builtin/packages/ecmwf-atlas/package.py +++ b/var/spack/repos/builtin/packages/ecmwf-atlas/package.py @@ -73,7 +73,6 @@ def cmake_args(self): self.define_from_variant("ENABLE_TRANS", "trans"), self.define_from_variant("ENABLE_EIGEN", "eigen"), self.define_from_variant("ENABLE_FFTW", "fftw"), - "-DPYTHON_EXECUTABLE:FILEPATH=" + self.spec["python"].command.path, ] if "~shared" in self.spec: args.append("-DBUILD_SHARED_LIBS=OFF") diff --git a/var/spack/repos/builtin/packages/faiss/package.py b/var/spack/repos/builtin/packages/faiss/package.py index d67bc55544f..8f4b6acb69a 100644 --- a/var/spack/repos/builtin/packages/faiss/package.py +++ b/var/spack/repos/builtin/packages/faiss/package.py @@ -96,9 +96,6 @@ def cmake_args(self): self.define_from_variant("BUILD_TESTING", "tests"), self.define("FAISS_OPT_LEVEL", "generic"), ] - if "+python" in spec: - pyexe = spec["python"].command.path - args.append(self.define("Python_EXECUTABLE", pyexe)) if "+cuda" in spec: key = "CMAKE_CUDA_ARCHITECTURES" diff --git a/var/spack/repos/builtin/packages/fckit/package.py b/var/spack/repos/builtin/packages/fckit/package.py index 517fd302bde..5822e13344f 100644 --- a/var/spack/repos/builtin/packages/fckit/package.py +++ b/var/spack/repos/builtin/packages/fckit/package.py @@ -62,7 +62,6 @@ def cmake_args(self): args = [ self.define_from_variant("ENABLE_ECKIT", "eckit"), self.define_from_variant("ENABLE_OMP", "openmp"), - "-DPYTHON_EXECUTABLE:FILEPATH=" + self.spec["python"].command.path, "-DFYPP_NO_LINE_NUMBERING=ON", ] diff --git a/var/spack/repos/builtin/packages/flann/package.py b/var/spack/repos/builtin/packages/flann/package.py index e915599a39d..301d1d88f5d 100644 --- a/var/spack/repos/builtin/packages/flann/package.py +++ b/var/spack/repos/builtin/packages/flann/package.py @@ -123,8 +123,4 @@ def cmake_args(self): use_mpi = "ON" if "+mpi" in spec else "OFF" args.append("-DUSE_MPI:BOOL={0}".format(use_mpi)) - # Configure the proper python executable - if "+python" in spec: - args.append("-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/gnina/package.py b/var/spack/repos/builtin/packages/gnina/package.py index 5b9ae74c3e2..dcfa07c259e 100644 --- a/var/spack/repos/builtin/packages/gnina/package.py +++ b/var/spack/repos/builtin/packages/gnina/package.py @@ -70,10 +70,7 @@ class Gnina(CMakePackage, CudaPackage): depends_on("cudnn", when="+cudnn") def cmake_args(self): - args = [ - "-DBLAS=Open", # Use OpenBLAS instead of Atlas' BLAS - f"-DPYTHON_EXECUTABLE={self.spec['python'].command.path}", - ] + args = ["-DBLAS=Open"] # Use OpenBLAS instead of Atlas' BLAS if "+gninavis" in self.spec: args.append(f"-DRDKIT_INCLUDE_DIR={self.spec['rdkit'].prefix.include.rdkit}") diff --git a/var/spack/repos/builtin/packages/gnuradio/package.py b/var/spack/repos/builtin/packages/gnuradio/package.py index ddc2db56040..cb4f86c7a8e 100644 --- a/var/spack/repos/builtin/packages/gnuradio/package.py +++ b/var/spack/repos/builtin/packages/gnuradio/package.py @@ -61,10 +61,7 @@ class Gnuradio(CMakePackage): extends("python") def cmake_args(self): - args = [] - args.append("-DPYTHON_EXECUTABLE={0}".format(self.spec["python"].command.path)) - args.append("-DENABLE_INTERNAL_VOLK=OFF") - return args + return ["-DENABLE_INTERNAL_VOLK=OFF"] def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) diff --git a/var/spack/repos/builtin/packages/halide/package.py b/var/spack/repos/builtin/packages/halide/package.py index f9e95e67567..282fda87331 100644 --- a/var/spack/repos/builtin/packages/halide/package.py +++ b/var/spack/repos/builtin/packages/halide/package.py @@ -108,7 +108,6 @@ def cmake_args(self): if "+python" in spec: args += [ - self.define("Python3_EXECUTABLE", spec["python"].command.path), self.define("PYBIND11_USE_FETCHCONTENT", False), self.define("Halide_INSTALL_PYTHONDIR", python_platlib), ] diff --git a/var/spack/repos/builtin/packages/henson/package.py b/var/spack/repos/builtin/packages/henson/package.py index b347adc1208..d1be8ba2cd2 100644 --- a/var/spack/repos/builtin/packages/henson/package.py +++ b/var/spack/repos/builtin/packages/henson/package.py @@ -32,13 +32,8 @@ class Henson(CMakePackage): conflicts("^openmpi", when="+mpi-wrappers") def cmake_args(self): - args = [ + return [ self.define_from_variant("python", "python"), self.define_from_variant("mpi-wrappers", "mpi-wrappers"), self.define_from_variant("use_boost", "boost"), ] - - if self.spec.satisfies("+python"): - args += [self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)] - - return args diff --git a/var/spack/repos/builtin/packages/hoomd-blue/package.py b/var/spack/repos/builtin/packages/hoomd-blue/package.py index a69a8015262..54afb419c15 100644 --- a/var/spack/repos/builtin/packages/hoomd-blue/package.py +++ b/var/spack/repos/builtin/packages/hoomd-blue/package.py @@ -65,10 +65,7 @@ class HoomdBlue(CMakePackage): def cmake_args(self): spec = self.spec - cmake_args = [ - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path), - "-DCMAKE_INSTALL_PREFIX={0}".format(python_platlib), - ] + cmake_args = ["-DCMAKE_INSTALL_PREFIX={0}".format(python_platlib)] # MPI support if "+mpi" in spec: diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py index ca0df298e10..8588f5fdf60 100644 --- a/var/spack/repos/builtin/packages/lammps/package.py +++ b/var/spack/repos/builtin/packages/lammps/package.py @@ -860,9 +860,6 @@ def cmake_args(self): if "+rocm" in spec: args.append(self.define("CMAKE_CXX_COMPILER", spec["hip"].hipcc)) - if "+python" in spec: - args.append(self.define("Python_EXECUTABLE", spec["python"].command.path)) - return args def setup_build_environment(self, env): diff --git a/var/spack/repos/builtin/packages/libmolgrid/package.py b/var/spack/repos/builtin/packages/libmolgrid/package.py index 883231ec335..86bb4e7e0db 100644 --- a/var/spack/repos/builtin/packages/libmolgrid/package.py +++ b/var/spack/repos/builtin/packages/libmolgrid/package.py @@ -35,9 +35,4 @@ def cmake_args(self): ob_incl = os.path.join(self.spec["openbabel"].prefix.include, "openbabel3") ob_libs = self.spec["openbabel"].libs.joined(";") - args = [ - "-DOPENBABEL3_INCLUDE_DIR=" + ob_incl, - "-DOPENBABEL3_LIBRARIES=" + ob_libs, - f"-DPYTHON_EXECUTABLE={self.spec['python'].command.path}", - ] - return args + return ["-DOPENBABEL3_INCLUDE_DIR=" + ob_incl, "-DOPENBABEL3_LIBRARIES=" + ob_libs] diff --git a/var/spack/repos/builtin/packages/libpressio/package.py b/var/spack/repos/builtin/packages/libpressio/package.py index f020cb3800b..f1828bcf51c 100644 --- a/var/spack/repos/builtin/packages/libpressio/package.py +++ b/var/spack/repos/builtin/packages/libpressio/package.py @@ -278,7 +278,6 @@ def cmake_args(self): if "+python" in self.spec: args.append("-DLIBPRESSIO_PYTHON_SITELIB={0}".format(python_platlib)) args.append("-DBUILD_PYTHON_WRAPPER=ON") - args.append("-DPython3_EXECUTABLE={0}".format(self.spec["python"].command)) if "+mpi" in self.spec: args.append("-DLIBPRESSIO_HAS_MPI4PY=ON") if "+hdf5" in self.spec: diff --git a/var/spack/repos/builtin/packages/llvm-doe/package.py b/var/spack/repos/builtin/packages/llvm-doe/package.py index 90faf6e135a..8402e0c7434 100644 --- a/var/spack/repos/builtin/packages/llvm-doe/package.py +++ b/var/spack/repos/builtin/packages/llvm-doe/package.py @@ -405,13 +405,11 @@ def cmake_args(self): define = self.define from_variant = self.define_from_variant - python = spec["python"] cmake_args = [ define("LLVM_REQUIRES_RTTI", True), define("LLVM_ENABLE_RTTI", True), define("LLVM_ENABLE_EH", True), define("CLANG_DEFAULT_OPENMP_RUNTIME", "libomp"), - define("PYTHON_EXECUTABLE", python.command.path), define("LIBOMP_USE_HWLOC", True), define("LIBOMP_HWLOC_INSTALL_DIR", spec["hwloc"].prefix), ] @@ -420,11 +418,6 @@ def cmake_args(self): if version_suffix != "none": cmake_args.append(define("LLVM_VERSION_SUFFIX", version_suffix)) - if python.version >= Version("3"): - cmake_args.append(define("Python3_EXECUTABLE", python.command.path)) - else: - cmake_args.append(define("Python2_EXECUTABLE", python.command.path)) - projects = [] runtimes = [] diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py index f32e3494e43..c19792be4ca 100644 --- a/var/spack/repos/builtin/packages/llvm/package.py +++ b/var/spack/repos/builtin/packages/llvm/package.py @@ -781,13 +781,11 @@ def cmake_args(self): define = self.define from_variant = self.define_from_variant - python = spec["python"] cmake_args = [ define("LLVM_REQUIRES_RTTI", True), define("LLVM_ENABLE_RTTI", True), define("LLVM_ENABLE_LIBXML2", False), define("CLANG_DEFAULT_OPENMP_RUNTIME", "libomp"), - define("PYTHON_EXECUTABLE", python.command.path), define("LIBOMP_USE_HWLOC", True), define("LIBOMP_HWLOC_INSTALL_DIR", spec["hwloc"].prefix), from_variant("LLVM_ENABLE_ZSTD", "zstd"), @@ -811,11 +809,6 @@ def cmake_args(self): if shlib_symbol_version is not None and shlib_symbol_version.value != "none": cmake_args.append(define("LLVM_SHLIB_SYMBOL_VERSION", shlib_symbol_version.value)) - if python.version >= Version("3"): - cmake_args.append(define("Python3_EXECUTABLE", python.command.path)) - else: - cmake_args.append(define("Python2_EXECUTABLE", python.command.path)) - projects = [] runtimes = [] diff --git a/var/spack/repos/builtin/packages/neuron/package.py b/var/spack/repos/builtin/packages/neuron/package.py index aa3b0c76d53..edad5ec9943 100644 --- a/var/spack/repos/builtin/packages/neuron/package.py +++ b/var/spack/repos/builtin/packages/neuron/package.py @@ -86,9 +86,6 @@ def cmake_options(spec_options): if "~mpi" in spec and "+coreneuron" in spec: args.append("-DCORENRN_ENABLE_MPI=OFF") - if "+python" in spec: - args.append("-DPYTHON_EXECUTABLE:FILEPATH=" + spec["python"].command.path) - if spec.variants["build_type"].value == "Debug": args.append("-DCMAKE_C_FLAGS=-g -O0") args.append("-DCMAKE_CXX_FLAGS=-g -O0") diff --git a/var/spack/repos/builtin/packages/nlopt/package.py b/var/spack/repos/builtin/packages/nlopt/package.py index b4aa99199dc..cf49d5e26e6 100644 --- a/var/spack/repos/builtin/packages/nlopt/package.py +++ b/var/spack/repos/builtin/packages/nlopt/package.py @@ -53,16 +53,12 @@ def cmake_args(self): # Specify on command line to alter defaults: # eg: spack install nlopt@master +guile -octave +cxx - # Spack should locate python by default - but to point to a build - if "+python" in spec: - args.append("-DPYTHON_EXECUTABLE=%s" % spec["python"].command.path) - # On is default - if "-shared" in spec: + if "~shared" in spec: args.append("-DBUILD_SHARED_LIBS:Bool=OFF") # On is default - if "-octave" in spec: + if "~octave" in spec: args.append("-DNLOPT_OCTAVE:Bool=OFF") if "+cxx" in spec: diff --git a/var/spack/repos/builtin/packages/odgi/package.py b/var/spack/repos/builtin/packages/odgi/package.py index 0f4177d3151..0c4b9ea2ff3 100644 --- a/var/spack/repos/builtin/packages/odgi/package.py +++ b/var/spack/repos/builtin/packages/odgi/package.py @@ -41,8 +41,4 @@ class Odgi(CMakePackage): # >>> Dependencies list ends here def cmake_args(self): - args = [ - "-DCMAKE_CXX_STANDARD_REQUIRED:BOOL=ON", - "-DPYTHON_EXECUTABLE:FILEPATH={0}".format(self.spec["python"].command), - ] - return args + return ["-DCMAKE_CXX_STANDARD_REQUIRED:BOOL=ON"] diff --git a/var/spack/repos/builtin/packages/omnitrace/package.py b/var/spack/repos/builtin/packages/omnitrace/package.py index c23ffc755e0..bc3ed317588 100644 --- a/var/spack/repos/builtin/packages/omnitrace/package.py +++ b/var/spack/repos/builtin/packages/omnitrace/package.py @@ -126,11 +126,6 @@ def cmake_args(self): tau_root = spec["tau"].prefix args.append(self.define("TAU_ROOT_DIR", tau_root)) - if "+python" in spec: - pyexe = spec["python"].command.path - args.append(self.define("PYTHON_EXECUTABLE", pyexe)) - args.append(self.define("Python3_EXECUTABLE", pyexe)) - if "+mpi" in spec: args.append(self.define("MPI_C_COMPILER", spec["mpi"].mpicc)) args.append(self.define("MPI_CXX_COMPILER", spec["mpi"].mpicxx)) diff --git a/var/spack/repos/builtin/packages/open3d/package.py b/var/spack/repos/builtin/packages/open3d/package.py index 85fea1a1814..2a63de25cae 100644 --- a/var/spack/repos/builtin/packages/open3d/package.py +++ b/var/spack/repos/builtin/packages/open3d/package.py @@ -70,7 +70,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("BUILD_UNIT_TESTS", self.run_tests), self.define_from_variant("BUILD_PYTHON_MODULE", "python"), self.define_from_variant("BUILD_CUDA_MODULE", "cuda"), @@ -95,11 +95,6 @@ def cmake_args(self): # self.define('USE_SYSTEM_TINYOBJLOADER', True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - - return args - def check(self): with working_dir(self.build_directory): tests = Executable(os.path.join("bin", "tests")) diff --git a/var/spack/repos/builtin/packages/openbabel/package.py b/var/spack/repos/builtin/packages/openbabel/package.py index 346367cc155..65cff9e35c4 100644 --- a/var/spack/repos/builtin/packages/openbabel/package.py +++ b/var/spack/repos/builtin/packages/openbabel/package.py @@ -63,13 +63,7 @@ def cmake_args(self): args = [] if "+python" in spec: - args.extend( - [ - "-DPYTHON_BINDINGS=ON", - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path), - "-DRUN_SWIG=ON", - ] - ) + args.extend(["-DPYTHON_BINDINGS=ON", "-DRUN_SWIG=ON"]) else: args.append("-DPYTHON_BINDINGS=OFF") diff --git a/var/spack/repos/builtin/packages/opencv/package.py b/var/spack/repos/builtin/packages/opencv/package.py index 1f23970a7b2..8e3f3236bb7 100644 --- a/var/spack/repos/builtin/packages/opencv/package.py +++ b/var/spack/repos/builtin/packages/opencv/package.py @@ -15,6 +15,7 @@ class Opencv(CMakePackage, CudaPackage): homepage = "https://opencv.org/" url = "https://github.com/opencv/opencv/archive/4.5.0.tar.gz" git = "https://github.com/opencv/opencv.git" + find_python_hints = False # opencv uses custom OpenCVDetectPython.cmake maintainers("bvanessen", "adamjstewart") diff --git a/var/spack/repos/builtin/packages/openmolcas/package.py b/var/spack/repos/builtin/packages/openmolcas/package.py index 7d53000ab7a..c3a59df79de 100644 --- a/var/spack/repos/builtin/packages/openmolcas/package.py +++ b/var/spack/repos/builtin/packages/openmolcas/package.py @@ -44,11 +44,7 @@ def setup_run_environment(self, env): env.append_path("PATH", self.prefix) def cmake_args(self): - args = [ - "-DLINALG=OpenBLAS", - "-DOPENBLASROOT=%s" % self.spec["openblas"].prefix, - "-DPYTHON_EXECUTABLE=%s" % self.spec["python"].command.path, - ] + args = ["-DLINALG=OpenBLAS", "-DOPENBLASROOT=%s" % self.spec["openblas"].prefix] if "+mpi" in self.spec: mpi_args = [ "-DMPI=ON", diff --git a/var/spack/repos/builtin/packages/openpmd-api/package.py b/var/spack/repos/builtin/packages/openpmd-api/package.py index 694b785094a..b114ed8efeb 100644 --- a/var/spack/repos/builtin/packages/openpmd-api/package.py +++ b/var/spack/repos/builtin/packages/openpmd-api/package.py @@ -123,13 +123,7 @@ def cmake_args(self): # switch internally shipped third-party libraries for spack if spec.satisfies("+python"): - py_exe_define = ( - "Python_EXECUTABLE" if spec.version >= Version("0.13.0") else "PYTHON_EXECUTABLE" - ) - args += [ - self.define(py_exe_define, self.spec["python"].command.path), - self.define("openPMD_USE_INTERNAL_PYBIND11", False), - ] + args.append(self.define("openPMD_USE_INTERNAL_PYBIND11", False)) args.append(self.define("openPMD_USE_INTERNAL_JSON", False)) if spec.satisfies("@:0.14"): # pre C++17 releases diff --git a/var/spack/repos/builtin/packages/openspeedshop-utils/package.py b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py index 8df48bf4959..7fa3e646e3f 100644 --- a/var/spack/repos/builtin/packages/openspeedshop-utils/package.py +++ b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py @@ -236,26 +236,19 @@ def set_defaultbase_cmake_options(self, spec, cmake_options): # Appends to cmake_options the options that will enable # the appropriate base level options to the openspeedshop # cmake build. - python_exe = spec["python"].command.path - python_library = spec["python"].libs[0] - python_include = spec["python"].headers.directories[0] - - base_options = [] - - base_options.append("-DBINUTILS_DIR=%s" % spec["binutils"].prefix) - base_options.append("-DLIBELF_DIR=%s" % spec["elfutils"].prefix) - base_options.append("-DLIBDWARF_DIR=%s" % spec["libdwarf"].prefix) - base_options.append("-DPYTHON_EXECUTABLE=%s" % python_exe) - base_options.append("-DPYTHON_INCLUDE_DIR=%s" % python_include) - base_options.append("-DPYTHON_LIBRARY=%s" % python_library) - base_options.append("-DBoost_NO_SYSTEM_PATHS=TRUE") - base_options.append("-DBoost_NO_BOOST_CMAKE=TRUE") - base_options.append("-DBOOST_ROOT=%s" % spec["boost"].prefix) - base_options.append("-DBoost_DIR=%s" % spec["boost"].prefix) - base_options.append("-DBOOST_LIBRARYDIR=%s" % spec["boost"].prefix.lib) - base_options.append("-DDYNINST_DIR=%s" % spec["dyninst"].prefix) - - cmake_options.extend(base_options) + cmake_options.extend( + [ + self.define("BINUTILS_DIR", spec["binutils"].prefix), + self.define("LIBELF_DIR", spec["elfutils"].prefix), + self.define("LIBDWARF_DIR", spec["libdwarf"].prefix), + self.define("Boost_NO_SYSTEM_PATHS", True), + self.define("Boost_NO_BOOST_CMAKE", True), + self.define("BOOST_ROOT", spec["boost"].prefix), + self.define("Boost_DIR", spec["boost"].prefix), + self.define("BOOST_LIBRARYDIR", spec["boost"].prefix.lib), + self.define("DYNINST_DIR", spec["dyninst"].prefix), + ] + ) def set_mpi_cmake_options(self, spec, cmake_options): # Appends to cmake_options the options that will enable diff --git a/var/spack/repos/builtin/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py index 101cf783b6e..5ef937a0f8e 100644 --- a/var/spack/repos/builtin/packages/openspeedshop/package.py +++ b/var/spack/repos/builtin/packages/openspeedshop/package.py @@ -254,27 +254,19 @@ def set_defaultbase_cmake_options(self, spec, cmake_options): # Appends to cmake_options the options that will enable # the appropriate base level options to the openspeedshop # cmake build. - python_exe = spec["python"].command.path - python_library = spec["python"].libs[0] - python_include = spec["python"].headers.directories[0] - true_value = "TRUE" - - base_options = [] - - base_options.append("-DBINUTILS_DIR=%s" % spec["binutils"].prefix) - base_options.append("-DLIBELF_DIR=%s" % spec["elfutils"].prefix) - base_options.append("-DLIBDWARF_DIR=%s" % spec["libdwarf"].prefix) - base_options.append("-DPYTHON_EXECUTABLE=%s" % python_exe) - base_options.append("-DPYTHON_INCLUDE_DIR=%s" % python_include) - base_options.append("-DPYTHON_LIBRARY=%s" % python_library) - base_options.append("-DBoost_NO_SYSTEM_PATHS=%s" % true_value) - base_options.append("-DBoost_NO_BOOST_CMAKE=%s" % true_value) - base_options.append("-DBOOST_ROOT=%s" % spec["boost"].prefix) - base_options.append("-DBoost_DIR=%s" % spec["boost"].prefix) - base_options.append("-DBOOST_LIBRARYDIR=%s" % spec["boost"].prefix.lib) - base_options.append("-DDYNINST_DIR=%s" % spec["dyninst"].prefix) - - cmake_options.extend(base_options) + cmake_options.extend( + [ + self.define("BINUTILS_DIR", spec["binutils"].prefix), + self.define("LIBELF_DIR", spec["elfutils"].prefix), + self.define("LIBDWARF_DIR", spec["libdwarf"].prefix), + self.define("Boost_NO_SYSTEM_PATHS", True), + self.define("Boost_NO_BOOST_CMAKE", True), + self.define("BOOST_ROOT", spec["boost"].prefix), + self.define("Boost_DIR", spec["boost"].prefix), + self.define("BOOST_LIBRARYDIR", spec["boost"].prefix.lib), + self.define("DYNINST_DIR", spec["dyninst"].prefix), + ] + ) def set_mpi_cmake_options(self, spec, cmake_options): # Appends to cmake_options the options that will enable diff --git a/var/spack/repos/builtin/packages/openturns/package.py b/var/spack/repos/builtin/packages/openturns/package.py index a40462c9cc1..d5e0d5d1a29 100644 --- a/var/spack/repos/builtin/packages/openturns/package.py +++ b/var/spack/repos/builtin/packages/openturns/package.py @@ -59,10 +59,8 @@ def cmake_args(self): if "+python" in spec: args.extend( [ - # By default picks up the system python not the Spack build - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path), # By default installs to the python prefix - "-DPYTHON_SITE_PACKAGES={0}".format(python_platlib), + "-DPYTHON_SITE_PACKAGES={0}".format(python_platlib) ] ) diff --git a/var/spack/repos/builtin/packages/openwsman/package.py b/var/spack/repos/builtin/packages/openwsman/package.py index c6ec676f389..4be921bad99 100644 --- a/var/spack/repos/builtin/packages/openwsman/package.py +++ b/var/spack/repos/builtin/packages/openwsman/package.py @@ -55,7 +55,6 @@ def cmake_args(self): arg.extend([define("BUILD_PYTHON", False), define("BUILD_PYTHON3", True)]) else: arg.extend([define("BUILD_PYTHON", True), define("BUILD_PYTHON3", False)]) - arg.append(define("PYTHON_EXECUTABLE", spec["python"].command.path)) else: arg.extend([define("BUILD_PYTHON", False), define("BUILD_PYTHON3", False)]) return arg diff --git a/var/spack/repos/builtin/packages/pagmo/package.py b/var/spack/repos/builtin/packages/pagmo/package.py index 05baf7bbf57..0a7538d2e34 100644 --- a/var/spack/repos/builtin/packages/pagmo/package.py +++ b/var/spack/repos/builtin/packages/pagmo/package.py @@ -99,10 +99,8 @@ def cmake_args(self): if "+python" in spec: args.extend( [ - # By default picks up the system python not the Spack build - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path), # By default installs to the python prefix not the pagmo prefix - "-DPYTHON_MODULES_DIR={0}".format(python_platlib), + "-DPYTHON_MODULES_DIR={0}".format(python_platlib) ] ) diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py index 85694e5e2ff..5d87021f04b 100644 --- a/var/spack/repos/builtin/packages/paraview/package.py +++ b/var/spack/repos/builtin/packages/paraview/package.py @@ -537,7 +537,6 @@ def use_x11(): cmake_args.extend( [ "-DPARAVIEW_%s_PYTHON:BOOL=ON" % py_use_opt, - "-DPYTHON_EXECUTABLE:FILEPATH=%s" % spec["python"].command.path, "-D%s_PYTHON_VERSION:STRING=%d" % (py_ver_opt, py_ver_val), ] ) diff --git a/var/spack/repos/builtin/packages/pfunit/package.py b/var/spack/repos/builtin/packages/pfunit/package.py index ac19168b500..671ae7ca019 100644 --- a/var/spack/repos/builtin/packages/pfunit/package.py +++ b/var/spack/repos/builtin/packages/pfunit/package.py @@ -152,7 +152,6 @@ def url_for_version(self, version): def cmake_args(self): spec = self.spec args = [ - self.define("Python_EXECUTABLE", spec["python"].command), self.define("BUILD_SHARED_LIBS", False), self.define("CMAKE_Fortran_MODULE_DIRECTORY", spec.prefix.include), self.define_from_variant("ENABLE_BUILD_DOXYGEN", "docs"), diff --git a/var/spack/repos/builtin/packages/precice/package.py b/var/spack/repos/builtin/packages/precice/package.py index 185a0a9d726..943a2f088d1 100644 --- a/var/spack/repos/builtin/packages/precice/package.py +++ b/var/spack/repos/builtin/packages/precice/package.py @@ -172,7 +172,8 @@ def cmake_args(self): cmake_args.extend(["-DPETSC_DIR=%s" % spec["petsc"].prefix, "-DPETSC_ARCH=."]) # Python - if "+python" in spec: + if "@:2.3 +python" in spec: + # 2.4.0 and higher use find_package(Python3). python_library = spec["python"].libs[0] python_include = spec["python"].headers.directories[0] numpy_include = join_path( diff --git a/var/spack/repos/builtin/packages/py-pybind11/package.py b/var/spack/repos/builtin/packages/py-pybind11/package.py index 9aceb4b02a7..b4baeeb0355 100644 --- a/var/spack/repos/builtin/packages/py-pybind11/package.py +++ b/var/spack/repos/builtin/packages/py-pybind11/package.py @@ -84,10 +84,7 @@ def patch(self): class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): def cmake_args(self): - return [ - self.define("PYTHON_EXECUTABLE:FILEPATH", self.spec["python"].command.path), - self.define("PYBIND11_TEST", self.pkg.run_tests), - ] + return [self.define("PYBIND11_TEST", self.pkg.run_tests)] def install(self, pkg, spec, prefix): super().install(pkg, spec, prefix) diff --git a/var/spack/repos/builtin/packages/py-pykokkos-base/package.py b/var/spack/repos/builtin/packages/py-pykokkos-base/package.py index 381a1fd1112..6bf307a58ee 100644 --- a/var/spack/repos/builtin/packages/py-pykokkos-base/package.py +++ b/var/spack/repos/builtin/packages/py-pykokkos-base/package.py @@ -44,13 +44,9 @@ class PyPykokkosBase(CMakePackage, PythonExtension): depends_on("python@3:", type=("build", "run")) def cmake_args(self): - spec = self.spec - args = [ self.define("ENABLE_INTERNAL_KOKKOS", False), self.define("ENABLE_INTERNAL_PYBIND11", False), - self.define("PYTHON_EXECUTABLE", spec["python"].command.path), - self.define("Python3_EXECUTABLE", spec["python"].command.path), self.define_from_variant("ENABLE_VIEW_RANKS", "view_ranks"), ] diff --git a/var/spack/repos/builtin/packages/py-tfdlpack/package.py b/var/spack/repos/builtin/packages/py-tfdlpack/package.py index 32612e56f6a..ac747b3f36a 100644 --- a/var/spack/repos/builtin/packages/py-tfdlpack/package.py +++ b/var/spack/repos/builtin/packages/py-tfdlpack/package.py @@ -33,14 +33,7 @@ class PyTfdlpack(CMakePackage, PythonExtension): depends_on("py-tensorflow", type=("build", "run")) def cmake_args(self): - args = ["-DPYTHON_EXECUTABLE=" + self.spec["python"].command.path] - - if "+cuda" in self.spec: - args.append("-DUSE_CUDA=ON") - else: - args.append("-DUSE_CUDA=OFF") - - return args + return [self.define_from_variant("USE_CUDA", "cuda")] def install(self, spec, prefix): with working_dir("python"): diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py index 70077558f49..33e1580946f 100644 --- a/var/spack/repos/builtin/packages/qmcpack/package.py +++ b/var/spack/repos/builtin/packages/qmcpack/package.py @@ -391,7 +391,6 @@ def cmake_args(self): else: args.append("-DBUILD_PPCONVERT=0") - args.append(self.define("Python3_EXECUTABLE", self.spec["python"].command.path)) return args # QMCPACK needs custom install method for the following reason: diff --git a/var/spack/repos/builtin/packages/rdma-core/package.py b/var/spack/repos/builtin/packages/rdma-core/package.py index 6d2dbfbbc29..8c2998e5da0 100644 --- a/var/spack/repos/builtin/packages/rdma-core/package.py +++ b/var/spack/repos/builtin/packages/rdma-core/package.py @@ -107,11 +107,4 @@ def cmake_args(self): if self.spec.satisfies("~man_pages"): cmake_args.append("-DNO_MAN_PAGES=1") - if self.spec.satisfies("@:39.0"): - cmake_args.extend( - [ - self.define("PYTHON_LIBRARY", self.spec["python"].libs[0]), - self.define("PYTHON_INCLUDE_DIR", self.spec["python"].headers.directories[0]), - ] - ) return cmake_args diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py index 54ea8a1ef92..bbd29cc2c42 100644 --- a/var/spack/repos/builtin/packages/root/package.py +++ b/var/spack/repos/builtin/packages/root/package.py @@ -511,7 +511,6 @@ def _add_variant(variants, features, featurename, variantname): return " ".join(v) def cmake_args(self): - spec = self.spec define = self.define define_from_variant = self.define_from_variant options = [] @@ -694,9 +693,6 @@ def cmake_args(self): ftgl_prefix = self.spec["ftgl"].prefix options.append(define("FTGL_ROOT_DIR", ftgl_prefix)) options.append(define("FTGL_INCLUDE_DIR", ftgl_prefix.include)) - if "+python" in self.spec: - # See https://github.com/spack/spack/pull/11579 - options.append(define("PYTHON_EXECUTABLE", spec["python"].command.path)) return options diff --git a/var/spack/repos/builtin/packages/scine-database/package.py b/var/spack/repos/builtin/packages/scine-database/package.py index b66da59a26d..7efd86781b0 100644 --- a/var/spack/repos/builtin/packages/scine-database/package.py +++ b/var/spack/repos/builtin/packages/scine-database/package.py @@ -51,11 +51,8 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec), self.define("SCINE_MARCH", ""), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/scine-molassembler/package.py b/var/spack/repos/builtin/packages/scine-molassembler/package.py index 79a8b17ac03..6c1bc876637 100644 --- a/var/spack/repos/builtin/packages/scine-molassembler/package.py +++ b/var/spack/repos/builtin/packages/scine-molassembler/package.py @@ -84,7 +84,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("BUILD_SHARED_LIBS", True), self.define("SCINE_BUILD_TESTS", self.run_tests), self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec), @@ -95,6 +95,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/scine-readuct/package.py b/var/spack/repos/builtin/packages/scine-readuct/package.py index 1844037743a..f00bc645e48 100644 --- a/var/spack/repos/builtin/packages/scine-readuct/package.py +++ b/var/spack/repos/builtin/packages/scine-readuct/package.py @@ -54,7 +54,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec), self.define("SCINE_MARCH", ""), @@ -64,6 +64,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/scine-serenity/package.py b/var/spack/repos/builtin/packages/scine-serenity/package.py index ca2924b2c0f..7dd6d8dd396 100644 --- a/var/spack/repos/builtin/packages/scine-serenity/package.py +++ b/var/spack/repos/builtin/packages/scine-serenity/package.py @@ -57,7 +57,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define_from_variant("SCINE_BUILD_PYTHON_BINDINGS", "python"), self.define("SCINE_MARCH", ""), @@ -69,6 +69,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/scine-sparrow/package.py b/var/spack/repos/builtin/packages/scine-sparrow/package.py index 0d8fbf855b6..44d1ccf84a8 100644 --- a/var/spack/repos/builtin/packages/scine-sparrow/package.py +++ b/var/spack/repos/builtin/packages/scine-sparrow/package.py @@ -76,7 +76,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec), self.define("SCINE_MARCH", ""), @@ -86,9 +86,6 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args # Adapted from ddd in MacPorts: cmake will build the executable # "sparrow" right next to the copy of the source directory "Sparrow". diff --git a/var/spack/repos/builtin/packages/scine-utilities/package.py b/var/spack/repos/builtin/packages/scine-utilities/package.py index 4f65702afbe..3dcf0fb2a9e 100644 --- a/var/spack/repos/builtin/packages/scine-utilities/package.py +++ b/var/spack/repos/builtin/packages/scine-utilities/package.py @@ -67,7 +67,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define_from_variant("SCINE_BUILD_PYTHON_BINDINGS", "python"), self.define("SCINE_MARCH", ""), @@ -77,7 +77,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - - return args diff --git a/var/spack/repos/builtin/packages/scine-xtb/package.py b/var/spack/repos/builtin/packages/scine-xtb/package.py index f06bc13003b..9cd7dca1827 100644 --- a/var/spack/repos/builtin/packages/scine-xtb/package.py +++ b/var/spack/repos/builtin/packages/scine-xtb/package.py @@ -52,7 +52,7 @@ def patch(self): os.rename("_dev", "dev") def cmake_args(self): - args = [ + return [ self.define("SCINE_BUILD_TESTS", self.run_tests), self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec), self.define("SCINE_MARCH", ""), @@ -62,6 +62,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/sensei/package.py b/var/spack/repos/builtin/packages/sensei/package.py index 7f79d7df113..96e4dd4393c 100644 --- a/var/spack/repos/builtin/packages/sensei/package.py +++ b/var/spack/repos/builtin/packages/sensei/package.py @@ -116,27 +116,30 @@ class Sensei(CMakePackage): def cmake_args(self): spec = self.spec + prefix = "" + if spec.satisfies("@5:"): + prefix = "SENSEI_" # -Ox flags are set by default in CMake based on the build type args = [ self.define_from_variant("BUILD_SHARED_LIBS", "shared"), self.define("SENSEI_USE_EXTERNAL_pugixml", True), - self.define("ENABLE_SENSEI", True), + self.define(f"{prefix}ENABLE_SENSEI", True), self.define("MPI_C_COMPILER", spec["mpi"].mpicc), self.define("MPI_CXX_COMPILER", spec["mpi"].mpicxx), # Don"t rely on MPI found in cray environment for cray systems. # On non-cray systems this should be a no-op - self.define("ENABLE_CRAY_MPICH", False), - self.define_from_variant("ENABLE_ASCENT", "ascent"), - self.define_from_variant("ENABLE_VTKM", "vtkm"), - self.define_from_variant("ENABLE_CATALYST", "catalyst"), - self.define_from_variant("ENABLE_LIBSIM", "libsim"), - self.define_from_variant("ENABLE_VTK_IO", "vtkio"), - self.define_from_variant("ENABLE_PYTHON", "python"), - self.define_from_variant("ENABLE_ADIOS2", "adios2"), - self.define_from_variant("ENABLE_HDF5", "hdf5"), - self.define_from_variant("ENABLE_PARALLEL3D", "miniapps"), - self.define_from_variant("ENABLE_OSCILLATORS", "miniapps"), + self.define(f"{prefix}ENABLE_CRAY_MPICH", False), + self.define_from_variant(f"{prefix}ENABLE_ASCENT", "ascent"), + self.define_from_variant(f"{prefix}ENABLE_VTKM", "vtkm"), + self.define_from_variant(f"{prefix}ENABLE_CATALYST", "catalyst"), + self.define_from_variant(f"{prefix}ENABLE_LIBSIM", "libsim"), + self.define_from_variant(f"{prefix}ENABLE_VTK_IO", "vtkio"), + self.define_from_variant(f"{prefix}ENABLE_PYTHON", "python"), + self.define_from_variant(f"{prefix}ENABLE_ADIOS2", "adios2"), + self.define_from_variant(f"{prefix}ENABLE_HDF5", "hdf5"), + self.define_from_variant(f"{prefix}ENABLE_PARALLEL3D", "miniapps"), + self.define_from_variant(f"{prefix}ENABLE_OSCILLATORS", "miniapps"), ] if "+adios2" in spec: @@ -151,11 +154,8 @@ def cmake_args(self): args.append("-DVISIT_DIR:PATH={0}/current/linux-x86_64".format(spec["visit"].prefix)) if "+python" in spec: - args.append(self.define("PYTHON_EXECUTABLE", spec["python"].command.path)) - args.append(self.define("Python_EXECUTABLE", spec["python"].command.path)) - args.append(self.define("Python3_EXECUTABLE", spec["python"].command.path)) if spec.satisfies("@3:"): args.append(self.define("SENSEI_PYTHON_VERSION", 3)) - args.append(self.define_from_variant("ENABLE_CATALYST_PYTHON", "catalyst")) + args.append(self.define_from_variant(f"{prefix}ENABLE_CATALYST_PYTHON", "catalyst")) return args diff --git a/var/spack/repos/builtin/packages/serenity/package.py b/var/spack/repos/builtin/packages/serenity/package.py index 6a3e69c5153..12c05b147ab 100644 --- a/var/spack/repos/builtin/packages/serenity/package.py +++ b/var/spack/repos/builtin/packages/serenity/package.py @@ -115,7 +115,7 @@ def patch(self): ) def cmake_args(self): - args = [ + return [ self.define("SERENITY_BUILD_TESTS", self.run_tests), self.define_from_variant("SERENITY_BUILD_PYTHON_BINDINGS", "python"), self.define("SERENITY_MARCH", ""), @@ -137,6 +137,3 @@ def cmake_args(self): self.define("BOOST_NO_SYSTEM_PATHS", True), self.define("Boost_NO_BOOST_CMAKE", True), ] - if "+python" in self.spec: - args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) - return args diff --git a/var/spack/repos/builtin/packages/sollve/package.py b/var/spack/repos/builtin/packages/sollve/package.py index f9783acc52f..3cb3e5cd7eb 100644 --- a/var/spack/repos/builtin/packages/sollve/package.py +++ b/var/spack/repos/builtin/packages/sollve/package.py @@ -259,7 +259,6 @@ def cmake_args(self): "-DLLVM_ENABLE_RTTI:BOOL=ON", "-DLLVM_ENABLE_EH:BOOL=ON", "-DCLANG_DEFAULT_OPENMP_RUNTIME:STRING=libomp", - "-DPYTHON_EXECUTABLE:PATH={0}".format(spec["python"].command.path), ] # TODO: Instead of unconditionally disabling CUDA, add a "cuda" variant diff --git a/var/spack/repos/builtin/packages/spectre/package.py b/var/spack/repos/builtin/packages/spectre/package.py index 4f40fa4cf89..6d288e8fea0 100644 --- a/var/spack/repos/builtin/packages/spectre/package.py +++ b/var/spack/repos/builtin/packages/spectre/package.py @@ -307,7 +307,6 @@ def cmake_args(self): args = [ self.define("CHARM_ROOT", self.spec["charmpp"].prefix), self.define_from_variant("BUILD_SHARED_LIBS", "shared"), - self.define("Python_EXECUTABLE", self.spec["python"].command.path), self.define_from_variant("BUILD_PYTHON_BINDINGS", "python"), self.define("BUILD_TESTING", self.run_tests), self.define_from_variant("BUILD_DOCS", "doc"), diff --git a/var/spack/repos/builtin/packages/steps/package.py b/var/spack/repos/builtin/packages/steps/package.py index 7d6c59657a5..f616d30d152 100644 --- a/var/spack/repos/builtin/packages/steps/package.py +++ b/var/spack/repos/builtin/packages/steps/package.py @@ -85,7 +85,6 @@ def patch(self): def cmake_args(self): args = [ self.define("BLAS_LIBRARIES", self.spec["blas"].libs.joined(";")), - self.define("PYTHON_EXECUTABLE", self.spec["python"].command), self.define("STEPS_INSTALL_PYTHON_DEPS", False), self.define_from_variant("BUILD_STOCHASTIC_TESTS", "stochtests"), self.define_from_variant("BUILD_TESTING", "codechecks"), diff --git a/var/spack/repos/builtin/packages/tasmanian/package.py b/var/spack/repos/builtin/packages/tasmanian/package.py index dcbaa2e7933..c9285453f4d 100644 --- a/var/spack/repos/builtin/packages/tasmanian/package.py +++ b/var/spack/repos/builtin/packages/tasmanian/package.py @@ -114,11 +114,6 @@ def cmake_args(self): args.append("-DBLAS_LIBRARIES={0}".format(spec["blas"].libs.joined(";"))) args.append("-DLAPACK_LIBRARIES={0}".format(spec["lapack"].libs.joined(";"))) - if spec.satisfies("+python"): - args.append( - "-DPYTHON_EXECUTABLE:FILEPATH={0}".format(self.spec["python"].command.path) - ) - return args @run_after("install") diff --git a/var/spack/repos/builtin/packages/templight/package.py b/var/spack/repos/builtin/packages/templight/package.py index e49375e30e2..76df5f2bed9 100644 --- a/var/spack/repos/builtin/packages/templight/package.py +++ b/var/spack/repos/builtin/packages/templight/package.py @@ -128,7 +128,6 @@ def cmake_args(self): cmake_args = [ "-DLLVM_REQUIRES_RTTI:BOOL=ON", "-DCLANG_DEFAULT_OPENMP_RUNTIME:STRING=libomp", - "-DPYTHON_EXECUTABLE:PATH={0}".format(spec["python"].command.path), "-DLLVM_EXTERNAL_POLLY_BUILD:Bool=OFF", "-DLLVM_TOOL_POLLY_BUILD:Bool=OFF", "-DLLVM_POLLY_BUILD:Bool=OFF", diff --git a/var/spack/repos/builtin/packages/tfel/package.py b/var/spack/repos/builtin/packages/tfel/package.py index 540d6f2503a..39d13b29cda 100644 --- a/var/spack/repos/builtin/packages/tfel/package.py +++ b/var/spack/repos/builtin/packages/tfel/package.py @@ -180,6 +180,8 @@ def cmake_args(self): args.append("-Denable-python-bindings=OFF") if ("+python" in self.spec) or ("+python_bindings" in self.spec): + # Note: calls find_package(PythonLibs) before find_package(PythonInterp), so these + # variables are required. python = self.spec["python"] args.append("-DPYTHON_LIBRARY={0}".format(python.libs[0])) args.append("-DPYTHON_INCLUDE_DIR={0}".format(python.headers.directories[0])) diff --git a/var/spack/repos/builtin/packages/timemory/package.py b/var/spack/repos/builtin/packages/timemory/package.py index fa5eb2bdc56..290a85bc9f0 100644 --- a/var/spack/repos/builtin/packages/timemory/package.py +++ b/var/spack/repos/builtin/packages/timemory/package.py @@ -322,11 +322,6 @@ def cmake_args(self): self.define_from_variant("TIMEMORY_USE_ALLINEA_MAP", "allinea_map"), ] - if "+python" in spec: - pyexe = spec["python"].command.path - args.append(self.define("PYTHON_EXECUTABLE=", pyexe)) - args.append(self.define("Python3_EXECUTABLE", pyexe)) - if "+mpi" in spec: args.append(self.define("MPI_C_COMPILER", spec["mpi"].mpicc)) args.append(self.define("MPI_CXX_COMPILER", spec["mpi"].mpicxx)) diff --git a/var/spack/repos/builtin/packages/tiramisu/package.py b/var/spack/repos/builtin/packages/tiramisu/package.py index b3c95a07385..c6e74e1546b 100644 --- a/var/spack/repos/builtin/packages/tiramisu/package.py +++ b/var/spack/repos/builtin/packages/tiramisu/package.py @@ -57,10 +57,7 @@ def cmake_args(self): self.define("USE_FLEXNLP", False), ] if "+python" in spec: - args += [ - self.define("Tiramisu_INSTALL_PYTHONDIR", python_platlib), - self.define("Python3_EXECUTABLE", spec["python"].command.path), - ] + args += [self.define("Tiramisu_INSTALL_PYTHONDIR", python_platlib)] return args @property diff --git a/var/spack/repos/builtin/packages/vdt/package.py b/var/spack/repos/builtin/packages/vdt/package.py index 24869c0865e..0b5a2aafdf9 100644 --- a/var/spack/repos/builtin/packages/vdt/package.py +++ b/var/spack/repos/builtin/packages/vdt/package.py @@ -46,10 +46,7 @@ def cmake_args(self): elif spec.satisfies("target=ppc64le:"): disable_features.add("fma") - args = [ - self.define_from_variant("PRELOAD"), - self.define("PYTHON_EXECUTABLE", spec["python"].command), - ] + args = [self.define_from_variant("PRELOAD")] for f in ["sse", "avx", "avx2", "fma", "neon"]: args.append( self.define(f.upper(), f not in disable_features and f in self.spec.target) diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py index de16f92e6f3..38863fdcc38 100644 --- a/var/spack/repos/builtin/packages/vtk/package.py +++ b/var/spack/repos/builtin/packages/vtk/package.py @@ -310,8 +310,6 @@ def cmake_args(self): # Enable/Disable wrappers for Python. if "+python" in spec: cmake_args.append("-DVTK_WRAP_PYTHON=ON") - if spec.satisfies("@:8"): - cmake_args.append("-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path)) if "+mpi" in spec and spec.satisfies("@:8"): cmake_args.append("-DVTK_USE_SYSTEM_MPI4PY:BOOL=ON") if spec.satisfies("@9.0.0: ^python@3:"): diff --git a/var/spack/repos/builtin/packages/xcfun/package.py b/var/spack/repos/builtin/packages/xcfun/package.py index 4e803367bcc..737e8b356ed 100644 --- a/var/spack/repos/builtin/packages/xcfun/package.py +++ b/var/spack/repos/builtin/packages/xcfun/package.py @@ -36,7 +36,6 @@ def cmake_args(self): "-DPYMOD_INSTALL_LIBDIR=/python{0}/site-packages".format(spec["python"].version[:-1]), "-DXCFUN_MAX_ORDER=8", "-DXCFUN_PYTHON_INTERFACE=ON", - "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command), "-DENABLE_TESTALL=OFF", ] return args diff --git a/var/spack/repos/builtin/packages/xrootd/package.py b/var/spack/repos/builtin/packages/xrootd/package.py index 1d20706fc9e..8b964368993 100644 --- a/var/spack/repos/builtin/packages/xrootd/package.py +++ b/var/spack/repos/builtin/packages/xrootd/package.py @@ -203,12 +203,7 @@ def cmake_args(self): ] # see https://github.com/spack/spack/pull/11581 if "+python" in self.spec: - options.extend( - [ - define("PYTHON_EXECUTABLE", spec["python"].command.path), - define("XRD_PYTHON_REQ_VERSION", spec["python"].version.up_to(2)), - ] - ) + options.append(define("XRD_PYTHON_REQ_VERSION", spec["python"].version.up_to(2))) if "+scitokens-cpp" in self.spec: options.append("-DSCITOKENS_CPP_DIR=%s" % spec["scitokens-cpp"].prefix) diff --git a/var/spack/repos/builtin/packages/xtensor-python/package.py b/var/spack/repos/builtin/packages/xtensor-python/package.py index 1b0c883e564..0d277428cdf 100644 --- a/var/spack/repos/builtin/packages/xtensor-python/package.py +++ b/var/spack/repos/builtin/packages/xtensor-python/package.py @@ -33,11 +33,3 @@ class XtensorPython(CMakePackage): depends_on("python", type=("build", "link", "run")) extends("python") - - def cmake_args(self): - spec = self.spec - - python_exe = spec["python"].command.path - - args = ["-DPYTHON_EXECUTABLE={0}".format(python_exe)] - return args