find_libraries searches lib and lib64 before prefix (#11958)

The default library search for a package checks the lib/ and lib64/
directories for libraries before the root prefix, in order to save
time when searching for libraries provided by externals (which e.g.
may have '/usr/' as their root).

This moves that logic into the "find_libraries" utility method so
packages implementing their own custom library search logic can
benefit from it.

This also updates packages which appear to be replicating this logic
exactly, replacing it with a single call to "find_libraries".
This commit is contained in:
Tim Fuller
2019-07-12 18:46:47 -06:00
committed by Peter Scheibel
parent f1ce1dd163
commit 5bc15b2d9a
5 changed files with 33 additions and 39 deletions

View File

@@ -63,14 +63,8 @@ def install(self, spec, prefix):
@property
def libs(self):
prefix = self.prefix
search_paths = [(prefix.lib, False), (prefix.lib64, False),
(prefix, True)]
for search_root, recursive in search_paths:
libs = find_libraries(
'libcuda', root=search_root, shared=True, recursive=recursive)
if libs:
break
libs = find_libraries('libcuda', root=self.prefix, shared=True,
recursive=True)
filtered_libs = []
# CUDA 10.0 provides Compatability libraries for running newer versions

View File

@@ -150,12 +150,7 @@ def libs(self):
"""Export the hypre library.
Sample usage: spec['hypre'].libs.ld_flags
"""
search_paths = [[self.prefix.lib, False], [self.prefix.lib64, False],
[self.prefix, True]]
is_shared = '+shared' in self.spec
for path, recursive in search_paths:
libs = find_libraries('libHYPRE', root=path,
shared=is_shared, recursive=recursive)
if libs:
return libs
return None
libs = find_libraries('libHYPRE', root=self.prefix, shared=is_shared,
recursive=True)
return libs or None

View File

@@ -500,12 +500,9 @@ def libs(self):
# Q: should the result be ordered by dependency?
else:
sun_libs = ['libsundials_' + p for p in query_parameters]
search_paths = [[self.prefix.lib, False], [self.prefix.lib64, False],
[self.prefix, True]]
is_shared = '+shared' in self.spec
for path, recursive in search_paths:
libs = find_libraries(sun_libs, root=path, shared=is_shared,
recursive=recursive)
if libs:
return libs
return None # Raise an error
libs = find_libraries(sun_libs, root=self.prefix, shared=is_shared,
recursive=True)
return libs or None # Raise an error if no libs are found