From a2d70a45fbc2ee07160c3ee750dbffe9d4fd5b1b Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Sat, 4 Mar 2017 11:23:57 -0600 Subject: Allow find_libraries to accept lists or strings (#3363) * Allow find_libraries to accept lists or strings * Convert one more example from list to string --- lib/spack/llnl/util/filesystem.py | 28 ++++++++++++---------- lib/spack/spack/spec.py | 2 +- .../repos/builtin/packages/armadillo/package.py | 4 ++-- var/spack/repos/builtin/packages/cp2k/package.py | 2 +- .../repos/builtin/packages/elemental/package.py | 2 +- .../builtin/packages/netlib-lapack/package.py | 4 ++-- .../builtin/packages/netlib-scalapack/package.py | 2 +- .../repos/builtin/packages/octopus/package.py | 8 +++---- .../builtin/packages/openspeedshop/package.py | 6 ++--- .../repos/builtin/packages/veclibfort/package.py | 2 +- 10 files changed, 31 insertions(+), 29 deletions(-) diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py index 79f15f9a21..7f6773266d 100644 --- a/lib/spack/llnl/util/filesystem.py +++ b/lib/spack/llnl/util/filesystem.py @@ -568,20 +568,22 @@ def find_libraries(args, root, shared=True, recurse=False): """Returns an iterable object containing a list of full paths to libraries if found. - Args: - args: iterable object containing a list of library names to \ - search for (e.g. 'libhdf5') - root: root folder where to start searching - shared: if True searches for shared libraries, otherwise for static - recurse: if False search only root folder, if True descends top-down \ - from the root - - Returns: - list of full paths to the libraries that have been found + :param args: Library name(s) to search for + :type args: str or collections.Sequence + :param str root: The root directory to start searching from + :param bool shared: if True searches for shared libraries, + otherwise for static + :param bool recurse: if False search only root folder, + if True descends top-down from the root + + :returns: The libraries that have been found + :rtype: LibraryList """ - if not isinstance(args, collections.Sequence) or isinstance(args, str): - message = '{0} expects a sequence of strings as first argument' - message += ' [got {1} instead]' + if isinstance(args, str): + args = [args] + elif not isinstance(args, collections.Sequence): + message = '{0} expects a string or sequence of strings as the ' + message += 'first argument [got {1} instead]' raise TypeError(message.format(find_libraries.__name__, type(args))) # Construct the right suffix for the library diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index c0ee8486db..9fc2c99e4a 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -767,7 +767,7 @@ def _libs_default_handler(descriptor, spec, cls): name = 'lib' + spec.name shared = '+shared' in spec return find_libraries( - [name], root=spec.prefix, shared=shared, recurse=True + name, root=spec.prefix, shared=shared, recurse=True ) diff --git a/var/spack/repos/builtin/packages/armadillo/package.py b/var/spack/repos/builtin/packages/armadillo/package.py index 9ab1b66880..7bf28efc0d 100644 --- a/var/spack/repos/builtin/packages/armadillo/package.py +++ b/var/spack/repos/builtin/packages/armadillo/package.py @@ -47,9 +47,9 @@ class Armadillo(Package): depends_on('hdf5', when='+hdf5') def install(self, spec, prefix): - arpack = find_libraries(['libarpack'], root=spec[ + arpack = find_libraries('libarpack', root=spec[ 'arpack-ng'].prefix.lib, shared=True) - superlu = find_libraries(['libsuperlu'], root=spec[ + superlu = find_libraries('libsuperlu', root=spec[ 'superlu'].prefix, shared=False, recurse=True) cmake_args = [ # ARPACK support diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py index 9bf7a5bc6b..0909d8cb81 100644 --- a/var/spack/repos/builtin/packages/cp2k/package.py +++ b/var/spack/repos/builtin/packages/cp2k/package.py @@ -92,7 +92,7 @@ class Cp2k(Package): ] fcflags = copy.deepcopy(optflags[self.spec.compiler.name]) fcflags.append(spec['fftw'].cppflags) - fftw = find_libraries(['libfftw3'], root=spec['fftw'].prefix.lib) + fftw = find_libraries('libfftw3', root=spec['fftw'].prefix.lib) ldflags = [fftw.search_flags] libs = [ join_path(spec['libint'].prefix.lib, 'libint.so'), diff --git a/var/spack/repos/builtin/packages/elemental/package.py b/var/spack/repos/builtin/packages/elemental/package.py index dd4ae291ec..ccc55092d0 100644 --- a/var/spack/repos/builtin/packages/elemental/package.py +++ b/var/spack/repos/builtin/packages/elemental/package.py @@ -82,7 +82,7 @@ class Elemental(CMakePackage): def elemental_libs(self): shared = True if '+shared' in self.spec else False return find_libraries( - ['libEl'], root=self.prefix, shared=shared, recurse=True + 'libEl', root=self.prefix, shared=shared, recurse=True ) def build_type(self): diff --git a/var/spack/repos/builtin/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py index 9d0ebae371..fa11ae6367 100644 --- a/var/spack/repos/builtin/packages/netlib-lapack/package.py +++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py @@ -74,14 +74,14 @@ class NetlibLapack(Package): def blas_libs(self): shared = True if '+shared' in self.spec else False return find_libraries( - ['libblas'], root=self.prefix, shared=shared, recurse=True + 'libblas', root=self.prefix, shared=shared, recurse=True ) @property def lapack_libs(self): shared = True if '+shared' in self.spec else False return find_libraries( - ['liblapack'], root=self.prefix, shared=shared, recurse=True + 'liblapack', root=self.prefix, shared=shared, recurse=True ) def install_one(self, spec, prefix, shared): diff --git a/var/spack/repos/builtin/packages/netlib-scalapack/package.py b/var/spack/repos/builtin/packages/netlib-scalapack/package.py index 7d8b803abf..6a97180328 100644 --- a/var/spack/repos/builtin/packages/netlib-scalapack/package.py +++ b/var/spack/repos/builtin/packages/netlib-scalapack/package.py @@ -62,7 +62,7 @@ class NetlibScalapack(Package): def scalapack_libs(self): shared = True if '+shared' in self.spec else False return find_libraries( - ['libscalapack'], root=self.prefix, shared=shared, recurse=True + 'libscalapack', root=self.prefix, shared=shared, recurse=True ) def install(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/octopus/package.py b/var/spack/repos/builtin/packages/octopus/package.py index 81e4543745..88350f50bc 100644 --- a/var/spack/repos/builtin/packages/octopus/package.py +++ b/var/spack/repos/builtin/packages/octopus/package.py @@ -38,7 +38,7 @@ class Octopus(Package): # Sample url is: # "http://www.tddft.org/programs/octopus/down.php?file=5.0.1/octopus-5.0.1.tar.gz" def url_for_version(self, version): - return '{0}/{1}/octopus-{1}.tar.gz'.format(Octopus.base_url, + return '{0}/{1}/octopus-{1}.tar.gz'.format(Octopus.base_url, version.dotted) variant('scalapack', default=False, @@ -69,7 +69,7 @@ class Octopus(Package): # feast, libfm, pfft, isf, pnfft def install(self, spec, prefix): - arpack = find_libraries(['libarpack'], root=spec[ + arpack = find_libraries('libarpack', root=spec[ 'arpack-ng'].prefix.lib, shared=True) lapack = spec['lapack'].libs blas = spec['blas'].libs @@ -96,12 +96,12 @@ class Octopus(Package): if '+netcdf' in spec: args.extend([ '--with-netcdf-prefix=%s' % spec['netcdf-fortran'].prefix, - '--with-netcdf-include=%s' % + '--with-netcdf-include=%s' % spec['netcdf-fortran'].prefix.include, ]) if '+arpack-ng' in spec: args.extend([ - '--with-arpack={0}'.format(arpack.joined()), + '--with-arpack={0}'.format(arpack.joined()), ]) if '+scalapack' in spec: args.extend([ diff --git a/var/spack/repos/builtin/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py index 2e908b4099..ae2655735a 100644 --- a/var/spack/repos/builtin/packages/openspeedshop/package.py +++ b/var/spack/repos/builtin/packages/openspeedshop/package.py @@ -60,7 +60,7 @@ class Openspeedshop(Package): """ homepage = "http://www.openspeedshop.org" - url = "https://github.com/OpenSpeedShop" + url = "https://github.com/OpenSpeedShop" version('2.2', '16cb051179c2038de4e8a845edf1d573') # Use when the git repository is available version('2.3', branch='master', @@ -230,7 +230,7 @@ class Openspeedshop(Package): # set the DYNINSTAPI_RT_LIB library which is # required for OpenSpeedShop to find loop level # performance information - dyninst_libdir = find_libraries(['libdyninstAPI_RT'], + dyninst_libdir = find_libraries('libdyninstAPI_RT', root=self.spec['dyninst'].prefix, shared=True, recurse=True) @@ -238,7 +238,7 @@ class Openspeedshop(Package): run_env.set('DYNINSTAPI_RT_LIB', dyninst_libdir) # Find openspeedshop library path - oss_libdir = find_libraries(['libopenss-framework'], + oss_libdir = find_libraries('libopenss-framework', root=self.spec['openspeedshop'].prefix, shared=True, recurse=True) run_env.prepend_path('LD_LIBRARY_PATH', diff --git a/var/spack/repos/builtin/packages/veclibfort/package.py b/var/spack/repos/builtin/packages/veclibfort/package.py index fa99acfa97..26e64248bb 100644 --- a/var/spack/repos/builtin/packages/veclibfort/package.py +++ b/var/spack/repos/builtin/packages/veclibfort/package.py @@ -47,7 +47,7 @@ class Veclibfort(Package): def libs(self): shared = True if '+shared' in self.spec else False return find_libraries( - ['libvecLibFort'], root=self.prefix, shared=shared, recurse=True + 'libvecLibFort', root=self.prefix, shared=shared, recurse=True ) def install(self, spec, prefix): -- cgit v1.2.3-70-g09d2