diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py index 0f84ac7f8ad..68122efa4e1 100644 --- a/lib/spack/spack/build_systems/python.py +++ b/lib/spack/spack/build_systems/python.py @@ -2,6 +2,7 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import glob import inspect import os import re @@ -223,8 +224,8 @@ def headers(self): """Discover header files in platlib.""" # Headers may be in either location - include = self.prefix.join(self.spec["python"].package.include) - platlib = self.prefix.join(self.spec["python"].package.platlib) + include = self.prefix.join(self.include) + platlib = self.prefix.join(self.platlib) headers = fs.find_all_headers(include) + fs.find_all_headers(platlib) if headers: @@ -233,13 +234,29 @@ def headers(self): msg = "Unable to locate {} headers in {} or {}" raise NoHeadersError(msg.format(self.spec.name, include, platlib)) + @property + def include(self): + include = glob.glob(self.prefix.include.join("python*")) + if include: + return include[0] + return self.spec["python"].package.include + + @property + def platlib(self): + for libname in ("lib", "lib64"): + platlib = glob.glob(self.prefix.join(libname).join("python*").join("site-packages")) + if platlib: + return platlib[0] + + return self.spec["python"].package.platlib + @property def libs(self): """Discover libraries in platlib.""" # Remove py- prefix in package name library = "lib" + self.spec.name[3:].replace("-", "?") - root = self.prefix.join(self.spec["python"].package.platlib) + root = self.prefix.join(self.platlib) for shared in [True, False]: libs = fs.find_libraries(library, root, shared=shared, recursive=True)