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):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user