summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/docs/basic_usage.rst17
-rw-r--r--var/spack/repos/builtin/packages/eigen/package.py1
-rw-r--r--var/spack/repos/builtin/packages/gmp/package.py2
-rw-r--r--var/spack/repos/builtin/packages/mfem/package.py125
-rw-r--r--var/spack/repos/builtin/packages/py-bottleneck/package.py2
-rw-r--r--var/spack/repos/builtin/packages/py-matplotlib/package.py2
-rw-r--r--var/spack/repos/builtin/packages/py-numexpr/package.py2
-rw-r--r--var/spack/repos/builtin/packages/py-pandas/package.py2
-rw-r--r--var/spack/repos/builtin/packages/py-scikit-image/package.py2
-rw-r--r--var/spack/repos/builtin/packages/python/package.py2
-rw-r--r--var/spack/repos/builtin/packages/turbomole/package.py124
-rw-r--r--var/spack/repos/builtin/packages/zoltan/package.py35
12 files changed, 302 insertions, 14 deletions
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst
index 0e603813e1..29791d98c4 100644
--- a/lib/spack/docs/basic_usage.rst
+++ b/lib/spack/docs/basic_usage.rst
@@ -372,25 +372,32 @@ how this is done is in :ref:`sec-specs`.
``spack compiler add``
~~~~~~~~~~~~~~~~~~~~~~~
+An alias for ``spack compiler find``.
+
+.. _spack-compiler-find:
+
+``spack compiler find``
+~~~~~~~~~~~~~~~~~~~~~~~
+
If you do not see a compiler in this list, but you want to use it with
-Spack, you can simply run ``spack compiler add`` with the path to
+Spack, you can simply run ``spack compiler find`` with the path to
where the compiler is installed. For example::
- $ spack compiler add /usr/local/tools/ic-13.0.079
+ $ spack compiler find /usr/local/tools/ic-13.0.079
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
intel@13.0.079
-Or you can run ``spack compiler add`` with no arguments to force
+Or you can run ``spack compiler find`` with no arguments to force
auto-detection. This is useful if you do not know where compilers are
installed, but you know that new compilers have been added to your
``PATH``. For example, using dotkit, you might do this::
$ module load gcc-4.9.0
- $ spack compiler add
+ $ spack compiler find
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
gcc@4.9.0
-This loads the environment module for gcc-4.9.0 to get it into the
+This loads the environment module for gcc-4.9.0 to add it to
``PATH``, and then it adds the compiler to Spack.
.. _spack-compiler-info:
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index 1501989812..6b38ab0261 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -45,6 +45,7 @@ class Eigen(Package):
# TODO : dependency on googlehash, superlu, adolc missing
+ depends_on('cmake')
depends_on('metis@5:', when='+metis')
depends_on('scotch', when='+scotch')
depends_on('fftw', when='+fftw')
diff --git a/var/spack/repos/builtin/packages/gmp/package.py b/var/spack/repos/builtin/packages/gmp/package.py
index fe13de3b95..85e9c237d6 100644
--- a/var/spack/repos/builtin/packages/gmp/package.py
+++ b/var/spack/repos/builtin/packages/gmp/package.py
@@ -35,6 +35,8 @@ class Gmp(Package):
version('6.0.0a', 'b7ff2d88cae7f8085bd5006096eed470')
version('6.0.0' , '6ef5869ae735db9995619135bd856b84')
+ depends_on("m4")
+
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py
new file mode 100644
index 0000000000..510e09c4e1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mfem/package.py
@@ -0,0 +1,125 @@
+from spack import *
+import glob, string
+
+class Mfem(Package):
+ """Free, lightweight, scalable C++ library for finite element methods."""
+
+ homepage = 'http://www.mfem.org'
+ url = 'https://github.com/mfem/mfem'
+
+# version('3.1', git='https://github.com/mfem/mfem.git',
+# commit='dbae60fe32e071989b52efaaf59d7d0eb2a3b574')
+
+ version('3.1', '841ea5cf58de6fae4de0f553b0e01ebaab9cd9c67fa821e8a715666ecf18fc57',
+ url='http://goo.gl/xrScXn', expand=False)
+
+ variant('metis', default=False, description='Activate support for metis')
+ variant('hypre', default=False, description='Activate support for hypre')
+ variant('suite-sparse', default=False,
+ description='Activate support for SuiteSparse')
+ variant('mpi', default=False, description='Activate support for MPI')
+ variant('lapack', default=False, description='Activate support for LAPACK')
+ variant('debug', default=False, description='Build debug version')
+
+ depends_on('blas', when='+lapack')
+ depends_on('lapack', when='+lapack')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('metis', when='+mpi')
+ depends_on('hypre', when='+mpi')
+
+ depends_on('hypre', when='+hypre')
+
+ depends_on('metis@4:', when='+metis')
+
+ depends_on('suite-sparse', when='+suite-sparse')
+ depends_on('blas', when='+suite-sparse')
+ depends_on('lapack', when='+suite-sparse')
+ depends_on('metis@5:', when='+suite-sparse ^suite-sparse@4.5:')
+ depends_on('cmake', when='^metis@5:')
+
+ def check_variants(self, spec):
+ if '+mpi' in spec and ('+hypre' not in spec or '+metis' not in spec):
+ raise InstallError('mfem+mpi must be built with +hypre ' +
+ 'and +metis!')
+ if '+suite-sparse' in spec and ('+metis' not in spec or
+ '+lapack' not in spec):
+ raise InstallError('mfem+suite-sparse must be built with ' +
+ '+metis and +lapack!')
+ if 'metis@5:' in spec and '%clang' in spec and ('^cmake %gcc' not in spec):
+ raise InstallError('To work around CMake bug with clang, must ' +
+ 'build mfem with mfem[+variants] %clang ' +
+ '^cmake %gcc to force CMake to build with gcc')
+ return
+
+ def install(self, spec, prefix):
+ self.check_variants(spec)
+
+ options = ['PREFIX=%s' % prefix]
+
+ if '+lapack' in spec:
+ lapack_lib = '-L{0} -llapack -L{1} -lblas'.format(
+ spec['lapack'].prefix.lib, spec['blas'].prefix.lib)
+ options.extend(['MFEM_USE_LAPACK=YES',
+ 'LAPACK_OPT=-I%s' % spec['lapack'].prefix.include,
+ 'LAPACK_LIB=%s' % lapack_lib])
+
+ if '+hypre' in spec:
+ options.extend(['HYPRE_DIR=%s' % spec['hypre'].prefix,
+ 'HYPRE_OPT=-I%s' % spec['hypre'].prefix.include,
+ 'HYPRE_LIB=-L%s' % spec['hypre'].prefix.lib +
+ ' -lHYPRE'])
+
+ if '+metis' in spec:
+ metis_lib = '-L%s -lmetis' % spec['metis'].prefix.lib
+ if spec['metis'].satisfies('@5:'):
+ metis_str = 'MFEM_USE_METIS_5=YES'
+ else:
+ metis_str = 'MFEM_USE_METIS_5=NO'
+ options.extend([metis_str,
+ 'METIS_DIR=%s' % spec['metis'].prefix,
+ 'METIS_OPT=-I%s' % spec['metis'].prefix.include,
+ 'METIS_LIB=%s' % metis_lib])
+
+ if '+mpi' in spec: options.extend(['MFEM_USE_MPI=YES'])
+
+ if '+suite-sparse' in spec:
+ ssp = spec['suite-sparse'].prefix
+ ss_lib = '-L%s' % ssp.lib
+ ss_lib += (' -lumfpack -lcholmod -lcolamd -lamd -lcamd' +
+ ' -lccolamd -lsuitesparseconfig')
+
+ no_librt_archs = ['darwin-i686', 'darwin-x86_64']
+ no_rt = any(map(lambda a: spec.satisfies('='+a), no_librt_archs))
+ if not no_rt: ss_lib += ' -lrt'
+ ss_lib += (' ' + metis_lib + ' ' + lapack_lib)
+
+ options.extend(['MFEM_USE_SUITESPARSE=YES',
+ 'SUITESPARSE_DIR=%s' % ssp,
+ 'SUITESPARSE_OPT=-I%s' % ssp.include,
+ 'SUITESPARSE_LIB=%s' % ss_lib])
+
+ if '+debug' in spec: options.extend(['MFEM_DEBUG=YES'])
+
+ # Dirty hack to cope with URL redirect
+ tgz_file = string.split(self.url,'/')[-1]
+ tar = which('tar')
+ tar('xzvf', tgz_file)
+ cd(glob.glob('mfem*')[0])
+ # End dirty hack to cope with URL redirect
+
+ make('config', *options)
+ make('all')
+
+ # Run a small test before installation
+ args = ['-m', join_path('data','star.mesh'), '--no-visualization']
+ if '+mpi' in spec:
+ Executable(join_path(spec['mpi'].prefix.bin,
+ 'mpirun'))('-np',
+ '4',
+ join_path('examples','ex1p'),
+ *args)
+ else:
+ Executable(join_path('examples', 'ex1'))(*args)
+
+ make('install')
diff --git a/var/spack/repos/builtin/packages/py-bottleneck/package.py b/var/spack/repos/builtin/packages/py-bottleneck/package.py
index 0aa4208b4d..d43308543b 100644
--- a/var/spack/repos/builtin/packages/py-bottleneck/package.py
+++ b/var/spack/repos/builtin/packages/py-bottleneck/package.py
@@ -7,7 +7,7 @@ class PyBottleneck(Package):
version('1.0.0', '380fa6f275bd24f27e7cf0e0d752f5d2')
- extends('python', ignore=r'bin/f2py$')
+ extends('python')
depends_on('py-numpy')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index 19194c942e..1a190cc5f3 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -12,7 +12,7 @@ class PyMatplotlib(Package):
variant('gui', default=False, description='Enable GUI')
variant('ipython', default=False, description='Enable ipython support')
- extends('python', ignore=r'bin/nosetests.*$|bin/pbr$|bin/f2py$')
+ extends('python', ignore=r'bin/nosetests.*$|bin/pbr$')
depends_on('py-pyside', when='+gui')
depends_on('py-ipython', when='+ipython')
diff --git a/var/spack/repos/builtin/packages/py-numexpr/package.py b/var/spack/repos/builtin/packages/py-numexpr/package.py
index 081a79dec6..0076aa456b 100644
--- a/var/spack/repos/builtin/packages/py-numexpr/package.py
+++ b/var/spack/repos/builtin/packages/py-numexpr/package.py
@@ -9,7 +9,7 @@ class PyNumexpr(Package):
version('2.4.6', '17ac6fafc9ea1ce3eb970b9abccb4fbd')
version('2.5', '84f66cced45ba3e30dcf77a937763aaa')
- extends('python', ignore=r'bin/f2py$')
+ extends('python')
depends_on('py-numpy')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-pandas/package.py b/var/spack/repos/builtin/packages/py-pandas/package.py
index 2320b1f92f..59d515eb5e 100644
--- a/var/spack/repos/builtin/packages/py-pandas/package.py
+++ b/var/spack/repos/builtin/packages/py-pandas/package.py
@@ -10,7 +10,7 @@ class PyPandas(Package):
version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6')
- extends('python', ignore=r'bin/f2py$')
+ extends('python')
depends_on('py-dateutil')
depends_on('py-numpy')
depends_on('py-setuptools')
diff --git a/var/spack/repos/builtin/packages/py-scikit-image/package.py b/var/spack/repos/builtin/packages/py-scikit-image/package.py
index 22ce1f8374..d13339060e 100644
--- a/var/spack/repos/builtin/packages/py-scikit-image/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-image/package.py
@@ -7,7 +7,7 @@ class PyScikitImage(Package):
version('0.12.3', '04ea833383e0b6ad5f65da21292c25e1')
- extends('python', ignore=r'bin/.*\.py$|bin/f2py$')
+ extends('python', ignore=r'bin/.*\.py$')
depends_on('py-dask')
depends_on('py-pillow')
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index f5237c3b57..f7e1d94567 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -151,6 +151,8 @@ class Python(Package):
patterns.append(r'setuptools\.pth')
patterns.append(r'bin/easy_install[^/]*$')
patterns.append(r'setuptools.*egg$')
+ if ext_pkg.name != 'py-numpy':
+ patterns.append(r'bin/f2py$')
return match_predicate(ignore_arg, patterns)
diff --git a/var/spack/repos/builtin/packages/turbomole/package.py b/var/spack/repos/builtin/packages/turbomole/package.py
new file mode 100644
index 0000000000..acc95e3b10
--- /dev/null
+++ b/var/spack/repos/builtin/packages/turbomole/package.py
@@ -0,0 +1,124 @@
+from spack import *
+import os
+import subprocess
+
+class Turbomole(Package):
+ """TURBOMOLE: Program Package for ab initio Electronic Structure
+ Calculations. NB: Requires a license to download."""
+
+ # NOTE: Turbomole requires purchase of a license to download. Go to the
+ # NOTE: Turbomole home page, http://www.turbomole-gmbh.com, for details.
+ # NOTE: Spack will search the current directory for this file. It is
+ # NOTE: probably best to add this file to a Spack mirror so that it can be
+ # NOTE: found from anywhere. For information on setting up a Spack mirror
+ # NOTE: see http://software.llnl.gov/spack/mirrors.html
+
+ homepage = "http://www.turbomole-gmbh.com/"
+
+ version('7.0.2', '92b97e1e52e8dcf02a4d9ac0147c09d6',
+ url="file://%s/turbolinux702.tar.gz" % os.getcwd())
+
+ variant('mpi', default=False, description='Set up MPI environment')
+ variant('smp', default=False, description='Set up SMP environment')
+
+ # Turbomole's install is odd. There are three variants
+ # - serial
+ # - parallel, MPI
+ # - parallel, SMP
+ #
+ # Only one of these can be active at a time. MPI and SMP are set as
+ # variants so there could be up to 3 installs per version. Switching
+ # between them would be accomplished with `module swap` commands.
+
+ def do_fetch(self, mirror_only=True):
+ if '+mpi' in self.spec and '+smp' in self.spec:
+ raise InstallError('Can not have both SMP and MPI enabled in the same build.')
+ super(Turbomole, self).do_fetch(mirror_only)
+
+ def get_tm_arch(self):
+ # For python-2.7 we could use `tm_arch = subprocess.check_output()`
+ # Use the following for compatibility with python 2.6
+ if 'TURBOMOLE' in os.getcwd():
+ tm_arch = subprocess.Popen(['sh', 'scripts/sysname'],
+ stdout=subprocess.PIPE).communicate()[0]
+ return tm_arch.rstrip('\n')
+ else:
+ return
+
+ def install(self, spec, prefix):
+ if spec.satisfies('@:7.0.2'):
+ calculate_version = 'calculate_2.4_linux64'
+ molecontrol_version = 'MoleControl_2.5'
+
+ tm_arch=self.get_tm_arch()
+
+ tar = which('tar')
+ dst = join_path(prefix, 'TURBOMOLE')
+
+ tar('-x', '-z', '-f', 'thermocalc.tar.gz')
+ with working_dir('thermocalc'):
+ cmd = 'sh install <<<y'
+ subprocess.call(cmd, shell=True)
+
+ install_tree('basen', join_path(dst, 'basen'))
+ install_tree('cabasen', join_path(dst, 'cabasen'))
+ install_tree(calculate_version, join_path(dst, calculate_version))
+ install_tree('cbasen', join_path(dst, 'cbasen'))
+ install_tree('DOC', join_path(dst, 'DOC'))
+ install_tree('jbasen', join_path(dst, 'jbasen'))
+ install_tree('jkbasen', join_path(dst, 'jkbasen'))
+ install_tree(molecontrol_version, join_path(dst, molecontrol_version))
+ install_tree('parameter', join_path(dst, 'parameter'))
+ install_tree('perlmodules', join_path(dst, 'perlmodules'))
+ install_tree('scripts', join_path(dst, 'scripts'))
+ install_tree('smprun_scripts', join_path(dst, 'smprun_scripts'))
+ install_tree('structures', join_path(dst, 'structures'))
+ install_tree('thermocalc', join_path(dst, 'thermocalc'))
+ install_tree('TURBOTEST', join_path(dst, 'TURBOTEST'))
+ install_tree('xbasen', join_path(dst, 'xbasen'))
+
+ install('Config_turbo_env', dst)
+ install('Config_turbo_env.tcsh', dst)
+ install('README', dst)
+ install('README_LICENSES', dst)
+ install('TURBOMOLE_702_LinuxPC', dst)
+
+ if '+mpi' in spec:
+ install_tree('bin/%s_mpi' % tm_arch, join_path(dst, 'bin', '%s_mpi' % tm_arch))
+ install_tree('libso/%s_mpi' % tm_arch, join_path(dst, 'libso', '%s_mpi' % tm_arch))
+ install_tree('mpirun_scripts/%s_mpi' % tm_arch, join_path(dst, 'mpirun_scripts', '%s_mpi' % tm_arch))
+ elif '+smp' in spec:
+ install_tree('bin/%s_smp' % tm_arch, join_path(dst, 'bin', '%s_smp' % tm_arch))
+ install_tree('libso/%s_smp' % tm_arch, join_path(dst, 'libso', '%s_smp' % tm_arch))
+ install_tree('mpirun_scripts/%s_smp' % tm_arch, join_path(dst, 'mpirun_scripts', '%s_smp' % tm_arch))
+ else:
+ install_tree('bin/%s' % tm_arch, join_path(dst, 'bin', tm_arch))
+ if '+mpi' in spec or '+smp' in spec:
+ install('mpirun_scripts/ccsdf12', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/dscf', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/grad', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/mpgrad', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/pnoccsd', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/rdgrad', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/ricc2', join_path(dst, 'mpirun_scripts'))
+ install('mpirun_scripts/ridft', join_path(dst, 'mpirun_scripts'))
+
+ def setup_environment(self, spack_env, run_env):
+ if self.spec.satisfies('@:7.0.2'):
+ molecontrol_version = 'MoleControl_2.5'
+
+ tm_arch=self.get_tm_arch()
+
+ run_env.set('TURBODIR', join_path(self.prefix, 'TURBOMOLE'))
+ run_env.set('MOLE_CONTROL', join_path(self.prefix, 'TURBOMOLE', molecontrol_version))
+
+ run_env.prepend_path('PATH', join_path(self.prefix, 'TURBOMOLE', 'thermocalc'))
+ run_env.prepend_path('PATH', join_path(self.prefix, 'TURBOMOLE', 'scripts'))
+ if '+mpi' in self.spec:
+ run_env.set('PARA_ARCH', 'MPI')
+ run_env.prepend_path('PATH', join_path(self.prefix, 'TURBOMOLE', 'bin', '%s_mpi' % tm_arch))
+ elif '+smp' in self.spec:
+ run_env.set('PARA_ARCH', 'SMP')
+ run_env.prepend_path('PATH', join_path(self.prefix, 'TURBOMOLE', 'bin', '%s_smp' % tm_arch))
+ else:
+ run_env.prepend_path('PATH', join_path(self.prefix, 'TURBOMOLE', 'bin', tm_arch))
diff --git a/var/spack/repos/builtin/packages/zoltan/package.py b/var/spack/repos/builtin/packages/zoltan/package.py
index e20ae81adb..738dfb508b 100644
--- a/var/spack/repos/builtin/packages/zoltan/package.py
+++ b/var/spack/repos/builtin/packages/zoltan/package.py
@@ -1,3 +1,4 @@
+import re, os, glob
from spack import *
class Zoltan(Package):
@@ -12,8 +13,13 @@ class Zoltan(Package):
base_url = "http://www.cs.sandia.gov/~kddevin/Zoltan_Distributions"
version('3.83', '1ff1bc93f91e12f2c533ddb01f2c095f')
+ version('3.8', '9d8fba8a990896881b85351d4327c4a9')
+ version('3.6', '9cce794f7241ecd8dbea36c3d7a880f9')
version('3.3', '5eb8f00bda634b25ceefa0122bd18d65')
+ variant('debug', default=False, description='Builds a debug version of the library')
+ variant('shared', default=True, description='Builds a shared version of the library')
+
variant('fortran', default=True, description='Enable Fortran support')
variant('mpi', default=False, description='Enable MPI support')
@@ -24,28 +30,49 @@ class Zoltan(Package):
'--enable-f90interface' if '+fortan' in spec else '--disable-f90interface',
'--enable-mpi' if '+mpi' in spec else '--disable-mpi',
]
+ config_cflags = [
+ '-O0' if '+debug' in spec else '-O3',
+ '-g' if '+debug' in spec else '-g0',
+ ]
+
+ if '+shared' in spec:
+ config_args.append('--with-ar=$(CXX) -shared $(LDFLAGS) -o')
+ config_args.append('RANLIB=echo')
+ config_cflags.append('-fPIC')
if '+mpi' in spec:
- config_args.append('--with-mpi=%s' % spec['mpi'].prefix)
- config_args.append('--with-mpi-compilers=%s' % spec['mpi'].prefix.bin)
config_args.append('CC=%s/mpicc' % spec['mpi'].prefix.bin)
config_args.append('CXX=%s/mpicxx' % spec['mpi'].prefix.bin)
+ config_args.append('--with-mpi=%s' % spec['mpi'].prefix)
+ config_args.append('--with-mpi-compilers=%s' % spec['mpi'].prefix.bin)
# NOTE: Early versions of Zoltan come packaged with a few embedded
# library packages (e.g. ParMETIS, Scotch), which messes with Spack's
# ability to descend directly into the package's source directory.
- if spec.satisfies('@:3.3'):
+ if spec.satisfies('@:3.6'):
cd('Zoltan_v%s' % self.version)
mkdirp('build')
cd('build')
config_zoltan = Executable('../configure')
- config_zoltan('--prefix=%s' % pwd(), *config_args)
+ config_zoltan(
+ '--prefix=%s' % pwd(),
+ '--with-cflags=%s' % ' '.join(config_cflags),
+ '--with-cxxflags=%s' % ' '.join(config_cflags),
+ *config_args)
make()
make('install')
+ # NOTE: Unfortunately, Zoltan doesn't provide any configuration options for
+ # the extension of the output library files, so this script must change these
+ # extensions as a post-processing step.
+ if '+shared' in spec:
+ for libpath in glob.glob('lib/*.a'):
+ libdir, libname = (os.path.dirname(libpath), os.path.basename(libpath))
+ move(libpath, os.path.join(libdir, re.sub(r'\.a$', '.so', libname)))
+
mkdirp(prefix)
move('include', prefix)
move('lib', prefix)