"spack external find": also find library-only packages (#28005)
Update "spack external find --all" to also find library-only packages. A Package can add a ".libraries" attribute, which is a list of regular expressions to use to find libraries associated with the Package. "spack external find --all" will search LD_LIBRARY_PATH for potential libraries. This PR adds examples for NCCL, RCCL, and hipblas packages. These examples specify the suffix ".so" for the regular expressions used to find libraries, so generally are only useful for detecting library packages on Linux.
This commit is contained in:
@@ -1940,6 +1940,11 @@ def files_in(*search_paths):
|
||||
return files
|
||||
|
||||
|
||||
def is_readable_file(file_path):
|
||||
"""Return True if the path passed as argument is readable"""
|
||||
return os.path.isfile(file_path) and os.access(file_path, os.R_OK)
|
||||
|
||||
|
||||
@system_path_filter
|
||||
def search_paths_for_executables(*path_hints):
|
||||
"""Given a list of path hints returns a list of paths where
|
||||
@@ -1968,6 +1973,38 @@ def search_paths_for_executables(*path_hints):
|
||||
return executable_paths
|
||||
|
||||
|
||||
@system_path_filter
|
||||
def search_paths_for_libraries(*path_hints):
|
||||
"""Given a list of path hints returns a list of paths where
|
||||
to search for a shared library.
|
||||
|
||||
Args:
|
||||
*path_hints (list of paths): list of paths taken into
|
||||
consideration for a search
|
||||
|
||||
Returns:
|
||||
A list containing the real path of every existing directory
|
||||
in `path_hints` and its `lib` and `lib64` subdirectory if it exists.
|
||||
"""
|
||||
library_paths = []
|
||||
for path in path_hints:
|
||||
if not os.path.isdir(path):
|
||||
continue
|
||||
|
||||
path = os.path.abspath(path)
|
||||
library_paths.append(path)
|
||||
|
||||
lib_dir = os.path.join(path, 'lib')
|
||||
if os.path.isdir(lib_dir):
|
||||
library_paths.append(lib_dir)
|
||||
|
||||
lib64_dir = os.path.join(path, 'lib64')
|
||||
if os.path.isdir(lib64_dir):
|
||||
library_paths.append(lib64_dir)
|
||||
|
||||
return library_paths
|
||||
|
||||
|
||||
@system_path_filter
|
||||
def partition_path(path, entry=None):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user