Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts: lib/spack/spack/package.py
This commit is contained in:
@@ -12,9 +12,9 @@ class Adios(Package):
|
||||
"""
|
||||
|
||||
homepage = "http://www.olcf.ornl.gov/center-projects/adios/"
|
||||
url = "http://users.nccs.gov/~pnorbert/adios-1.9.0.tar.gz"
|
||||
url = "https://github.com/ornladios/ADIOS/archive/v1.9.0.tar.gz"
|
||||
|
||||
version('1.9.0', 'dbf5cb10e32add2f04c9b4052b7ffa76')
|
||||
version('1.9.0', '310ff02388bbaa2b1c1710ee970b5678')
|
||||
|
||||
# Lots of setting up here for this package
|
||||
# module swap PrgEnv-intel PrgEnv-$COMP
|
||||
|
42
var/spack/repos/builtin/packages/cdo/package.py
Normal file
42
var/spack/repos/builtin/packages/cdo/package.py
Normal file
@@ -0,0 +1,42 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Cdo(Package):
|
||||
"""CDO is a collection of command line Operators to manipulate and analyse
|
||||
Climate and NWP model Data. """
|
||||
|
||||
homepage = "https://code.zmaw.de/projects/cdo"
|
||||
url = "https://code.zmaw.de/attachments/download/10198/cdo-1.6.9.tar.gz"
|
||||
|
||||
version('1.6.9', 'bf0997bf20e812f35e10188a930e24e2')
|
||||
|
||||
depends_on('netcdf')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
configure('--prefix={0}'.format(prefix))
|
||||
make()
|
||||
make('install')
|
@@ -30,6 +30,7 @@ class Cmake(Package):
|
||||
homepage = 'https://www.cmake.org'
|
||||
url = 'https://cmake.org/files/v3.4/cmake-3.4.3.tar.gz'
|
||||
|
||||
version('3.6.0', 'aa40fbecf49d99c083415c2411d12db9')
|
||||
version('3.5.2', '701386a1b5ec95f8d1075ecf96383e02')
|
||||
version('3.5.1', 'ca051f4a66375c89d1a524e726da0296')
|
||||
version('3.5.0', '33c5d09d4c33d4ffcc63578a6ba8777e')
|
||||
|
@@ -35,6 +35,7 @@ class Flex(Package):
|
||||
version('2.5.39', 'e133e9ead8ec0a58d81166b461244fde')
|
||||
|
||||
depends_on("bison", type='build')
|
||||
depends_on("m4", type='build')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
configure("--prefix=%s" % prefix)
|
||||
|
@@ -23,7 +23,9 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
import os, sys
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
class Hypre(Package):
|
||||
"""Hypre is a library of high performance preconditioners that
|
||||
@@ -37,7 +39,7 @@ class Hypre(Package):
|
||||
version('2.10.0b', '768be38793a35bb5d055905b271f5b8e')
|
||||
|
||||
# hypre does not know how to build shared libraries on Darwin
|
||||
variant('shared', default=sys.platform!='darwin', description="Build shared library version (disables static library)")
|
||||
variant('shared', default=(sys.platform != 'darwin'), description="Build shared library version (disables static library)")
|
||||
# SuperluDist have conflicting headers with those in Hypre
|
||||
variant('internal-superlu', default=True, description="Use internal Superlu routines")
|
||||
|
||||
@@ -46,21 +48,26 @@ class Hypre(Package):
|
||||
depends_on("lapack")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
blas_dir = spec['blas'].prefix
|
||||
lapack_dir = spec['lapack'].prefix
|
||||
mpi_dir = spec['mpi'].prefix
|
||||
|
||||
os.environ['CC'] = os.path.join(mpi_dir, 'bin', 'mpicc')
|
||||
os.environ['CXX'] = os.path.join(mpi_dir, 'bin', 'mpicxx')
|
||||
os.environ['F77'] = os.path.join(mpi_dir, 'bin', 'mpif77')
|
||||
|
||||
os.environ['CC'] = spec['mpi'].mpicc
|
||||
os.environ['CXX'] = spec['mpi'].mpicxx
|
||||
os.environ['F77'] = spec['mpi'].mpif77
|
||||
|
||||
# Since +shared does not build on macOS and also Atlas does not have
|
||||
# a single static lib to build against, link against shared libs with
|
||||
# a hope that --whole-archive linker option (or alike) was used
|
||||
# to command the linker to include whole static libs' content into the
|
||||
# shared lib
|
||||
# Note: --with-(lapack|blas)_libs= needs space separated list of names
|
||||
configure_args = [
|
||||
"--prefix=%s" % prefix,
|
||||
"--with-lapack-libs=lapack",
|
||||
"--with-lapack-lib-dirs=%s/lib" % lapack_dir,
|
||||
"--with-blas-libs=blas",
|
||||
"--with-blas-lib-dirs=%s/lib" % blas_dir]
|
||||
'--prefix=%s' % prefix,
|
||||
'--with-lapack-libs=%s' % to_lib_name(
|
||||
spec['lapack'].lapack_shared_lib),
|
||||
'--with-lapack-lib-dirs=%s/lib' % spec['lapack'].prefix,
|
||||
'--with-blas-libs=%s' % to_lib_name(
|
||||
spec['blas'].blas_shared_lib),
|
||||
'--with-blas-lib-dirs=%s/lib' % spec['blas'].prefix
|
||||
]
|
||||
|
||||
if '+shared' in self.spec:
|
||||
configure_args.append("--enable-shared")
|
||||
|
||||
@@ -76,4 +83,12 @@ def install(self, spec, prefix):
|
||||
configure(*configure_args)
|
||||
|
||||
make()
|
||||
if self.run_tests:
|
||||
make("check")
|
||||
make("test")
|
||||
Executable(join_path('test', 'ij'))()
|
||||
sstruct = Executable(join_path('test', 'struct'))
|
||||
sstruct()
|
||||
sstruct('-in', 'test/sstruct.in.default', '-solver', '40',
|
||||
'-rhsone')
|
||||
make("install")
|
||||
|
@@ -0,0 +1,25 @@
|
||||
diff --git a/src/libjasper/jpc/jpc_dec.c b/src/libjasper/jpc/jpc_dec.c
|
||||
index fa72a0e..1f4845f 100644
|
||||
--- a/src/libjasper/jpc/jpc_dec.c
|
||||
+++ b/src/libjasper/jpc/jpc_dec.c
|
||||
@@ -1069,12 +1069,18 @@ static int jpc_dec_tiledecode(jpc_dec_t *dec, jpc_dec_tile_t *tile)
|
||||
/* Apply an inverse intercomponent transform if necessary. */
|
||||
switch (tile->cp->mctid) {
|
||||
case JPC_MCT_RCT:
|
||||
- assert(dec->numcomps == 3);
|
||||
+ if (dec->numcomps != 3 && dec->numcomps != 4) {
|
||||
+ jas_eprintf("bad number of components (%d)\n", dec->numcomps);
|
||||
+ return -1;
|
||||
+ }
|
||||
jpc_irct(tile->tcomps[0].data, tile->tcomps[1].data,
|
||||
tile->tcomps[2].data);
|
||||
break;
|
||||
case JPC_MCT_ICT:
|
||||
- assert(dec->numcomps == 3);
|
||||
+ if (dec->numcomps != 3 && dec->numcomps != 4) {
|
||||
+ jas_eprintf("bad number of components (%d)\n", dec->numcomps);
|
||||
+ return -1;
|
||||
+ }
|
||||
jpc_iict(tile->tcomps[0].data, tile->tcomps[1].data,
|
||||
tile->tcomps[2].data);
|
||||
break;
|
63
var/spack/repos/builtin/packages/jasper/package.py
Normal file
63
var/spack/repos/builtin/packages/jasper/package.py
Normal file
@@ -0,0 +1,63 @@
|
||||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Jasper(Package):
|
||||
"""Library for manipulating JPEG-2000 images"""
|
||||
|
||||
homepage = "https://www.ece.uvic.ca/~frodo/jasper/"
|
||||
url = "https://www.ece.uvic.ca/~frodo/jasper/software/jasper-1.900.1.zip"
|
||||
|
||||
version('1.900.1', 'a342b2b4495b3e1394e161eb5d85d754')
|
||||
|
||||
variant('shared', default=True,
|
||||
description='Builds shared versions of the libraries')
|
||||
variant('debug', default=False,
|
||||
description='Builds debug versions of the libraries')
|
||||
|
||||
depends_on('libjpeg-turbo')
|
||||
|
||||
# Fixes a bug (still in upstream as of v.1.900.1) where an assertion fails
|
||||
# when certain JPEG-2000 files with an alpha channel are processed
|
||||
# see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=469786
|
||||
patch('fix_alpha_channel_assert_fail.patch')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
configure_options = [
|
||||
'--prefix={0}'.format(prefix),
|
||||
'--mandir={0}'.format(spec.prefix.man),
|
||||
]
|
||||
|
||||
if '+shared' in spec:
|
||||
configure_options.append('--enable-shared')
|
||||
|
||||
if '+debug' not in spec:
|
||||
configure_options.append('--disable-debug')
|
||||
|
||||
configure(*configure_options)
|
||||
|
||||
make()
|
||||
make('install')
|
@@ -9,7 +9,13 @@ class Mkl(IntelInstaller):
|
||||
|
||||
Note: You will have to add the download file to a
|
||||
mirror so that Spack can find it. For instructions on how to set up a
|
||||
mirror, see http://software.llnl.gov/spack/mirrors.html"""
|
||||
mirror, see http://software.llnl.gov/spack/mirrors.html.
|
||||
|
||||
To set the threading layer at run time set MKL_THREADING_LAYER
|
||||
variable to one of the following values: INTEL, SEQUENTIAL, PGI.
|
||||
To set interface layer at run time, use set the MKL_INTERFACE_LAYER
|
||||
variable to LP64 or ILP64.
|
||||
"""
|
||||
|
||||
homepage = "https://software.intel.com/en-us/intel-mkl"
|
||||
|
||||
@@ -18,6 +24,11 @@ class Mkl(IntelInstaller):
|
||||
version('11.3.3.210', 'f72546df27f5ebb0941b5d21fd804e34',
|
||||
url="file://%s/l_mkl_11.3.3.210.tgz" % os.getcwd())
|
||||
|
||||
# virtual dependency
|
||||
provides('blas')
|
||||
provides('lapack')
|
||||
# TODO: MKL also provides implementation of Scalapack.
|
||||
|
||||
def install(self, spec, prefix):
|
||||
|
||||
self.intel_prefix = os.path.join(prefix, "pkg")
|
||||
@@ -26,3 +37,28 @@ def install(self, spec, prefix):
|
||||
mkl_dir = os.path.join(self.intel_prefix, "mkl")
|
||||
for f in os.listdir(mkl_dir):
|
||||
os.symlink(os.path.join(mkl_dir, f), os.path.join(self.prefix, f))
|
||||
|
||||
def setup_dependent_package(self, module, dspec):
|
||||
# For now use Single Dynamic Library:
|
||||
# To set the threading layer at run time, use the
|
||||
# mkl_set_threading_layer function or set MKL_THREADING_LAYER
|
||||
# variable to one of the following values: INTEL, SEQUENTIAL, PGI.
|
||||
# To set interface layer at run time, use the mkl_set_interface_layer
|
||||
# function or set the MKL_INTERFACE_LAYER variable to LP64 or ILP64.
|
||||
|
||||
# Otherwise one would need to specify several libraries
|
||||
# (e.g. mkl_intel_lp64;mkl_sequential;mkl_core), which reflect
|
||||
# different interface and threading layers.
|
||||
|
||||
name = 'libmkl_rt.%s' % dso_suffix
|
||||
libdir = find_library_path(name, self.prefix.lib64, self.prefix.lib)
|
||||
|
||||
self.spec.blas_shared_lib = join_path(libdir, name)
|
||||
self.spec.lapack_shared_lib = self.spec.blas_shared_lib
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
# set up MKLROOT for everyone using MKL package
|
||||
spack_env.set('MKLROOT', self.prefix)
|
||||
|
||||
def setup_environment(self, spack_env, env):
|
||||
env.set('MKLROOT', self.prefix)
|
||||
|
@@ -23,7 +23,10 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
from spack import *
|
||||
import os, sys, glob
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
|
||||
|
||||
class Mumps(Package):
|
||||
"""MUMPS: a MUltifrontal Massively Parallel sparse direct Solver"""
|
||||
@@ -44,13 +47,11 @@ class Mumps(Package):
|
||||
variant('idx64', default=False, description='Use int64_t/integer*8 as default index type')
|
||||
variant('shared', default=True, description='Build shared libraries')
|
||||
|
||||
|
||||
depends_on('scotch + esmumps', when='~ptscotch+scotch')
|
||||
depends_on('scotch + esmumps + mpi', when='+ptscotch')
|
||||
depends_on('metis@5:', when='+metis')
|
||||
depends_on('parmetis', when="+parmetis")
|
||||
depends_on('blas')
|
||||
depends_on('lapack')
|
||||
depends_on('scalapack', when='+mpi')
|
||||
depends_on('mpi', when='+mpi')
|
||||
|
||||
@@ -60,42 +61,52 @@ class Mumps(Package):
|
||||
# end before install
|
||||
# def patch(self):
|
||||
def write_makefile_inc(self):
|
||||
if ('+parmetis' in self.spec or '+ptscotch' in self.spec) and '+mpi' not in self.spec:
|
||||
raise RuntimeError('You cannot use the variants parmetis or ptscotch without mpi')
|
||||
if ('+parmetis' in self.spec or '+ptscotch' in self.spec) and '+mpi' not in self.spec: # NOQA: ignore=E501
|
||||
raise RuntimeError('You cannot use the variants parmetis or ptscotch without mpi') # NOQA: ignore=E501
|
||||
|
||||
makefile_conf = ["LIBBLAS = -L%s -lblas" % self.spec['blas'].prefix.lib]
|
||||
makefile_conf = ["LIBBLAS = %s" % to_link_flags(
|
||||
self.spec['blas'].blas_shared_lib)
|
||||
]
|
||||
|
||||
orderings = ['-Dpord']
|
||||
|
||||
if '+ptscotch' in self.spec or '+scotch' in self.spec:
|
||||
join_lib = ' -l%s' % ('pt' if '+ptscotch' in self.spec else '')
|
||||
makefile_conf.extend(
|
||||
["ISCOTCH = -I%s" % self.spec['scotch'].prefix.include,
|
||||
"LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib,
|
||||
join_lib,
|
||||
join_lib.join(['esmumps', 'scotch', 'scotcherr']))])
|
||||
makefile_conf.extend([
|
||||
"ISCOTCH = -I%s" % self.spec['scotch'].prefix.include,
|
||||
"LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib,
|
||||
join_lib,
|
||||
join_lib.join(['esmumps',
|
||||
'scotch',
|
||||
'scotcherr']))
|
||||
])
|
||||
|
||||
orderings.append('-Dscotch')
|
||||
if '+ptscotch' in self.spec:
|
||||
orderings.append('-Dptscotch')
|
||||
|
||||
if '+parmetis' in self.spec and '+metis' in self.spec:
|
||||
libname = 'parmetis' if '+parmetis' in self.spec else 'metis'
|
||||
makefile_conf.extend(
|
||||
["IMETIS = -I%s" % self.spec['parmetis'].prefix.include,
|
||||
"LMETIS = -L%s -l%s -L%s -l%s" % (self.spec['parmetis'].prefix.lib, 'parmetis',self.spec['metis'].prefix.lib, 'metis')])
|
||||
makefile_conf.extend([
|
||||
"IMETIS = -I%s" % self.spec['parmetis'].prefix.include,
|
||||
"LMETIS = -L%s -l%s -L%s -l%s" % (
|
||||
self.spec['parmetis'].prefix.lib, 'parmetis',
|
||||
self.spec['metis'].prefix.lib, 'metis')
|
||||
])
|
||||
|
||||
orderings.append('-Dparmetis')
|
||||
elif '+metis' in self.spec:
|
||||
makefile_conf.extend(
|
||||
["IMETIS = -I%s" % self.spec['metis'].prefix.include,
|
||||
"LMETIS = -L%s -l%s" % (self.spec['metis'].prefix.lib, 'metis')])
|
||||
makefile_conf.extend([
|
||||
"IMETIS = -I%s" % self.spec['metis'].prefix.include,
|
||||
"LMETIS = -L%s -l%s" % (self.spec['metis'].prefix.lib, 'metis')
|
||||
])
|
||||
|
||||
orderings.append('-Dmetis')
|
||||
|
||||
makefile_conf.append("ORDERINGSF = %s" % (' '.join(orderings)))
|
||||
|
||||
# when building shared libs need -fPIC, otherwise
|
||||
# /usr/bin/ld: graph.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
|
||||
# /usr/bin/ld: graph.o: relocation R_X86_64_32 against `.rodata.str1.1'
|
||||
# can not be used when making a shared object; recompile with -fPIC
|
||||
fpic = '-fPIC' if '+shared' in self.spec else ''
|
||||
# TODO: test this part, it needs a full blas, scalapack and
|
||||
# partitionning environment with 64bit integers
|
||||
@@ -104,7 +115,7 @@ def write_makefile_inc(self):
|
||||
# the fortran compilation flags most probably are
|
||||
# working only for intel and gnu compilers this is
|
||||
# perhaps something the compiler should provide
|
||||
['OPTF = %s -O -DALLOW_NON_INIT %s' % (fpic,'-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8'),
|
||||
['OPTF = %s -O -DALLOW_NON_INIT %s' % (fpic, '-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8'), # NOQA: ignore=E501
|
||||
'OPTL = %s -O ' % fpic,
|
||||
'OPTC = %s -O -DINTSIZE64' % fpic])
|
||||
else:
|
||||
@@ -113,7 +124,6 @@ def write_makefile_inc(self):
|
||||
'OPTL = %s -O ' % fpic,
|
||||
'OPTC = %s -O ' % fpic])
|
||||
|
||||
|
||||
if '+mpi' in self.spec:
|
||||
makefile_conf.extend(
|
||||
["CC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpicc'),
|
||||
@@ -134,16 +144,17 @@ def write_makefile_inc(self):
|
||||
|
||||
if '+shared' in self.spec:
|
||||
if sys.platform == 'darwin':
|
||||
# Building dylibs with mpif90 causes segfaults on 10.8 and 10.10. Use gfortran. (Homebrew)
|
||||
# Building dylibs with mpif90 causes segfaults on 10.8 and
|
||||
# 10.10. Use gfortran. (Homebrew)
|
||||
makefile_conf.extend([
|
||||
'LIBEXT=.dylib',
|
||||
'AR=%s -dynamiclib -Wl,-install_name -Wl,%s/$(notdir $@) -undefined dynamic_lookup -o ' % (os.environ['FC'],prefix.lib),
|
||||
'AR=%s -dynamiclib -Wl,-install_name -Wl,%s/$(notdir $@) -undefined dynamic_lookup -o ' % (os.environ['FC'], prefix.lib), # NOQA: ignore=E501
|
||||
'RANLIB=echo'
|
||||
])
|
||||
else:
|
||||
makefile_conf.extend([
|
||||
'LIBEXT=.so',
|
||||
'AR=$(FL) -shared -Wl,-soname -Wl,%s/$(notdir $@) -o' % prefix.lib,
|
||||
'AR=$(FL) -shared -Wl,-soname -Wl,%s/$(notdir $@) -o' % prefix.lib, # NOQA: ignore=E501
|
||||
'RANLIB=echo'
|
||||
])
|
||||
else:
|
||||
@@ -153,9 +164,8 @@ def write_makefile_inc(self):
|
||||
'RANLIB = ranlib'
|
||||
])
|
||||
|
||||
|
||||
makefile_inc_template = join_path(os.path.dirname(self.module.__file__),
|
||||
'Makefile.inc')
|
||||
makefile_inc_template = join_path(
|
||||
os.path.dirname(self.module.__file__), 'Makefile.inc')
|
||||
with open(makefile_inc_template, "r") as fh:
|
||||
makefile_conf.extend(fh.read().split('\n'))
|
||||
|
||||
@@ -164,8 +174,6 @@ def write_makefile_inc(self):
|
||||
makefile_inc = '\n'.join(makefile_conf)
|
||||
fh.write(makefile_inc)
|
||||
|
||||
|
||||
|
||||
def install(self, spec, prefix):
|
||||
make_libs = []
|
||||
|
||||
@@ -189,15 +197,15 @@ def install(self, spec, prefix):
|
||||
install_tree('lib', prefix.lib)
|
||||
install_tree('include', prefix.include)
|
||||
|
||||
if '~mpi' in spec:
|
||||
if '~mpi' in spec:
|
||||
lib_dsuffix = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||
lib_suffix = lib_dsuffix if '+shared' in spec else '.a'
|
||||
install('libseq/libmpiseq%s' % lib_suffix, prefix.lib)
|
||||
for f in glob.glob(join_path('libseq','*.h')):
|
||||
for f in glob.glob(join_path('libseq', '*.h')):
|
||||
install(f, prefix.include)
|
||||
|
||||
# FIXME: extend the tests to mpirun -np 2 (or alike) when build with MPI
|
||||
# FIXME: use something like numdiff to compare blessed output with the current
|
||||
# FIXME: extend the tests to mpirun -np 2 when build with MPI
|
||||
# FIXME: use something like numdiff to compare output files
|
||||
with working_dir('examples'):
|
||||
if '+float' in spec:
|
||||
os.system('./ssimpletest < input_simpletest_real')
|
||||
|
@@ -33,6 +33,7 @@ class Netcdf(Package):
|
||||
homepage = "http://www.unidata.ucar.edu/software/netcdf"
|
||||
url = "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.3.tar.gz"
|
||||
|
||||
version('4.4.1', '7843e35b661c99e1d49e60791d5072d8')
|
||||
version('4.4.0', 'cffda0cbd97fdb3a06e9274f7aef438e')
|
||||
version('4.3.3', '5fbd0e108a54bd82cb5702a73f56d2ae')
|
||||
|
||||
@@ -47,8 +48,10 @@ class Netcdf(Package):
|
||||
|
||||
# Required for NetCDF-4 support
|
||||
depends_on("zlib")
|
||||
depends_on("hdf5+mpi", when='+mpi')
|
||||
depends_on("hdf5~mpi", when='~mpi')
|
||||
depends_on('hdf5@:1.8+mpi', when='@:4.4.0+mpi')
|
||||
depends_on('hdf5+mpi', when='@4.4.1:+mpi')
|
||||
depends_on('hdf5@:1.8~mpi', when='@:4.4.0~mpi')
|
||||
depends_on('hdf5~mpi', when='@4.4.1:~mpi')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# Environment variables
|
||||
|
@@ -25,8 +25,10 @@
|
||||
from spack import *
|
||||
import sys
|
||||
|
||||
|
||||
class NetlibScalapack(Package):
|
||||
"""ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines"""
|
||||
"""ScaLAPACK is a library of high-performance linear algebra routines for
|
||||
parallel distributed memory machines"""
|
||||
|
||||
homepage = "http://www.netlib.org/scalapack/"
|
||||
url = "http://www.netlib.org/scalapack/scalapack-2.0.2.tgz"
|
||||
@@ -48,10 +50,22 @@ class NetlibScalapack(Package):
|
||||
|
||||
def install(self, spec, prefix):
|
||||
options = [
|
||||
"-DBUILD_SHARED_LIBS:BOOL=%s" % ('ON' if '+shared' in spec else 'OFF'),
|
||||
"-DBUILD_STATIC_LIBS:BOOL=%s" % ('OFF' if '+shared' in spec else 'ON'),
|
||||
"-DUSE_OPTIMIZED_LAPACK_BLAS:BOOL=ON", # forces scalapack to use find_package(LAPACK)
|
||||
]
|
||||
"-DBUILD_SHARED_LIBS:BOOL=%s" % ('ON' if '+shared' in spec else
|
||||
'OFF'),
|
||||
"-DBUILD_STATIC_LIBS:BOOL=%s" % ('OFF' if '+shared' in spec else
|
||||
'ON'),
|
||||
# forces scalapack to use find_package(LAPACK):
|
||||
"-DUSE_OPTIMIZED_LAPACK_BLAS:BOOL=ON",
|
||||
]
|
||||
|
||||
# Make sure we use Spack's Lapack:
|
||||
options.extend([
|
||||
'-DLAPACK_FOUND=true',
|
||||
'-DLAPACK_INCLUDE_DIRS=%s' % spec['lapack'].prefix.include,
|
||||
'-DLAPACK_LIBRARIES=%s' % (
|
||||
spec['lapack'].lapack_shared_lib if '+shared' in spec else
|
||||
spec['lapack'].lapack_static_lib),
|
||||
])
|
||||
|
||||
if '+fpic' in spec:
|
||||
options.extend([
|
||||
@@ -66,16 +80,15 @@ def install(self, spec, prefix):
|
||||
make()
|
||||
make("install")
|
||||
|
||||
# The shared libraries are not installed correctly on Darwin; correct this
|
||||
# The shared libraries are not installed correctly on Darwin:
|
||||
if (sys.platform == 'darwin') and ('+shared' in spec):
|
||||
fix_darwin_install_name(prefix.lib)
|
||||
|
||||
|
||||
def setup_dependent_package(self, module, dependent_spec):
|
||||
spec = self.spec
|
||||
lib_dsuffix = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||
lib_suffix = lib_dsuffix if '+shared' in spec else '.a'
|
||||
lib_suffix = dso_suffix if '+shared' in spec else 'a'
|
||||
|
||||
spec.fc_link = '-L%s -lscalapack' % spec.prefix.lib
|
||||
spec.cc_link = spec.fc_link
|
||||
spec.libraries = [join_path(spec.prefix.lib, 'libscalapack%s' % lib_suffix)]
|
||||
spec.libraries = [join_path(spec.prefix.lib,
|
||||
'libscalapack.%s' % lib_suffix)]
|
||||
|
@@ -46,6 +46,7 @@ class PyH5py(Package):
|
||||
depends_on('hdf5@1.8.4:')
|
||||
depends_on('hdf5+mpi', when='+mpi')
|
||||
depends_on('mpi', when='+mpi')
|
||||
depends_on('py-mpi4py', when='+mpi')
|
||||
|
||||
# Build and runtime dependencies
|
||||
depends_on('py-numpy@1.6.1:', type=nolink)
|
||||
|
@@ -44,6 +44,7 @@ class PyNumpy(Package):
|
||||
|
||||
extends('python')
|
||||
depends_on('py-nose', type='build')
|
||||
depends_on('py-setuptools', type='build')
|
||||
depends_on('blas', when='+blas')
|
||||
depends_on('lapack', when='+lapack')
|
||||
|
||||
|
@@ -53,6 +53,7 @@ class Python(Package):
|
||||
|
||||
extendable = True
|
||||
|
||||
variant('tk', default=False, description='Provide support for Tkinter')
|
||||
variant('ucs4', default=False, description='Enable UCS4 (wide) unicode strings')
|
||||
# From https://docs.python.org/2/c-api/unicode.html: Python's default
|
||||
# builds use a 16-bit type for Py_UNICODE and store Unicode values
|
||||
@@ -68,6 +69,8 @@ class Python(Package):
|
||||
depends_on("ncurses")
|
||||
depends_on("sqlite")
|
||||
depends_on("zlib")
|
||||
depends_on("tk", when="+tk")
|
||||
depends_on("tcl", when="+tk")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# Need this to allow python build to find the Python installation.
|
||||
@@ -77,24 +80,32 @@ def install(self, spec, prefix):
|
||||
# Rest of install is pretty standard except setup.py needs to
|
||||
# be able to read the CPPFLAGS and LDFLAGS as it scans for the
|
||||
# library and headers to build
|
||||
cppflags = ' -I'.join([
|
||||
include_dirs = [
|
||||
spec['openssl'].prefix.include, spec['bzip2'].prefix.include,
|
||||
spec['readline'].prefix.include, spec['ncurses'].prefix.include,
|
||||
spec['sqlite'].prefix.include, spec['zlib'].prefix.include
|
||||
])
|
||||
]
|
||||
|
||||
ldflags = ' -L'.join([
|
||||
library_dirs = [
|
||||
spec['openssl'].prefix.lib, spec['bzip2'].prefix.lib,
|
||||
spec['readline'].prefix.lib, spec['ncurses'].prefix.lib,
|
||||
spec['sqlite'].prefix.lib, spec['zlib'].prefix.lib
|
||||
])
|
||||
]
|
||||
|
||||
if '+tk' in spec:
|
||||
include_dirs.extend([
|
||||
spec['tk'].prefix.include, spec['tcl'].prefix.include
|
||||
])
|
||||
library_dirs.extend([
|
||||
spec['tk'].prefix.lib, spec['tcl'].prefix.lib
|
||||
])
|
||||
|
||||
config_args = [
|
||||
"--prefix={0}".format(prefix),
|
||||
"--with-threads",
|
||||
"--enable-shared",
|
||||
"CPPFLAGS=-I{0}".format(cppflags),
|
||||
"LDFLAGS=-L{0}".format(ldflags)
|
||||
"CPPFLAGS=-I{0}".format(" -I".join(include_dirs)),
|
||||
"LDFLAGS=-L{0}".format(" -L".join(library_dirs))
|
||||
]
|
||||
|
||||
if '+ucs4' in spec:
|
||||
@@ -116,6 +127,25 @@ def install(self, spec, prefix):
|
||||
|
||||
self.filter_compilers(spec, prefix)
|
||||
|
||||
# TODO: Once better testing support is integrated, add the following tests
|
||||
# https://wiki.python.org/moin/TkInter
|
||||
#
|
||||
# if '+tk' in spec:
|
||||
# env['TK_LIBRARY'] = join_path(spec['tk'].prefix.lib,
|
||||
# 'tk{0}'.format(spec['tk'].version.up_to(2)))
|
||||
# env['TCL_LIBRARY'] = join_path(spec['tcl'].prefix.lib,
|
||||
# 'tcl{0}'.format(spec['tcl'].version.up_to(2)))
|
||||
#
|
||||
# $ python
|
||||
# >>> import _tkinter
|
||||
#
|
||||
# if spec.satisfies('@3:')
|
||||
# >>> import tkinter
|
||||
# >>> tkinter._test()
|
||||
# else:
|
||||
# >>> import Tkinter
|
||||
# >>> Tkinter._test()
|
||||
|
||||
def filter_compilers(self, spec, prefix):
|
||||
"""Run after install to tell the configuration files and Makefiles
|
||||
to use the compilers that Spack built the package with.
|
||||
|
@@ -32,21 +32,20 @@ class SuiteSparse(Package):
|
||||
homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html'
|
||||
url = 'http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.1.tar.gz'
|
||||
|
||||
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
|
||||
version('4.5.3', '8ec57324585df3c6483ad7f556afccbd')
|
||||
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
|
||||
|
||||
# FIXME: (see below)
|
||||
# variant('tbb', default=True, description='Build with Intel TBB')
|
||||
variant('tbb', default=True, description='Build with Intel TBB')
|
||||
|
||||
depends_on('blas')
|
||||
depends_on('lapack')
|
||||
|
||||
depends_on('metis@5.1.0', when='@4.5.1:')
|
||||
# FIXME:
|
||||
# in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng
|
||||
# flags does not seem to be used, which leads to linking errors on Linux.
|
||||
# Try re-enabling in future versions.
|
||||
# depends_on('tbb', when='+tbb')
|
||||
depends_on('tbb', when='@4.5.3:+tbb')
|
||||
|
||||
patch('tbb_453.patch', when='@4.5.3')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# The build system of SuiteSparse is quite old-fashioned.
|
||||
@@ -73,20 +72,24 @@ def install(self, spec, prefix):
|
||||
])
|
||||
|
||||
# Intel TBB in SuiteSparseQR
|
||||
if '+tbb' in spec:
|
||||
if 'tbb' in spec:
|
||||
make_args.extend([
|
||||
'SPQR_CONFIG=-DHAVE_TBB',
|
||||
'TBB=-L%s -ltbb' % spec['tbb'].prefix.lib,
|
||||
])
|
||||
|
||||
# BLAS arguments require path to libraries
|
||||
# FIXME: (blas/lapack always provide libblas and liblapack as aliases)
|
||||
# Make sure Spack's Blas/Lapack is used. Otherwise System's
|
||||
# Blas/Lapack might be picked up.
|
||||
blas = to_link_flags(spec['blas'].blas_shared_lib)
|
||||
lapack = to_link_flags(spec['lapack'].lapack_shared_lib)
|
||||
if '@4.5.1' in spec:
|
||||
# adding -lstdc++ is clearly an ugly way to do this, but it follows
|
||||
# with the TCOV path of SparseSuite 4.5.1's Suitesparse_config.mk
|
||||
make_args.extend([
|
||||
'BLAS=-lblas -lstdc++',
|
||||
'LAPACK=-llapack'
|
||||
])
|
||||
blas += ' -lstdc++'
|
||||
|
||||
make_args.extend([
|
||||
'BLAS=%s' % blas,
|
||||
'LAPACK=%s' % lapack
|
||||
])
|
||||
|
||||
make('install', *make_args)
|
||||
|
13
var/spack/repos/builtin/packages/suite-sparse/tbb_453.patch
Normal file
13
var/spack/repos/builtin/packages/suite-sparse/tbb_453.patch
Normal file
@@ -0,0 +1,13 @@
|
||||
diff --git a/SPQR/Lib/Makefile b/SPQR/Lib/Makefile
|
||||
index eaade58..d0de852 100644
|
||||
--- a/SPQR/Lib/Makefile
|
||||
+++ b/SPQR/Lib/Makefile
|
||||
@@ -13,7 +13,7 @@ ccode: all
|
||||
include ../../SuiteSparse_config/SuiteSparse_config.mk
|
||||
|
||||
# SPQR depends on CHOLMOD, AMD, COLAMD, LAPACK, the BLAS and SuiteSparse_config
|
||||
-LDLIBS += -lamd -lcolamd -lcholmod -lsuitesparseconfig $(LAPACK) $(BLAS)
|
||||
+LDLIBS += -lamd -lcolamd -lcholmod -lsuitesparseconfig $(TBB) $(LAPACK) $(BLAS)
|
||||
|
||||
# compile and install in SuiteSparse/lib
|
||||
library:
|
@@ -24,6 +24,7 @@
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Tcl(Package):
|
||||
"""Tcl (Tool Command Language) is a very powerful but easy to
|
||||
learn dynamic programming language, suitable for a very wide
|
||||
@@ -34,9 +35,6 @@ class Tcl(Package):
|
||||
extensible."""
|
||||
homepage = "http://www.tcl.tk"
|
||||
|
||||
def url_for_version(self, version):
|
||||
return 'http://prdownloads.sourceforge.net/tcl/tcl%s-src.tar.gz' % version
|
||||
|
||||
version('8.6.5', '0e6426a4ca9401825fbc6ecf3d89a326')
|
||||
version('8.6.4', 'd7cbb91f1ded1919370a30edd1534304')
|
||||
version('8.6.3', 'db382feca91754b7f93da16dc4cdad1f')
|
||||
@@ -44,8 +42,18 @@ def url_for_version(self, version):
|
||||
|
||||
depends_on('zlib')
|
||||
|
||||
def url_for_version(self, version):
|
||||
base_url = 'http://prdownloads.sourceforge.net/tcl'
|
||||
return '{0}/tcl{1}-src.tar.gz'.format(base_url, version)
|
||||
|
||||
def setup_environment(self, spack_env, env):
|
||||
# When using Tkinter from within spack provided python+tk, python
|
||||
# will not be able to find Tcl/Tk unless TCL_LIBRARY is set.
|
||||
env.set('TCL_LIBRARY', join_path(self.prefix.lib, 'tcl{0}'.format(
|
||||
self.spec.version.up_to(2))))
|
||||
|
||||
def install(self, spec, prefix):
|
||||
with working_dir('unix'):
|
||||
configure("--prefix=%s" % prefix)
|
||||
configure("--prefix={0}".format(prefix))
|
||||
make()
|
||||
make("install")
|
||||
|
@@ -24,11 +24,13 @@
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class TheSilverSearcher(Package):
|
||||
"""Fast recursive grep alternative"""
|
||||
homepage = "http://geoff.greer.fm/ag/"
|
||||
url = "http://geoff.greer.fm/ag/releases/the_silver_searcher-0.30.0.tar.gz"
|
||||
url = "http://geoff.greer.fm/ag/releases/the_silver_searcher-0.32.0.tar.gz"
|
||||
|
||||
version('0.32.0', '3fdfd5836924246073d5344257a06823')
|
||||
version('0.30.0', '95e2e7859fab1156c835aff7413481db')
|
||||
|
||||
depends_on('pcre')
|
||||
|
@@ -24,6 +24,7 @@
|
||||
##############################################################################
|
||||
from spack import *
|
||||
|
||||
|
||||
class Tk(Package):
|
||||
"""Tk is a graphical user interface toolkit that takes developing
|
||||
desktop applications to a higher level than conventional
|
||||
@@ -33,16 +34,24 @@ class Tk(Package):
|
||||
and more."""
|
||||
homepage = "http://www.tcl.tk"
|
||||
|
||||
def url_for_version(self, version):
|
||||
return "http://prdownloads.sourceforge.net/tcl/tk%s-src.tar.gz" % version
|
||||
|
||||
version('8.6.5', '11dbbd425c3e0201f20d6a51482ce6c4')
|
||||
version('8.6.3', '85ca4dbf4dcc19777fd456f6ee5d0221')
|
||||
|
||||
depends_on("tcl")
|
||||
|
||||
def url_for_version(self, version):
|
||||
base_url = "http://prdownloads.sourceforge.net/tcl"
|
||||
return "{0}/tk{1}-src.tar.gz".format(base_url, version)
|
||||
|
||||
def setup_environment(self, spack_env, env):
|
||||
# When using Tkinter from within spack provided python+tk, python
|
||||
# will not be able to find Tcl/Tk unless TK_LIBRARY is set.
|
||||
env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
|
||||
self.spec.version.up_to(2))))
|
||||
|
||||
def install(self, spec, prefix):
|
||||
with working_dir('unix'):
|
||||
configure("--prefix=%s" % prefix,
|
||||
"--with-tcl=%s" % spec['tcl'].prefix.lib)
|
||||
configure("--prefix={0}".format(prefix),
|
||||
"--with-tcl={0}".format(spec['tcl'].prefix.lib))
|
||||
make()
|
||||
make("install")
|
||||
|
@@ -118,6 +118,7 @@ def install(self, spec, prefix):
|
||||
options.extend(std_cmake_args)
|
||||
|
||||
mpi_bin = spec['mpi'].prefix.bin
|
||||
# Note: -DXYZ_LIBRARY_NAMES= needs semicolon separated list of names
|
||||
options.extend([
|
||||
'-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=ON',
|
||||
'-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON',
|
||||
@@ -131,10 +132,12 @@ def install(self, spec, prefix):
|
||||
'-DTPL_ENABLE_MPI:BOOL=ON',
|
||||
'-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix,
|
||||
'-DTPL_ENABLE_BLAS=ON',
|
||||
'-DBLAS_LIBRARY_NAMES=blas', # FIXME: don't hardcode names
|
||||
'-DBLAS_LIBRARY_NAMES=%s' % to_lib_name(
|
||||
spec['blas'].blas_shared_lib),
|
||||
'-DBLAS_LIBRARY_DIRS=%s' % spec['blas'].prefix.lib,
|
||||
'-DTPL_ENABLE_LAPACK=ON',
|
||||
'-DLAPACK_LIBRARY_NAMES=lapack',
|
||||
'-DLAPACK_LIBRARY_NAMES=%s' % to_lib_name(
|
||||
spec['lapack'].lapack_shared_lib),
|
||||
'-DLAPACK_LIBRARY_DIRS=%s' % spec['lapack'].prefix,
|
||||
'-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION:BOOL=ON',
|
||||
'-DTrilinos_ENABLE_CXX11:BOOL=ON',
|
||||
|
Reference in New Issue
Block a user