summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam J. Stewart <ajstewart426@gmail.com>2022-06-29 11:55:24 -0700
committerGitHub <noreply@github.com>2022-06-29 11:55:24 -0700
commit93c16f1ee377606fa232ceb3141cc1be32dbfeba (patch)
tree1e1fa83c93de706f401e61df21a8754cc45d72e7
parent7bacde16e4516473eb562f8317e3ef70b3d3aac5 (diff)
downloadspack-93c16f1ee377606fa232ceb3141cc1be32dbfeba.tar.gz
spack-93c16f1ee377606fa232ceb3141cc1be32dbfeba.tar.bz2
spack-93c16f1ee377606fa232ceb3141cc1be32dbfeba.tar.xz
spack-93c16f1ee377606fa232ceb3141cc1be32dbfeba.zip
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
-rw-r--r--lib/spack/spack/build_systems/python.py34
-rw-r--r--var/spack/repos/builtin/packages/py-mpi4py/package.py5
-rw-r--r--var/spack/repos/builtin/packages/py-torch/package.py18
3 files changed, 34 insertions, 23 deletions
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):
diff --git a/var/spack/repos/builtin/packages/py-mpi4py/package.py b/var/spack/repos/builtin/packages/py-mpi4py/package.py
index ff0f29a540..966d6dc461 100644
--- a/var/spack/repos/builtin/packages/py-mpi4py/package.py
+++ b/var/spack/repos/builtin/packages/py-mpi4py/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/py-torch/package.py b/var/spack/repos/builtin/packages/py-torch/package.py
index cbefcde583..c1737b0f1f 100644
--- a/var/spack/repos/builtin/packages/py-torch/package.py
+++ b/var/spack/repos/builtin/packages/py-torch/package.py
@@ -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