summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/cmd/module.py10
-rw-r--r--lib/spack/spack/modules.py6
-rw-r--r--lib/spack/spack/test/mock_database.py4
-rw-r--r--var/spack/repos/builtin/packages/bash/package.py20
-rw-r--r--var/spack/repos/builtin/packages/dealii/package.py2
-rw-r--r--var/spack/repos/builtin/packages/eigen/package.py2
-rw-r--r--var/spack/repos/builtin/packages/metis/package.py86
-rw-r--r--var/spack/repos/builtin/packages/mpich/package.py12
-rw-r--r--var/spack/repos/builtin/packages/mumps/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mvapich2/package.py7
-rw-r--r--var/spack/repos/builtin/packages/ncurses/package.py7
-rw-r--r--var/spack/repos/builtin/packages/netlib-lapack/package.py13
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py8
-rw-r--r--var/spack/repos/builtin/packages/parmetis/package.py2
-rw-r--r--var/spack/repos/builtin/packages/petsc/package.py2
-rw-r--r--var/spack/repos/builtin/packages/readline/package.py4
-rw-r--r--var/spack/repos/builtin/packages/superlu-dist/package.py2
-rw-r--r--var/spack/repos/builtin/packages/trilinos/package.py2
18 files changed, 147 insertions, 44 deletions
diff --git a/lib/spack/spack/cmd/module.py b/lib/spack/spack/cmd/module.py
index 315d9fc926..a67f5c0c13 100644
--- a/lib/spack/spack/cmd/module.py
+++ b/lib/spack/spack/cmd/module.py
@@ -22,21 +22,16 @@
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import sys
import os
import shutil
-import argparse
+import sys
import llnl.util.tty as tty
-from llnl.util.lang import partition_list
-from llnl.util.filesystem import mkdirp
-
import spack.cmd
+from llnl.util.filesystem import mkdirp
from spack.modules import module_types
from spack.util.string import *
-from spack.spec import Spec
-
description ="Manipulate modules and dotkits."
@@ -98,7 +93,6 @@ def module_refresh():
cls(spec).write()
-
def module(parser, args):
if args.module_command == 'refresh':
module_refresh()
diff --git a/lib/spack/spack/modules.py b/lib/spack/spack/modules.py
index d797af287d..61624fbd70 100644
--- a/lib/spack/spack/modules.py
+++ b/lib/spack/spack/modules.py
@@ -211,7 +211,11 @@ class EnvModule(object):
def remove(self):
mod_file = self.file_name
if os.path.exists(mod_file):
- shutil.rmtree(mod_file, ignore_errors=True)
+ try:
+ os.remove(mod_file) # Remove the module file
+ os.removedirs(os.path.dirname(mod_file)) # Remove all the empty directories from the leaf up
+ except OSError:
+ pass # removedirs throws OSError on first non-empty directory found
class Dotkit(EnvModule):
diff --git a/lib/spack/spack/test/mock_database.py b/lib/spack/spack/test/mock_database.py
index 6fd05439bf..82ba59fc48 100644
--- a/lib/spack/spack/test/mock_database.py
+++ b/lib/spack/spack/test/mock_database.py
@@ -17,7 +17,7 @@ class MockDatabase(MockPackagesTest):
def _mock_remove(self, spec):
specs = spack.installed_db.query(spec)
- assert(len(specs) == 1)
+ assert len(specs) == 1
spec = specs[0]
spec.package.do_uninstall(spec)
@@ -71,6 +71,8 @@ class MockDatabase(MockPackagesTest):
self._mock_install('mpileaks ^zmpi')
def tearDown(self):
+ for spec in spack.installed_db.query():
+ spec.package.do_uninstall(spec)
super(MockDatabase, self).tearDown()
shutil.rmtree(self.install_path)
spack.install_path = self.spack_install_path
diff --git a/var/spack/repos/builtin/packages/bash/package.py b/var/spack/repos/builtin/packages/bash/package.py
new file mode 100644
index 0000000000..9c9fbeedcf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bash/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class Bash(Package):
+ """The GNU Project's Bourne Again SHell."""
+
+ homepage = "https://www.gnu.org/software/bash/"
+ url = "ftp://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz"
+
+ version('4.3', '81348932d5da294953e15d4814c74dd1')
+
+ depends_on('readline')
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix,
+ '--with-curses',
+ '--with-installed-readline=%s' % spec['readline'].prefix)
+
+ make()
+ make("tests")
+ make("install")
diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py
index 1f763ad358..b251d50ca1 100644
--- a/var/spack/repos/builtin/packages/dealii/package.py
+++ b/var/spack/repos/builtin/packages/dealii/package.py
@@ -40,7 +40,7 @@ class Dealii(Package):
depends_on ("arpack-ng+mpi", when='+arpack+mpi')
depends_on ("doxygen", when='+doc')
depends_on ("hdf5+mpi~cxx", when='+hdf5+mpi') #FIXME NetCDF declares dependency with ~cxx, why?
- depends_on ("metis", when='+metis')
+ depends_on ("metis@5:", when='+metis')
depends_on ("netcdf+mpi", when="+netcdf+mpi")
depends_on ("netcdf-cxx", when='+netcdf+mpi')
depends_on ("oce", when='+oce')
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index 8d6e672f86..1501989812 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -45,7 +45,7 @@ class Eigen(Package):
# TODO : dependency on googlehash, superlu, adolc missing
- depends_on('metis', when='+metis')
+ depends_on('metis@5:', when='+metis')
depends_on('scotch', when='+scotch')
depends_on('fftw', when='+fftw')
depends_on('suite-sparse', when='+suitesparse')
diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py
index d3bab554fe..41e3ebb429 100644
--- a/var/spack/repos/builtin/packages/metis/package.py
+++ b/var/spack/repos/builtin/packages/metis/package.py
@@ -24,7 +24,7 @@
##############################################################################
from spack import *
-import glob,sys
+import glob, sys, os
class Metis(Package):
"""
@@ -36,7 +36,10 @@ class Metis(Package):
homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview'
url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"
- version('5.1.0', '5465e67079419a69e0116de24fce58fe')
+ version('5.1.0', '5465e67079419a69e0116de24fce58fe',
+ url='http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz')
+ version('4.0.3', '5efa35de80703c1b2c4d0de080fafbcf4e0d363a21149a1ad2f96e0144841a55',
+ url='http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD/metis-4.0.3.tar.gz')
variant('shared', default=True, description='Enables the build of shared libraries')
variant('debug', default=False, description='Builds the library in debug mode')
@@ -45,12 +48,85 @@ class Metis(Package):
variant('idx64', default=False, description='Use int64_t as default index type')
variant('double', default=False, description='Use double precision floating point types')
- depends_on('cmake @2.8:') # build-time dependency
-
+ depends_on('cmake @2.8:', when='@5:') # build-time dependency
depends_on('gdb', when='+gdb')
- patch('install_gklib_defs_rename.patch')
+ patch('install_gklib_defs_rename.patch', when='@5:')
+
+
+ @when('@4:4.0.3')
+ def install(self, spec, prefix):
+ if '+gdb' in spec:
+ raise InstallError('gdb support not implemented in METIS 4!')
+ if '+idx64' in spec:
+ raise InstallError('idx64 option not implemented in METIS 4!')
+ if '+double' in spec:
+ raise InstallError('double option not implemented for METIS 4!')
+
+ options = ['COPTIONS=-fPIC']
+ if '+debug' in spec:
+ options.append('OPTFLAGS=-g -O0')
+ make(*options)
+
+ mkdir(prefix.bin)
+ for x in ('pmetis', 'kmetis', 'oemetis', 'onmetis', 'partnmesh',
+ 'partdmesh', 'mesh2nodal', 'mesh2dual', 'graphchk'):
+ install(x, prefix.bin)
+
+ mkdir(prefix.lib)
+ install('libmetis.a', prefix.lib)
+
+ mkdir(prefix.include)
+ for h in glob.glob(join_path('Lib', '*.h')):
+ install(h, prefix.include)
+
+ mkdir(prefix.share)
+ for f in (join_path(*p)
+ for p in (('Programs', 'io.c'),
+ ('Test','mtest.c'),
+ ('Graphs','4elt.graph'),
+ ('Graphs', 'metis.mesh'),
+ ('Graphs', 'test.mgraph'))):
+ install(f, prefix.share)
+
+ if '+shared' in spec:
+ if sys.platform == 'darwin':
+ lib_dsuffix = 'dylib'
+ load_flag = '-Wl,-all_load'
+ no_load_flag = ''
+ else:
+ lib_dsuffix = 'so'
+ load_flag = '-Wl,-whole-archive'
+ no_load_flag = '-Wl,-no-whole-archive'
+
+ os.system(spack_cc + ' -fPIC -shared ' + load_flag +
+ ' libmetis.a ' + no_load_flag + ' -o libmetis.' +
+ lib_dsuffix)
+ install('libmetis.' + lib_dsuffix, prefix.lib)
+
+ # Set up and run tests on installation
+ symlink(join_path(prefix.share, 'io.c'), 'io.c')
+ symlink(join_path(prefix.share, 'mtest.c'), 'mtest.c')
+ os.system(spack_cc + ' -I%s' % prefix.include + ' -c io.c')
+ os.system(spack_cc + ' -I%s' % prefix.include +
+ ' -L%s' % prefix.lib + ' -lmetis mtest.c io.o -o mtest')
+ _4eltgraph = join_path(prefix.share, '4elt.graph')
+ test_mgraph = join_path(prefix.share, 'test.mgraph')
+ metis_mesh = join_path(prefix.share, 'metis.mesh')
+ kmetis = join_path(prefix.bin, 'kmetis')
+ os.system('./mtest ' + _4eltgraph)
+ os.system(kmetis + ' ' + _4eltgraph + ' 40')
+ os.system(join_path(prefix.bin, 'onmetis') + ' ' + _4eltgraph)
+ os.system(join_path(prefix.bin, 'pmetis') + ' ' + test_mgraph + ' 2')
+ os.system(kmetis + ' ' + test_mgraph + ' 2')
+ os.system(kmetis + ' ' + test_mgraph + ' 5')
+ os.system(join_path(prefix.bin, 'partnmesh') + metis_mesh + ' 10')
+ os.system(join_path(prefix.bin, 'partdmesh') + metis_mesh + ' 10')
+ os.system(join_path(prefix.bin, 'mesh2dual') + metis_mesh)
+
+
+ @when('@5:')
def install(self, spec, prefix):
options = []
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py
index 2d7955e08d..b317ec6651 100644
--- a/var/spack/repos/builtin/packages/mpich/package.py
+++ b/var/spack/repos/builtin/packages/mpich/package.py
@@ -47,12 +47,12 @@ class Mpich(Package):
provides('mpi@:3.0', when='@3:')
provides('mpi@:1.3', when='@1:')
- def setup_dependent_environment(self, env, dependent_spec):
- env.set('MPICH_CC', spack_cc)
- env.set('MPICH_CXX', spack_cxx)
- env.set('MPICH_F77', spack_f77)
- env.set('MPICH_F90', spack_f90)
- env.set('MPICH_FC', spack_fc)
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.set('MPICH_CC', spack_cc)
+ spack_env.set('MPICH_CXX', spack_cxx)
+ spack_env.set('MPICH_F77', spack_f77)
+ spack_env.set('MPICH_F90', spack_fc)
+ spack_env.set('MPICH_FC', spack_fc)
def setup_dependent_package(self, module, dep_spec):
"""For dependencies, make mpicc's use spack wrapper."""
diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py
index 025d86ebdc..58f790ec32 100644
--- a/var/spack/repos/builtin/packages/mumps/package.py
+++ b/var/spack/repos/builtin/packages/mumps/package.py
@@ -23,7 +23,7 @@ class Mumps(Package):
depends_on('scotch + esmumps', when='~ptscotch+scotch')
depends_on('scotch + esmumps + mpi', when='+ptscotch')
- depends_on('metis', when='+metis')
+ depends_on('metis@5:', when='+metis')
depends_on('parmetis', when="+parmetis")
depends_on('blas')
depends_on('lapack')
diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index e4e95f92af..3e60b517db 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -140,6 +140,13 @@ class Mvapich2(Package):
configure_args.extend(network_options)
+ def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ spack_env.set('MPICH_CC', spack_cc)
+ spack_env.set('MPICH_CXX', spack_cxx)
+ spack_env.set('MPICH_F77', spack_f77)
+ spack_env.set('MPICH_F90', spack_fc)
+ spack_env.set('MPICH_FC', spack_fc)
+
def install(self, spec, prefix):
# we'll set different configure flags depending on our environment
configure_args = [
diff --git a/var/spack/repos/builtin/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py
index 8dc808caac..219fbce226 100644
--- a/var/spack/repos/builtin/packages/ncurses/package.py
+++ b/var/spack/repos/builtin/packages/ncurses/package.py
@@ -8,11 +8,10 @@ class Ncurses(Package):
"""
homepage = "http://invisible-island.net/ncurses/ncurses.html"
+ url = "http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz"
- version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1',
- url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz')
- version('6.0', 'ee13d052e1ead260d7c28071f46eefb1',
- url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz')
+ version('6.0', 'ee13d052e1ead260d7c28071f46eefb1')
+ version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1')
patch('patch_gcc_5.txt', when='%gcc@5.0:')
diff --git a/var/spack/repos/builtin/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py
index 05436332ac..f70e634347 100644
--- a/var/spack/repos/builtin/packages/netlib-lapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py
@@ -34,15 +34,17 @@ class NetlibLapack(Package):
def patch(self):
# Fix cblas CMakeLists.txt -- has wrong case for subdirectory name.
- filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/',
- '${CMAKE_CURRENT_SOURCE_DIR}/cmake/', 'CBLAS/CMakeLists.txt', string=True)
-
+ if self.spec.satisfies('@3.6.0:'):
+ filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/',
+ '${CMAKE_CURRENT_SOURCE_DIR}/cmake/', 'CBLAS/CMakeLists.txt', string=True)
def install_one(self, spec, prefix, shared):
cmake_args = ['-DBUILD_SHARED_LIBS:BOOL=%s' % ('ON' if shared else 'OFF'),
- '-DCBLAS=ON', # always build CBLAS
'-DCMAKE_BUILD_TYPE:STRING=%s' % ('Debug' if '+debug' in spec else 'Release'),
'-DLAPACKE:BOOL=%s' % ('ON' if '+lapacke' in spec else 'OFF')]
+ if spec.satisfies('@3.6.0:'):
+ cmake_args.extend(['-DCBLAS=ON']) # always build CBLAS
+
if '+external-blas' in spec:
# TODO : the mechanism to specify the library should be more general,
# TODO : but this allows to have an hook to an external blas
@@ -80,6 +82,3 @@ class NetlibLapack(Package):
if '+shared' in self.spec:
self.spec.blas_shared_lib = join_path(libdir, 'libblas.%s' % dso_suffix)
self.spec.lapack_shared_lib = join_path(libdir, 'liblapack.%s' % dso_suffix)
-
-
-
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index 4ec829a85b..9f13d0690b 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -19,8 +19,11 @@ class Openblas(Package):
def install(self, spec, prefix):
- make_defs = ['CC=%s' % spack_cc,
- 'FC=%s' % spack_fc]
+ # Openblas is picky about compilers. Configure fails with
+ # FC=/abs/path/to/f77, whereas FC=f77 works fine.
+ # To circumvent this, provide basename only:
+ make_defs = ['CC=%s' % os.path.basename(spack_cc),
+ 'FC=%s' % os.path.basename(spack_f77)]
make_targets = ['libs', 'netlib']
@@ -67,4 +70,3 @@ class Openblas(Package):
if '+shared' in self.spec:
self.spec.blas_shared_lib = join_path(libdir, 'libopenblas.%s' % dso_suffix)
self.spec.lapack_shared_lib = self.spec.blas_shared_lib
-
diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py
index ff4370aa4b..b49f8dae00 100644
--- a/var/spack/repos/builtin/packages/parmetis/package.py
+++ b/var/spack/repos/builtin/packages/parmetis/package.py
@@ -44,7 +44,7 @@ class Parmetis(Package):
depends_on('mpi')
patch('enable_external_metis.patch')
- depends_on('metis')
+ depends_on('metis@5:')
# bug fixes from PETSc developers
# https://bitbucket.org/petsc/pkg-parmetis/commits/1c1a9fd0f408dc4d42c57f5c3ee6ace411eb222b/raw/
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index 5c1fc6cc92..1161dd7d67 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -40,7 +40,7 @@ class Petsc(Package):
# Other dependencies
depends_on('boost', when='+boost')
- depends_on('metis', when='+metis')
+ depends_on('metis@5:', when='+metis')
depends_on('hdf5+mpi', when='+hdf5+mpi')
depends_on('parmetis', when='+metis+mpi')
diff --git a/var/spack/repos/builtin/packages/readline/package.py b/var/spack/repos/builtin/packages/readline/package.py
index 1b870e0e7f..0c429ea756 100644
--- a/var/spack/repos/builtin/packages/readline/package.py
+++ b/var/spack/repos/builtin/packages/readline/package.py
@@ -2,12 +2,12 @@ from spack import *
class Readline(Package):
"""The GNU Readline library provides a set of functions for use by
- applications that allow users to edit command li nes as they
+ applications that allow users to edit command lines as they
are typed in. Both Emacs and vi editing modes are
available. The Readline library includes additional functions
to maintain a list of previously-entered command lines, to
recall and perhaps reedit those lines, and perform csh-like
- history expansion on previous commands. """
+ history expansion on previous commands."""
homepage = "http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html"
url = "ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz"
diff --git a/var/spack/repos/builtin/packages/superlu-dist/package.py b/var/spack/repos/builtin/packages/superlu-dist/package.py
index ddcb7f9225..5cf5e129b4 100644
--- a/var/spack/repos/builtin/packages/superlu-dist/package.py
+++ b/var/spack/repos/builtin/packages/superlu-dist/package.py
@@ -15,7 +15,7 @@ class SuperluDist(Package):
depends_on ('blas')
depends_on ('lapack')
depends_on ('parmetis')
- depends_on ('metis')
+ depends_on ('metis@5:')
def install(self, spec, prefix):
makefile_inc = []
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 6223848c68..0f72055fa7 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -42,7 +42,7 @@ class Trilinos(Package):
depends_on('matio')
depends_on('glm')
depends_on('swig')
- depends_on('metis',when='+metis')
+ depends_on('metis@5:',when='+metis')
depends_on('suite-sparse',when='+suite-sparse')
# MPI related dependencies