Merge branch 'develop' into eschnett/julia
This commit is contained in:
commit
882e2e42cf
92
lib/spack/env/cc
vendored
92
lib/spack/env/cc
vendored
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
20
var/spack/repos/builtin/packages/bash/package.py
Normal file
20
var/spack/repos/builtin/packages/bash/package.py
Normal 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")
|
@ -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'] = './'
|
||||||
|
|
||||||
|
@ -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')
|
||||||
|
@ -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',
|
||||||
|
@ -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')
|
||||||
|
@ -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)]
|
||||||
|
@ -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 = []
|
||||||
|
@ -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."""
|
||||||
|
@ -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')
|
||||||
|
@ -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 = [
|
||||||
|
@ -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:')
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
if self.spec.satisfies('@3.6.0:'):
|
||||||
filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/',
|
filter_file('${CMAKE_CURRENT_SOURCE_DIR}/CMAKE/',
|
||||||
'${CMAKE_CURRENT_SOURCE_DIR}/cmake/', 'CBLAS/CMakeLists.txt', string=True)
|
'${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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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/
|
||||||
|
@ -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')
|
||||||
|
@ -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')
|
||||||
|
@ -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 = []
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user