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