diff options
author | Nick R. Papior <nickpapior@gmail.com> | 2019-04-30 23:11:41 +0200 |
---|---|---|
committer | Matti Picus <matti.picus@gmail.com> | 2019-04-30 17:11:41 -0400 |
commit | c51a56c4c78a409a884201004a1e7f605526a3a8 (patch) | |
tree | eb6280e62c96437f3e3ffb16738b6501a8415750 /numpy/distutils/system_info.py | |
parent | 9a31efbea0a0390a59e1201a82e53f893a2f3c8c (diff) | |
download | numpy-c51a56c4c78a409a884201004a1e7f605526a3a8.tar.gz |
BLD: streamlined library names in site.cfg sections (#13157)
* BLD: use libraries as a key consistently in all site.cfg sections
Diffstat (limited to 'numpy/distutils/system_info.py')
-rw-r--r-- | numpy/distutils/system_info.py | 97 |
1 files changed, 72 insertions, 25 deletions
diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py index 8a42434ff..cd78fa37f 100644 --- a/numpy/distutils/system_info.py +++ b/numpy/distutils/system_info.py @@ -92,20 +92,20 @@ src_dirs = /usr/local/src:/opt/src search_static_first = 0 [fftw] -fftw_libs = rfftw, fftw -fftw_opt_libs = rfftw_threaded, fftw_threaded -# if the above aren't found, look for {s,d}fftw_libs and {s,d}fftw_opt_libs +libraries = rfftw, fftw [atlas] library_dirs = /usr/lib/3dnow:/usr/lib/3dnow/atlas # for overriding the names of the atlas libraries -atlas_libs = lapack, f77blas, cblas, atlas +libraries = lapack, f77blas, cblas, atlas [x11] library_dirs = /usr/X11R6/lib include_dirs = /usr/X11R6/include ---------- +Note that the ``libraries`` key is the default setting for libraries. + Authors: Pearu Peterson <pearu@cens.ioc.ee>, February 2002 David M. Cooke <cookedm@physics.mcmaster.ca>, April 2002 @@ -449,6 +449,12 @@ class NotFoundError(DistutilsError): """Some third-party program or library is not found.""" +class AliasedOptionError(DistutilsError): + """ + Aliases entries in config files should not be existing. + In section '{section}' we found multiple appearances of options {options}.""" + + class AtlasNotFoundError(NotFoundError): """ Atlas (http://math-atlas.sourceforge.net/) libraries not found. @@ -607,6 +613,39 @@ class system_info(object): dict_append(info, **extra_info) self.saved_results[self.__class__.__name__] = info + def get_option_single(self, *options): + """ Ensure that only one of `options` are found in the section + + Parameters + ---------- + *options : list of str + a list of options to be found in the section (``self.section``) + + Returns + ------- + str : + the option that is uniquely found in the section + + Raises + ------ + AliasedOptionError : + in case more than one of the options are found + """ + found = map(lambda opt: self.cp.has_option(self.section, opt), options) + found = list(found) + if sum(found) == 1: + return options[found.index(True)] + elif sum(found) == 0: + # nothing is found anyways + return options[0] + + # Else we have more than 1 key found + if AliasedOptionError.__doc__ is None: + raise AliasedOptionError() + raise AliasedOptionError(AliasedOptionError.__doc__.format( + section=self.section, options='[{}]'.format(', '.join(options)))) + + def has_info(self): return self.__class__.__name__ in self.saved_results @@ -897,7 +936,9 @@ class fftw_info(system_info): """Returns True on successful version detection, else False""" lib_dirs = self.get_lib_dirs() incl_dirs = self.get_include_dirs() - libs = self.get_libs(self.section + '_libs', ver_param['libs']) + + opt = self.get_option_single(self.section + '_libs', 'libraries') + libs = self.get_libs(opt, ver_param['libs']) info = self.check_libs(lib_dirs, libs) if info is not None: flag = 0 @@ -1082,7 +1123,8 @@ class mkl_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() incl_dirs = self.get_include_dirs() - mkl_libs = self.get_libs('mkl_libs', self._lib_mkl) + opt = self.get_option_single('mkl_libs', 'libraries') + mkl_libs = self.get_libs(opt, self._lib_mkl) info = self.check_libs2(lib_dirs, mkl_libs) if info is None: return @@ -1129,8 +1171,8 @@ class atlas_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() info = {} - atlas_libs = self.get_libs('atlas_libs', - self._lib_names + self._lib_atlas) + opt = self.get_option_single('atlas_libs', 'libraries') + atlas_libs = self.get_libs(opt, self._lib_names + self._lib_atlas) lapack_libs = self.get_libs('lapack_libs', self._lib_lapack) atlas = None lapack = None @@ -1222,8 +1264,8 @@ class atlas_blas_info(atlas_info): def calc_info(self): lib_dirs = self.get_lib_dirs() info = {} - atlas_libs = self.get_libs('atlas_libs', - self._lib_names + self._lib_atlas) + opt = self.get_option_single('atlas_libs', 'libraries') + atlas_libs = self.get_libs(opt, self._lib_names + self._lib_atlas) atlas = self.check_libs2(lib_dirs, atlas_libs, []) if atlas is None: return @@ -1275,8 +1317,8 @@ class atlas_3_10_blas_info(atlas_3_10_info): def calc_info(self): lib_dirs = self.get_lib_dirs() info = {} - atlas_libs = self.get_libs('atlas_libs', - self._lib_names) + opt = self.get_option_single('atlas_lib', 'libraries') + atlas_libs = self.get_libs(opt, self._lib_names) atlas = self.check_libs2(lib_dirs, atlas_libs, []) if atlas is None: return @@ -1327,7 +1369,8 @@ class lapack_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() - lapack_libs = self.get_libs('lapack_libs', self._lib_names) + opt = self.get_option_single('lapack_libs', 'libraries') + lapack_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, lapack_libs, []) if info is None: return @@ -1682,7 +1725,8 @@ class blas_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() - blas_libs = self.get_libs('blas_libs', self._lib_names) + opt = self.get_option_single('blas_libs', 'libraries') + blas_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, blas_libs, []) if info is None: return @@ -1783,9 +1827,9 @@ class openblas_info(blas_info): lib_dirs = self.get_lib_dirs() - openblas_libs = self.get_libs('libraries', self._lib_names) - if openblas_libs == self._lib_names: # backward compat with 1.8.0 - openblas_libs = self.get_libs('openblas_libs', self._lib_names) + # Prefer to use libraries over openblas_libs + opt = self.get_option_single('openblas_libs', 'libraries') + openblas_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, openblas_libs, []) @@ -1897,10 +1941,8 @@ class blis_info(blas_info): def calc_info(self): lib_dirs = self.get_lib_dirs() - blis_libs = self.get_libs('libraries', self._lib_names) - if blis_libs == self._lib_names: - blis_libs = self.get_libs('blis_libs', self._lib_names) - + opt = self.get_option_single('blis_libs', 'libraries') + blis_libs = self.get_libs(opt, self._lib_names) info = self.check_libs2(lib_dirs, blis_libs, []) if info is None: return @@ -1915,6 +1957,7 @@ class blis_info(blas_info): class accelerate_info(system_info): section = 'accelerate' + _lib_names = ['accelerate', 'veclib'] notfounderror = BlasNotFoundError def calc_info(self): @@ -1923,7 +1966,7 @@ class accelerate_info(system_info): if libraries: libraries = [libraries] else: - libraries = self.get_libs('libraries', ['accelerate', 'veclib']) + libraries = self.get_libs('libraries', self._lib_names) libraries = [lib.strip().lower() for lib in libraries] if (sys.platform == 'darwin' and @@ -2021,6 +2064,7 @@ class blas_src_info(system_info): class x11_info(system_info): section = 'x11' notfounderror = X11NotFoundError + _lib_names = ['X11'] def __init__(self): system_info.__init__(self, @@ -2032,7 +2076,8 @@ class x11_info(system_info): return lib_dirs = self.get_lib_dirs() include_dirs = self.get_include_dirs() - x11_libs = self.get_libs('x11_libs', ['X11']) + opt = self.get_option_single('x11_libs', 'libraries') + x11_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, x11_libs, []) if info is None: return @@ -2423,7 +2468,8 @@ class amd_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() - amd_libs = self.get_libs('amd_libs', self._lib_names) + opt = self.get_option_single('amd_libs', 'libraries') + amd_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, amd_libs, []) if info is None: return @@ -2454,7 +2500,8 @@ class umfpack_info(system_info): def calc_info(self): lib_dirs = self.get_lib_dirs() - umfpack_libs = self.get_libs('umfpack_libs', self._lib_names) + opt = self.get_option_single('umfpack_libs', 'libraries') + umfpack_libs = self.get_libs(opt, self._lib_names) info = self.check_libs(lib_dirs, umfpack_libs, []) if info is None: return |