summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/llnl/util/lang.py5
-rw-r--r--lib/spack/spack/directives.py10
-rw-r--r--lib/spack/spack/virtual.py8
-rw-r--r--var/spack/packages/apex/package.py34
-rw-r--r--var/spack/packages/binutils/package.py1
-rw-r--r--var/spack/packages/ompt-openmp/package.py23
-rw-r--r--var/spack/packages/openmpi/package.py64
-rw-r--r--var/spack/packages/xz/package.py8
8 files changed, 135 insertions, 18 deletions
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/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/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/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 0c33bf0426..cac0a0407f 100644
--- a/var/spack/packages/binutils/package.py
+++ b/var/spack/packages/binutils/package.py
@@ -18,6 +18,7 @@ class Binutils(Package):
'--disable-dependency-tracking',
'--enable-interwork',
'--enable-multilib',
+ '--enable-shared',
'--enable-64-bit-bfd',
'--enable-targets=all']
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 f9d0034878..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)
@@ -25,6 +28,15 @@ class Openmpi(Package):
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]
@@ -43,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/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")
+