summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorJon Rood <jon.rood@nrel.gov>2019-01-10 10:14:24 -0700
committerAdam J. Stewart <ajstewart426@gmail.com>2019-01-10 11:14:24 -0600
commit12cf4eb7347acadede98314d88d3a807520603ca (patch)
treebeba6b06deea26ed1e56d6f23d22d2c49827eb5f /var
parent586fe32166cc0024414ad60d4153ef66101ded9c (diff)
downloadspack-12cf4eb7347acadede98314d88d3a807520603ca.tar.gz
spack-12cf4eb7347acadede98314d88d3a807520603ca.tar.bz2
spack-12cf4eb7347acadede98314d88d3a807520603ca.tar.xz
spack-12cf4eb7347acadede98314d88d3a807520603ca.zip
Explicitly listing blas and lapack sections in site.cfg for numpy (#8708)
* Explicitly listing blas and lapack sections in site.cfg for numpy when using netlib-lapack so that scipy can find them as well. * Reducing code to use a function call instead of copying and pasting. * Fixing flake8 errors. * Fixing python 3.6 error when site.cfg lists library_dirs multiple times. * Formatting. * Verifying blas and lapack are enabled before writing to site.cfg. * Fixing flake8 errors. * Fixing conflicts since this package file has been updated. * Fixing flake8 stuff. * Handling blas and lapack variants for netlib-lapack in site.cfg for py-numpy. * Don't write netlib-lapack site.cfg file if no blas or lapack variants enabled in py-numpy. * Removing redundant if statement. * Fixing mistake in py-numpy site.cfg generation. * Separating blas and lapack further in site.cfg for netlib-lapack in py-numpy.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/py-numpy/package.py54
1 files changed, 40 insertions, 14 deletions
diff --git a/var/spack/repos/builtin/packages/py-numpy/package.py b/var/spack/repos/builtin/packages/py-numpy/package.py
index ffb045790b..aba417c54b 100644
--- a/var/spack/repos/builtin/packages/py-numpy/package.py
+++ b/var/spack/repos/builtin/packages/py-numpy/package.py
@@ -66,13 +66,25 @@ class PyNumpy(PythonPackage):
def patch(self):
spec = self.spec
+
+ def write_library_dirs(f, dirs):
+ f.write('library_dirs=%s\n' % dirs)
+ if not ((platform.system() == "Darwin") and
+ (platform.mac_ver()[0] == '10.12')):
+ f.write('rpath=%s\n' % dirs)
+
# for build notes see http://www.scipy.org/scipylib/building/linux.html
- lapackblas = LibraryList('')
+ blas_info = []
+ lapack_info = []
+ lapackblas_info = []
+
if '+lapack' in spec:
- lapackblas += spec['lapack'].libs
+ lapack_info += spec['lapack'].libs
if '+blas' in spec:
- lapackblas += spec['blas'].libs
+ blas_info += spec['blas'].libs
+
+ lapackblas_info = lapack_info + blas_info
if '+blas' in spec or '+lapack' in spec:
# note that one should not use [blas_opt] and [lapack_opt], see
@@ -80,14 +92,19 @@ class PyNumpy(PythonPackage):
with open('site.cfg', 'w') as f:
# Unfortunately, numpy prefers to provide each BLAS/LAPACK
# differently.
- names = ','.join(lapackblas.names)
- dirs = ':'.join(lapackblas.directories)
+ blas_names = ','.join(blas_info.names)
+ blas_dirs = ':'.join(blas_info.directories)
+ lapack_names = ','.join(lapack_info.names)
+ lapack_dirs = ':'.join(lapack_info.directories)
+ lapackblas_names = ','.join(lapackblas_info.names)
+ lapackblas_dirs = ':'.join(lapackblas_info.directories)
# Special treatment for some (!) BLAS/LAPACK. Note that
# in this case library_dirs can not be specified within [ALL].
if '^openblas' in spec:
f.write('[openblas]\n')
- f.write('libraries=%s\n' % names)
+ f.write('libraries=%s\n' % lapackblas_names)
+ write_library_dirs(f, lapackblas_dirs)
elif '^mkl' in spec:
# numpy does not expect system libraries needed for MKL
# here.
@@ -105,10 +122,23 @@ class PyNumpy(PythonPackage):
# perspective it is no different from throwing away RPATH's
# and using LD_LIBRARY_PATH throughout Spack.
f.write('[mkl]\n')
- f.write('mkl_libs=%s\n' % 'mkl_rt')
+ f.write('mkl_libs=%s\n' % 'mkl_rt')
+ write_library_dirs(f, lapackblas_dirs)
elif '^atlas' in spec:
f.write('[atlas]\n')
- f.write('atlas_libs=%s\n' % names)
+ f.write('atlas_libs=%s\n' % lapackblas_names)
+ write_library_dirs(f, lapackblas_dirs)
+ elif '^netlib-lapack' in spec:
+ # netlib requires blas and lapack listed
+ # separately so that scipy can find them
+ if spec.satisfies('+blas'):
+ f.write('[blas]\n')
+ f.write('blas_libs=%s\n' % blas_names)
+ write_library_dirs(f, blas_dirs)
+ if spec.satisfies('+lapack'):
+ f.write('[lapack]\n')
+ f.write('lapack_libs=%s\n' % lapack_names)
+ write_library_dirs(f, lapack_dirs)
else:
# The section title for the defaults changed in @1.10, see
# https://github.com/numpy/numpy/blob/master/site.cfg.example
@@ -116,12 +146,8 @@ class PyNumpy(PythonPackage):
f.write('[DEFAULT]\n')
else:
f.write('[ALL]\n')
- f.write('libraries=%s\n' % names)
-
- f.write('library_dirs=%s\n' % dirs)
- if not ((platform.system() == "Darwin") and
- (platform.mac_ver()[0] == '10.12')):
- f.write('rpath=%s\n' % dirs)
+ f.write('libraries=%s\n' % lapackblas_names)
+ write_library_dirs(f, lapackblas_dirs)
def build_args(self, spec, prefix):
args = []