summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/spack/external/pyqver2.py3
-rw-r--r--lib/spack/spack/cmd/extensions.py8
-rw-r--r--lib/spack/spack/cmd/fetch.py13
-rw-r--r--lib/spack/spack/cmd/mirror.py12
-rw-r--r--lib/spack/spack/cmd/python.py10
-rw-r--r--lib/spack/spack/cmd/uninstall.py9
-rw-r--r--lib/spack/spack/database.py1
-rw-r--r--lib/spack/spack/hooks/extensions.py4
-rw-r--r--lib/spack/spack/mirror.py2
-rw-r--r--lib/spack/spack/package.py28
-rw-r--r--lib/spack/spack/test/python_version.py4
-rwxr-xr-xshare/spack/setup-env.sh8
-rw-r--r--var/spack/packages/cfitsio/package.py18
-rw-r--r--var/spack/packages/cube/package.py3
-rw-r--r--var/spack/packages/global/package.py6
-rw-r--r--var/spack/packages/mpich/package.py13
-rw-r--r--var/spack/packages/mrnet/package.py1
-rw-r--r--var/spack/packages/mvapich2/package.py30
-rw-r--r--var/spack/packages/opari2/package.py2
-rw-r--r--var/spack/packages/otf2/package.py4
-rw-r--r--var/spack/packages/pdt/package.py45
-rw-r--r--var/spack/packages/py-cffi/package.py2
-rw-r--r--var/spack/packages/scorep/package.py118
-rw-r--r--var/spack/packages/scotch/package.py114
-rw-r--r--var/spack/packages/spot/package.py18
-rw-r--r--var/spack/packages/tau/package.py117
-rw-r--r--var/spack/packages/tmuxinator/package.py5
27 files changed, 482 insertions, 116 deletions
diff --git a/lib/spack/external/pyqver2.py b/lib/spack/external/pyqver2.py
index 4a16e2811e..4690239748 100755
--- a/lib/spack/external/pyqver2.py
+++ b/lib/spack/external/pyqver2.py
@@ -30,7 +30,8 @@ import sys
StandardModules = {
"__future__": (2, 1),
"abc": (2, 6),
- "argparse": (2, 7),
+# skip argparse now that it's in lib/spack/external
+# "argparse": (2, 7),
"ast": (2, 6),
"atexit": (2, 0),
"bz2": (2, 3),
diff --git a/lib/spack/spack/cmd/extensions.py b/lib/spack/spack/cmd/extensions.py
index c2cf288877..2ce6f406ca 100644
--- a/lib/spack/spack/cmd/extensions.py
+++ b/lib/spack/spack/cmd/extensions.py
@@ -54,7 +54,9 @@ def extensions(parser, args):
if not args.spec:
tty.die("extensions requires a package spec.")
+ #
# Checks
+ #
spec = spack.cmd.parse_specs(args.spec)
if len(spec) > 1:
tty.die("Can only list extensions for one package.")
@@ -70,7 +72,9 @@ def extensions(parser, args):
if not args.mode:
args.mode = 'short'
+ #
# List package names of extensions
+ #
extensions = spack.db.extensions_for(spec)
if not extensions:
tty.msg("%s has no extensions." % spec.cshort_spec)
@@ -79,7 +83,9 @@ def extensions(parser, args):
tty.msg("%d extensions:" % len(extensions))
colify(ext.name for ext in extensions)
+ #
# List specs of installed extensions.
+ #
installed = [s.spec for s in spack.installed_db.installed_extensions_for(spec)]
print
if not installed:
@@ -88,7 +94,9 @@ def extensions(parser, args):
tty.msg("%d installed:" % len(installed))
spack.cmd.find.display_specs(installed, mode=args.mode)
+ #
# List specs of activated extensions.
+ #
activated = spack.install_layout.extension_map(spec)
print
if not activated:
diff --git a/lib/spack/spack/cmd/fetch.py b/lib/spack/spack/cmd/fetch.py
index 6f9e7ab5e2..57d6f6b63b 100644
--- a/lib/spack/spack/cmd/fetch.py
+++ b/lib/spack/spack/cmd/fetch.py
@@ -34,9 +34,12 @@ def setup_parser(subparser):
'-n', '--no-checksum', action='store_true', dest='no_checksum',
help="Do not check packages against checksum")
subparser.add_argument(
+ '-m', '--missing', action='store_true', help="Also fetch all missing dependencies")
+ subparser.add_argument(
+ '-D', '--dependencies', action='store_true', help="Also fetch all dependencies")
+ subparser.add_argument(
'packages', nargs=argparse.REMAINDER, help="specs of packages to fetch")
-
def fetch(parser, args):
if not args.packages:
tty.die("fetch requires at least one package argument")
@@ -46,5 +49,13 @@ def fetch(parser, args):
specs = spack.cmd.parse_specs(args.packages, concretize=True)
for spec in specs:
+ if args.missing or args.dependencies:
+ to_fetch = set()
+ for s in spec.traverse():
+ package = spack.db.get(s)
+ if args.missing and package.installed:
+ continue
+ package.do_fetch()
+
package = spack.db.get(spec)
package.do_fetch()
diff --git a/lib/spack/spack/cmd/mirror.py b/lib/spack/spack/cmd/mirror.py
index 4a1ce00b75..89d51bbe04 100644
--- a/lib/spack/spack/cmd/mirror.py
+++ b/lib/spack/spack/cmd/mirror.py
@@ -55,6 +55,8 @@ def setup_parser(subparser):
create_parser.add_argument(
'-f', '--file', help="File with specs of packages to put in mirror.")
create_parser.add_argument(
+ '-D', '--dependencies', action='store_true', help="Also fetch all dependencies")
+ create_parser.add_argument(
'-o', '--one-version-per-spec', action='store_const', const=1, default=0,
help="Only fetch one 'preferred' version per spec, not all known versions.")
@@ -118,7 +120,7 @@ def mirror_create(args):
"""Create a directory to be used as a spack mirror, and fill it with
package archives."""
# try to parse specs from the command line first.
- specs = spack.cmd.parse_specs(args.specs)
+ specs = spack.cmd.parse_specs(args.specs, concretize=True)
# If there is a file, parse each line as a spec and add it to the list.
if args.file:
@@ -131,6 +133,14 @@ def mirror_create(args):
specs = [Spec(n) for n in spack.db.all_package_names()]
specs.sort(key=lambda s: s.format("$_$@").lower())
+ if args.dependencies:
+ new_specs = set()
+ for spec in specs:
+ spec.concretize()
+ for s in spec.traverse():
+ new_specs.add(s)
+ specs = list(new_specs)
+
# Default name for directory is spack-mirror-<DATESTAMP>
directory = args.directory
if not directory:
diff --git a/lib/spack/spack/cmd/python.py b/lib/spack/spack/cmd/python.py
index e26b8d3e79..5325e8fd9a 100644
--- a/lib/spack/spack/cmd/python.py
+++ b/lib/spack/spack/cmd/python.py
@@ -32,13 +32,16 @@ import spack
def setup_parser(subparser):
subparser.add_argument(
+ '-c', dest='python_command', help='Command to execute.')
+ subparser.add_argument(
'python_args', nargs=argparse.REMAINDER, help="File to run plus arguments.")
description = "Launch an interpreter as spack would launch a command"
def python(parser, args):
# Fake a main python shell by setting __name__ to __main__.
- console = code.InteractiveConsole({'__name__' : '__main__'})
+ console = code.InteractiveConsole({'__name__' : '__main__',
+ 'spack' : spack})
if "PYTHONSTARTUP" in os.environ:
startup_file = os.environ["PYTHONSTARTUP"]
@@ -47,7 +50,10 @@ def python(parser, args):
console.runsource(startup.read(), startup_file, 'exec')
python_args = args.python_args
- if python_args:
+ python_command = args.python_command
+ if python_command:
+ console.runsource(python_command)
+ elif python_args:
sys.argv = python_args
with open(python_args[0]) as file:
console.runsource(file.read(), python_args[0], 'exec')
diff --git a/lib/spack/spack/cmd/uninstall.py b/lib/spack/spack/cmd/uninstall.py
index 191d9d88e8..03873bb5f8 100644
--- a/lib/spack/spack/cmd/uninstall.py
+++ b/lib/spack/spack/cmd/uninstall.py
@@ -42,9 +42,9 @@ def setup_parser(subparser):
help="Remove regardless of whether other packages depend on this one.")
subparser.add_argument(
'-a', '--all', action='store_true', dest='all',
- help="USE CAREFULLY. Remove ALL installed packages that match each supplied spec. " +
- "i.e., if you say uninstall libelf, ALL versions of libelf are uninstalled. " +
- "This is both useful and dangerous, like rm -r.")
+ help="USE CAREFULLY. Remove ALL installed packages that match each " +
+ "supplied spec. i.e., if you say uninstall libelf, ALL versions of " +
+ "libelf are uninstalled. This is both useful and dangerous, like rm -r.")
subparser.add_argument(
'packages', nargs=argparse.REMAINDER, help="specs of packages to uninstall")
@@ -81,7 +81,8 @@ def uninstall(parser, args):
pkgs.append(s.package)
except spack.packages.UnknownPackageError, e:
- # The package.py file has gone away -- but still want to uninstall.
+ # The package.py file has gone away -- but still want to
+ # uninstall.
spack.Package(s).do_uninstall(force=True)
# Sort packages to be uninstalled by the number of installed dependents
diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py
index bf54055a24..a6f1cc5077 100644
--- a/lib/spack/spack/database.py
+++ b/lib/spack/spack/database.py
@@ -54,6 +54,7 @@ import spack.spec
from spack.version import Version
from spack.spec import Spec
from spack.error import SpackError
+from spack.packages import UnknownPackageError
# DB goes in this directory underneath the root
_db_dirname = '.spack-db'
diff --git a/lib/spack/spack/hooks/extensions.py b/lib/spack/spack/hooks/extensions.py
index b4847d697f..627184cabd 100644
--- a/lib/spack/spack/hooks/extensions.py
+++ b/lib/spack/spack/hooks/extensions.py
@@ -27,9 +27,7 @@ import spack
def pre_uninstall(pkg):
- # Need to do this b/c uninstall does not automatically do it.
- # TODO: store full graph info in stored .spec file.
- pkg.spec.normalize()
+ assert(pkg.spec.concrete)
if pkg.is_extension:
if pkg.activated:
diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py
index ee0bf6de11..6fbf82de14 100644
--- a/lib/spack/spack/mirror.py
+++ b/lib/spack/spack/mirror.py
@@ -146,7 +146,7 @@ def create(path, specs, **kwargs):
stage = None
try:
# create a subdirectory for the current package@version
- archive_path = os.path.abspath(join_path(path, mirror_archive_path(spec)))
+ archive_path = os.path.abspath(join_path(mirror_root, mirror_archive_path(spec)))
subdir = os.path.dirname(archive_path)
mkdirp(subdir)
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index daba5cd352..4d75726e06 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -487,9 +487,15 @@ class Package(object):
if name == dep.name:
return dep
- # Otherwise return the spec from the extends() directive
- spec, kwargs = self.extendees[name]
- return spec
+ # if the spec is concrete already, then it extends something
+ # that is an *optional* dependency, and the dep isn't there.
+ if self.spec._concrete:
+ return None
+ else:
+ # If it's not concrete, then return the spec from the
+ # extends() directive since that is all we know so far.
+ spec, kwargs = self.extendees[name]
+ return spec
@property
@@ -497,18 +503,28 @@ class Package(object):
"""Spec of the extendee of this package, or None if it is not an extension."""
if not self.extendees:
return None
+
+ # TODO: allow multiple extendees.
name = next(iter(self.extendees))
return self.extendees[name][1]
@property
def is_extension(self):
- return len(self.extendees) > 0
+ # if it is concrete, it's only an extension if it actually
+ # dependes on the extendee.
+ if self.spec._concrete:
+ return self.extendee_spec is not None
+ else:
+ # If not, then it's an extension if it *could* be an extension
+ return bool(self.extendees)
def extends(self, spec):
- return (spec.name in self.extendees and
- spec.satisfies(self.extendees[spec.name][0]))
+ if not spec.name in self.extendees:
+ return False
+ s = self.extendee_spec
+ return s and s.satisfies(spec)
@property
diff --git a/lib/spack/spack/test/python_version.py b/lib/spack/spack/test/python_version.py
index ba570b416f..2ea5febb11 100644
--- a/lib/spack/spack/test/python_version.py
+++ b/lib/spack/spack/test/python_version.py
@@ -63,10 +63,6 @@ class PythonVersionTest(unittest.TestCase):
all_issues = {}
for fn in files:
- if fn != '/Users/gamblin2/src/spack/var/spack/packages/vim/package.py':
- continue
- print fn
-
with open(fn) as pyfile:
versions = pyqver2.get_versions(pyfile.read())
for ver, reasons in versions.items():
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index 5b03aa8955..47202f6087 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -173,8 +173,8 @@ fi
#
_sp_share_dir=$(cd "$(dirname $_sp_source_file)" && pwd)
_sp_prefix=$(cd "$(dirname $(dirname $_sp_share_dir))" && pwd)
-
-# TODO: fix SYS_TYPE to something non-LLNL-specific
-_spack_pathadd DK_NODE "${_sp_share_dir%/}/dotkit/$SYS_TYPE"
-_spack_pathadd MODULEPATH "${_sp_share_dir%/}/modules/$SYS_TYPE"
_spack_pathadd PATH "${_sp_prefix%/}/bin"
+
+_sp_sys_type=$(spack-python -c 'print(spack.architecture.sys_type())')
+_spack_pathadd DK_NODE "${_sp_share_dir%/}/dotkit/$_sp_sys_type"
+_spack_pathadd MODULEPATH "${_sp_share_dir%/}/modules/$_sp_sys_type"
diff --git a/var/spack/packages/cfitsio/package.py b/var/spack/packages/cfitsio/package.py
new file mode 100644
index 0000000000..ff450cb5f3
--- /dev/null
+++ b/var/spack/packages/cfitsio/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Cfitsio(Package):
+ """
+ CFITSIO is a library of C and Fortran subroutines for reading and writing
+ data files in FITS (Flexible Image Transport System) data format.
+ """
+ homepage = 'http://heasarc.gsfc.nasa.gov/fitsio/'
+ version('3.370', 'abebd2d02ba5b0503c633581e3bfa116')
+
+ def url_for_version(self, v):
+ url = 'ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/cfitsio{0}.tar.gz'
+ return url.format(str(v).replace('.', ''))
+
+ def install(self, spec, prefix):
+ configure('--prefix=' + prefix)
+ make()
+ make('install')
diff --git a/var/spack/packages/cube/package.py b/var/spack/packages/cube/package.py
index d97cd25636..cc1c684594 100644
--- a/var/spack/packages/cube/package.py
+++ b/var/spack/packages/cube/package.py
@@ -12,6 +12,9 @@ class Cube(Package):
homepage = "http://www.scalasca.org/software/cube-4.x/download.html"
url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
+ version('4.3.3', '07e109248ed8ffc7bdcce614264a2909',
+ url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz')
+
version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20')
version('4.3TP1', 'a2090fbc7b2ba394bd5c09ba971e237f',
diff --git a/var/spack/packages/global/package.py b/var/spack/packages/global/package.py
index a77b1bdc09..e8f06516d9 100644
--- a/var/spack/packages/global/package.py
+++ b/var/spack/packages/global/package.py
@@ -4,7 +4,7 @@ import os
class Global(Package):
""" The Gnu Global tagging system """
- # FIXME: add a proper url for your package's homepage here.
+
homepage = "http://www.gnu.org/software/global"
url = "http://tamacom.com/global/global-6.5.tar.gz"
@@ -13,9 +13,9 @@ class Global(Package):
depends_on('exuberant-ctags')
def install(self, spec, prefix):
- config_args = ['--prefix={}'.format(prefix)]
+ config_args = ['--prefix={0}'.format(prefix)]
- config_args.append('--with-exuberant-ctags={}'.format(
+ config_args.append('--with-exuberant-ctags={0}'.format(
os.path.join(spec['exuberant-ctags'].prefix.bin, 'ctags')))
configure(*config_args)
diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py
index e018a08201..7cfa0a3b61 100644
--- a/var/spack/packages/mpich/package.py
+++ b/var/spack/packages/mpich/package.py
@@ -85,8 +85,13 @@ class Mpich(Package):
mpif77 = os.path.join(bin, 'mpif77')
mpif90 = os.path.join(bin, 'mpif90')
+ spack_cc = os.environ['CC']
+ spack_cxx = os.environ['CXX']
+ spack_f77 = os.environ['F77']
+ spack_fc = os.environ['FC']
+
kwargs = { 'ignore_absent' : True, 'backup' : False, 'string' : True }
- filter_file('CC="cc"', 'CC="%s"' % self.compiler.cc, mpicc, **kwargs)
- filter_file('CXX="c++"', 'CXX="%s"' % self.compiler.cxx, mpicxx, **kwargs)
- filter_file('F77="f77"', 'F77="%s"' % self.compiler.f77, mpif77, **kwargs)
- filter_file('FC="f90"', 'FC="%s"' % self.compiler.fc, mpif90, **kwargs)
+ filter_file('CC="%s"' % spack_cc , 'CC="%s"' % self.compiler.cc, mpicc, **kwargs)
+ filter_file('CXX="%s"'% spack_cxx, 'CXX="%s"' % self.compiler.cxx, mpicxx, **kwargs)
+ filter_file('F77="%s"'% spack_f77, 'F77="%s"' % self.compiler.f77, mpif77, **kwargs)
+ filter_file('FC="%s"' % spack_fc , 'FC="%s"' % self.compiler.fc, mpif90, **kwargs)
diff --git a/var/spack/packages/mrnet/package.py b/var/spack/packages/mrnet/package.py
index 3eb33d0714..fed944e45f 100644
--- a/var/spack/packages/mrnet/package.py
+++ b/var/spack/packages/mrnet/package.py
@@ -7,6 +7,7 @@ class Mrnet(Package):
version('4.0.0', 'd00301c078cba57ef68613be32ceea2f')
version('4.1.0', '5a248298b395b329e2371bf25366115c')
+ version('5.0.1', '17f65738cf1b9f9b95647ff85f69ecdd')
variant('lwthreads', default=False, description="Also build the MRNet LW threadsafe libraries")
parallel = False
diff --git a/var/spack/packages/mvapich2/package.py b/var/spack/packages/mvapich2/package.py
index dc2b2cb23f..23a11b3171 100644
--- a/var/spack/packages/mvapich2/package.py
+++ b/var/spack/packages/mvapich2/package.py
@@ -1,5 +1,5 @@
from spack import *
-
+import os
class Mvapich2(Package):
"""MVAPICH2 is an MPI implementation for Infiniband networks."""
@@ -154,3 +154,31 @@ class Mvapich2(Package):
configure(*configure_args)
make()
make("install")
+
+ self.filter_compilers()
+
+
+ def filter_compilers(self):
+ """Run after install to make the MPI compilers use the
+ compilers that Spack built the package with.
+
+ If this isn't done, they'll have CC, CXX, F77, and FC set
+ to Spack's generic cc, c++, f77, and f90. We want them to
+ be bound to whatever compiler they were built with.
+ """
+ bin = self.prefix.bin
+ mpicc = os.path.join(bin, 'mpicc')
+ mpicxx = os.path.join(bin, 'mpicxx')
+ mpif77 = os.path.join(bin, 'mpif77')
+ mpif90 = os.path.join(bin, 'mpif90')
+
+ spack_cc = os.environ['CC']
+ spack_cxx = os.environ['CXX']
+ spack_f77 = os.environ['F77']
+ spack_fc = os.environ['FC']
+
+ kwargs = { 'ignore_absent' : True, 'backup' : False, 'string' : True }
+ filter_file('CC="%s"' % spack_cc , 'CC="%s"' % self.compiler.cc, mpicc, **kwargs)
+ filter_file('CXX="%s"'% spack_cxx, 'CXX="%s"' % self.compiler.cxx, mpicxx, **kwargs)
+ filter_file('F77="%s"'% spack_f77, 'F77="%s"' % self.compiler.f77, mpif77, **kwargs)
+ filter_file('FC="%s"' % spack_fc , 'FC="%s"' % self.compiler.fc, mpif90, **kwargs)
diff --git a/var/spack/packages/opari2/package.py b/var/spack/packages/opari2/package.py
index daaee61e3a..3f8c65377d 100644
--- a/var/spack/packages/opari2/package.py
+++ b/var/spack/packages/opari2/package.py
@@ -17,6 +17,8 @@ class Opari2(Package):
homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz"
+ version('1.1.4', '245d3d11147a06de77909b0805f530c0',
+ url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz')
version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e')
backend_user_provided = """\
diff --git a/var/spack/packages/otf2/package.py b/var/spack/packages/otf2/package.py
index fa0a5898b6..b3d3a5b663 100644
--- a/var/spack/packages/otf2/package.py
+++ b/var/spack/packages/otf2/package.py
@@ -11,6 +11,10 @@ class Otf2(Package):
homepage = "http://www.vi-hps.org/score-p"
url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
+ version('2.0', '5b546188b25bc1c4e285e06dddf75dfc',
+ url="http://www.vi-hps.org/upload/packages/otf2/otf2-2.0.tar.gz")
+ version('1.5.1', '16a9df46e0da78e374f5d12c8cdc1109',
+ url='http://www.vi-hps.org/upload/packages/otf2/otf2-1.5.1.tar.gz')
version('1.4', 'a23c42e936eb9209c4e08b61c3cf5092',
url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz")
version('1.3.1', 'd0ffc4e858455ace4f596f910e68c9f2',
diff --git a/var/spack/packages/pdt/package.py b/var/spack/packages/pdt/package.py
new file mode 100644
index 0000000000..ce3b793e30
--- /dev/null
+++ b/var/spack/packages/pdt/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written 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 General Public License (as published by
+# the Free Software Foundation) version 2.1 dated 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 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 Pdt(Package):
+ """
+ Program Database Toolkit (PDT) is a framework for analyzing source code written in several programming languages
+ and for making rich program knowledge accessible to developers of static and dynamic analysis tools. PDT implements
+ a standard program representation, the program database (PDB), that can be accessed in a uniform way through a
+ class library supporting common PDB operations.
+ """
+ homepage = "https://www.cs.uoregon.edu/research/pdt/home.php"
+ url = "https://www.cs.uoregon.edu/research/tau/pdt_releases/pdt-3.21.tar.gz"
+
+ version('3.21', '8df94298b71703decf680709a4ddf68f')
+ version('3.19', 'ba5591994998771fdab216699e362228')
+
+ def install(self, spec, prefix):
+ configure('-prefix=%s' % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/py-cffi/package.py b/var/spack/packages/py-cffi/package.py
index a4d37483fe..909049a67c 100644
--- a/var/spack/packages/py-cffi/package.py
+++ b/var/spack/packages/py-cffi/package.py
@@ -4,7 +4,7 @@ class PyCffi(Package):
"""Foreign Function Interface for Python calling C code"""
homepage = "http://cffi.readthedocs.org/en/latest/"
# base https://pypi.python.org/pypi/cffi
- url = "https://pypi.python.org/packages/source/c/cffi/cffi-1.1.2.tar.gz#md5="
+ url = "https://pypi.python.org/packages/source/c/cffi/cffi-1.1.2.tar.gz"
version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea')
diff --git a/var/spack/packages/scorep/package.py b/var/spack/packages/scorep/package.py
index f013bd1cbb..0820f2d8ac 100644
--- a/var/spack/packages/scorep/package.py
+++ b/var/spack/packages/scorep/package.py
@@ -1,74 +1,80 @@
-# FIXME: Add copyright statement
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written 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 General Public License (as published by
+# the Free Software Foundation) version 2.1 dated 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 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 Scorep(Package):
- """The Score-P measurement infrastructure is a highly scalable and
+ """
+ The Score-P measurement infrastructure is a highly scalable and
easy-to-use tool suite for profiling, event tracing, and online
analysis of HPC applications."""
- # FIXME: add a proper url for your package's homepage here.
homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz"
+ version('1.4.2', '3b9a042b13bdd5836452354e6567f71e',
+ url='http://www.vi-hps.org/upload/packages/scorep/scorep-1.4.2.tar.gz')
version('1.3', '9db6f957b7f51fa01377a9537867a55c',
- url = 'http://www.vi-hps.org/upload/packages/scorep/scorep-1.3.tar.gz')
+ url='http://www.vi-hps.org/upload/packages/scorep/scorep-1.3.tar.gz')
- version('1.2.3', '4978084e7cbd05b94517aa8beaea0817')
+ ##########
+ # Dependencies for SCORE-P are quite tight. See the homepage for more information.
+ # SCOREP 1.4.2
+ depends_on('otf2@1.5:1.6', when='@1.4.2')
+ depends_on('opari2@1.1.4', when='@1.4.2')
+ depends_on('cube@4.3:4.4', when='@1.4.2')
+ # SCOREP 1.3
+ depends_on("otf2@1.4", when='@1.3')
+ depends_on("opari2@1.1.4", when='@1.3')
+ depends_on("cube@4.2.3", when='@1.3')
+ ##########
depends_on("mpi")
depends_on("papi")
- # depends_on("otf2@1.2:1.2.1") # only Score-P 1.2.x
- depends_on("otf2")
- depends_on("opari2")
- depends_on("cube@4.2:4.2.3")
- backend_user_provided = """\
-CC=cc
-CXX=c++
-F77=f77
-FC=f90
-CFLAGS=-fPIC
-CXXFLAGS=-fPIC
-"""
- frontend_user_provided = """\
-CC_FOR_BUILD=cc
-CXX_FOR_BUILD=c++
-F77_FOR_BUILD=f70
-FC_FOR_BUILD=f90
-CFLAGS_FOR_BUILD=-fPIC
-CXXFLAGS_FOR_BUILD=-fPIC
-"""
- mpi_user_provided = """\
-MPICC=mpicc
-MPICXX=mpicxx
-MPIF77=mpif77
-MPIFC=mpif90
-MPI_CFLAGS=-fPIC
-MPI_CXXFLAGS=-fPIC
-"""
+ def get_compiler_config_line(self):
+ backend_user_provided = ['CC=%s' % self.compiler.cc_names[0],
+ 'CXX=%s' % self.compiler.cxx_names[0],
+ 'F77=%s' % self.compiler.f77_names[0] if len(self.compiler.f77_names) else "",
+ 'FC=%s' % self.compiler.fc_names[0] if len(self.compiler.fc_names) else "",
+ 'CFLAGS=-fPIC %s' % self.rpath_args,
+ 'CXXFLAGS=-fPIC %s'% self.rpath_args]
+ return backend_user_provided
def install(self, spec, prefix):
- # Use a custom compiler configuration, otherwise the score-p
- # build system messes with spack's compiler settings.
- # Create these three files in the build directory
- with open("platform-backend-user-provided", "w") as backend_file:
- backend_file.write(self.backend_user_provided)
- with open("platform-frontend-user-provided", "w") as frontend_file:
- frontend_file.write(self.frontend_user_provided)
- with open("platform-mpi-user-provided", "w") as mpi_file:
- mpi_file.write(self.mpi_user_provided)
-
- configure_args = ["--prefix=%s" % prefix,
- "--with-custom-compilers",
- "--with-otf2=%s" % spec['otf2'].prefix.bin,
- "--with-opari2=%s" % spec['opari2'].prefix.bin,
- "--with-cube=%s" % spec['cube'].prefix.bin,
- "--with-papi-header=%s" % spec['papi'].prefix.include,
- "--with-papi-lib=%s" % spec['papi'].prefix.lib,
- "--enable-shared"]
-
- configure(*configure_args)
-
- make()
- make("install")
+ configure = Executable( join_path(self.stage.source_path, 'configure') )
+ with working_dir('spack-build', create=True):
+ configure_args = ["--prefix=%s" % prefix,
+ "--with-otf2=%s" % spec['otf2'].prefix.bin,
+ "--with-opari2=%s" % spec['opari2'].prefix.bin,
+ "--with-cube=%s" % spec['cube'].prefix.bin,
+ "--with-papi-header=%s" % spec['papi'].prefix.include,
+ "--with-papi-lib=%s" % spec['papi'].prefix.lib,
+ "--enable-shared"]
+ configure_args.extend(self.get_compiler_config_line())
+ configure(*configure_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/scotch/package.py b/var/spack/packages/scotch/package.py
index 79289ff2ad..8229ed8686 100644
--- a/var/spack/packages/scotch/package.py
+++ b/var/spack/packages/scotch/package.py
@@ -1,5 +1,4 @@
from spack import *
-import glob
import os
class Scotch(Package):
@@ -11,28 +10,115 @@ class Scotch(Package):
version('6.0.3', '10b0cc0f184de2de99859eafaca83cfc')
- depends_on('mpi')
+ variant('mpi', default=False, description='Activate the compilation of PT-Scotch')
+ variant('compression', default=True, description='Activate the posibility to use compressed files')
+ variant('esmumps', default=False, description='Activate the compilation of the lib esmumps needed by mumps')
+ variant('shared', default=True, description='Build shared libraries')
+ depends_on('mpi', when='+mpi')
+ depends_on('zlib', when='+compression')
+ depends_on('flex')
+ depends_on('bison')
+
+ def compiler_specifics(self, makefile_inc, defines):
+ if self.compiler.name == 'gcc':
+ defines.append('-Drestrict=__restrict')
+ elif self.compiler.name == 'intel':
+ defines.append('-restrict')
+
+ makefile_inc.append('CCS = $(CC)')
+
+ if '+mpi' in self.spec:
+ makefile_inc.extend([
+ 'CCP = %s' % os.path.join(self.spec['mpi'].prefix.bin, 'mpicc'),
+ 'CCD = $(CCP)'
+ ])
+ else:
+ makefile_inc.extend([
+ 'CCP = mpicc', # It is set but not used
+ 'CCD = $(CCS)'
+ ])
+
+
+
+ def library_build_type(self, makefile_inc, defines):
+ makefile_inc.extend([
+ 'LIB = .a',
+ 'CLIBFLAGS = ',
+ 'RANLIB = ranlib',
+ 'AR = ar',
+ 'ARFLAGS = -ruv '
+ ])
+
+ @when('+shared')
+ def library_build_type(self, makefile_inc, defines):
+ makefile_inc.extend([
+ 'LIB = .so',
+ 'CLIBFLAGS = -shared -fPIC',
+ 'RANLIB = echo',
+ 'AR = $(CC)',
+ 'ARFLAGS = -shared $(LDFLAGS) -o'
+ ])
+
+ def extra_features(self, makefile_inc, defines):
+ ldflags = []
+
+ if '+compression' in self.spec:
+ defines.append('-DCOMMON_FILE_COMPRESS_GZ')
+ ldflags.append('-L%s -lz' % (self.spec['zlib'].prefix.lib))
+
+ defines.append('-DCOMMON_PTHREAD')
+ ldflags.append('-lm -lrt -pthread')
+
+ makefile_inc.append('LDFLAGS = %s' % ' '.join(ldflags))
def patch(self):
- with working_dir('src/Make.inc'):
- makefiles = glob.glob('Makefile.inc.x86-64_pc_linux2*')
- filter_file(r'^CCS\s*=.*$', 'CCS = cc', *makefiles)
- filter_file(r'^CCD\s*=.*$', 'CCD = cc', *makefiles)
+ makefile_inc = []
+ defines = [
+ '-DCOMMON_RANDOM_FIXED_SEED',
+ '-DSCOTCH_DETERMINISTIC',
+ '-DSCOTCH_RENAME',
+ '-DIDXSIZE64' ]
+ self.library_build_type(makefile_inc, defines)
+ self.compiler_specifics(makefile_inc, defines)
+ self.extra_features(makefile_inc, defines)
+ makefile_inc.extend([
+ 'EXE =',
+ 'OBJ = .o',
+ 'MAKE = make',
+ 'CAT = cat',
+ 'LN = ln',
+ 'MKDIR = mkdir',
+ 'MV = mv',
+ 'CP = cp',
+ 'CFLAGS = -O3 %s' % (' '.join(defines)),
+ 'LEX = %s -Pscotchyy -olex.yy.c' % os.path.join(self.spec['flex'].prefix.bin , 'flex'),
+ 'YACC = %s -pscotchyy -y -b y' % os.path.join(self.spec['bison'].prefix.bin, 'bison'),
+ 'prefix = %s' % self.prefix,
+ ''
+ ])
+
+ with working_dir('src'):
+ with open('Makefile.inc', 'w') as fh:
+ fh.write('\n'.join(makefile_inc))
+
def install(self, spec, prefix):
- # Currently support gcc and icc on x86_64 (maybe others with
- # vanilla makefile)
- makefile = 'Make.inc/Makefile.inc.x86-64_pc_linux2'
- if spec.satisfies('%icc'):
- makefile += '.icc'
+ targets = ['scotch']
+ if '+mpi' in self.spec:
+ targets.append('ptscotch')
+
+ if '+esmumps' in self.spec:
+ targets.append('esmumps')
+ if '+mpi' in self.spec:
+ targets.append('ptesmumps')
with working_dir('src'):
- force_symlink(makefile, 'Makefile.inc')
- for app in ('scotch', 'ptscotch'):
- make(app)
+ for app in targets:
+ make(app, parallel=(not app=='ptesmumps'))
+
install_tree('bin', prefix.bin)
install_tree('lib', prefix.lib)
install_tree('include', prefix.include)
diff --git a/var/spack/packages/spot/package.py b/var/spack/packages/spot/package.py
new file mode 100644
index 0000000000..9e539277ae
--- /dev/null
+++ b/var/spack/packages/spot/package.py
@@ -0,0 +1,18 @@
+from spack import *
+import os
+
+class Spot(Package):
+ """Spot is a C++11 library for omega-automata manipulation and model checking."""
+ homepage = "https://spot.lrde.epita.fr/index.html"
+ url = "http://www.lrde.epita.fr/dload/spot/spot-1.99.3.tar.gz"
+
+ version('1.99.3', 'd53adcb2d0fe7c69f45d4e595a58254e')
+
+ #depends_on("gcc@4.8:")
+ depends_on("python@3.2:")
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/tau/package.py b/var/spack/packages/tau/package.py
index 048fac80aa..31492397d8 100644
--- a/var/spack/packages/tau/package.py
+++ b/var/spack/packages/tau/package.py
@@ -1,32 +1,135 @@
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written 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 General Public License (as published by
+# the Free Software Foundation) version 2.1 dated 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 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 *
import os
+import os.path
+
from llnl.util.filesystem import join_path
class Tau(Package):
- """A portable profiling and tracing toolkit for performance
- analysis of parallel programs written in Fortran, C, C++, UPC,
- Java, Python."""
+ """
+ A portable profiling and tracing toolkit for performance
+ analysis of parallel programs written in Fortran, C, C++, UPC,
+ Java, Python.
+ """
homepage = "http://www.cs.uoregon.edu/research/tau"
- url = "http://www.cs.uoregon.edu/research/paracomp/tau/tauprofile/dist/tau-2.23.1.tar.gz"
+ url = "https://www.cs.uoregon.edu/research/tau/tau_releases/tau-2.25.tar.gz"
+ version('2.25', '46cd48fa3f3c4ce0197017b3158a2b43')
+ version('2.24.1', '6635ece6d1f08215b02f5d0b3c1e971b')
+ version('2.24', '57ce33539c187f2e5ec68f0367c76db4')
version('2.23.1', '6593b47ae1e7a838e632652f0426fe72')
+ # TODO : shmem variant missing
+ variant('download', default=False, description='Downloads and builds various dependencies')
+ variant('scorep', default=False, description='Activates SCOREP support')
+ variant('openmp', default=True, description='Use OpenMP threads')
+ variant('mpi', default=True, description='Specify use of TAU MPI wrapper library')
+ variant('phase', default=True, description='Generate phase based profiles')
+ variant('comm', default=True, description=' Generate profiles with MPI communicator info')
+
+ # TODO : Try to build direct OTF2 support? Some parts of the OTF support library in TAU are non-conformant,
+ # TODO : and fail at compile-time. Further, SCOREP is compiled with OTF2 support.
+ depends_on('pdt') # Required for TAU instrumentation
+ depends_on('scorep', when='+scorep')
+ depends_on('binutils', when='~download')
+ depends_on('mpi', when='+mpi')
+
+ def set_compiler_options(self):
+
+ useropt = ["-O2", self.rpath_args]
+
+ ##########
+ # Selecting a compiler with TAU configure is quite tricky:
+ # 1 - compilers are mapped to a given set of strings (and spack cc, cxx, etc. wrappers are not among them)
+ # 2 - absolute paths are not allowed
+ # 3 - the usual environment variables seems not to be checked ('CC', 'CXX' and 'FC')
+ # 4 - if no -cc=<compiler> -cxx=<compiler> is passed tau is built with system compiler silently
+ # (regardless of what %<compiler> is used in the spec)
+ #
+ # In the following we give TAU what he expects and put compilers into PATH
+ compiler_path = os.path.dirname(self.compiler.cc)
+ os.environ['PATH'] = ':'.join([compiler_path, os.environ['PATH']])
+ compiler_options = ['-c++=%s' % self.compiler.cxx_names[0],
+ '-cc=%s' % self.compiler.cc_names[0]]
+ if self.compiler.fc:
+ compiler_options.append('-fortran=%s' % self.compiler.fc_names[0])
+ ##########
+
+ # Construct the string of custom compiler flags and append it to compiler related options
+ useropt = ' '.join(useropt)
+ useropt = "-useropt=%s" % useropt
+ compiler_options.append(useropt)
+ return compiler_options
+
def install(self, spec, prefix):
# TAU isn't happy with directories that have '@' in the path. Sigh.
change_sed_delimiter('@', ';', 'configure')
change_sed_delimiter('@', ';', 'utils/FixMakefile')
change_sed_delimiter('@', ';', 'utils/FixMakefile.sed.default')
- # After that, it's relatively standard.
- configure("-prefix=%s" % prefix)
+ # TAU configure, despite the name , seems to be a manually written script (nothing related to autotools).
+ # As such it has a few #peculiarities# that make this build quite hackish.
+ options = ["-prefix=%s" % prefix,
+ "-iowrapper",
+ "-pdt=%s" % spec['pdt'].prefix]
+ # If download is active, download and build suggested dependencies
+ if '+download' in spec:
+ options.extend(['-bfd=download',
+ '-unwind=download',
+ '-asmdex=download'])
+ else:
+ options.extend(["-bfd=%s" % spec['binutils'].prefix])
+ # TODO : unwind and asmdex are still missing
+
+ if '+scorep' in spec:
+ options.append("-scorep=%s" % spec['scorep'].prefix)
+
+ if '+openmp' in spec:
+ options.append('-openmp')
+
+ if '+mpi' in spec:
+ options.append('-mpi')
+
+ if '+phase' in spec:
+ options.append('-PROFILEPHASE')
+
+ if '+comm' in spec:
+ options.append('-PROFILECOMMUNICATORS')
+
+ compiler_specific_options = self.set_compiler_options()
+ options.extend(compiler_specific_options)
+ configure(*options)
make("install")
# Link arch-specific directories into prefix since there is
# only one arch per prefix the way spack installs.
self.link_tau_arch_dirs()
-
def link_tau_arch_dirs(self):
for subdir in os.listdir(self.prefix):
for d in ('bin', 'lib'):
diff --git a/var/spack/packages/tmuxinator/package.py b/var/spack/packages/tmuxinator/package.py
index 26c061cbd6..77ae063e5d 100644
--- a/var/spack/packages/tmuxinator/package.py
+++ b/var/spack/packages/tmuxinator/package.py
@@ -5,7 +5,7 @@ class Tmuxinator(Package):
homepage = "https://github.com/tmuxinator/tmuxinator"
url = "https://github.com/tmuxinator/tmuxinator"
- version('0.6.11',
+ version('0.6.11',
git='https://github.com/tmuxinator/tmuxinator',
tag='v0.6.11')
@@ -13,5 +13,4 @@ class Tmuxinator(Package):
def install(self, spec, prefix):
gem('build', 'tmuxinator.gemspec')
- gem('install', 'tmuxinator-{}.gem'.format(self.version))
-
+ gem('install', 'tmuxinator-{0}.gem'.format(self.version))