From 93c16f1ee377606fa232ceb3141cc1be32dbfeba Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Wed, 29 Jun 2022 11:55:24 -0700 Subject: PythonPackage: add default libs/headers attributes (#28527) * PythonPackage: add default libs/headers attributes * Style fix * libs and headers should be properties * Check both platlib and include * Fix variable reference --- lib/spack/spack/build_systems/python.py | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'lib') diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py index d72b9c5a8d..3eec9d5d3b 100644 --- a/lib/spack/spack/build_systems/python.py +++ b/lib/spack/spack/build_systems/python.py @@ -12,6 +12,8 @@ import llnl.util.tty as tty from llnl.util.filesystem import ( filter_file, find, + find_all_headers, + find_libraries, is_nonsymlink_exe_with_shebang, path_contains_subdirectory, same_path, @@ -20,6 +22,7 @@ from llnl.util.filesystem import ( from llnl.util.lang import match_predicate from spack.directives import depends_on, extends +from spack.error import NoHeadersError, NoLibrariesError from spack.package_base import PackageBase, run_after @@ -178,6 +181,37 @@ class PythonPackage(PackageBase): with working_dir(self.build_directory): pip(*args) + @property + def headers(self): + """Discover header files in platlib.""" + + # Headers may be in either location + include = inspect.getmodule(self).include + platlib = inspect.getmodule(self).platlib + headers = find_all_headers(include) + find_all_headers(platlib) + + if headers: + return headers + + msg = 'Unable to locate {} headers in {} or {}' + raise NoHeadersError(msg.format(self.spec.name, include, platlib)) + + @property + def libs(self): + """Discover libraries in platlib.""" + + # Remove py- prefix in package name + library = 'lib' + self.spec.name[3:].replace('-', '?') + root = inspect.getmodule(self).platlib + + for shared in [True, False]: + libs = find_libraries(library, root, shared=shared, recursive=True) + if libs: + return libs + + msg = 'Unable to recursively locate {} libraries in {}' + raise NoLibrariesError(msg.format(self.spec.name, root)) + # Testing def test(self): -- cgit v1.2.3-70-g09d2