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
This commit is contained in:
		| @@ -12,6 +12,8 @@ | ||||
| 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.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 @@ def install(self, spec, prefix): | ||||
|         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): | ||||
|   | ||||
| @@ -35,8 +35,3 @@ class PyMpi4py(PythonPackage): | ||||
|     @when('@3.1:') | ||||
|     def install_options(self, spec, prefix): | ||||
|         return ['--mpicc=%s -shared' % spec['mpi'].mpicc] | ||||
| 
 | ||||
|     @property | ||||
|     def headers(self): | ||||
|         headers = find_all_headers(self.prefix.lib) | ||||
|         return headers | ||||
|   | ||||
| @@ -269,24 +269,6 @@ class PyTorch(PythonPackage, CudaPackage): | ||||
|     patch('https://github.com/pytorch/pytorch/commit/c74c0c571880df886474be297c556562e95c00e0.patch?full_index=1', | ||||
|           sha256='8ff7d285e52e4718bad1ca01ceb3bb6471d7828329036bb94222717fcaa237da', when='@:1.9.1 ^cuda@11.4.100:') | ||||
| 
 | ||||
|     @property | ||||
|     def libs(self): | ||||
|         # TODO: why doesn't `python_platlib` work here? | ||||
|         root = join_path( | ||||
|             self.prefix, self.spec['python'].package.platlib, 'torch', 'lib' | ||||
|         ) | ||||
|         return find_libraries('libtorch', root) | ||||
| 
 | ||||
|     @property | ||||
|     def headers(self): | ||||
|         # TODO: why doesn't `python_platlib` work here? | ||||
|         root = join_path( | ||||
|             self.prefix, self.spec['python'].package.platlib, 'torch', 'include' | ||||
|         ) | ||||
|         headers = find_all_headers(root) | ||||
|         headers.directories = [root] | ||||
|         return headers | ||||
| 
 | ||||
|     @when('@1.5.0:') | ||||
|     def patch(self): | ||||
|         # https://github.com/pytorch/pytorch/issues/52208 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Adam J. Stewart
					Adam J. Stewart