summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md24
-rwxr-xr-xbin/spack2
-rw-r--r--lib/spack/docs/conf.py6
-rw-r--r--lib/spack/llnl/util/lang.py5
-rw-r--r--lib/spack/llnl/util/tty/colify.py18
-rw-r--r--lib/spack/spack/__init__.py14
-rw-r--r--lib/spack/spack/architecture.py20
-rw-r--r--lib/spack/spack/build_environment.py7
-rw-r--r--lib/spack/spack/cmd/info.py16
-rw-r--r--lib/spack/spack/cmd/test-install.py211
-rw-r--r--lib/spack/spack/compiler.py24
-rw-r--r--lib/spack/spack/directives.py10
-rw-r--r--lib/spack/spack/directory_layout.py7
-rw-r--r--lib/spack/spack/package.py19
-rw-r--r--lib/spack/spack/stage.py3
-rw-r--r--lib/spack/spack/test/__init__.py1
-rw-r--r--lib/spack/spack/test/unit_install.py121
-rw-r--r--lib/spack/spack/url.py4
-rw-r--r--lib/spack/spack/virtual.py8
-rwxr-xr-xshare/spack/logo/favicon.icobin0 -> 1150 bytes
-rw-r--r--share/spack/logo/spack-logo-text-64.pngbin0 -> 18644 bytes
-rw-r--r--share/spack/logo/spack-logo-white-text-48.pngbin0 -> 12201 bytes
-rw-r--r--var/spack/packages/activeharmony/package.py15
-rw-r--r--var/spack/packages/apex/package.py34
-rw-r--r--var/spack/packages/binutils/package.py15
-rw-r--r--var/spack/packages/boost/package.py4
-rw-r--r--var/spack/packages/bowtie2/bowtie2-2.5.patch16
-rw-r--r--var/spack/packages/bowtie2/package.py24
-rw-r--r--var/spack/packages/bzip2/package.py4
-rw-r--r--var/spack/packages/clang/package.py13
-rw-r--r--var/spack/packages/dbus/package.py4
-rw-r--r--var/spack/packages/doxygen/package.py25
-rw-r--r--var/spack/packages/elfutils/package.py26
-rw-r--r--var/spack/packages/fish/package.py18
-rw-r--r--var/spack/packages/gcc/package.py70
-rw-r--r--var/spack/packages/gflags/package.py21
-rw-r--r--var/spack/packages/ghostscript/package.py17
-rw-r--r--var/spack/packages/glm/package.py19
-rw-r--r--var/spack/packages/glog/package.py15
-rw-r--r--var/spack/packages/graphviz/package.py21
-rw-r--r--var/spack/packages/hdf5/package.py3
-rw-r--r--var/spack/packages/leveldb/package.py29
-rw-r--r--var/spack/packages/libelf/package.py2
-rw-r--r--var/spack/packages/libffi/package.py7
-rw-r--r--var/spack/packages/libxcb/package.py2
-rw-r--r--var/spack/packages/llvm/package.py17
-rw-r--r--var/spack/packages/lmdb/package.py39
-rw-r--r--var/spack/packages/matio/package.py15
-rw-r--r--var/spack/packages/mpich/package.py10
-rw-r--r--var/spack/packages/ncdu/package.py28
-rw-r--r--var/spack/packages/ncurses/package.py2
-rw-r--r--var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch25
-rw-r--r--var/spack/packages/netcdf/package.py29
-rw-r--r--var/spack/packages/netlib-blas/package.py6
-rw-r--r--var/spack/packages/netlib-lapack/package.py (renamed from var/spack/packages/lapack/package.py)18
-rw-r--r--var/spack/packages/ompt-openmp/package.py23
-rw-r--r--var/spack/packages/openmpi/package.py74
-rw-r--r--var/spack/packages/paraview/package.py72
-rw-r--r--var/spack/packages/pidx/package.py21
-rw-r--r--var/spack/packages/pkg-config/package.py17
-rw-r--r--var/spack/packages/protobuf/package.py16
-rw-r--r--var/spack/packages/py-numpy/package.py15
-rw-r--r--var/spack/packages/py-scipy/package.py2
-rw-r--r--var/spack/packages/samtools/package.py18
-rw-r--r--var/spack/packages/samtools/samtools1.2.patch20
-rw-r--r--var/spack/packages/scorep/package.py15
-rw-r--r--var/spack/packages/scr/package.py6
-rw-r--r--var/spack/packages/snappy/package.py15
-rw-r--r--var/spack/packages/stat/package.py11
-rw-r--r--var/spack/packages/swig/package.py2
-rw-r--r--var/spack/packages/trilinos/package.py50
-rw-r--r--var/spack/packages/xz/package.py8
72 files changed, 1323 insertions, 175 deletions
diff --git a/README.md b/README.md
index 74d618ed2f..3a2c535d4e 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-Spack
-===========
+![image](share/spack/logo/spack-logo-text-64.png "Spack")
+============
Spack is a package management tool designed to support multiple
versions and configurations of software on a wide variety of platforms
@@ -13,7 +13,7 @@ can coexist on the same system.
Most importantly, Spack is simple. It offers a simple spec syntax so
that users can specify versions and configuration options
concisely. Spack is also simple for package authors: package files are
-writtin in pure Python, and specs allow package authors to write a
+written in pure Python, and specs allow package authors to write a
single build script for many different builds of the same package.
See the
@@ -62,21 +62,9 @@ latest stable release.
Authors
----------------
-Spack was written by Todd Gamblin, tgamblin@llnl.gov.
-
-Significant contributions were also made by:
-
- * David Beckingsale
- * David Boehme
- * Alfredo Gimenez
- * Luc Jaulmes
- * Matt Legendre
- * Greg Lee
- * Adam Moody
- * Saravan Pantham
- * Joachim Protze
- * Bob Robey
- * Justin Too
+Many thanks go to Spack's [contributors](https://github.com/scalability-llnl/spack/graphs/contributors).
+
+Spack was originally written by Todd Gamblin, tgamblin@llnl.gov.
Release
----------------
diff --git a/bin/spack b/bin/spack
index 5c042edd2d..127a85f6fe 100755
--- a/bin/spack
+++ b/bin/spack
@@ -118,7 +118,7 @@ def main():
# If the user asked for it, don't check ssl certs.
if args.insecure:
- tty.warn("You asked for --insecure, which does not check SSL certificates or checksums.")
+ tty.warn("You asked for --insecure, which does not check SSL certificates.")
spack.curl.add_default_arg('-k')
# Try to load the particular command asked for and run it
diff --git a/lib/spack/docs/conf.py b/lib/spack/docs/conf.py
index 7303d7fef6..bce9ef0e94 100644
--- a/lib/spack/docs/conf.py
+++ b/lib/spack/docs/conf.py
@@ -149,7 +149,7 @@ html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
-#html_theme_options = [('show_copyright', False)]
+html_theme_options = { 'logo_only' : True }
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ["_themes"]
@@ -163,12 +163,12 @@ html_theme_path = ["_themes"]
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-#html_logo = None
+html_logo = '../../../share/spack/logo/spack-logo-white-text-48.png'
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
-#html_favicon = None
+html_favicon = '../../../share/spack/logo/favicon.ico'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py
index 9e1bef18ca..156ee34c9e 100644
--- a/lib/spack/llnl/util/lang.py
+++ b/lib/spack/llnl/util/lang.py
@@ -87,10 +87,7 @@ def index_by(objects, *funcs):
result = {}
for o in objects:
key = f(o)
- if key not in result:
- result[key] = [o]
- else:
- result[key].append(o)
+ result.setdefault(key, []).append(o)
for key, objects in result.items():
result[key] = index_by(objects, *funcs[1:])
diff --git a/lib/spack/llnl/util/tty/colify.py b/lib/spack/llnl/util/tty/colify.py
index 66c52c3968..db928444c7 100644
--- a/lib/spack/llnl/util/tty/colify.py
+++ b/lib/spack/llnl/util/tty/colify.py
@@ -33,8 +33,7 @@ import struct
from StringIO import StringIO
from llnl.util.tty import terminal_size
-from llnl.util.tty.color import clen
-
+from llnl.util.tty.color import clen, cextra
class ColumnConfig:
def __init__(self, cols):
@@ -42,7 +41,6 @@ class ColumnConfig:
self.line_length = 0
self.valid = True
self.widths = [0] * cols # does not include ansi colors
- self.cwidths = [0] * cols # includes ansi colors
def __repr__(self):
attrs = [(a,getattr(self, a)) for a in dir(self) if not a.startswith("__")]
@@ -66,8 +64,6 @@ def config_variable_cols(elts, console_width, padding, cols=0):
# Get a bound on the most columns we could possibly have.
# 'clen' ignores length of ansi color sequences.
lengths = [clen(e) for e in elts]
- clengths = [len(e) for e in elts]
-
max_cols = max(1, console_width / (min(lengths) + padding))
max_cols = min(len(elts), max_cols)
@@ -85,7 +81,6 @@ def config_variable_cols(elts, console_width, padding, cols=0):
if conf.widths[col] < (length + p):
conf.line_length += length + p - conf.widths[col]
conf.widths[col] = length + p
- conf.cwidths[col] = clengths[i] + p
conf.valid = (conf.line_length < console_width)
try:
@@ -118,7 +113,6 @@ def config_uniform_cols(elts, console_width, padding, cols=0):
config = ColumnConfig(cols)
config.widths = [max_len] * cols
- config.cwidths = [max_clen] * cols
return config
@@ -147,9 +141,6 @@ def colify(elts, **options):
method=<string> Method to use to fit columns. Options are variable or uniform.
Variable-width columns are tighter, uniform columns are all the
same width and fit less data on the screen.
-
- len=<func> Function to use for calculating string length.
- Useful for ignoring ansi color. Default is 'len'.
"""
# Get keyword arguments or set defaults
cols = options.pop("cols", 0)
@@ -199,9 +190,6 @@ def colify(elts, **options):
raise ValueError("method must be one of: " + allowed_methods)
cols = config.cols
- formats = ["%%-%ds" % width for width in config.cwidths[:-1]]
- formats.append("%s") # last column has no trailing space
-
rows = (len(elts) + cols - 1) / cols
rows_last_col = len(elts) % rows
@@ -209,7 +197,9 @@ def colify(elts, **options):
output.write(" " * indent)
for col in xrange(cols):
elt = col * rows + row
- output.write(formats[col] % elts[elt])
+ width = config.widths[col] + cextra(elts[elt])
+ fmt = '%%-%ds' % width
+ output.write(fmt % elts[elt])
output.write("\n")
row += 1
diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py
index 4d10bc2da6..1ecf662178 100644
--- a/lib/spack/spack/__init__.py
+++ b/lib/spack/spack/__init__.py
@@ -27,24 +27,26 @@ import tempfile
from llnl.util.filesystem import *
# This lives in $prefix/lib/spack/spack/__file__
-prefix = ancestor(__file__, 4)
+spack_root = ancestor(__file__, 4)
# The spack script itself
-spack_file = join_path(prefix, "bin", "spack")
+spack_file = join_path(spack_root, "bin", "spack")
# spack directory hierarchy
-etc_path = join_path(prefix, "etc")
-lib_path = join_path(prefix, "lib", "spack")
+lib_path = join_path(spack_root, "lib", "spack")
build_env_path = join_path(lib_path, "env")
module_path = join_path(lib_path, "spack")
compilers_path = join_path(module_path, "compilers")
test_path = join_path(module_path, "test")
hooks_path = join_path(module_path, "hooks")
-var_path = join_path(prefix, "var", "spack")
+var_path = join_path(spack_root, "var", "spack")
stage_path = join_path(var_path, "stage")
+share_path = join_path(spack_root, "share", "spack")
+
+prefix = spack_root
opt_path = join_path(prefix, "opt")
install_path = join_path(opt_path, "spack")
-share_path = join_path(prefix, "share", "spack")
+etc_path = join_path(prefix, "etc")
#
# Set up the packages database.
diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 0c4b605e91..05ac5d6f35 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -23,13 +23,12 @@
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
-import platform as py_platform
+import subprocess
from llnl.util.lang import memoized
import spack
import spack.error as serr
-from spack.version import Version
class InvalidSysTypeError(serr.SpackError):
@@ -59,22 +58,23 @@ def get_sys_type_from_environment():
return os.environ.get('SYS_TYPE')
-def get_mac_sys_type():
- """Return a Mac OS SYS_TYPE or None if this isn't a mac."""
- mac_ver = py_platform.mac_ver()[0]
- if not mac_ver:
+def get_sys_type_from_uname():
+ """Return the architecture from uname."""
+ try:
+ arch_proc = subprocess.Popen(['uname', '-i'],
+ stdout=subprocess.PIPE)
+ arch, _ = arch_proc.communicate()
+ return arch.strip()
+ except:
return None
- return "macosx_%s_%s" % (
- Version(mac_ver).up_to(2), py_platform.machine())
-
@memoized
def sys_type():
"""Returns a SysType for the current machine."""
methods = [get_sys_type_from_spack_globals,
get_sys_type_from_environment,
- get_mac_sys_type]
+ get_sys_type_from_uname]
# search for a method that doesn't return None
sys_type = None
diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index a133faa629..dac25d9940 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -296,4 +296,9 @@ def fork(pkg, function):
# message. Just make the parent exit with an error code.
pid, returncode = os.waitpid(pid, 0)
if returncode != 0:
- sys.exit(1)
+ raise InstallError("Installation process had nonzero exit code."
+ .format(str(returncode)))
+
+
+class InstallError(spack.error.SpackError):
+ """Raised when a package fails to install"""
diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py
index c6209523f0..085e4db44d 100644
--- a/lib/spack/spack/cmd/info.py
+++ b/lib/spack/spack/cmd/info.py
@@ -65,11 +65,21 @@ def print_text_info(pkg):
print "None"
else:
pad = padder(pkg.variants, 4)
+
+ maxv = max(len(v) for v in sorted(pkg.variants))
+ fmt = "%%-%ss%%-10s%%s" % (maxv + 4)
+
+ print " " + fmt % ('Name', 'Default', 'Description')
+ print
for name in sorted(pkg.variants):
v = pkg.variants[name]
- print " %s%s" % (
- pad(('+' if v.default else '-') + name + ':'),
- "\n".join(textwrap.wrap(v.description)))
+ default = 'on' if v.default else 'off'
+
+ lines = textwrap.wrap(v.description)
+ lines[1:] = [" " + (" " * maxv) + l for l in lines[1:]]
+ desc = "\n".join(lines)
+
+ print " " + fmt % (name, default, desc)
print
print "Dependencies:"
diff --git a/lib/spack/spack/cmd/test-install.py b/lib/spack/spack/cmd/test-install.py
new file mode 100644
index 0000000000..68b761d5dc
--- /dev/null
+++ b/lib/spack/spack/cmd/test-install.py
@@ -0,0 +1,211 @@
+##############################################################################
+# 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://scalability-llnl.github.io/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 external import argparse
+import xml.etree.ElementTree as ET
+import itertools
+import re
+import os
+import codecs
+
+import llnl.util.tty as tty
+from llnl.util.filesystem import *
+
+import spack
+from spack.build_environment import InstallError
+from spack.fetch_strategy import FetchError
+import spack.cmd
+
+description = "Treat package installations as unit tests and output formatted test results"
+
+def setup_parser(subparser):
+ subparser.add_argument(
+ '-j', '--jobs', action='store', type=int,
+ help="Explicitly set number of make jobs. Default is #cpus.")
+
+ subparser.add_argument(
+ '-n', '--no-checksum', action='store_true', dest='no_checksum',
+ help="Do not check packages against checksum")
+
+ subparser.add_argument(
+ '-o', '--output', action='store', help="test output goes in this file")
+
+ subparser.add_argument(
+ 'package', nargs=argparse.REMAINDER, help="spec of package to install")
+
+
+class JunitResultFormat(object):
+ def __init__(self):
+ self.root = ET.Element('testsuite')
+ self.tests = []
+
+ def add_test(self, buildId, testResult, buildInfo=None):
+ self.tests.append((buildId, testResult, buildInfo))
+
+ def write_to(self, stream):
+ self.root.set('tests', '{0}'.format(len(self.tests)))
+ for buildId, testResult, buildInfo in self.tests:
+ testcase = ET.SubElement(self.root, 'testcase')
+ testcase.set('classname', buildId.name)
+ testcase.set('name', buildId.stringId())
+ if testResult == TestResult.FAILED:
+ failure = ET.SubElement(testcase, 'failure')
+ failure.set('type', "Build Error")
+ failure.text = buildInfo
+ elif testResult == TestResult.SKIPPED:
+ skipped = ET.SubElement(testcase, 'skipped')
+ skipped.set('type', "Skipped Build")
+ skipped.text = buildInfo
+ ET.ElementTree(self.root).write(stream)
+
+
+class TestResult(object):
+ PASSED = 0
+ FAILED = 1
+ SKIPPED = 2
+
+
+class BuildId(object):
+ def __init__(self, spec):
+ self.name = spec.name
+ self.version = spec.version
+ self.hashId = spec.dag_hash()
+
+ def stringId(self):
+ return "-".join(str(x) for x in (self.name, self.version, self.hashId))
+
+ def __hash__(self):
+ return hash((self.name, self.version, self.hashId))
+
+ def __eq__(self, other):
+ if not isinstance(other, BuildId):
+ return False
+
+ return ((self.name, self.version, self.hashId) ==
+ (other.name, other.version, other.hashId))
+
+
+def fetch_log(path):
+ if not os.path.exists(path):
+ return list()
+ with codecs.open(path, 'rb', 'utf-8') as F:
+ return list(line.strip() for line in F.readlines())
+
+
+def failed_dependencies(spec):
+ return set(childSpec for childSpec in spec.dependencies.itervalues() if not
+ spack.db.get(childSpec).installed)
+
+
+def create_test_output(topSpec, newInstalls, output, getLogFunc=fetch_log):
+ # Post-order traversal is not strictly required but it makes sense to output
+ # tests for dependencies first.
+ for spec in topSpec.traverse(order='post'):
+ if spec not in newInstalls:
+ continue
+
+ failedDeps = failed_dependencies(spec)
+ package = spack.db.get(spec)
+ if failedDeps:
+ result = TestResult.SKIPPED
+ dep = iter(failedDeps).next()
+ depBID = BuildId(dep)
+ errOutput = "Skipped due to failed dependency: {0}".format(
+ depBID.stringId())
+ elif (not package.installed) and (not package.stage.source_path):
+ result = TestResult.FAILED
+ errOutput = "Failure to fetch package resources."
+ elif not package.installed:
+ result = TestResult.FAILED
+ lines = getLogFunc(package.build_log_path)
+ errMessages = list(line for line in lines if
+ re.search('error:', line, re.IGNORECASE))
+ errOutput = errMessages if errMessages else lines[-10:]
+ errOutput = '\n'.join(itertools.chain(
+ [spec.to_yaml(), "Errors:"], errOutput,
+ ["Build Log:", package.build_log_path]))
+ else:
+ result = TestResult.PASSED
+ errOutput = None
+
+ bId = BuildId(spec)
+ output.add_test(bId, result, errOutput)
+
+
+def test_install(parser, args):
+ if not args.package:
+ tty.die("install requires a package argument")
+
+ if args.jobs is not None:
+ if args.jobs <= 0:
+ tty.die("The -j option must be a positive integer!")
+
+ if args.no_checksum:
+ spack.do_checksum = False # TODO: remove this global.
+
+ specs = spack.cmd.parse_specs(args.package, concretize=True)
+ if len(specs) > 1:
+ tty.die("Only 1 top-level package can be specified")
+ topSpec = iter(specs).next()
+
+ newInstalls = set()
+ for spec in topSpec.traverse():
+ package = spack.db.get(spec)
+ if not package.installed:
+ newInstalls.add(spec)
+
+ if not args.output:
+ bId = BuildId(topSpec)
+ outputDir = join_path(os.getcwd(), "test-output")
+ if not os.path.exists(outputDir):
+ os.mkdir(outputDir)
+ outputFpath = join_path(outputDir, "test-{0}.xml".format(bId.stringId()))
+ else:
+ outputFpath = args.output
+
+ for spec in topSpec.traverse(order='post'):
+ # Calling do_install for the top-level package would be sufficient but
+ # this attempts to keep going if any package fails (other packages which
+ # are not dependents may succeed)
+ package = spack.db.get(spec)
+ if (not failed_dependencies(spec)) and (not package.installed):
+ try:
+ package.do_install(
+ keep_prefix=False,
+ keep_stage=True,
+ ignore_deps=False,
+ make_jobs=args.jobs,
+ verbose=True,
+ fake=False)
+ except InstallError:
+ pass
+ except FetchError:
+ pass
+
+ jrf = JunitResultFormat()
+ handled = {}
+ create_test_output(topSpec, newInstalls, jrf)
+
+ with open(outputFpath, 'wb') as F:
+ jrf.write_to(F)
diff --git a/lib/spack/spack/compiler.py b/lib/spack/spack/compiler.py
index 646050d267..1e800a8979 100644
--- a/lib/spack/spack/compiler.py
+++ b/lib/spack/spack/compiler.py
@@ -227,14 +227,32 @@ class Compiler(object):
for d in dicts:
all_keys.update(d)
- compilers = []
+ compilers = {}
for k in all_keys:
ver, pre, suf = k
+
+ # Skip compilers with unknown version.
+ if ver == 'unknown':
+ continue
+
paths = tuple(pn[k] if k in pn else None for pn in dicts)
spec = spack.spec.CompilerSpec(cls.name, ver)
- compilers.append(cls(spec, *paths))
- return compilers
+ if ver in compilers:
+ prev = compilers[ver]
+
+ # prefer the one with more compilers.
+ prev_paths = [prev.cc, prev.cxx, prev.f77, prev.fc]
+ newcount = len([p for p in paths if p is not None])
+ prevcount = len([p for p in prev_paths if p is not None])
+
+ # Don't add if it's not an improvement over prev compiler.
+ if newcount <= prevcount:
+ continue
+
+ compilers[ver] = cls(spec, *paths)
+
+ return list(compilers.values())
def __repr__(self):
diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py
index 9297d6dac3..78039ac6f9 100644
--- a/lib/spack/spack/directives.py
+++ b/lib/spack/spack/directives.py
@@ -239,12 +239,10 @@ def patch(pkg, url_or_filename, level=1, when=None):
when = pkg.name
when_spec = parse_anonymous_spec(when, pkg.name)
- if when_spec not in pkg.patches:
- pkg.patches[when_spec] = [Patch(pkg.name, url_or_filename, level)]
- else:
- # if this spec is identical to some other, then append this
- # patch to the existing list.
- pkg.patches[when_spec].append(Patch(pkg.name, url_or_filename, level))
+ cur_patches = pkg.patches.setdefault(when_spec, [])
+ # if this spec is identical to some other, then append this
+ # patch to the existing list.
+ cur_patches.append(Patch(pkg.name, url_or_filename, level))
@directive('variants')
diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py
index 758ec209db..da8f4187cc 100644
--- a/lib/spack/spack/directory_layout.py
+++ b/lib/spack/spack/directory_layout.py
@@ -186,14 +186,9 @@ class YamlDirectoryLayout(DirectoryLayout):
def relative_path_for_spec(self, spec):
_check_concrete(spec)
- enabled_variants = (
- '-' + v.name for v in spec.variants.values()
- if v.enabled)
-
- dir_name = "%s-%s%s-%s" % (
+ dir_name = "%s-%s-%s" % (
spec.name,
spec.version,
- ''.join(enabled_variants),
spec.dag_hash(self.hash_len))
path = join_path(
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index b87baf403e..b15d4b2040 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -438,9 +438,16 @@ class Package(object):
raise ValueError("Can only get a stage for a concrete package.")
if self._stage is None:
+ # Construct a mirror path (TODO: get this out of package.py)
mp = spack.mirror.mirror_archive_path(self.spec)
- self._stage = Stage(
- self.fetcher, mirror_path=mp, name=self.spec.short_spec)
+
+ # Construct a path where the stage should build..
+ s = self.spec
+ stage_name = "%s-%s-%s" % (s.name, s.version, s.dag_hash())
+
+ # Build the stage
+ self._stage = Stage(self.fetcher, mirror_path=mp, name=stage_name)
+
return self._stage
@@ -866,6 +873,14 @@ class Package(object):
@property
+ def build_log_path(self):
+ if self.installed:
+ return spack.install_layout.build_log_path(self.spec)
+ else:
+ return join_path(self.stage.source_path, 'spack-build.out')
+
+
+ @property
def module(self):
"""Use this to add variables to the class's module's scope.
This lets us use custom syntax in the install method.
diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py
index 008c5f0429..78930ecb5b 100644
--- a/lib/spack/spack/stage.py
+++ b/lib/spack/spack/stage.py
@@ -261,7 +261,8 @@ class Stage(object):
tty.debug(e)
continue
else:
- tty.die("All fetchers failed for %s" % self.name)
+ errMessage = "All fetchers failed for %s" % self.name
+ raise fs.FetchError(errMessage, None)
def check(self):
diff --git a/lib/spack/spack/test/__init__.py b/lib/spack/spack/test/__init__.py
index 84419781e2..0f776bfea4 100644
--- a/lib/spack/spack/test/__init__.py
+++ b/lib/spack/spack/test/__init__.py
@@ -57,6 +57,7 @@ test_names = ['versions',
'optional_deps',
'make_executable',
'configure_guess',
+ 'unit_install',
'lock',
'database']
diff --git a/lib/spack/spack/test/unit_install.py b/lib/spack/spack/test/unit_install.py
new file mode 100644
index 0000000000..c4b9092f05
--- /dev/null
+++ b/lib/spack/spack/test/unit_install.py
@@ -0,0 +1,121 @@
+##############################################################################
+# 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://scalability-llnl.github.io/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
+##############################################################################
+import unittest
+import itertools
+
+import spack
+test_install = __import__("spack.cmd.test-install",
+ fromlist=["BuildId", "create_test_output", "TestResult"])
+
+class MockOutput(object):
+ def __init__(self):
+ self.results = {}
+
+ def add_test(self, buildId, passed=True, buildInfo=None):
+ self.results[buildId] = passed
+
+ def write_to(self, stream):
+ pass
+
+class MockSpec(object):
+ def __init__(self, name, version, hashStr=None):
+ self.dependencies = {}
+ self.name = name
+ self.version = version
+ self.hash = hashStr if hashStr else hash((name, version))
+
+ def traverse(self, order=None):
+ allDeps = itertools.chain.from_iterable(i.traverse() for i in
+ self.dependencies.itervalues())
+ return set(itertools.chain([self], allDeps))
+
+ def dag_hash(self):
+ return self.hash
+
+ def to_yaml(self):
+ return "<<<MOCK YAML {0}>>>".format(test_install.BuildId(self).stringId())
+
+class MockPackage(object):
+ def __init__(self, buildLogPath):
+ self.installed = False
+ self.build_log_path = buildLogPath
+
+specX = MockSpec("X", "1.2.0")
+specY = MockSpec("Y", "2.3.8")
+specX.dependencies['Y'] = specY
+pkgX = MockPackage('logX')
+pkgY = MockPackage('logY')
+bIdX = test_install.BuildId(specX)
+bIdY = test_install.BuildId(specY)
+
+class UnitInstallTest(unittest.TestCase):
+ """Tests test-install where X->Y"""
+
+ def setUp(self):
+ super(UnitInstallTest, self).setUp()
+
+ pkgX.installed = False
+ pkgY.installed = False
+
+ pkgDb = MockPackageDb({specX:pkgX, specY:pkgY})
+ spack.db = pkgDb
+
+ def tearDown(self):
+ super(UnitInstallTest, self).tearDown()
+
+ def test_installing_both(self):
+ mo = MockOutput()
+
+ pkgX.installed = True
+ pkgY.installed = True
+ test_install.create_test_output(specX, [specX, specY], mo, getLogFunc=test_fetch_log)
+
+ self.assertEqual(mo.results,
+ {bIdX:test_install.TestResult.PASSED,
+ bIdY:test_install.TestResult.PASSED})
+
+ def test_dependency_already_installed(self):
+ mo = MockOutput()
+
+ pkgX.installed = True
+ pkgY.installed = True
+ test_install.create_test_output(specX, [specX], mo, getLogFunc=test_fetch_log)
+
+ self.assertEqual(mo.results, {bIdX:test_install.TestResult.PASSED})
+
+ #TODO: add test(s) where Y fails to install
+
+class MockPackageDb(object):
+ def __init__(self, init=None):
+ self.specToPkg = {}
+ if init:
+ self.specToPkg.update(init)
+
+ def get(self, spec):
+ return self.specToPkg[spec]
+
+def test_fetch_log(path):
+ return []
+
diff --git a/lib/spack/spack/url.py b/lib/spack/spack/url.py
index 58838306af..6adbfe156d 100644
--- a/lib/spack/spack/url.py
+++ b/lib/spack/spack/url.py
@@ -209,8 +209,8 @@ def parse_version_offset(path):
# e.g. foobar-4.5.1
(r'-((\d+\.)*\d+)$', stem),
- # e.g. foobar-4.5.1b
- (r'-((\d+\.)*\d+\-?([a-z]|rc|RC|tp|TP)\d*)$', stem),
+ # e.g. foobar-4.5.1b, foobar4.5RC, foobar.v4.5.1b
+ (r'[-._]?v?((\d+\.)*\d+[-._]?([a-z]|rc|RC|tp|TP?)\d*)$', stem),
# e.g. foobar-4.5.0-beta1, or foobar-4.50-beta
(r'-((\d+\.)*\d+-beta(\d+)?)$', stem),
diff --git a/lib/spack/spack/virtual.py b/lib/spack/spack/virtual.py
index fa070e6bd5..c77b259d61 100644
--- a/lib/spack/spack/virtual.py
+++ b/lib/spack/spack/virtual.py
@@ -73,10 +73,8 @@ class ProviderIndex(object):
for provided_spec, provider_spec in pkg.provided.iteritems():
if provider_spec.satisfies(spec, deps=False):
provided_name = provided_spec.name
- if provided_name not in self.providers:
- self.providers[provided_name] = {}
- provider_map = self.providers[provided_name]
+ provider_map = self.providers.setdefault(provided_name, {})
if not provided_spec in provider_map:
provider_map[provided_spec] = set()
@@ -133,9 +131,7 @@ class ProviderIndex(object):
if lp_spec.name == rp_spec.name:
try:
const = lp_spec.copy().constrain(rp_spec,deps=False)
- if constrained not in result:
- result[constrained] = set()
- result[constrained].add(const)
+ result.setdefault(constrained, set()).add(const)
except spack.spec.UnsatisfiableSpecError:
continue
return result
diff --git a/share/spack/logo/favicon.ico b/share/spack/logo/favicon.ico
new file mode 100755
index 0000000000..95a67ae5b1
--- /dev/null
+++ b/share/spack/logo/favicon.ico
Binary files differ
diff --git a/share/spack/logo/spack-logo-text-64.png b/share/spack/logo/spack-logo-text-64.png
new file mode 100644
index 0000000000..8dad4c519f
--- /dev/null
+++ b/share/spack/logo/spack-logo-text-64.png
Binary files differ
diff --git a/share/spack/logo/spack-logo-white-text-48.png b/share/spack/logo/spack-logo-white-text-48.png
new file mode 100644
index 0000000000..9e60867e81
--- /dev/null
+++ b/share/spack/logo/spack-logo-white-text-48.png
Binary files differ
diff --git a/var/spack/packages/activeharmony/package.py b/var/spack/packages/activeharmony/package.py
new file mode 100644
index 0000000000..45dcc7c0e8
--- /dev/null
+++ b/var/spack/packages/activeharmony/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class Activeharmony(Package):
+ """Active Harmony: a framework for auto-tuning (the automated search for values to improve the performance of a target application)."""
+ homepage = "http://www.dyninst.org/harmony"
+ url = "http://www.dyninst.org/sites/default/files/downloads/harmony/ah-4.5.tar.gz"
+
+ version('4.5', 'caee5b864716d376e2c25d739251b2a9')
+
+ def install(self, spec, prefix):
+ make("CFLAGS=-O3")
+ make("install", 'PREFIX=%s' % prefix)
+
+from spack import *
+
diff --git a/var/spack/packages/apex/package.py b/var/spack/packages/apex/package.py
new file mode 100644
index 0000000000..6404d5208a
--- /dev/null
+++ b/var/spack/packages/apex/package.py
@@ -0,0 +1,34 @@
+from spack import *
+from spack.util.environment import *
+
+class Apex(Package):
+ homepage = "http://github.com/khuck/xpress-apex"
+ #url = "http://github.com/khuck/xpress-apex/archive/v0.1-release-candidate.tar.gz"
+ url = "http://github.com/khuck/xpress-apex"
+
+ #version('0.1', '6e039c224387348296739f6bf360d081')
+ #version('master', branch='master', git='https://github.com/khuck/xpress-apex.git')
+ version('2015-10-21', git='https://github.com/khuck/xpress-apex.git', commit='d2e66ddde689120472fc57fc546d8cd80aab745c')
+
+ depends_on("binutils+libiberty")
+ depends_on("boost@1.54:")
+ depends_on("cmake@2.8.12:")
+ depends_on("activeharmony@4.5:")
+ depends_on("ompt-openmp")
+
+ def install(self, spec, prefix):
+
+ path=get_path("PATH")
+ path.remove(spec["binutils"].prefix.bin)
+ path_set("PATH", path)
+ with working_dir("build", create=True):
+ cmake('-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DUSE_BFD=TRUE',
+ '-DBFD_ROOT=%s' % spec['binutils'].prefix,
+ '-DUSE_ACTIVEHARMONY=TRUE',
+ '-DACTIVEHARMONY_ROOT=%s' % spec['activeharmony'].prefix,
+ '-DUSE_OMPT=TRUE',
+ '-DOMPT_ROOT=%s' % spec['ompt-openmp'].prefix,
+ '..', *std_cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/binutils/package.py b/var/spack/packages/binutils/package.py
index 5a3059bbcf..cac0a0407f 100644
--- a/var/spack/packages/binutils/package.py
+++ b/var/spack/packages/binutils/package.py
@@ -10,8 +10,21 @@ class Binutils(Package):
version('2.23.2', '4f8fa651e35ef262edc01d60fb45702e')
version('2.20.1', '2b9dc8f2b7dbd5ec5992c6e29de0b764')
+ variant('libiberty', default=False, description='Also install libiberty.')
+
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
+ configure_args = [
+ '--prefix=%s' % prefix,
+ '--disable-dependency-tracking',
+ '--enable-interwork',
+ '--enable-multilib',
+ '--enable-shared',
+ '--enable-64-bit-bfd',
+ '--enable-targets=all']
+
+ if '+libiberty' in spec:
+ configure_args.append('--enable-install-libiberty')
+ configure(*configure_args)
make()
make("install")
diff --git a/var/spack/packages/boost/package.py b/var/spack/packages/boost/package.py
index 254d1afda1..35824d53a2 100644
--- a/var/spack/packages/boost/package.py
+++ b/var/spack/packages/boost/package.py
@@ -14,6 +14,10 @@ class Boost(Package):
list_url = "http://sourceforge.net/projects/boost/files/boost/"
list_depth = 2
+ version('1.59.0', '6aa9a5c6a4ca1016edd0ed1178e3cb87')
+ version('1.58.0', 'b8839650e61e9c1c0a89f371dd475546')
+ version('1.57.0', '1be49befbdd9a5ce9def2983ba3e7b76')
+ version('1.56.0', 'a744cf167b05d72335f27c88115f211d')
version('1.55.0', 'd6eef4b4cacb2183f2bf265a5a03a354')
version('1.54.0', '15cb8c0803064faef0c4ddf5bc5ca279')
version('1.53.0', 'a00d22605d5dbcfb4c9936a9b35bc4c2')
diff --git a/var/spack/packages/bowtie2/bowtie2-2.5.patch b/var/spack/packages/bowtie2/bowtie2-2.5.patch
new file mode 100644
index 0000000000..290be39c73
--- /dev/null
+++ b/var/spack/packages/bowtie2/bowtie2-2.5.patch
@@ -0,0 +1,16 @@
+--- Makefile 2015-02-26 10:50:00.000000000 -0800
++++ Makefile.new 2015-07-29 18:03:59.891357399 -0700
+@@ -22,10 +22,10 @@
+ #
+
+ INC =
+-GCC_PREFIX = $(shell dirname `which gcc`)
++GCC_PREFIX =
+ GCC_SUFFIX =
+-CC = $(GCC_PREFIX)/gcc$(GCC_SUFFIX)
+-CPP = $(GCC_PREFIX)/g++$(GCC_SUFFIX)
++CC = cc
++CPP = c++
+ CXX = $(CPP)
+ HEADERS = $(wildcard *.h)
+ BOWTIE_MM = 1
diff --git a/var/spack/packages/bowtie2/package.py b/var/spack/packages/bowtie2/package.py
new file mode 100644
index 0000000000..339aab6598
--- /dev/null
+++ b/var/spack/packages/bowtie2/package.py
@@ -0,0 +1,24 @@
+from spack import *
+from glob import glob
+class Bowtie2(Package):
+ """Description"""
+ homepage = "bowtie-bio.sourceforge.net/bowtie2/index.shtml"
+ version('2.2.5','51fa97a862d248d7ee660efc1147c75f', url = "http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.5/bowtie2-2.2.5-source.zip")
+
+ patch('bowtie2-2.5.patch',when='@2.2.5', level=0)
+
+ def install(self, spec, prefix):
+ make()
+ mkdirp(prefix.bin)
+ for bow in glob("bowtie2*"):
+ install(bow, prefix.bin)
+ # install('bowtie2',prefix.bin)
+ # install('bowtie2-align-l',prefix.bin)
+ # install('bowtie2-align-s',prefix.bin)
+ # install('bowtie2-build',prefix.bin)
+ # install('bowtie2-build-l',prefix.bin)
+ # install('bowtie2-build-s',prefix.bin)
+ # install('bowtie2-inspect',prefix.bin)
+ # install('bowtie2-inspect-l',prefix.bin)
+ # install('bowtie2-inspect-s',prefix.bin)
+
diff --git a/var/spack/packages/bzip2/package.py b/var/spack/packages/bzip2/package.py
index fbd5869a53..d88336664d 100644
--- a/var/spack/packages/bzip2/package.py
+++ b/var/spack/packages/bzip2/package.py
@@ -22,8 +22,10 @@ class Bzip2(Package):
bzip2_exe = join_path(prefix.bin, 'bzip2')
install('bzip2-shared', bzip2_exe)
- for libfile in glob('libbz2.so*'):
+ for i, libfile in enumerate(glob('libbz2.so*')):
install(libfile, prefix.lib)
+ if i == 0:
+ symlink(join_path(prefix.lib, libfile), join_path(prefix.lib, 'libbz2.so'))
bunzip2 = join_path(prefix.bin, 'bunzip2')
remove(bunzip2)
diff --git a/var/spack/packages/clang/package.py b/var/spack/packages/clang/package.py
index 4f10385dbd..4f977bf9a4 100644
--- a/var/spack/packages/clang/package.py
+++ b/var/spack/packages/clang/package.py
@@ -28,11 +28,16 @@ class Clang(Package):
"""The goal of the Clang project is to create a new C, C++,
Objective C and Objective C++ front-end for the LLVM compiler.
"""
- homepage = "http://clang.llvm.org"
- list_url = "http://llvm.org/releases/download.html"
+ homepage = 'http://clang.llvm.org'
+ url = 'http://llvm.org/releases/3.7.0/cfe-3.7.0.src.tar.xz'
- depends_on("llvm")
- version('3.4.2', '87945973b7c73038871c5f849a818588', url='http://llvm.org/releases/3.4.2/cfe-3.4.2.src.tar.xz')
+ depends_on('llvm@3.7.0', when='@3.7.0')
+ depends_on('llvm@3.6.2', when='@3.6.2')
+ depends_on('llvm@3.5.1', when='@3.5.1')
+
+ version('3.7.0', '8f9d27335e7331cf0a4711e952f21f01', url='http://llvm.org/releases/3.7.0/cfe-3.7.0.src.tar.xz')
+ version('3.6.2', 'ff862793682f714bb7862325b9c06e20', url='http://llvm.org/releases/3.6.2/cfe-3.6.2.src.tar.xz')
+ version('3.5.1', '93f9532f8f7e6f1d8e5c1116907051cb', url='http://llvm.org/releases/3.5.1/cfe-3.5.1.src.tar.xz')
def install(self, spec, prefix):
env['CXXFLAGS'] = self.compiler.cxx11_flag
diff --git a/var/spack/packages/dbus/package.py b/var/spack/packages/dbus/package.py
index f7f394498c..f7c302d611 100644
--- a/var/spack/packages/dbus/package.py
+++ b/var/spack/packages/dbus/package.py
@@ -20,7 +20,9 @@ class Dbus(Package):
version('1.8.2', 'd6f709bbec0a022a1847c7caec9d6068')
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
+ configure(
+ "--prefix=%s" % prefix,
+ "--disable-systemd")
make()
make("install")
diff --git a/var/spack/packages/doxygen/package.py b/var/spack/packages/doxygen/package.py
new file mode 100644
index 0000000000..3d4a4e47a7
--- /dev/null
+++ b/var/spack/packages/doxygen/package.py
@@ -0,0 +1,25 @@
+#------------------------------------------------------------------------------
+# Author: Justin Too <justin@doubleotoo.com>
+# Date: September 11, 2015
+#------------------------------------------------------------------------------
+
+from spack import *
+
+class Doxygen(Package):
+ """Doxygen is the de facto standard tool for generating documentation
+ from annotated C++ sources, but it also supports other popular programming
+ languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba,
+ Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D..
+ """
+ homepage = "http://www.stack.nl/~dimitri/doxygen/"
+ url = "http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.10.src.tar.gz"
+
+ version('1.8.10', '79767ccd986f12a0f949015efb5f058f')
+
+ depends_on("cmake@2.8.12:")
+
+ def install(self, spec, prefix):
+ cmake('.', *std_cmake_args)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/elfutils/package.py b/var/spack/packages/elfutils/package.py
new file mode 100644
index 0000000000..926d234584
--- /dev/null
+++ b/var/spack/packages/elfutils/package.py
@@ -0,0 +1,26 @@
+from spack import *
+
+class Elfutils(Package):
+ """elfutils is a collection of various binary tools such as
+ eu-objdump, eu-readelf, and other utilities that allow you to
+ inspect and manipulate ELF files. Refer to Table 5.Tools Included
+ in elfutils for Red Hat Developer for a complete list of binary
+ tools that are distributed with the Red Hat Developer Toolset
+ version of elfutils."""
+
+ homepage = "https://fedorahosted.org/elfutils/"
+
+ version('0.163',
+ git='git://git.fedorahosted.org/git/elfutils.git',
+ tag='elfutils-0.163')
+
+ provides('elf')
+
+ def install(self, spec, prefix):
+ autoreconf = which('autoreconf')
+ autoreconf('-if')
+
+ configure('--prefix=%s' % prefix, '--enable-maintainer-mode')
+ make()
+ make("install")
+
diff --git a/var/spack/packages/fish/package.py b/var/spack/packages/fish/package.py
new file mode 100644
index 0000000000..1225558705
--- /dev/null
+++ b/var/spack/packages/fish/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Fish(Package):
+ """fish is a smart and user-friendly command line shell for OS X, Linux, and
+ the rest of the family.
+ """
+
+ homepage = "http://fishshell.com/"
+ url = "http://fishshell.com/files/2.2.0/fish-2.2.0.tar.gz"
+ list_url = homepage
+
+ version('2.2.0', 'a76339fd14ce2ec229283c53e805faac48c3e99d9e3ede9d82c0554acfc7b77a')
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/gcc/package.py b/var/spack/packages/gcc/package.py
index 5e3d1a3efa..a49a1348aa 100644
--- a/var/spack/packages/gcc/package.py
+++ b/var/spack/packages/gcc/package.py
@@ -36,21 +36,25 @@ class Gcc(Package):
list_url = 'http://open-source-box.org/gcc/'
list_depth = 2
+ DEPENDS_ON_ISL_PREDICATE = '@5.0:'
+
+ version('5.2.0', 'a51bcfeb3da7dd4c623e27207ed43467')
+ version('4.9.3', '6f831b4d251872736e8e9cc09746f327')
version('4.9.2', '4df8ee253b7f3863ad0b86359cd39c43')
version('4.9.1', 'fddf71348546af523353bd43d34919c1')
+ version('4.8.5', '80d2c2982a3392bb0b89673ff136e223')
version('4.8.4', '5a84a30839b2aca22a2d723de2a626ec')
version('4.7.4', '4c696da46297de6ae77a82797d2abe28')
version('4.6.4', 'b407a3d1480c11667f293bfb1f17d1a4')
version('4.5.4', '27e459c2566b8209ab064570e1b378f7')
-
+
depends_on("mpfr")
depends_on("gmp")
depends_on("mpc") # when @4.5:
- depends_on("libelf")
- depends_on("binutils")
+ depends_on("binutils~libiberty")
# Save these until we can do optional deps.
- #depends_on("isl")
+ depends_on("isl", when=DEPENDS_ON_ISL_PREDICATE)
#depends_on("ppl")
#depends_on("cloog")
@@ -62,23 +66,31 @@ class Gcc(Package):
if spec.satisfies("@4.7.1:"):
enabled_languages.add('go')
+ # Generic options to compile GCC
+ options = ["--prefix=%s" % prefix,
+ "--libdir=%s/lib64" % prefix,
+ "--disable-multilib",
+ "--enable-languages=" + ','.join(enabled_languages),
+ "--with-mpc=%s" % spec['mpc'].prefix,
+ "--with-mpfr=%s" % spec['mpfr'].prefix,
+ "--with-gmp=%s" % spec['gmp'].prefix,
+ "--enable-lto",
+ "--with-gnu-ld",
+ "--with-gnu-as",
+ "--with-quad"]
+ # Binutils
+ binutils_options = ["--with-stage1-ldflags=%s" % self.rpath_args,
+ "--with-boot-ldflags=%s" % self.rpath_args,
+ "--with-ld=%s/bin/ld" % spec['binutils'].prefix,
+ "--with-as=%s/bin/as" % spec['binutils'].prefix]
+ options.extend(binutils_options)
+ # Isl
+ if spec.satisfies(Gcc.DEPENDS_ON_ISL_PREDICATE):
+ isl_options = ["--with-isl=%s" % spec['isl'].prefix]
+ options.extend(isl_options)
+
# Rest of install is straightforward.
- configure("--prefix=%s" % prefix,
- "--libdir=%s/lib64" % prefix,
- "--disable-multilib",
- "--enable-languages=" + ','.join(enabled_languages),
- "--with-mpc=%s" % spec['mpc'].prefix,
- "--with-mpfr=%s" % spec['mpfr'].prefix,
- "--with-gmp=%s" % spec['gmp'].prefix,
- "--with-libelf=%s" % spec['libelf'].prefix,
- "--with-stage1-ldflags=%s" % self.rpath_args,
- "--with-boot-ldflags=%s" % self.rpath_args,
- "--enable-lto",
- "--with-gnu-ld",
- "--with-ld=%s/bin/ld" % spec['binutils'].prefix,
- "--with-gnu-as",
- "--with-as=%s/bin/as" % spec['binutils'].prefix,
- "--with-quad")
+ configure(*options)
make()
make("install")
@@ -100,13 +112,11 @@ class Gcc(Package):
return
gcc = Executable(join_path(self.prefix.bin, 'gcc'))
- lines = gcc('-dumpspecs', return_output=True).split("\n")
- for i, line in enumerate(lines):
- if line.startswith("*link:"):
- specs_file = join_path(self.spec_dir, 'specs')
- with closing(open(specs_file, 'w')) as out:
- out.write(lines[i] + "\n")
- out.write("-rpath %s/lib:%s/lib64 \\\n"
- % (self.prefix, self.prefix))
- out.write(lines[i+1] + "\n")
- set_install_permissions(specs_file)
+ lines = gcc('-dumpspecs', return_output=True).strip().split("\n")
+ specs_file = join_path(self.spec_dir, 'specs')
+ with closing(open(specs_file, 'w')) as out:
+ for line in lines:
+ out.write(line + "\n")
+ if line.startswith("*link:"):
+ out.write("-rpath %s/lib:%s/lib64 \\\n"% (self.prefix, self.prefix))
+ set_install_permissions(specs_file)
diff --git a/var/spack/packages/gflags/package.py b/var/spack/packages/gflags/package.py
new file mode 100644
index 0000000000..62dd80a094
--- /dev/null
+++ b/var/spack/packages/gflags/package.py
@@ -0,0 +1,21 @@
+import os
+from spack import *
+
+class Gflags(Package):
+ """The gflags package contains a C++ library that implements
+ commandline flags processing. It includes built-in support for
+ standard types such as string and the ability to define flags
+ in the source file in which they are used. Online documentation
+ available at: https://gflags.github.io/gflags/"""
+
+ homepage = "https://gflags.github.io/gflags"
+ url = "https://github.com/gflags/gflags/archive/v2.1.2.tar.gz"
+
+ version('2.1.2', 'ac432de923f9de1e9780b5254884599f')
+
+ def install(self, spec, prefix):
+ cmake("-DCMAKE_INSTALL_PREFIX=" + prefix,
+ "-DBUILD_SHARED_LIBS=ON")
+ make()
+ make("test")
+ make("install")
diff --git a/var/spack/packages/ghostscript/package.py b/var/spack/packages/ghostscript/package.py
new file mode 100644
index 0000000000..0ab49d425f
--- /dev/null
+++ b/var/spack/packages/ghostscript/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class Ghostscript(Package):
+ """an interpreter for the PostScript language and for PDF. """
+ homepage = "http://ghostscript.com/"
+ url = "http://downloads.ghostscript.com/public/ghostscript-9.16.tar.gz"
+
+ version('9.16', '829319325bbdb83f5c81379a8f86f38f')
+
+ parallel = False
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" %prefix, "--enable-shared")
+
+ make()
+ make("install")
+
diff --git a/var/spack/packages/glm/package.py b/var/spack/packages/glm/package.py
new file mode 100644
index 0000000000..d00c301b4c
--- /dev/null
+++ b/var/spack/packages/glm/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+
+class Glm(Package):
+ """
+ OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on
+ the OpenGL Shading Language (GLSL) specification.
+ """
+
+ homepage = "https://github.com/g-truc/glm"
+ url = "https://github.com/g-truc/glm/archive/0.9.7.1.tar.gz"
+
+ version('0.9.7.1', '61af6639cdf652d1cdd7117190afced8')
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake('..', *std_cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/glog/package.py b/var/spack/packages/glog/package.py
new file mode 100644
index 0000000000..d73386b394
--- /dev/null
+++ b/var/spack/packages/glog/package.py
@@ -0,0 +1,15 @@
+import os
+from spack import *
+
+class Glog(Package):
+ """C++ implementation of the Google logging module."""
+
+ homepage = "https://github.com/google/glog"
+ url = "https://github.com/google/glog/archive/v0.3.3.tar.gz"
+
+ version('0.3.3', 'c1f86af27bd9c73186730aa957607ed0')
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/graphviz/package.py b/var/spack/packages/graphviz/package.py
new file mode 100644
index 0000000000..7af7da1881
--- /dev/null
+++ b/var/spack/packages/graphviz/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Graphviz(Package):
+ """Graph Visualization Software"""
+ homepage = "http://www.graphviz.org"
+ url = "http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz"
+
+ version('2.38.0', '5b6a829b2ac94efcd5fa3c223ed6d3ae')
+
+ parallel = False
+
+ depends_on("swig")
+ depends_on("python")
+ depends_on("ghostscript")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" %prefix)
+
+ make()
+ make("install")
+
diff --git a/var/spack/packages/hdf5/package.py b/var/spack/packages/hdf5/package.py
index 992dd8ec70..15e0ef9338 100644
--- a/var/spack/packages/hdf5/package.py
+++ b/var/spack/packages/hdf5/package.py
@@ -10,7 +10,8 @@ class Hdf5(Package):
url = "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz"
list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
list_depth = 3
-
+
+ version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24')
version('1.8.13', 'c03426e9e77d7766944654280b467289')
depends_on("mpi")
diff --git a/var/spack/packages/leveldb/package.py b/var/spack/packages/leveldb/package.py
new file mode 100644
index 0000000000..da68a9cbcb
--- /dev/null
+++ b/var/spack/packages/leveldb/package.py
@@ -0,0 +1,29 @@
+import os
+import glob
+from spack import *
+
+class Leveldb(Package):
+ """LevelDB is a fast key-value storage library written at Google
+ that provides an ordered mapping from string keys to string values."""
+
+ homepage = "https://github.com/google/leveldb"
+ url = "https://github.com/google/leveldb/archive/v1.18.tar.gz"
+
+ version('1.18', '73770de34a2a5ab34498d2e05b2b7fa0')
+
+ depends_on("snappy")
+
+ def install(self, spec, prefix):
+ make()
+
+ mkdirp(prefix.include)
+ mkdirp(prefix.lib)
+
+ cp = which('cp')
+
+ # cp --preserve=links libleveldb.* prefix/lib
+ args = glob.glob('libleveldb.*')
+ args.append(prefix + '/lib')
+ cp('--preserve=links', *args)
+
+ cp('-r', 'include/leveldb', prefix + '/include')
diff --git a/var/spack/packages/libelf/package.py b/var/spack/packages/libelf/package.py
index bf2fefabd5..9338b8f393 100644
--- a/var/spack/packages/libelf/package.py
+++ b/var/spack/packages/libelf/package.py
@@ -36,6 +36,8 @@ class Libelf(Package):
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
+ provides('elf')
+
def install(self, spec, prefix):
configure("--prefix=" + prefix,
"--enable-shared",
diff --git a/var/spack/packages/libffi/package.py b/var/spack/packages/libffi/package.py
index 2c1c4eed4d..acec031717 100644
--- a/var/spack/packages/libffi/package.py
+++ b/var/spack/packages/libffi/package.py
@@ -6,11 +6,12 @@ class Libffi(Package):
to call any function specified by a call interface description at
run time."""
homepage = "https://sourceware.org/libffi/"
- url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz"
-
- version('3.1', 'f5898b29bbfd70502831a212d9249d10')
+
+ version('3.2.1','83b89587607e3eb65c70d361f13bab43',url = "ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
+ #version('3.1', 'f5898b29bbfd70502831a212d9249d10',url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz") # Has a bug $(lib64) instead of ${lib64} in libffi.pc
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install")
+
diff --git a/var/spack/packages/libxcb/package.py b/var/spack/packages/libxcb/package.py
index 521cd0d475..16a5525c0d 100644
--- a/var/spack/packages/libxcb/package.py
+++ b/var/spack/packages/libxcb/package.py
@@ -10,7 +10,7 @@ class Libxcb(Package):
url = "http://xcb.freedesktop.org/dist/libxcb-1.11.tar.gz"
version('1.11', '1698dd837d7e6e94d029dbe8b3a82deb')
-
+ version('1.11.1', '118623c15a96b08622603a71d8789bf3')
depends_on("python")
depends_on("xcb-proto")
diff --git a/var/spack/packages/llvm/package.py b/var/spack/packages/llvm/package.py
index 9d2be690bb..a6759c3033 100644
--- a/var/spack/packages/llvm/package.py
+++ b/var/spack/packages/llvm/package.py
@@ -24,6 +24,7 @@
##############################################################################
from spack import *
+
class Llvm(Package):
"""The LLVM Project is a collection of modular and reusable compiler and
toolchain technologies. Despite its name, LLVM has little to do with
@@ -31,14 +32,14 @@ class Llvm(Package):
that can be used to build them. The name "LLVM" itself is not an acronym;
it is the full name of the project.
"""
- homepage = "http://llvm.org/"
- list_url = "http://llvm.org/releases/download.html"
+ homepage = 'http://llvm.org/'
+ url = 'http://llvm.org/releases/3.7.0/llvm-3.7.0.src.tar.xz'
+ version('3.7.0', 'b98b9495e5655a672d6cb83e1a180f8e', url='http://llvm.org/releases/3.7.0/llvm-3.7.0.src.tar.xz')
+ version('3.6.2', '0c1ee3597d75280dee603bae9cbf5cc2', url='http://llvm.org/releases/3.6.2/llvm-3.6.2.src.tar.xz')
version('3.5.1', '2d3d8004f38852aa679e5945b8ce0b14', url='http://llvm.org/releases/3.5.1/llvm-3.5.1.src.tar.xz')
- version('3.4.2', 'a20669f75967440de949ac3b1bad439c', url='http://llvm.org/releases/3.4.2/llvm-3.4.2.src.tar.gz')
- version('3.0', 'a8e5f5f1c1adebae7b4a654c376a6005', url='http://llvm.org/releases/3.0/llvm-3.0.tar.gz')
- version('2.9', '793138412d2af2c7c7f54615f8943771', url='http://llvm.org/releases/2.9/llvm-2.9.tgz')
- version('2.8', '220d361b4d17051ff4bb21c64abe05ba', url='http://llvm.org/releases/2.8/llvm-2.8.tgz')
+
+ depends_on('python@2.7:')
def install(self, spec, prefix):
env['CXXFLAGS'] = self.compiler.cxx11_flag
@@ -46,9 +47,7 @@ class Llvm(Package):
with working_dir('spack-build', create=True):
cmake('..',
'-DLLVM_REQUIRES_RTTI=1',
- '-DPYTHON_EXECUTABLE=/usr/bin/python',
- '-DPYTHON_INCLUDE_DIR=/usr/include/python2.6',
- '-DPYTHON_LIBRARY=/usr/lib64/libpython2.6.so',
+ '-DPYTHON_EXECUTABLE=%s/bin/python' % spec['python'].prefix,
*std_cmake_args)
make()
make("install")
diff --git a/var/spack/packages/lmdb/package.py b/var/spack/packages/lmdb/package.py
new file mode 100644
index 0000000000..875b8100c5
--- /dev/null
+++ b/var/spack/packages/lmdb/package.py
@@ -0,0 +1,39 @@
+import os
+from spack import *
+
+class Lmdb(Package):
+ """Read-only mirror of official repo on openldap.org. Issues and
+ pull requests here are ignored. Use OpenLDAP ITS for issues.
+ http://www.openldap.org/software/repo.html"""
+
+
+ homepage = "http://www.openldap.org/software/repo.html"
+ url = "https://github.com/LMDB/lmdb/archive/LMDB_0.9.16.tar.gz"
+
+ version('0.9.16', '0de89730b8f3f5711c2b3a4ba517b648')
+
+ def install(self, spec, prefix):
+ os.chdir('libraries/liblmdb')
+
+ make()
+
+ mkdirp(prefix.bin)
+ mkdirp(prefix + '/man/man1')
+ mkdirp(prefix.lib)
+ mkdirp(prefix.include)
+
+ bins = ['mdb_stat', 'mdb_copy', 'mdb_dump', 'mdb_load']
+ for f in bins:
+ install(f, prefix.bin)
+
+ mans = ['mdb_stat.1', 'mdb_copy.1', 'mdb_dump.1', 'mdb_load.1']
+ for f in mans:
+ install(f, prefix + '/man/man1')
+
+ libs = ['liblmdb.a', 'liblmdb.so']
+ for f in libs:
+ install(f, prefix.lib)
+
+ includes = ['lmdb.h']
+ for f in includes:
+ install(f, prefix.include)
diff --git a/var/spack/packages/matio/package.py b/var/spack/packages/matio/package.py
new file mode 100644
index 0000000000..12cfb80926
--- /dev/null
+++ b/var/spack/packages/matio/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+
+class Matio(Package):
+ """matio is an C library for reading and writing Matlab MAT files"""
+ homepage = "http://sourceforge.net/projects/matio/"
+ url = "http://downloads.sourceforge.net/project/matio/matio/1.5.2/matio-1.5.2.tar.gz"
+
+ version('1.5.2', '85b007b99916c63791f28398f6a4c6f1')
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py
index 6aa8f2eca4..d48bf878f6 100644
--- a/var/spack/packages/mpich/package.py
+++ b/var/spack/packages/mpich/package.py
@@ -33,11 +33,15 @@ class Mpich(Package):
list_url = "http://www.mpich.org/static/downloads/"
list_depth = 2
+ version('3.1.4', '2ab544607986486562e076b83937bba2')
+ version('3.1.3', '93cb17f91ac758cbf9174ecb03563778')
+ version('3.1.2', '7fbf4b81dcb74b07ae85939d1ceee7f1')
+ version('3.1.1', '40dc408b1e03cc36d80209baaa2d32b7')
+ version('3.1', '5643dd176499bfb7d25079aaff25f2ec')
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
- provides('mpi@:3', when='@3:')
- provides('mpi@:1', when='@1:')
-
+ provides('mpi@:3.0', when='@3:')
+ provides('mpi@:1.3', when='@1:')
def setup_dependent_environment(self, module, spec, dep_spec):
"""For dependencies, make mpicc's use spack wrapper."""
diff --git a/var/spack/packages/ncdu/package.py b/var/spack/packages/ncdu/package.py
new file mode 100644
index 0000000000..234f9730d6
--- /dev/null
+++ b/var/spack/packages/ncdu/package.py
@@ -0,0 +1,28 @@
+from spack import *
+
+class Ncdu(Package):
+ """
+ Ncdu is a disk usage analyzer with an ncurses interface. It is designed
+ to find space hogs on a remote server where you don't have an entire
+ gaphical setup available, but it is a useful tool even on regular desktop
+ systems. Ncdu aims to be fast, simple and easy to use, and should be able
+ to run in any minimal POSIX-like environment with ncurses installed.
+ """
+
+ homepage = "http://dev.yorhel.nl/ncdu"
+ url = "http://dev.yorhel.nl/download/ncdu-1.11.tar.gz"
+
+ version('1.11', '9e44240a5356b029f05f0e70a63c4d12')
+ version('1.10', '7535decc8d54eca811493e82d4bfab2d')
+ version('1.9' , '93258079db897d28bb8890e2db89b1fb')
+ version('1.8' , '94d7a821f8a0d7ba8ef3dd926226f7d5')
+ version('1.7' , '172047c29d232724cc62e773e82e592a')
+
+ depends_on("ncurses")
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix,
+ '--with-ncurses=%s' % spec['ncurses'])
+
+ make()
+ make("install")
diff --git a/var/spack/packages/ncurses/package.py b/var/spack/packages/ncurses/package.py
index 8f5763bfdd..cc180bbae1 100644
--- a/var/spack/packages/ncurses/package.py
+++ b/var/spack/packages/ncurses/package.py
@@ -11,6 +11,8 @@ class Ncurses(Package):
version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1',
url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz')
+ version('6.0', 'ee13d052e1ead260d7c28071f46eefb1',
+ url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix,
diff --git a/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch b/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch
new file mode 100644
index 0000000000..46dda5fc9d
--- /dev/null
+++ b/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch
@@ -0,0 +1,25 @@
+diff -Nur netcdf-4.3.3/CMakeLists.txt netcdf-4.3.3.mpi/CMakeLists.txt
+--- netcdf-4.3.3/CMakeLists.txt 2015-02-12 16:44:35.000000000 -0500
++++ netcdf-4.3.3.mpi/CMakeLists.txt 2015-10-14 16:44:41.176300658 -0400
+@@ -753,6 +753,7 @@
+ SET(USE_PARALLEL OFF CACHE BOOL "")
+ MESSAGE(STATUS "Cannot find HDF5 library built with parallel support. Disabling parallel build.")
+ ELSE()
++ FIND_PACKAGE(MPI REQUIRED)
+ SET(USE_PARALLEL ON CACHE BOOL "")
+ SET(STATUS_PARALLEL "ON")
+ ENDIF()
+diff -Nur netcdf-4.3.3/liblib/CMakeLists.txt netcdf-4.3.3.mpi/liblib/CMakeLists.txt
+--- netcdf-4.3.3/liblib/CMakeLists.txt 2015-02-12 16:44:35.000000000 -0500
++++ netcdf-4.3.3.mpi/liblib/CMakeLists.txt 2015-10-14 16:44:57.757793634 -0400
+@@ -71,6 +71,10 @@
+ SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY})
+ ENDIF()
+
++IF(USE_PARALLEL)
++ SET(TLL_LIBS ${TLL_LIBS} ${MPI_C_LIBRARIES})
++ENDIF()
++
+ IF(USE_HDF4)
+ SET(TLL_LIBS ${TLL_LIBS} ${HDF4_LIBRARIES})
+ ENDIF()
diff --git a/var/spack/packages/netcdf/package.py b/var/spack/packages/netcdf/package.py
index 34284ea725..e1e0d836c6 100644
--- a/var/spack/packages/netcdf/package.py
+++ b/var/spack/packages/netcdf/package.py
@@ -1,28 +1,27 @@
from spack import *
class Netcdf(Package):
- """NetCDF is a set of software libraries and self-describing, machine-independent
- data formats that support the creation, access, and sharing of array-oriented
- scientific data."""
+ """NetCDF is a set of software libraries and self-describing, machine-independent
+ data formats that support the creation, access, and sharing of array-oriented
+ scientific data."""
homepage = "http://www.unidata.ucar.edu/software/netcdf/"
url = "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.3.tar.gz"
version('4.3.3', '5fbd0e108a54bd82cb5702a73f56d2ae')
+ patch('netcdf-4.3.3-mpi.patch')
+
# Dependencies:
- # >HDF5
+ # >HDF5
depends_on("hdf5")
- def install(self, spec, prefix):
- configure(
- "--prefix=%s" % prefix,
- "--disable-dap", # Disable DAP.
- "--disable-shared", # Don't build shared libraries (use static libs).
- "CPPFLAGS=-I%s/include" % spec['hdf5'].prefix, # Link HDF5's include dir.
- "LDFLAGS=-L%s/lib" % spec['hdf5'].prefix) # Link HDF5's lib dir.
-
- make("install")
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake('..',
+ "-DCMAKE_INSTALL_PREFIX:PATH=%s" % prefix,
+ "-DENABLE_DAP:BOOL=OFF", # Disable DAP.
+ "-DBUILD_SHARED_LIBS:BOOL=OFF") # Don't build shared libraries (use static libs).
- # Check the newly installed netcdf package. Currently disabled.
- # make("check")
+ make()
+ make("install")
diff --git a/var/spack/packages/netlib-blas/package.py b/var/spack/packages/netlib-blas/package.py
index 0a6cdb0442..85e97323d3 100644
--- a/var/spack/packages/netlib-blas/package.py
+++ b/var/spack/packages/netlib-blas/package.py
@@ -9,6 +9,8 @@ class NetlibBlas(Package):
version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
+ variant('fpic', default=False, description="Build with -fpic compiler option")
+
# virtual dependency
provides('blas')
@@ -23,6 +25,10 @@ class NetlibBlas(Package):
mf.filter('^LOADER.*', 'LOADER = f90')
mf.filter('^CC =.*', 'CC = cc')
+ if '+fpic' in self.spec:
+ mf.filter('^OPTS.*=.*', 'OPTS = -O2 -frecursive -fpic')
+ mf.filter('^CFLAGS =.*', 'CFLAGS = -O3 -fpic')
+
def install(self, spec, prefix):
make('blaslib')
diff --git a/var/spack/packages/lapack/package.py b/var/spack/packages/netlib-lapack/package.py
index d9d37e3e4a..fb6b99e27c 100644
--- a/var/spack/packages/lapack/package.py
+++ b/var/spack/packages/netlib-lapack/package.py
@@ -1,6 +1,6 @@
from spack import *
-class Lapack(Package):
+class NetlibLapack(Package):
"""
LAPACK version 3.X is a comprehensive FORTRAN library that does
linear algebra operations including matrix inversions, least
@@ -18,9 +18,16 @@ class Lapack(Package):
version('3.4.0', '02d5706ec03ba885fc246e5fa10d8c70')
version('3.3.1', 'd0d533ec9a5b74933c2a1e84eedc58b4')
+ variant('shared', default=False, description="Build shared library version")
+
+ # virtual dependency
+ provides('lapack')
+
# blas is a virtual dependency.
depends_on('blas')
+ depends_on('cmake')
+
# Doesn't always build correctly in parallel
parallel = False
@@ -39,7 +46,14 @@ class Lapack(Package):
def install(self, spec, prefix):
blas_libs = ";".join(self.get_blas_libs())
- cmake(".", '-DBLAS_LIBRARIES=' + blas_libs, *std_cmake_args)
+ cmake_args = [".", '-DBLAS_LIBRARIES=' + blas_libs]
+
+ if '+shared' in spec:
+ cmake_args.append('-DBUILD_SHARED_LIBS=ON')
+
+ cmake_args += std_cmake_args
+
+ cmake(*cmake_args)
make()
make("install")
diff --git a/var/spack/packages/ompt-openmp/package.py b/var/spack/packages/ompt-openmp/package.py
new file mode 100644
index 0000000000..5d380ebd77
--- /dev/null
+++ b/var/spack/packages/ompt-openmp/package.py
@@ -0,0 +1,23 @@
+from spack import *
+
+class OmptOpenmp(Package):
+ """LLVM/Clang OpenMP runtime with OMPT support. This is a fork of the OpenMPToolsInterface/LLVM-openmp fork of the official LLVM OpenMP mirror. This library provides a drop-in replacement of the OpenMP runtimes for GCC, Intel and LLVM/Clang."""
+ homepage = "https://github.com/OpenMPToolsInterface/LLVM-openmp"
+ url = "http://github.com/khuck/LLVM-openmp/archive/v0.1-spack.tar.gz"
+
+ version('spack', '35227b2726e377faa433fc841226e036')
+
+ # depends_on("foo")
+
+ def install(self, spec, prefix):
+ with working_dir("runtime/build", create=True):
+
+ # FIXME: Modify the configure line to suit your build system here.
+ cmake('-DCMAKE_C_COMPILER=%s' % self.compiler.cc,
+ '-DCMAKE_CXX_COMPILER=%s' % self.compiler.cxx,
+ '-DCMAKE_INSTALL_PREFIX=%s' % prefix,
+ '..', *std_cmake_args)
+
+ # FIXME: Add logic to build and install here
+ make()
+ make("install")
diff --git a/var/spack/packages/openmpi/package.py b/var/spack/packages/openmpi/package.py
index 7e84cbaf65..5e429dedf5 100644
--- a/var/spack/packages/openmpi/package.py
+++ b/var/spack/packages/openmpi/package.py
@@ -1,5 +1,8 @@
+import os
+
from spack import *
+
class Openmpi(Package):
"""Open MPI is a project combining technologies and resources from
several other projects (FT-MPI, LA-MPI, LAM/MPI, and PACX-MPI)
@@ -11,15 +14,28 @@ class Openmpi(Package):
homepage = "http://www.open-mpi.org"
- version('1.8.2', 'ab538ed8e328079d566fc797792e016e',
- url='http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.2.tar.gz')
+ version('1.10.0', '280cf952de68369cebaca886c5ce0304',
+ url = "http://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.0.tar.bz2")
+ version('1.8.8', '0dab8e602372da1425e9242ae37faf8c',
+ url = 'http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.8.tar.bz2')
version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475',
url = "http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2")
patch('ad_lustre_rwcontig_open_source.patch', when="@1.6.5")
patch('llnl-platforms.patch', when="@1.6.5")
- provides('mpi@:2')
+ provides('mpi@:2.2', when='@1.6.5') # Open MPI 1.6.5 supports MPI-2.2
+ provides('mpi@:3.0', when='@1.8.8') # Open MPI 1.8.8 supports MPI-3.0
+ provides('mpi@:3.0', when='@1.10.0') # Open MPI 1.10.0 supports MPI-3.0
+
+
+ def setup_dependent_environment(self, module, spec, dep_spec):
+ """For dependencies, make mpicc's use spack wrapper."""
+ os.environ['OMPI_CC'] = 'cc'
+ os.environ['OMPI_CXX'] = 'c++'
+ os.environ['OMPI_FC'] = 'f90'
+ os.environ['OMPI_F77'] = 'f77'
+
def install(self, spec, prefix):
config_args = ["--prefix=%s" % prefix]
@@ -39,3 +55,55 @@ class Openmpi(Package):
configure(*config_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 and FC set
+ to Spack's generic cc, c++ and f90. We want them to
+ be bound to whatever compiler they were built with.
+ """
+ kwargs = { 'ignore_absent' : True, 'backup' : False, 'string' : False }
+ dir = os.path.join(self.prefix, 'share/openmpi/')
+
+ cc_wrappers = ['mpicc-vt-wrapper-data.txt', 'mpicc-wrapper-data.txt',
+ 'ortecc-wrapper-data.txt', 'shmemcc-wrapper-data.txt']
+
+ cxx_wrappers = ['mpic++-vt-wrapper-data.txt', 'mpic++-wrapper-data.txt',
+ 'ortec++-wrapper-data.txt']
+
+ fc_wrappers = ['mpifort-vt-wrapper-data.txt',
+ 'mpifort-wrapper-data.txt', 'shmemfort-wrapper-data.txt']
+
+ for wrapper in cc_wrappers:
+ filter_file('compiler=.*', 'compiler=%s' % self.compiler.cc,
+ os.path.join(dir, wrapper), **kwargs)
+
+ for wrapper in cxx_wrappers:
+ filter_file('compiler=.*', 'compiler=%s' % self.compiler.cxx,
+ os.path.join(dir, wrapper), **kwargs)
+
+ for wrapper in fc_wrappers:
+ filter_file('compiler=.*', 'compiler=%s' % self.compiler.fc,
+ os.path.join(dir, wrapper), **kwargs)
+
+ # These are symlinks in newer versions, so check that here
+ f77_wrappers = ['mpif77-vt-wrapper-data.txt', 'mpif77-wrapper-data.txt']
+ f90_wrappers = ['mpif90-vt-wrapper-data.txt', 'mpif90-wrapper-data.txt']
+
+ for wrapper in f77_wrappers:
+ path = os.path.join(dir, wrapper)
+ if not os.path.islink(path):
+ filter_file('compiler=.*', 'compiler=%s' % self.compiler.f77,
+ path, **kwargs)
+ for wrapper in f90_wrappers:
+ path = os.path.join(dir, wrapper)
+ if not os.path.islink(path):
+ filter_file('compiler=.*', 'compiler=%s' % self.compiler.fc,
+ path, **kwargs)
+
+
diff --git a/var/spack/packages/paraview/package.py b/var/spack/packages/paraview/package.py
new file mode 100644
index 0000000000..a0ff812ca2
--- /dev/null
+++ b/var/spack/packages/paraview/package.py
@@ -0,0 +1,72 @@
+from spack import *
+
+class Paraview(Package):
+ homepage = 'http://www.paraview.org'
+ url = 'http://www.paraview.org/files/v4.4/ParaView-v4.4.0-source.tar.gz'
+
+ version('4.4.0', 'fa1569857dd680ebb4d7ff89c2227378', url='http://www.paraview.org/files/v4.4/ParaView-v4.4.0-source.tar.gz')
+
+ variant('python', default=False, description='Enable Python support')
+ variant('matplotlib', default=False, description='Enable Matplotlib support')
+ variant('numpy', default=False, description='Enable NumPy support')
+
+ variant('tcl', default=False, description='Enable TCL support')
+
+ variant('mpi', default=False, description='Enable MPI support')
+
+ variant('osmesa', default=False, description='Enable OSMesa support')
+ variant('qt', default=False, description='Enable Qt support')
+
+ depends_on('python', when='+python')
+ depends_on('py-numpy', when='+python+numpy')
+ depends_on('py-matplotlib', when='+python+matplotlib')
+ depends_on('tcl', when='+tcl')
+ depends_on('mpi', when='+mpi')
+ depends_on('qt', when='+qt')
+
+ depends_on('bzip2')
+ depends_on('freetype')
+ depends_on('hdf5') # drags in mpi
+ depends_on('jpeg')
+ depends_on('libpng')
+ depends_on('libtiff')
+ #depends_on('libxml2') # drags in python
+ depends_on('netcdf')
+ #depends_on('protobuf') # version mismatches?
+ #depends_on('sqlite') # external version not supported
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ def feature_to_bool(feature, on='ON', off='OFF'):
+ if feature in spec:
+ return on
+ return off
+
+ def nfeature_to_bool(feature):
+ return feature_to_bool(feature, on='OFF', off='ON')
+
+ feature_args = std_cmake_args[:]
+ feature_args.append('-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % feature_to_bool('+qt'))
+ feature_args.append('-DPARAVIEW_ENABLE_PYTHON:BOOL=%s' % feature_to_bool('+python'))
+ feature_args.append('-DPARAVIEW_USE_MPI:BOOL=%s' % feature_to_bool('+mpi'))
+ feature_args.append('-DVTK_ENABLE_TCL_WRAPPING:BOOL=%s' % feature_to_bool('+tcl'))
+ feature_args.append('-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' % feature_to_bool('+osmesa'))
+ feature_args.append('-DVTK_USE_X:BOOL=%s' % nfeature_to_bool('+osmesa'))
+ feature_args.append('-DVTK_RENDERING_BACKEND:STRING=%s' % feature_to_bool('+opengl2', 'OpenGL2', 'OpenGL'))
+
+ feature_args.extend(std_cmake_args)
+
+ cmake('..',
+ '-DCMAKE_INSTALL_PREFIX:PATH=%s' % prefix,
+ '-DBUILD_TESTING:BOOL=OFF',
+ '-DVTK_USER_SYSTEM_FREETYPE:BOOL=ON',
+ '-DVTK_USER_SYSTEM_HDF5:BOOL=ON',
+ '-DVTK_USER_SYSTEM_JPEG:BOOL=ON',
+ #'-DVTK_USER_SYSTEM_LIBXML2:BOOL=ON',
+ '-DVTK_USER_SYSTEM_NETCDF:BOOL=ON',
+ '-DVTK_USER_SYSTEM_TIFF:BOOL=ON',
+ '-DVTK_USER_SYSTEM_ZLIB:BOOL=ON',
+ *feature_args)
+ make()
+ make('install')
diff --git a/var/spack/packages/pidx/package.py b/var/spack/packages/pidx/package.py
new file mode 100644
index 0000000000..81aed62fb1
--- /dev/null
+++ b/var/spack/packages/pidx/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Pidx(Package):
+ """PIDX Parallel I/O Library.
+
+ PIDX is an efficient parallel I/O library that reads and writes
+ multiresolution IDX data files.
+ """
+
+ homepage = "http://www.cedmav.com/pidx"
+
+ version('1.0', git='https://github.com/sci-visus/PIDX.git',
+ commit='6afa1cf71d1c41263296dc049c8fabaf73c296da')
+
+ depends_on("mpi")
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake('..', *std_cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/pkg-config/package.py b/var/spack/packages/pkg-config/package.py
new file mode 100644
index 0000000000..9964c6ce34
--- /dev/null
+++ b/var/spack/packages/pkg-config/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class PkgConfig(Package):
+ """pkg-config is a helper tool used when compiling applications and libraries"""
+ homepage = "http://www.freedesktop.org/wiki/Software/pkg-config/"
+ url = "http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz"
+
+ version('0.28', 'aa3c86e67551adc3ac865160e34a2a0d')
+
+ parallel = False
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" %prefix, "--enable-shared")
+
+ make()
+ make("install")
+
diff --git a/var/spack/packages/protobuf/package.py b/var/spack/packages/protobuf/package.py
new file mode 100644
index 0000000000..34085c7ce9
--- /dev/null
+++ b/var/spack/packages/protobuf/package.py
@@ -0,0 +1,16 @@
+import os
+from spack import *
+
+class Protobuf(Package):
+ """Google's data interchange format."""
+
+ homepage = "https://developers.google.com/protocol-buffers"
+ url = "https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2"
+
+ version('2.5.0', 'a72001a9067a4c2c4e0e836d0f92ece4')
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix)
+ make()
+ make("check")
+ make("install")
diff --git a/var/spack/packages/py-numpy/package.py b/var/spack/packages/py-numpy/package.py
index 6534e063d2..efa109a3e9 100644
--- a/var/spack/packages/py-numpy/package.py
+++ b/var/spack/packages/py-numpy/package.py
@@ -7,9 +7,22 @@ class PyNumpy(Package):
version('1.9.1', '78842b73560ec378142665e712ae4ad9')
version('1.9.2', 'a1ed53432dbcd256398898d35bc8e645')
-
+
extends('python')
depends_on('py-nose')
+ depends_on('netlib-blas+fpic')
+ depends_on('netlib-lapack+shared')
+
+ def patch(self):
+ filter_file(
+ "possible_executables = \['(gfortran|g77|ifort|efl)",
+ "possible_executables = ['fc",
+ "numpy/distutils/fcompiler/gnu.py",
+ "numpy/distutils/fcompiler/intel.py")
def install(self, spec, prefix):
+ with open('site.cfg', 'w') as f:
+ f.write('[DEFAULT]\n')
+ f.write('libraries=lapack,blas\n')
+ f.write('library_dirs=%s/lib:%s/lib\n' % (spec['blas'].prefix, spec['lapack'].prefix))
python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-scipy/package.py b/var/spack/packages/py-scipy/package.py
index cdcf74534b..3a1124cc15 100644
--- a/var/spack/packages/py-scipy/package.py
+++ b/var/spack/packages/py-scipy/package.py
@@ -11,6 +11,8 @@ class PyScipy(Package):
extends('python')
depends_on('py-nose')
depends_on('py-numpy')
+ depends_on('blas')
+ depends_on('lapack')
def install(self, spec, prefix):
python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/samtools/package.py b/var/spack/packages/samtools/package.py
new file mode 100644
index 0000000000..72900398d8
--- /dev/null
+++ b/var/spack/packages/samtools/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Samtools(Package):
+ """SAM Tools provide various utilities for manipulating alignments in the SAM format,
+ including sorting, merging, indexing and generating
+ alignments in a per-position format"""
+
+ homepage = "www.htslib.org"
+ version('1.2','988ec4c3058a6ceda36503eebecd4122',url = "https://github.com/samtools/samtools/releases/download/1.2/samtools-1.2.tar.bz2")
+
+ depends_on("zlib")
+ depends_on("mpc")
+ parallel=False
+ patch("samtools1.2.patch",level=0)
+
+ def install(self, spec, prefix):
+ make("prefix=%s" % prefix, "install")
+
diff --git a/var/spack/packages/samtools/samtools1.2.patch b/var/spack/packages/samtools/samtools1.2.patch
new file mode 100644
index 0000000000..ead3ab4e2c
--- /dev/null
+++ b/var/spack/packages/samtools/samtools1.2.patch
@@ -0,0 +1,20 @@
+--- Makefile 2015-02-03 08:27:34.000000000 -0800
++++ Makefile.new 2015-07-21 10:38:27.881406892 -0700
+@@ -26,7 +26,7 @@
+ CFLAGS = -g -Wall -O2
+ LDFLAGS =
+ LDLIBS =
+-DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=1
++DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=0
+ LOBJS= bam_aux.o bam.o bam_import.o sam.o \
+ sam_header.o bam_plbuf.o
+ AOBJS= bam_index.o bam_plcmd.o sam_view.o \
+@@ -37,7 +37,7 @@
+ faidx.o stats.o stats_isize.o bam_flags.o bam_split.o \
+ bam_tview.o bam_tview_curses.o bam_tview_html.o bam_lpileup.o
+ INCLUDES= -I. -I$(HTSDIR)
+-LIBCURSES= -lcurses # -lXCurses
++#LIBCURSES= -lcurses # -lXCurses
+
+ prefix = /usr/local
+ exec_prefix = $(prefix)
diff --git a/var/spack/packages/scorep/package.py b/var/spack/packages/scorep/package.py
index 32a772e3db..f013bd1cbb 100644
--- a/var/spack/packages/scorep/package.py
+++ b/var/spack/packages/scorep/package.py
@@ -1,11 +1,10 @@
# FIXME: Add copyright statement
from spack import *
-from contextlib import closing
class Scorep(Package):
- """The Score-P measurement infrastructure is a highly scalable and
- easy-to-use tool suite for profiling, event tracing, and online
+ """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.
@@ -20,7 +19,7 @@ class Scorep(Package):
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("otf2")
depends_on("opari2")
depends_on("cube@4.2:4.2.3")
@@ -53,12 +52,12 @@ MPI_CXXFLAGS=-fPIC
# 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 closing(open("platform-backend-user-provided", "w")) as backend_file:
+ with open("platform-backend-user-provided", "w") as backend_file:
backend_file.write(self.backend_user_provided)
- with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
+ with open("platform-frontend-user-provided", "w") as frontend_file:
frontend_file.write(self.frontend_user_provided)
- with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
- mpi_file.write(self.mpi_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",
diff --git a/var/spack/packages/scr/package.py b/var/spack/packages/scr/package.py
index 74b75a8742..9fb758f072 100644
--- a/var/spack/packages/scr/package.py
+++ b/var/spack/packages/scr/package.py
@@ -28,12 +28,14 @@ class Scr(Package):
"""SCR caches checkpoint data in storage on the compute nodes of a
Linux cluster to provide a fast, scalable checkpoint/restart
capability for MPI codes"""
+
homepage = "https://computation.llnl.gov/project/scr/"
- url = "http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz"
depends_on("mpi")
+# depends_on("dtcmp")
- version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd')
+ version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd', url='http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz')
+ version('1.1.8', '6a0f11ad18e27fcfc00a271ff587b06e', url='https://github.com/hpc/scr/releases/download/v1.1.8/scr-1.1.8.tar.gz')
def install(self, spec, prefix):
configure("--prefix=" + prefix,
diff --git a/var/spack/packages/snappy/package.py b/var/spack/packages/snappy/package.py
new file mode 100644
index 0000000000..c8f9ceef7d
--- /dev/null
+++ b/var/spack/packages/snappy/package.py
@@ -0,0 +1,15 @@
+import os
+from spack import *
+
+class Snappy(Package):
+ """A fast compressor/decompressor: https://code.google.com/p/snappy"""
+
+ homepage = "https://code.google.com/p/snappy"
+ url = "https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz"
+
+ version('1.1.3', '7358c82f133dc77798e4c2062a749b73')
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/stat/package.py b/var/spack/packages/stat/package.py
index c40d65ae78..5d81e62731 100644
--- a/var/spack/packages/stat/package.py
+++ b/var/spack/packages/stat/package.py
@@ -9,17 +9,20 @@ class Stat(Package):
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
+ variant('dysect', default=False, description="enable DySectAPI")
+
depends_on('libelf')
depends_on('libdwarf')
depends_on('dyninst')
depends_on('graphlib')
+ depends_on('graphviz')
depends_on('launchmon')
depends_on('mrnet')
patch('configure_mpicxx.patch', when='@2.1.0')
def install(self, spec, prefix):
- configure(
+ configure_args = [
"--enable-gui",
"--prefix=%s" % prefix,
"--disable-examples", # Examples require MPI: avoid this dependency.
@@ -27,7 +30,11 @@ class Stat(Package):
"--with-mrnet=%s" % spec['mrnet'].prefix,
"--with-graphlib=%s" % spec['graphlib'].prefix,
"--with-stackwalker=%s" % spec['dyninst'].prefix,
- "--with-libdwarf=%s" % spec['libdwarf'].prefix)
+ "--with-libdwarf=%s" % spec['libdwarf'].prefix
+ ]
+ if '+dysect' in spec:
+ configure_args.append('--enable-dysectapi')
+ configure(*configure_args)
make(parallel=False)
make("install")
diff --git a/var/spack/packages/swig/package.py b/var/spack/packages/swig/package.py
index d7a3d815b9..ee536d7063 100644
--- a/var/spack/packages/swig/package.py
+++ b/var/spack/packages/swig/package.py
@@ -38,6 +38,8 @@ class Swig(Package):
version('3.0.2', '62f9b0d010cef36a13a010dc530d0d41')
+ depends_on('pcre')
+
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
diff --git a/var/spack/packages/trilinos/package.py b/var/spack/packages/trilinos/package.py
new file mode 100644
index 0000000000..7c43f796a4
--- /dev/null
+++ b/var/spack/packages/trilinos/package.py
@@ -0,0 +1,50 @@
+from spack import *
+
+
+class Trilinos(Package):
+ """
+ The Trilinos Project is an effort to develop algorithms and enabling technologies within an object-oriented
+ software framework for the solution of large-scale, complex multi-physics engineering and scientific problems.
+ A unique design feature of Trilinos is its focus on packages.
+ """
+ homepage = "https://trilinos.org/"
+ url = "http://trilinos.csbsju.edu/download/files/trilinos-12.2.1-Source.tar.gz"
+
+ version('12.2.1', '6161926ea247863c690e927687f83be9')
+ version('12.0.1', 'bd99741d047471e127b8296b2ec08017')
+ version('11.14.3', '2f4f83f8333e4233c57d0f01c4b57426')
+ version('11.14.2', 'a43590cf896c677890d75bfe75bc6254')
+ version('11.14.1', '40febc57f76668be8b6a77b7607bb67f')
+
+ variant('mpi', default=True, description='Add a dependency on MPI and enables MPI dependent packages')
+
+ # Everything should be compiled with -fpic
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('boost')
+ depends_on('netcdf')
+ depends_on('matio')
+ depends_on('glm')
+ depends_on('swig')
+ depends_on('mpi', when='+mpi')
+
+ def install(self, spec, prefix):
+
+ options = [
+ '-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=ON',
+ '-DTrilinos_ENABLE_TESTS:BOOL=OFF',
+ '-DTrilinos_ENABLE_EXAMPLES:BOOL=OFF',
+ '-DBUILD_SHARED_LIBS:BOOL=ON',
+ '-DBLAS_LIBRARY_DIRS:PATH=%s' % spec['blas'].prefix,
+ '-DLAPACK_LIBRARY_DIRS:PATH=%s' % spec['lapack'].prefix
+ ]
+ if '+mpi' in spec:
+ mpi_options = ['-DTPL_ENABLE_MPI:BOOL=ON']
+ options.extend(mpi_options)
+
+ # -DCMAKE_INSTALL_PREFIX and all the likes...
+ options.extend(std_cmake_args)
+ with working_dir('spack-build', create=True):
+ cmake('..', *options)
+ make()
+ make('install')
diff --git a/var/spack/packages/xz/package.py b/var/spack/packages/xz/package.py
index 88c5793018..ba6c9733a7 100644
--- a/var/spack/packages/xz/package.py
+++ b/var/spack/packages/xz/package.py
@@ -8,9 +8,13 @@ class Xz(Package):
homepage = "http://tukaani.org/xz/"
url = "http://tukaani.org/xz/xz-5.2.0.tar.bz2"
- version('5.2.0', '867cc8611760240ebf3440bd6e170bb9')
-
+ version('5.2.0', '867cc8611760240ebf3440bd6e170bb9',
+ url = 'http://tukaani.org/xz/xz-5.2.0.tar.bz2')
+ version('5.2.2', 'f90c9a0c8b259aee2234c4e0d7fd70af',
+ url = 'http://tukaani.org/xz/xz-5.2.2.tar.bz2')
+
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install")
+