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