Merge branch 'develop' into eschnett/julia

This commit is contained in:
Erik Schnetter 2016-04-11 15:40:27 -04:00
commit 882e2e42cf
23 changed files with 209 additions and 92 deletions

94
lib/spack/env/cc vendored
View File

@ -39,7 +39,7 @@
# #
# This is the list of environment variables that need to be set before # This is the list of environment variables that need to be set before
# the script runs. They are set by routines in spack.build_environment # the script runs. They are set by routines in spack.build_environment
# as part of spack.package.Package.do_install(). # as part of spack.package.Package.do_install().
parameters=" parameters="
SPACK_PREFIX SPACK_PREFIX
@ -50,7 +50,7 @@ SPACK_SHORT_SPEC"
# The compiler input variables are checked for sanity later: # The compiler input variables are checked for sanity later:
# SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC # SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC
# Debug flag is optional; set to true for debug logging: # Debug flag is optional; set to "TRUE" for debug logging:
# SPACK_DEBUG # SPACK_DEBUG
# Test command is used to unit test the compiler script. # Test command is used to unit test the compiler script.
# SPACK_TEST_COMMAND # SPACK_TEST_COMMAND
@ -66,11 +66,10 @@ function die {
for param in $parameters; do for param in $parameters; do
if [[ -z ${!param} ]]; then if [[ -z ${!param} ]]; then
die "Spack compiler must be run from spack! Input $param was missing!" die "Spack compiler must be run from Spack! Input '$param' is missing."
fi fi
done done
#
# Figure out the type of compiler, the language, and the mode so that # Figure out the type of compiler, the language, and the mode so that
# the compiler script knows what to do. # the compiler script knows what to do.
# #
@ -78,19 +77,18 @@ done
# 'command' is set based on the input command to $SPACK_[CC|CXX|F77|F90] # 'command' is set based on the input command to $SPACK_[CC|CXX|F77|F90]
# #
# 'mode' is set to one of: # 'mode' is set to one of:
# vcheck version check
# cpp preprocess # cpp preprocess
# cc compile # cc compile
# as assemble # as assemble
# ld link # ld link
# ccld compile & link # ccld compile & link
# vcheck version check
#
# Depending on the mode, we may or may not add extra rpaths.
# This variable controls whether they are added.
add_rpaths=true
command=$(basename "$0") command=$(basename "$0")
case "$command" in case "$command" in
cpp)
mode=cpp
;;
cc|c89|c99|gcc|clang|icc|pgcc|xlc) cc|c89|c99|gcc|clang|icc|pgcc|xlc)
command="$SPACK_CC" command="$SPACK_CC"
language="C" language="C"
@ -107,34 +105,20 @@ case "$command" in
command="$SPACK_F77" command="$SPACK_F77"
language="Fortran 77" language="Fortran 77"
;; ;;
cpp)
mode=cpp
;;
ld) ld)
mode=ld mode=ld
# Darwin's linker has a -r argument that merges object files
# together. It doesn't work with -rpath.
if [[ $OSTYPE = darwin* ]]; then
for arg in "$@"; do
if [ "$arg" = -r ]; then
add_rpaths=false
break
fi
done
fi
;; ;;
*) *)
die "Unkown compiler: $command" die "Unkown compiler: $command"
;; ;;
esac esac
# If any of the arguments below is present then the mode is vcheck. In # If any of the arguments below are present, then the mode is vcheck.
# vcheck mode nothing is added in terms of extra search paths or # In vcheck mode, nothing is added in terms of extra search paths or
# libraries # libraries.
if [ -z "$mode" ]; then if [[ -z $mode ]]; then
for arg in "$@"; do for arg in "$@"; do
if [ "$arg" = -v -o "$arg" = -V -o "$arg" = --version -o "$arg" = -dumpversion ]; then if [[ $arg == -v || $arg == -V || $arg == --version || $arg == -dumpversion ]]; then
mode=vcheck mode=vcheck
break break
fi fi
@ -142,16 +126,16 @@ if [ -z "$mode" ]; then
fi fi
# Finish setting up the mode. # Finish setting up the mode.
if [ -z "$mode" ]; then if [[ -z $mode ]]; then
mode=ccld mode=ccld
for arg in "$@"; do for arg in "$@"; do
if [ "$arg" = -E ]; then if [[ $arg == -E ]]; then
mode=cpp mode=cpp
break break
elif [ "$arg" = -S ]; then elif [[ $arg == -S ]]; then
mode=as mode=as
break break
elif [ "$arg" = -c ]; then elif [[ $arg == -c ]]; then
mode=cc mode=cc
break break
fi fi
@ -159,7 +143,7 @@ if [ -z "$mode" ]; then
fi fi
# Dump the version and exit if we're in testing mode. # Dump the version and exit if we're in testing mode.
if [ "$SPACK_TEST_COMMAND" = "dump-mode" ]; then if [[ $SPACK_TEST_COMMAND == dump-mode ]]; then
echo "$mode" echo "$mode"
exit exit
fi fi
@ -170,10 +154,23 @@ if [[ -z $command ]]; then
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs." die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
fi fi
if [ "$mode" == vcheck ] ; then if [[ $mode == vcheck ]]; then
exec ${command} "$@" exec ${command} "$@"
fi fi
# Darwin's linker has a -r argument that merges object files together.
# It doesn't work with -rpath.
# This variable controls whether they are added.
add_rpaths=true
if [[ mode == ld && $OSTYPE == darwin* ]]; then
for arg in "$@"; do
if [[ $arg == -r ]]; then
add_rpaths=false
break
fi
done
fi
# Save original command for debug logging # Save original command for debug logging
input_command="$@" input_command="$@"
args=("$@") args=("$@")
@ -183,17 +180,17 @@ IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
for dep in "${deps[@]}"; do for dep in "${deps[@]}"; do
# Prepend include directories # Prepend include directories
if [[ -d $dep/include ]]; then if [[ -d $dep/include ]]; then
if [[ $mode = cpp || $mode = cc || $mode = as || $mode = ccld ]]; then if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then
args=("-I$dep/include" "${args[@]}") args=("-I$dep/include" "${args[@]}")
fi fi
fi fi
# Prepend lib and RPATH directories # Prepend lib and RPATH directories
if [[ -d $dep/lib ]]; then if [[ -d $dep/lib ]]; then
if [[ $mode = ccld ]]; then if [[ $mode == ccld ]]; then
$add_rpaths && args=("-Wl,-rpath,$dep/lib" "${args[@]}") $add_rpaths && args=("-Wl,-rpath,$dep/lib" "${args[@]}")
args=("-L$dep/lib" "${args[@]}") args=("-L$dep/lib" "${args[@]}")
elif [[ $mode = ld ]]; then elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}") $add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
args=("-L$dep/lib" "${args[@]}") args=("-L$dep/lib" "${args[@]}")
fi fi
@ -201,10 +198,10 @@ for dep in "${deps[@]}"; do
# Prepend lib64 and RPATH directories # Prepend lib64 and RPATH directories
if [[ -d $dep/lib64 ]]; then if [[ -d $dep/lib64 ]]; then
if [[ $mode = ccld ]]; then if [[ $mode == ccld ]]; then
$add_rpaths && args=("-Wl,-rpath,$dep/lib64" "${args[@]}") $add_rpaths && args=("-Wl,-rpath,$dep/lib64" "${args[@]}")
args=("-L$dep/lib64" "${args[@]}") args=("-L$dep/lib64" "${args[@]}")
elif [[ $mode = ld ]]; then elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}") $add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
args=("-L$dep/lib64" "${args[@]}") args=("-L$dep/lib64" "${args[@]}")
fi fi
@ -212,9 +209,9 @@ for dep in "${deps[@]}"; do
done done
# Include all -L's and prefix/whatever dirs in rpath # Include all -L's and prefix/whatever dirs in rpath
if [[ $mode = ccld ]]; then if [[ $mode == ccld ]]; then
$add_rpaths && args=("-Wl,-rpath,$SPACK_PREFIX/lib" "-Wl,-rpath,$SPACK_PREFIX/lib64" "${args[@]}") $add_rpaths && args=("-Wl,-rpath,$SPACK_PREFIX/lib" "-Wl,-rpath,$SPACK_PREFIX/lib64" "${args[@]}")
elif [[ $mode = ld ]]; then elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "-rpath" "$SPACK_PREFIX/lib64" "${args[@]}") $add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
fi fi
@ -234,11 +231,14 @@ IFS=':' read -ra spack_env_dirs <<< "$SPACK_ENV_PATH"
spack_env_dirs+=("" ".") spack_env_dirs+=("" ".")
PATH="" PATH=""
for dir in "${env_path[@]}"; do for dir in "${env_path[@]}"; do
remove="" addpath=true
for rm_dir in "${spack_env_dirs[@]}"; do for env_dir in "${spack_env_dirs[@]}"; do
if [[ $dir = $rm_dir ]]; then remove=True; fi if [[ $dir == $env_dir ]]; then
addpath=false
break
fi
done done
if [[ -z $remove ]]; then if $addpath; then
PATH="${PATH:+$PATH:}$dir" PATH="${PATH:+$PATH:}$dir"
fi fi
done done
@ -247,7 +247,7 @@ export PATH
full_command=("$command" "${args[@]}") full_command=("$command" "${args[@]}")
# In test command mode, write out full command for Spack tests. # In test command mode, write out full command for Spack tests.
if [[ $SPACK_TEST_COMMAND = dump-args ]]; then if [[ $SPACK_TEST_COMMAND == dump-args ]]; then
echo "${full_command[@]}" echo "${full_command[@]}"
exit exit
elif [[ -n $SPACK_TEST_COMMAND ]]; then elif [[ -n $SPACK_TEST_COMMAND ]]; then
@ -257,7 +257,7 @@ fi
# #
# Write the input and output commands to debug logs if it's asked for. # Write the input and output commands to debug logs if it's asked for.
# #
if [[ $SPACK_DEBUG = TRUE ]]; then if [[ $SPACK_DEBUG == TRUE ]]; then
input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log" input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log"
output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log" output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log"
echo "[$mode] $command $input_command" >> $input_log echo "[$mode] $command $input_command" >> $input_log

View File

@ -22,21 +22,16 @@
# along with this program; if not, write to the Free Software Foundation, # along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
import sys
import os import os
import shutil import shutil
import argparse import sys
import llnl.util.tty as tty import llnl.util.tty as tty
from llnl.util.lang import partition_list
from llnl.util.filesystem import mkdirp
import spack.cmd import spack.cmd
from llnl.util.filesystem import mkdirp
from spack.modules import module_types from spack.modules import module_types
from spack.util.string import * from spack.util.string import *
from spack.spec import Spec
description ="Manipulate modules and dotkits." description ="Manipulate modules and dotkits."
@ -98,7 +93,6 @@ def module_refresh():
cls(spec).write() cls(spec).write()
def module(parser, args): def module(parser, args):
if args.module_command == 'refresh': if args.module_command == 'refresh':
module_refresh() module_refresh()

View File

@ -211,7 +211,11 @@ def use_name(self):
def remove(self): def remove(self):
mod_file = self.file_name mod_file = self.file_name
if os.path.exists(mod_file): 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): class Dotkit(EnvModule):

View File

@ -17,7 +17,7 @@ def _mock_install(self, spec):
def _mock_remove(self, spec): def _mock_remove(self, spec):
specs = spack.installed_db.query(spec) specs = spack.installed_db.query(spec)
assert(len(specs) == 1) assert len(specs) == 1
spec = specs[0] spec = specs[0]
spec.package.do_uninstall(spec) spec.package.do_uninstall(spec)
@ -71,6 +71,8 @@ def setUp(self):
self._mock_install('mpileaks ^zmpi') self._mock_install('mpileaks ^zmpi')
def tearDown(self): def tearDown(self):
for spec in spack.installed_db.query():
spec.package.do_uninstall(spec)
super(MockDatabase, self).tearDown() super(MockDatabase, self).tearDown()
shutil.rmtree(self.install_path) shutil.rmtree(self.install_path)
spack.install_path = self.spack_install_path spack.install_path = self.spack_install_path

View File

@ -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")

View File

@ -199,6 +199,18 @@ def install(self, spec, prefix):
install_tree(src, dst) install_tree(src, dst)
return return
# Remove libraries that the release version does not support
if not spec.satisfies('@1.54.0:'):
withLibs.remove('log')
if not spec.satisfies('@1.53.0:'):
withLibs.remove('atomic')
if not spec.satisfies('@1.48.0:'):
withLibs.remove('locale')
if not spec.satisfies('@1.47.0:'):
withLibs.remove('chrono')
if not spec.satisfies('@1.43.0:'):
withLibs.remove('random')
# to make Boost find the user-config.jam # to make Boost find the user-config.jam
env['BOOST_BUILD_PATH'] = './' env['BOOST_BUILD_PATH'] = './'

View File

@ -40,7 +40,7 @@ class Dealii(Package):
depends_on ("arpack-ng+mpi", when='+arpack+mpi') depends_on ("arpack-ng+mpi", when='+arpack+mpi')
depends_on ("doxygen", when='+doc') depends_on ("doxygen", when='+doc')
depends_on ("hdf5+mpi~cxx", when='+hdf5+mpi') #FIXME NetCDF declares dependency with ~cxx, why? 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+mpi", when="+netcdf+mpi")
depends_on ("netcdf-cxx", when='+netcdf+mpi') depends_on ("netcdf-cxx", when='+netcdf+mpi')
depends_on ("oce", when='+oce') depends_on ("oce", when='+oce')

View File

@ -31,6 +31,8 @@ class Dyninst(Package):
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz" url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x" list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
version('9.1.0', '5c64b77521457199db44bec82e4988ac',
url="http://www.paradyn.org/release9.1.0/DyninstAPI-9.1.0.tgz")
version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7', version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7',
url="http://www.paradyn.org/release8.2/DyninstAPI-8.2.1.tgz") url="http://www.paradyn.org/release8.2/DyninstAPI-8.2.1.tgz")
version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a', version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a',

View File

@ -45,7 +45,7 @@ class Eigen(Package):
# TODO : dependency on googlehash, superlu, adolc missing # 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('scotch', when='+scotch')
depends_on('fftw', when='+fftw') depends_on('fftw', when='+fftw')
depends_on('suite-sparse', when='+suitesparse') depends_on('suite-sparse', when='+suitesparse')

View File

@ -11,6 +11,7 @@ class Global(Package):
version('6.5', 'dfec818b4f53d91721e247cf7b218078') version('6.5', 'dfec818b4f53d91721e247cf7b218078')
depends_on('exuberant-ctags') depends_on('exuberant-ctags')
depends_on('ncurses')
def install(self, spec, prefix): def install(self, spec, prefix):
config_args = ['--prefix={0}'.format(prefix)] config_args = ['--prefix={0}'.format(prefix)]

View File

@ -24,7 +24,7 @@
############################################################################## ##############################################################################
from spack import * from spack import *
import glob,sys import glob, sys, os
class Metis(Package): class Metis(Package):
""" """
@ -36,7 +36,10 @@ class Metis(Package):
homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' 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" 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('shared', default=True, description='Enables the build of shared libraries')
variant('debug', default=False, description='Builds the library in debug mode') 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('idx64', default=False, description='Use int64_t as default index type')
variant('double', default=False, description='Use double precision floating point types') 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') 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): def install(self, spec, prefix):
options = [] options = []

View File

@ -47,12 +47,12 @@ class Mpich(Package):
provides('mpi@:3.0', when='@3:') provides('mpi@:3.0', when='@3:')
provides('mpi@:1.3', when='@1:') provides('mpi@:1.3', when='@1:')
def setup_dependent_environment(self, env, dependent_spec): def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
env.set('MPICH_CC', spack_cc) spack_env.set('MPICH_CC', spack_cc)
env.set('MPICH_CXX', spack_cxx) spack_env.set('MPICH_CXX', spack_cxx)
env.set('MPICH_F77', spack_f77) spack_env.set('MPICH_F77', spack_f77)
env.set('MPICH_F90', spack_f90) spack_env.set('MPICH_F90', spack_fc)
env.set('MPICH_FC', spack_fc) spack_env.set('MPICH_FC', spack_fc)
def setup_dependent_package(self, module, dep_spec): def setup_dependent_package(self, module, dep_spec):
"""For dependencies, make mpicc's use spack wrapper.""" """For dependencies, make mpicc's use spack wrapper."""

View File

@ -23,7 +23,7 @@ class Mumps(Package):
depends_on('scotch + esmumps', when='~ptscotch+scotch') depends_on('scotch + esmumps', when='~ptscotch+scotch')
depends_on('scotch + esmumps + mpi', when='+ptscotch') 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('parmetis', when="+parmetis")
depends_on('blas') depends_on('blas')
depends_on('lapack') depends_on('lapack')

View File

@ -140,6 +140,13 @@ def set_network_type(self, spec, configure_args):
configure_args.extend(network_options) 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): def install(self, spec, prefix):
# we'll set different configure flags depending on our environment # we'll set different configure flags depending on our environment
configure_args = [ configure_args = [

View File

@ -8,11 +8,10 @@ class Ncurses(Package):
""" """
homepage = "http://invisible-island.net/ncurses/ncurses.html" 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', version('6.0', 'ee13d052e1ead260d7c28071f46eefb1')
url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz') version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1')
version('6.0', 'ee13d052e1ead260d7c28071f46eefb1',
url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz')
patch('patch_gcc_5.txt', when='%gcc@5.0:') patch('patch_gcc_5.txt', when='%gcc@5.0:')

View File

@ -34,15 +34,17 @@ class NetlibLapack(Package):
def patch(self): def patch(self):
# Fix cblas CMakeLists.txt -- has wrong case for subdirectory name. # Fix cblas CMakeLists.txt -- has wrong case for subdirectory name.
filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/', if self.spec.satisfies('@3.6.0:'):
'${CMAKE_CURRENT_SOURCE_DIR}/cmake/', 'CBLAS/CMakeLists.txt', string=True) filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/',
'${CMAKE_CURRENT_SOURCE_DIR}/cmake/', 'CBLAS/CMakeLists.txt', string=True)
def install_one(self, spec, prefix, shared): def install_one(self, spec, prefix, shared):
cmake_args = ['-DBUILD_SHARED_LIBS:BOOL=%s' % ('ON' if shared else 'OFF'), 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'), '-DCMAKE_BUILD_TYPE:STRING=%s' % ('Debug' if '+debug' in spec else 'Release'),
'-DLAPACKE:BOOL=%s' % ('ON' if '+lapacke' in spec else 'OFF')] '-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: if '+external-blas' in spec:
# TODO : the mechanism to specify the library should be more general, # TODO : the mechanism to specify the library should be more general,
# TODO : but this allows to have an hook to an external blas # TODO : but this allows to have an hook to an external blas
@ -80,6 +82,3 @@ def setup_dependent_package(self, module, dspec):
if '+shared' in self.spec: if '+shared' in self.spec:
self.spec.blas_shared_lib = join_path(libdir, 'libblas.%s' % dso_suffix) self.spec.blas_shared_lib = join_path(libdir, 'libblas.%s' % dso_suffix)
self.spec.lapack_shared_lib = join_path(libdir, 'liblapack.%s' % dso_suffix) self.spec.lapack_shared_lib = join_path(libdir, 'liblapack.%s' % dso_suffix)

View File

@ -19,8 +19,11 @@ class Openblas(Package):
def install(self, spec, prefix): def install(self, spec, prefix):
make_defs = ['CC=%s' % spack_cc, # Openblas is picky about compilers. Configure fails with
'FC=%s' % spack_fc] # 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'] make_targets = ['libs', 'netlib']
@ -67,4 +70,3 @@ def setup_dependent_package(self, module, dspec):
if '+shared' in self.spec: if '+shared' in self.spec:
self.spec.blas_shared_lib = join_path(libdir, 'libopenblas.%s' % dso_suffix) self.spec.blas_shared_lib = join_path(libdir, 'libopenblas.%s' % dso_suffix)
self.spec.lapack_shared_lib = self.spec.blas_shared_lib self.spec.lapack_shared_lib = self.spec.blas_shared_lib

View File

@ -44,7 +44,7 @@ class Parmetis(Package):
depends_on('mpi') depends_on('mpi')
patch('enable_external_metis.patch') patch('enable_external_metis.patch')
depends_on('metis') depends_on('metis@5:')
# bug fixes from PETSc developers # bug fixes from PETSc developers
# https://bitbucket.org/petsc/pkg-parmetis/commits/1c1a9fd0f408dc4d42c57f5c3ee6ace411eb222b/raw/ # https://bitbucket.org/petsc/pkg-parmetis/commits/1c1a9fd0f408dc4d42c57f5c3ee6ace411eb222b/raw/

View File

@ -40,7 +40,7 @@ class Petsc(Package):
# Other dependencies # Other dependencies
depends_on('boost', when='+boost') 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('hdf5+mpi', when='+hdf5+mpi')
depends_on('parmetis', when='+metis+mpi') depends_on('parmetis', when='+metis+mpi')

View File

@ -4,7 +4,6 @@
class Qt(Package): class Qt(Package):
"""Qt is a comprehensive cross-platform C++ application framework.""" """Qt is a comprehensive cross-platform C++ application framework."""
homepage = 'http://qt.io' homepage = 'http://qt.io'
url = 'http://download.qt.io/archive/qt/5.5/5.5.1/single/qt-everywhere-opensource-src-5.5.1.tar.gz'
version('5.5.1', '59f0216819152b77536cf660b015d784') version('5.5.1', '59f0216819152b77536cf660b015d784')
version('5.4.2', 'fa1c4d819b401b267eb246a543a63ea5') version('5.4.2', 'fa1c4d819b401b267eb246a543a63ea5')

View File

@ -2,12 +2,12 @@
class Readline(Package): class Readline(Package):
"""The GNU Readline library provides a set of functions for use by """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 are typed in. Both Emacs and vi editing modes are
available. The Readline library includes additional functions available. The Readline library includes additional functions
to maintain a list of previously-entered command lines, to to maintain a list of previously-entered command lines, to
recall and perhaps reedit those lines, and perform csh-like 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" homepage = "http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html"
url = "ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz" url = "ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz"

View File

@ -15,7 +15,7 @@ class SuperluDist(Package):
depends_on ('blas') depends_on ('blas')
depends_on ('lapack') depends_on ('lapack')
depends_on ('parmetis') depends_on ('parmetis')
depends_on ('metis') depends_on ('metis@5:')
def install(self, spec, prefix): def install(self, spec, prefix):
makefile_inc = [] makefile_inc = []

View File

@ -42,7 +42,7 @@ class Trilinos(Package):
depends_on('matio') depends_on('matio')
depends_on('glm') depends_on('glm')
depends_on('swig') depends_on('swig')
depends_on('metis',when='+metis') depends_on('metis@5:',when='+metis')
depends_on('suite-sparse',when='+suite-sparse') depends_on('suite-sparse',when='+suite-sparse')
# MPI related dependencies # MPI related dependencies