summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2015-02-24 10:42:58 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2015-02-24 10:42:58 -0800
commit8eab69fc0b06994ad063efec4d40c418aef49a10 (patch)
tree764ba29462f20fb1196b9fba1dc3374f9bec2c8f /var
parentfa21acc470d9c32619b3c67dcce54c7b0a69a07a (diff)
parentffdb90f39a56e5f0dacefd19ccf85ddd0e7a01c0 (diff)
downloadspack-0.8.15.tar.gz
spack-0.8.15.tar.bz2
spack-0.8.15.tar.xz
spack-0.8.15.zip
Merge branch 'develop' for v0.8.15v0.8.15
Diffstat (limited to 'var')
-rw-r--r--var/spack/packages/ImageMagick/package.py22
-rw-r--r--var/spack/packages/Mitos/package.py18
-rw-r--r--var/spack/packages/R/package.py33
-rw-r--r--var/spack/packages/atk/package.py18
-rw-r--r--var/spack/packages/bison/package.py17
-rw-r--r--var/spack/packages/boost/package.py5
-rw-r--r--var/spack/packages/bzip2/package.py34
-rw-r--r--var/spack/packages/cairo/package.py19
-rw-r--r--var/spack/packages/clang/package.py5
-rw-r--r--var/spack/packages/cloog/package.py26
-rw-r--r--var/spack/packages/dbus/package.py29
-rw-r--r--var/spack/packages/dri2proto/package.py14
-rw-r--r--var/spack/packages/dyninst/package.py26
-rw-r--r--var/spack/packages/extrae/package.py22
-rw-r--r--var/spack/packages/flex/package.py15
-rw-r--r--var/spack/packages/gasnet/package.py35
-rw-r--r--var/spack/packages/gcc/package.py107
-rw-r--r--var/spack/packages/gdk-pixbuf/package.py22
-rw-r--r--var/spack/packages/geos/package.py31
-rw-r--r--var/spack/packages/git/package.py27
-rw-r--r--var/spack/packages/glib/package.py18
-rw-r--r--var/spack/packages/gmp/package.py40
-rw-r--r--var/spack/packages/gnutls/package.py22
-rw-r--r--var/spack/packages/gperf/package.py19
-rw-r--r--var/spack/packages/gperftools/package.py38
-rw-r--r--var/spack/packages/gtkplus/package.py22
-rw-r--r--var/spack/packages/harfbuzz/package.py20
-rw-r--r--var/spack/packages/hdf5/package.py6
-rw-r--r--var/spack/packages/icu/package.py25
-rw-r--r--var/spack/packages/icu4c/package.py17
-rw-r--r--var/spack/packages/isl/package.py17
-rw-r--r--var/spack/packages/jdk/package.py46
-rw-r--r--var/spack/packages/jpeg/package.py2
-rw-r--r--var/spack/packages/lcms/package.py19
-rw-r--r--var/spack/packages/libdrm/package.py18
-rw-r--r--var/spack/packages/libdwarf/package.py7
-rw-r--r--var/spack/packages/libffi/package.py16
-rw-r--r--var/spack/packages/libgcrypt/package.py19
-rw-r--r--var/spack/packages/libgpg-error/package.py17
-rw-r--r--var/spack/packages/libjpeg-turbo/package.py20
-rw-r--r--var/spack/packages/libmng/package.py23
-rw-r--r--var/spack/packages/libmonitor/package.py2
-rw-r--r--var/spack/packages/libpng/package.py5
-rw-r--r--var/spack/packages/libtiff/package.py2
-rw-r--r--var/spack/packages/libxcb/package.py21
-rw-r--r--var/spack/packages/libxml2/package.py19
-rw-r--r--var/spack/packages/libxshmfence/package.py16
-rw-r--r--var/spack/packages/libxslt/package.py24
-rw-r--r--var/spack/packages/llvm/package.py8
-rw-r--r--var/spack/packages/memaxes/package.py20
-rw-r--r--var/spack/packages/mesa/package.py33
-rw-r--r--var/spack/packages/mpc/package.py42
-rw-r--r--var/spack/packages/mpfr/package.py38
-rw-r--r--var/spack/packages/mpibash/mpibash-4.3.patch1565
-rw-r--r--var/spack/packages/mpibash/package.py32
-rw-r--r--var/spack/packages/muster/package.py21
-rw-r--r--var/spack/packages/nasm/package.py14
-rw-r--r--var/spack/packages/ncurses/package.py8
-rw-r--r--var/spack/packages/netcdf/package.py28
-rw-r--r--var/spack/packages/nettle/package.py15
-rw-r--r--var/spack/packages/ompss/package.py7
-rw-r--r--var/spack/packages/openmpi/package.py6
-rw-r--r--var/spack/packages/pango/package.py19
-rw-r--r--var/spack/packages/pcre/package.py15
-rw-r--r--var/spack/packages/pixman/package.py18
-rw-r--r--var/spack/packages/ppl/package.py28
-rw-r--r--var/spack/packages/py-basemap/package.py20
-rw-r--r--var/spack/packages/py-biopython/package.py15
-rw-r--r--var/spack/packages/py-cython/package.py13
-rw-r--r--var/spack/packages/py-dateutil/package.py15
-rw-r--r--var/spack/packages/py-epydoc/package.py13
-rw-r--r--var/spack/packages/py-gnuplot/package.py14
-rw-r--r--var/spack/packages/py-h5py/package.py18
-rw-r--r--var/spack/packages/py-ipython/package.py15
-rw-r--r--var/spack/packages/py-libxml2/package.py15
-rw-r--r--var/spack/packages/py-mako/package.py16
-rw-r--r--var/spack/packages/py-matplotlib/package.py46
-rw-r--r--var/spack/packages/py-mpi4py/package.py14
-rw-r--r--var/spack/packages/py-mx/package.py13
-rw-r--r--var/spack/packages/py-nose/package.py16
-rw-r--r--var/spack/packages/py-numpy/package.py14
-rw-r--r--var/spack/packages/py-pexpect/package.py13
-rw-r--r--var/spack/packages/py-pil/package.py14
-rw-r--r--var/spack/packages/py-pmw/package.py13
-rw-r--r--var/spack/packages/py-pychecker/package.py13
-rw-r--r--var/spack/packages/py-pygments/package.py14
-rw-r--r--var/spack/packages/py-pylint/package.py16
-rw-r--r--var/spack/packages/py-pyparsing/package.py13
-rw-r--r--var/spack/packages/py-pyqt/package.py24
-rw-r--r--var/spack/packages/py-pyside/package.py45
-rw-r--r--var/spack/packages/py-pytz/package.py13
-rw-r--r--var/spack/packages/py-rpy2/package.py16
-rw-r--r--var/spack/packages/py-scientificpython/package.py17
-rw-r--r--var/spack/packages/py-scikit-learn/package.py13
-rw-r--r--var/spack/packages/py-scipy/package.py15
-rw-r--r--var/spack/packages/py-setuptools/package.py13
-rw-r--r--var/spack/packages/py-shiboken/package.py45
-rw-r--r--var/spack/packages/py-sip/package.py20
-rw-r--r--var/spack/packages/py-six/package.py14
-rw-r--r--var/spack/packages/py-sympy/package.py13
-rw-r--r--var/spack/packages/py-virtualenv/package.py15
-rw-r--r--var/spack/packages/python/package.py157
-rw-r--r--var/spack/packages/qhull/package.py27
-rw-r--r--var/spack/packages/qt/package.py107
-rw-r--r--var/spack/packages/qthreads/package.py22
-rw-r--r--var/spack/packages/readline/package.py21
-rw-r--r--var/spack/packages/rose/add_spack_compiler_recognition.patch13
-rw-r--r--var/spack/packages/rose/package.py39
-rw-r--r--var/spack/packages/ruby/package.py16
-rw-r--r--var/spack/packages/scr/package.py2
-rw-r--r--var/spack/packages/spindle/package.py2
-rw-r--r--var/spack/packages/tcl/package.py22
-rw-r--r--var/spack/packages/tk/package.py22
-rw-r--r--var/spack/packages/util-linux/package.py20
-rw-r--r--var/spack/packages/vtk/package.py40
-rw-r--r--var/spack/packages/wget/package.py21
-rw-r--r--var/spack/packages/xcb-proto/package.py15
-rw-r--r--var/spack/packages/xz/package.py16
-rw-r--r--var/spack/packages/yasm/package.py16
119 files changed, 4115 insertions, 41 deletions
diff --git a/var/spack/packages/ImageMagick/package.py b/var/spack/packages/ImageMagick/package.py
index 39c733e0df..753ea80ca6 100644
--- a/var/spack/packages/ImageMagick/package.py
+++ b/var/spack/packages/ImageMagick/package.py
@@ -3,16 +3,32 @@ from spack import *
class Imagemagick(Package):
"""ImageMagick is a image processing library"""
homepage = "http://www.imagemagic.org"
- url = "http://www.imagemagick.org/download/ImageMagick-6.8.9-9.tar.gz"
- version('6.8.9-9', 'e63fed3e3550851328352c708f800676')
+ #-------------------------------------------------------------------------
+ # ImageMagick does not keep around anything but *-10 versions, so
+ # this URL may change. If you want the bleeding edge, you can
+ # uncomment it and see if it works but you may need to try to
+ # fetch a newer version (-6, -7, -8, -9, etc.) or you can stick
+ # wtih the older, stable, archived -10 versions below.
+ #
+ # TODO: would be nice if spack had a way to recommend avoiding a
+ # TODO: bleeding edge version, but not comment it out.
+ # -------------------------------------------------------------------------
+ # version('6.9.0-6', 'c1bce7396c22995b8bdb56b7797b4a1b',
+ # url="http://www.imagemagick.org/download/ImageMagick-6.9.0-6.tar.bz2")
+
+ #-------------------------------------------------------------------------
+ # *-10 versions are archived, so these versions should fetch reliably.
+ # -------------------------------------------------------------------------
+ version('6.8.9-10', 'aa050bf9785e571c956c111377bbf57c',
+ url="http://sourceforge.net/projects/imagemagick/files/old-sources/6.x/6.8/ImageMagick-6.8.9-10.tar.gz/download")
depends_on('libtool')
depends_on('jpeg')
depends_on('libpng')
depends_on('freetype')
depends_on('fontconfig')
-# depends_on('libtiff')
+ depends_on('libtiff')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
diff --git a/var/spack/packages/Mitos/package.py b/var/spack/packages/Mitos/package.py
new file mode 100644
index 0000000000..272360a55c
--- /dev/null
+++ b/var/spack/packages/Mitos/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Mitos(Package):
+ """Mitos is a library and a tool for collecting sampled memory
+ performance data to view with MemAxes"""
+
+ homepage = "https://github.com/scalability-llnl/Mitos"
+ url = "https://github.com/scalability-llnl/Mitos"
+
+ version('0.7', git='https://github.com/scalability-llnl/Mitos.git', tag='v0.7')
+
+ depends_on('dyninst')
+
+ 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/R/package.py b/var/spack/packages/R/package.py
new file mode 100644
index 0000000000..2e6f65a742
--- /dev/null
+++ b/var/spack/packages/R/package.py
@@ -0,0 +1,33 @@
+from spack import *
+
+class R(Package):
+ """R is 'GNU S', a freely available language and environment for
+ statistical computing and graphics which provides a wide va
+ riety of statistical and graphical techniques: linear and
+ nonlinear modelling, statistical tests, time series analysis,
+ classification, clustering, etc. Please consult the R project
+ homepage for further information."""
+ homepage = "http://www.example.com"
+ url = "http://cran.cnr.berkeley.edu/src/base/R-3/R-3.1.2.tar.gz"
+
+ version('3.1.2', '3af29ec06704cbd08d4ba8d69250ae74')
+
+ depends_on("readline")
+ depends_on("ncurses")
+ depends_on("icu")
+ depends_on("glib")
+ depends_on("zlib")
+ depends_on("libtiff")
+ depends_on("jpeg")
+ depends_on("cairo")
+ depends_on("pango")
+ depends_on("freetype")
+ depends_on("tcl")
+ depends_on("tk")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--enable-R-shlib",
+ "--enable-BLAS-shlib")
+ make()
+ make("install")
diff --git a/var/spack/packages/atk/package.py b/var/spack/packages/atk/package.py
new file mode 100644
index 0000000000..769805b227
--- /dev/null
+++ b/var/spack/packages/atk/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Atk(Package):
+ """ATK provides the set of accessibility interfaces that are
+ implemented by other toolkits and applications. Using the ATK
+ interfaces, accessibility tools have full access to view and
+ control running applications."""
+ homepage = "https://developer.gnome.org/atk/"
+ url = "http://ftp.gnome.org/pub/gnome/sources/atk/2.14/atk-2.14.0.tar.xz"
+
+ version('2.14.0', 'ecb7ca8469a5650581b1227d78051b8b')
+
+ depends_on("glib")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/bison/package.py b/var/spack/packages/bison/package.py
new file mode 100644
index 0000000000..7c526fb958
--- /dev/null
+++ b/var/spack/packages/bison/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class Bison(Package):
+ """Bison is a general-purpose parser generator that converts
+ an annotated context-free grammar into a deterministic LR or
+ generalized LR (GLR) parser employing LALR(1) parser tables."""
+
+ homepage = "http://www.gnu.org/software/bison/"
+ url = "http://ftp.gnu.org/gnu/bison/bison-3.0.tar.gz"
+
+ version('3.0.4', 'a586e11cd4aff49c3ff6d3b6a4c9ccf8')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/boost/package.py b/var/spack/packages/boost/package.py
index d3231c3baa..254d1afda1 100644
--- a/var/spack/packages/boost/package.py
+++ b/var/spack/packages/boost/package.py
@@ -53,7 +53,10 @@ class Boost(Package):
bootstrap = Executable('./bootstrap.sh')
bootstrap()
- b2 = Executable('./b2')
+ # b2 used to be called bjam, before 1.47 (sigh)
+ b2name = './b2' if spec.satisfies('@1.47:') else './bjam'
+
+ b2 = Executable(b2name)
b2('install',
'-j %s' % make_jobs,
'--prefix=%s' % prefix)
diff --git a/var/spack/packages/bzip2/package.py b/var/spack/packages/bzip2/package.py
new file mode 100644
index 0000000000..fbd5869a53
--- /dev/null
+++ b/var/spack/packages/bzip2/package.py
@@ -0,0 +1,34 @@
+from spack import *
+from glob import glob
+
+class Bzip2(Package):
+ """bzip2 is a freely available, patent free high-quality data
+ compressor. It typically compresses files to within 10% to 15%
+ of the best available techniques (the PPM family of statistical
+ compressors), whilst being around twice as fast at compression
+ and six times faster at decompression."""
+ homepage = "http://www.bzip.org"
+ url = "http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz"
+
+ version('1.0.6', '00b516f4704d4a7cb50a1d97e6e8e15b')
+
+ def install(self, spec, prefix):
+ # No configure system -- have to filter the makefile for this package.
+ filter_file(r'CC=gcc', 'CC=cc', 'Makefile', string=True)
+
+ make('-f', 'Makefile-libbz2_so')
+ make('clean')
+ make("install", "PREFIX=%s" % prefix)
+
+ bzip2_exe = join_path(prefix.bin, 'bzip2')
+ install('bzip2-shared', bzip2_exe)
+ for libfile in glob('libbz2.so*'):
+ install(libfile, prefix.lib)
+
+ bunzip2 = join_path(prefix.bin, 'bunzip2')
+ remove(bunzip2)
+ symlink(bzip2_exe, bunzip2)
+
+ bzcat = join_path(prefix.bin, 'bzcat')
+ remove(bzcat)
+ symlink(bzip2_exe, bzcat)
diff --git a/var/spack/packages/cairo/package.py b/var/spack/packages/cairo/package.py
new file mode 100644
index 0000000000..e1ac8aaa7d
--- /dev/null
+++ b/var/spack/packages/cairo/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Cairo(Package):
+ """Cairo is a 2D graphics library with support for multiple output devices."""
+ homepage = "http://cairographics.org"
+ url = "http://cairographics.org/releases/cairo-1.14.0.tar.xz"
+
+ version('1.14.0', 'fc3a5edeba703f906f2241b394f0cced')
+
+ depends_on("libpng")
+ depends_on("glib")
+ depends_on("pixman")
+ depends_on("fontconfig@2.10.91:") # Require newer version of fontconfig.
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--enable-tee")
+ make()
+ make("install")
diff --git a/var/spack/packages/clang/package.py b/var/spack/packages/clang/package.py
index b0097bd126..4f10385dbd 100644
--- a/var/spack/packages/clang/package.py
+++ b/var/spack/packages/clang/package.py
@@ -29,11 +29,10 @@ class Clang(Package):
Objective C and Objective C++ front-end for the LLVM compiler.
"""
homepage = "http://clang.llvm.org"
- url = "http://llvm.org/releases/3.4.2/cfe-3.4.2.src.tar.gz"
+ list_url = "http://llvm.org/releases/download.html"
depends_on("llvm")
-
- version('3.4.2', '87945973b7c73038871c5f849a818588')
+ version('3.4.2', '87945973b7c73038871c5f849a818588', url='http://llvm.org/releases/3.4.2/cfe-3.4.2.src.tar.xz')
def install(self, spec, prefix):
env['CXXFLAGS'] = self.compiler.cxx11_flag
diff --git a/var/spack/packages/cloog/package.py b/var/spack/packages/cloog/package.py
new file mode 100644
index 0000000000..814a33c76c
--- /dev/null
+++ b/var/spack/packages/cloog/package.py
@@ -0,0 +1,26 @@
+from spack import *
+
+class Cloog(Package):
+ """CLooG is a free software and library to generate code for
+ scanning Z-polyhedra. That is, it finds a code (e.g. in C,
+ FORTRAN...) that reaches each integral point of one or more
+ parameterized polyhedra."""
+
+ homepage = "http://www.cloog.org"
+ url = "http://www.bastoul.net/cloog/pages/download/count.php3?url=./cloog-0.18.1.tar.gz"
+ list_url = "http://www.bastoul.net/cloog/pages/download"
+
+ version('0.18.1', 'e34fca0540d840e5d0f6427e98c92252')
+ version('0.18.0', 'be78a47bd82523250eb3e91646db5b3d')
+ version('0.17.0', '0aa3302c81f65ca62c114e5264f8a802')
+
+ depends_on("gmp")
+ depends_on("isl")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--with-osl=no",
+ "--with-isl=%s" % spec['isl'].prefix,
+ "--with-gmp=%s" % spec['gmp'].prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/dbus/package.py b/var/spack/packages/dbus/package.py
new file mode 100644
index 0000000000..f7f394498c
--- /dev/null
+++ b/var/spack/packages/dbus/package.py
@@ -0,0 +1,29 @@
+from spack import *
+
+class Dbus(Package):
+ """D-Bus is a message bus system, a simple way for applications to
+ talk to one another. D-Bus supplies both a system daemon (for
+ events such new hardware device printer queue ) and a
+ per-user-login-session daemon (for general IPC needs among user
+ applications). Also, the message bus is built on top of a
+ general one-to-one message passing framework, which can be used
+ by any two applications to communicate directly (without going
+ through the message bus daemon)."""
+
+ homepage = "http://dbus.freedesktop.org/"
+ url = "http://dbus.freedesktop.org/releases/dbus/dbus-1.8.8.tar.gz"
+
+ version('1.9.0', 'ec6895a4d5c0637b01f0d0e7689e2b36')
+ version('1.8.8', 'b9f4a18ee3faa1e07c04aa1d83239c43')
+ version('1.8.6', '6a08ba555d340e9dfe2d623b83c0eea8')
+ version('1.8.4', '4717cb8ab5b80978fcadf2b4f2f72e1b')
+ version('1.8.2', 'd6f709bbec0a022a1847c7caec9d6068')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
+
+ # dbus needs a machine id generated after install
+ dbus_uuidgen = Executable(join_path(prefix.bin, 'dbus-uuidgen'))
+ dbus_uuidgen('--ensure')
diff --git a/var/spack/packages/dri2proto/package.py b/var/spack/packages/dri2proto/package.py
new file mode 100644
index 0000000000..11dfa568e2
--- /dev/null
+++ b/var/spack/packages/dri2proto/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class Dri2proto(Package):
+ """DRI2 Protocol Headers."""
+ homepage = "http://http://cgit.freedesktop.org/xorg/proto/dri2proto/"
+ url = "http://xorg.freedesktop.org/releases/individual/proto/dri2proto-2.8.tar.gz"
+
+ version('2.8', '19ea18f63d8ae8053c9fa84b60365b77')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/dyninst/package.py b/var/spack/packages/dyninst/package.py
index df19ac7bc0..f3d661f9a9 100644
--- a/var/spack/packages/dyninst/package.py
+++ b/var/spack/packages/dyninst/package.py
@@ -31,13 +31,35 @@ class Dyninst(Package):
url = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
- version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a')
- version('8.1.1', '1f8743e3a5662b25ce64a7edf647e77d')
+# Doesn't build right with boost@1.55.0
+# version('8.2.1', 'abf60b7faabe7a2e4b54395757be39c7',
+# url="http://www.paradyn.org/release8.2/DyninstAPI-8.2.1.tgz")
+ version('8.1.2', 'bf03b33375afa66fe0efa46ce3f4b17a',
+ url="http://www.paradyn.org/release8.1.2/DyninstAPI-8.1.2.tgz")
+ version('8.1.1', 'd1a04e995b7aa70960cd1d1fac8bd6ac',
+ url="http://www.paradyn.org/release8.1/DyninstAPI-8.1.1.tgz")
depends_on("libelf")
depends_on("libdwarf")
depends_on("boost@1.42:")
+ # new version uses cmake
+ def install(self, spec, prefix):
+ libelf = spec['libelf'].prefix
+ libdwarf = spec['libdwarf'].prefix
+
+ with working_dir('spack-build', create=True):
+ cmake('..',
+ '-DLIBELF_INCLUDE_DIR=%s' % join_path(libelf.include, 'libelf'),
+ '-DLIBELF_LIBRARIES=%s' % join_path(libelf.lib, 'libelf.so'),
+ '-DLIBDWARF_INCLUDE_DIR=%s' % libdwarf.include,
+ '-DLIBDWARF_LIBRARIES=%s' % join_path(libdwarf.lib, 'libdwarf.so'),
+ *std_cmake_args)
+ make()
+ make("install")
+
+
+ @when('@:8.1')
def install(self, spec, prefix):
configure("--prefix=" + prefix)
make()
diff --git a/var/spack/packages/extrae/package.py b/var/spack/packages/extrae/package.py
index 3b842bc1ec..3ad4cbaf86 100644
--- a/var/spack/packages/extrae/package.py
+++ b/var/spack/packages/extrae/package.py
@@ -1,5 +1,8 @@
from spack import *
+# typical working line with extrae 3.0.1
+# ./configure --prefix=/usr/local --with-mpi=/usr/lib64/mpi/gcc/openmpi --with-unwind=/usr/local --with-papi=/usr --with-dwarf=/usr --with-elf=/usr --with-dyninst=/usr --with-binutils=/usr --with-xml-prefix=/usr --enable-openmp --enable-nanos --enable-pthread --disable-parallel-merge LDFLAGS=-pthread
+
class Extrae(Package):
"""Extrae is the package devoted to generate tracefiles which can
be analyzed later by Paraver. Extrae is a tool that uses
@@ -10,11 +13,10 @@ class Extrae(Package):
programming models either alone or in conjunction with MPI :
OpenMP, CUDA, OpenCL, pthread, OmpSs"""
homepage = "http://www.bsc.es/computer-sciences/extrae"
- url = "http://www.bsc.es/ssl/apps/performanceTools/files/extrae-2.5.1.tar.bz2"
- version('2.5.1', '422376b9c68243bd36a8a73fa62de106')
+ url = "http://www.bsc.es/ssl/apps/performanceTools/files/extrae-3.0.1.tar.bz2"
+ version('3.0.1', 'a6a8ca96cd877723cd8cc5df6bdb922b')
- #depends_on("mpi")
- depends_on("openmpi@:1.6")
+ depends_on("mpi")
depends_on("dyninst")
depends_on("libunwind")
depends_on("boost")
@@ -24,14 +26,20 @@ class Extrae(Package):
def install(self, spec, prefix):
if 'openmpi' in spec:
mpi = spec['openmpi']
- #if spec.satisfies('@2.5.1') and spec.satisfies('^openmpi@1.6.5'):
- # tty.error("Some headers conflict when using OpenMPI 1.6.5. Please use 1.6 instead.")
elif 'mpich' in spec:
mpi = spec['mpich']
elif 'mvapich2' in spec:
mpi = spec['mvapich2']
- configure("--prefix=%s" % prefix, "--with-mpi=%s" % mpi.prefix, "--with-unwind=%s" % spec['libunwind'].prefix, "--with-dyninst=%s" % spec['dyninst'].prefix, "--with-boost=%s" % spec['boost'].prefix, "--with-dwarf=%s" % spec['libdwarf'].prefix, "--with-papi=%s" % spec['papi'].prefix, "--with-dyninst-headers=%s" % spec['dyninst'].prefix.include, "--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib)
+ configure("--prefix=%s" % prefix,
+ "--with-mpi=%s" % mpi.prefix,
+ "--with-unwind=%s" % spec['libunwind'].prefix,
+ "--with-dyninst=%s" % spec['dyninst'].prefix,
+ "--with-boost=%s" % spec['boost'].prefix,
+ "--with-dwarf=%s" % spec['libdwarf'].prefix,
+ "--with-papi=%s" % spec['papi'].prefix,
+ "--with-dyninst-headers=%s" % spec['dyninst'].prefix.include,
+ "--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib)
make()
make("install", parallel=False)
diff --git a/var/spack/packages/flex/package.py b/var/spack/packages/flex/package.py
new file mode 100644
index 0000000000..b065904912
--- /dev/null
+++ b/var/spack/packages/flex/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class Flex(Package):
+ """Flex is a tool for generating scanners."""
+
+ homepage = "http://flex.sourceforge.net/"
+ url = "http://download.sourceforge.net/flex/flex-2.5.39.tar.gz"
+
+ version('2.5.39', 'e133e9ead8ec0a58d81166b461244fde')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/gasnet/package.py b/var/spack/packages/gasnet/package.py
new file mode 100644
index 0000000000..705961d1de
--- /dev/null
+++ b/var/spack/packages/gasnet/package.py
@@ -0,0 +1,35 @@
+from spack import *
+
+class Gasnet(Package):
+ """GASNet is a language-independent, low-level networking layer
+ that provides network-independent, high-performance communication
+ primitives tailored for implementing parallel global address space
+ SPMD languages and libraries such as UPC, Co-Array Fortran, SHMEM,
+ Cray Chapel, and Titanium.
+ """
+ homepage = "http://gasnet.lbl.gov"
+ url = "http://gasnet.lbl.gov/GASNet-1.24.0.tar.gz"
+
+ version('1.24.0', 'c8afdf48381e8b5a7340bdb32ca0f41a')
+
+
+ def install(self, spec, prefix):
+ # TODO: don't use paths with @ in them.
+ change_sed_delimiter('@', ';', 'configure')
+
+ configure("--prefix=%s" % prefix,
+ # TODO: factor IB suport out into architecture description.
+ "--enable-ibv",
+ "--enable-udp",
+ "--disable-mpi",
+ "--enable-par",
+ "--enable-mpi-compat",
+ "--enable-segment-fast",
+ "--disable-aligned-segments",
+ # TODO: make an option so that Legion can request builds with/without this.
+ # See the Legion webpage for details on when to/not to use.
+ "--disable-pshm",
+ "--with-segment-mmap-max=64MB")
+
+ make()
+ make("install")
diff --git a/var/spack/packages/gcc/package.py b/var/spack/packages/gcc/package.py
new file mode 100644
index 0000000000..3da6c25d47
--- /dev/null
+++ b/var/spack/packages/gcc/package.py
@@ -0,0 +1,107 @@
+##############################################################################
+# 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 spack import *
+
+from contextlib import closing
+from glob import glob
+
+class Gcc(Package):
+ """The GNU Compiler Collection includes front ends for C, C++,
+ Objective-C, Fortran, and Java."""
+ homepage = "https://gcc.gnu.org"
+
+ url = "http://open-source-box.org/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2"
+ list_url = 'http://open-source-box.org/gcc/'
+ list_depth = 2
+
+ version('4.9.2', '4df8ee253b7f3863ad0b86359cd39c43')
+ version('4.9.1', 'fddf71348546af523353bd43d34919c1')
+ 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")
+
+ # Save these until we can do optional deps.
+ #depends_on("isl")
+ #depends_on("ppl")
+ #depends_on("cloog")
+
+ def install(self, spec, prefix):
+ # libjava/configure needs a minor fix to install into spack paths.
+ filter_file(r"'@.*@'", "'@[[:alnum:]]*@'", 'libjava/configure', string=True)
+
+ enabled_languages = set(('c', 'c++', 'fortran', 'java', 'objc'))
+ if spec.satisfies("@4.7.1:"):
+ enabled_languages.add('go')
+
+ # 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-quad")
+ make()
+ make("install")
+
+ self.write_rpath_specs()
+
+
+ @property
+ def spec_dir(self):
+ # e.g. lib64/gcc/x86_64-unknown-linux-gnu/4.9.2
+ spec_dir = glob("%s/lib64/gcc/*/*" % self.prefix)
+ return spec_dir[0] if spec_dir else None
+
+
+ def write_rpath_specs(self):
+ """Generate a spec file so the linker adds a rpath to the libs
+ the compiler used to build the executable."""
+ if not self.spec_dir:
+ tty.warn("Could not install specs for %s." % self.spec.format('$_$@'))
+ 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)
diff --git a/var/spack/packages/gdk-pixbuf/package.py b/var/spack/packages/gdk-pixbuf/package.py
new file mode 100644
index 0000000000..14a5569984
--- /dev/null
+++ b/var/spack/packages/gdk-pixbuf/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class GdkPixbuf(Package):
+ """The Gdk Pixbuf is a toolkit for image loading and pixel buffer
+ manipulation. It is used by GTK+ 2 and GTK+ 3 to load and
+ manipulate images. In the past it was distributed as part of
+ GTK+ 2 but it was split off into a separate package in
+ preparation for the change to GTK+ 3."""
+ homepage = "https://developer.gnome.org/gdk-pixbuf/"
+ url = "http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.31/gdk-pixbuf-2.31.1.tar.xz"
+
+ version('2.31.2', '6be6bbc4f356d4b79ab4226860ab8523')
+
+ depends_on("glib")
+ depends_on("jpeg")
+ depends_on("libpng")
+ depends_on("libtiff")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/geos/package.py b/var/spack/packages/geos/package.py
new file mode 100644
index 0000000000..4a2657e32f
--- /dev/null
+++ b/var/spack/packages/geos/package.py
@@ -0,0 +1,31 @@
+from spack import *
+
+class Geos(Package):
+ """GEOS (Geometry Engine - Open Source) is a C++ port of the Java
+ Topology Suite (JTS). As such, it aims to contain the complete
+ functionality of JTS in C++. This includes all the OpenGIS
+ Simple Features for SQL spatial predicate functions and spatial
+ operators, as well as specific JTS enhanced topology functions."""
+
+ homepage = "http://trac.osgeo.org/geos/"
+ url = "http://download.osgeo.org/geos/geos-3.4.2.tar.bz2"
+
+ version('3.4.2', 'fc5df2d926eb7e67f988a43a92683bae')
+ version('3.4.1', '4c930dec44c45c49cd71f3e0931ded7e')
+ version('3.4.0', 'e41318fc76b5dc764a69d43ac6b18488')
+ version('3.3.9', '4794c20f07721d5011c93efc6ccb8e4e')
+ version('3.3.8', '75be476d0831a2d14958fed76ca266de')
+ version('3.3.7', '95ab996d22672b067d92c7dee2170460')
+ version('3.3.6', '6fadfb941541875f4976f75fb0bbc800')
+ version('3.3.5', '2ba61afb7fe2c5ddf642d82d7b16e75b')
+ version('3.3.4', '1bb9f14d57ef06ffa41cb1d67acb55a1')
+ version('3.3.3', '8454e653d7ecca475153cc88fd1daa26')
+
+ extends('python')
+ depends_on('swig')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--enable-python")
+ make()
+ make("install")
diff --git a/var/spack/packages/git/package.py b/var/spack/packages/git/package.py
new file mode 100644
index 0000000000..0f1a3ba05b
--- /dev/null
+++ b/var/spack/packages/git/package.py
@@ -0,0 +1,27 @@
+from spack import *
+
+class Git(Package):
+ """Git is a free and open source distributed version control
+ system designed to handle everything from small to very large
+ projects with speed and efficiency."""
+ homepage = "http://git-scm.com"
+ url = "https://www.kernel.org/pub/software/scm/git/git-2.2.1.tar.xz"
+
+ version('2.2.1', '43e01f9d96ba8c11611e0eef0d9f9f28')
+
+ # Use system openssl.
+ # depends_on("openssl")
+
+ # Use system perl for now.
+ # depends_on("perl")
+ # depends_on("pcre")
+
+ depends_on("zlib")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--without-pcre",
+ "--without-python")
+
+ make()
+ make("install")
diff --git a/var/spack/packages/glib/package.py b/var/spack/packages/glib/package.py
new file mode 100644
index 0000000000..178f0b9df5
--- /dev/null
+++ b/var/spack/packages/glib/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Glib(Package):
+ """The GLib package contains a low-level libraries useful for
+ providing data structure handling for C, portability wrappers
+ and interfaces for such runtime functionality as an event loop,
+ threads, dynamic loading and an object system."""
+ homepage = "https://developer.gnome.org/glib/"
+ url = "http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.1.tar.xz"
+
+ version('2.42.1', '89c4119e50e767d3532158605ee9121a')
+
+ depends_on("libffi")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/gmp/package.py b/var/spack/packages/gmp/package.py
new file mode 100644
index 0000000000..d6af821b34
--- /dev/null
+++ b/var/spack/packages/gmp/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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 spack import *
+
+class Gmp(Package):
+ """GMP is a free library for arbitrary precision arithmetic,
+ operating on signed integers, rational numbers, and
+ floating-point numbers."""
+ homepage = "https://gmplib.org"
+ url = "https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2"
+
+ version('6.0.0a', 'b7ff2d88cae7f8085bd5006096eed470')
+ version('6.0.0' , '6ef5869ae735db9995619135bd856b84')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/gnutls/package.py b/var/spack/packages/gnutls/package.py
new file mode 100644
index 0000000000..cf57a24a6d
--- /dev/null
+++ b/var/spack/packages/gnutls/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class Gnutls(Package):
+ """GnuTLS is a secure communications library implementing the SSL,
+ TLS and DTLS protocols and technologies around them. It
+ provides a simple C language application programming interface
+ (API) to access the secure communications protocols as well as
+ APIs to parse and write X.509, PKCS #12, OpenPGP and other
+ required structures. It is aimed to be portable and efficient
+ with focus on security and interoperability."""
+
+ homepage = "http://www.gnutls.org"
+ url = "ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.9.tar.xz"
+
+ version('3.3.9', 'ff61b77e39d09f1140ab5a9cf52c58b6')
+
+ depends_on("nettle")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/gperf/package.py b/var/spack/packages/gperf/package.py
new file mode 100644
index 0000000000..32551b67b4
--- /dev/null
+++ b/var/spack/packages/gperf/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Gperf(Package):
+ """GNU gperf is a perfect hash function generator. For a given
+ list of strings, it produces a hash function and hash table, in
+ form of C or C++ code, for looking up a value depending on the
+ input string. The hash function is perfect, which means that the
+ hash table has no collisions, and the hash table lookup needs a
+ single string comparison only."""
+
+ homepage = "https://www.gnu.org/software/gperf/"
+ url = "http://ftp.gnu.org/pub/gnu/gperf/gperf-3.0.4.tar.gz"
+
+ version('3.0.4', 'c1f1db32fb6598d6a93e6e88796a8632')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/gperftools/package.py b/var/spack/packages/gperftools/package.py
new file mode 100644
index 0000000000..8900462324
--- /dev/null
+++ b/var/spack/packages/gperftools/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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 spack import *
+
+class Gperftools(Package):
+ """Google's fast malloc/free implementation, especially for multi-threaded applications.
+ Contains tcmalloc, heap-checker, heap-profiler, and cpu-profiler."""
+ homepage = "https://code.google.com/p/gperftools"
+ url = "https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.3.tar.gz"
+
+ version('2.3', 'f54dd119f0e46ac1f13264f8d97adf90', url="https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.3.tar.gz")
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/gtkplus/package.py b/var/spack/packages/gtkplus/package.py
new file mode 100644
index 0000000000..0ebc7100de
--- /dev/null
+++ b/var/spack/packages/gtkplus/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class Gtkplus(Package):
+ """The GTK+ 2 package contains libraries used for creating graphical user interfaces for applications."""
+ homepage = "http://www.gtk.org"
+
+ version('2.24.25', '612350704dd3aacb95355a4981930c6f',
+ url="http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.25.tar.xz")
+
+ depends_on("atk")
+ depends_on("gdk-pixbuf")
+ depends_on("pango")
+
+ def patch(self):
+ # remove disable deprecated flag.
+ filter_file(r'CFLAGS="-DGDK_PIXBUF_DISABLE_DEPRECATED $CFLAGS"',
+ '', 'configure', string=True)
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/harfbuzz/package.py b/var/spack/packages/harfbuzz/package.py
new file mode 100644
index 0000000000..ed7c42a909
--- /dev/null
+++ b/var/spack/packages/harfbuzz/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class Harfbuzz(Package):
+ """The Harfbuzz package contains an OpenType text shaping engine."""
+ homepage = "http://www.freedesktop.org/wiki/Software/HarfBuzz/"
+ url = "http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.37.tar.bz2"
+
+ version('0.9.37', 'bfe733250e34629a188d82e3b971bc1e')
+
+ depends_on("glib")
+ depends_on("icu")
+ depends_on("freetype")
+
+ def patch(self):
+ change_sed_delimiter('@', ';', 'src/Makefile.in')
+
+ 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 615c2a7fe4..992dd8ec70 100644
--- a/var/spack/packages/hdf5/package.py
+++ b/var/spack/packages/hdf5/package.py
@@ -18,12 +18,14 @@ class Hdf5(Package):
# TODO: currently hard-coded to use OpenMPI
def install(self, spec, prefix):
+
configure(
"--prefix=%s" % prefix,
"--with-zlib=%s" % spec['zlib'].prefix,
"--enable-parallel",
- "CC=%s" % spec['openmpi'].prefix.bin + "/mpicc",
- "CXX=%s" % spec['openmpi'].prefix.bin + "/mpic++")
+ "--enable-shared",
+ "CC=%s" % spec['mpich'].prefix.bin + "/mpicc",
+ "CXX=%s" % spec['mpich'].prefix.bin + "/mpic++")
make()
make("install")
diff --git a/var/spack/packages/icu/package.py b/var/spack/packages/icu/package.py
new file mode 100644
index 0000000000..f256ec5712
--- /dev/null
+++ b/var/spack/packages/icu/package.py
@@ -0,0 +1,25 @@
+from spack import *
+
+class Icu(Package):
+ """The International Components for Unicode (ICU) package is a
+ mature, widely used set of C/C++ libraries providing Unicode and
+ Globalization support for software applications. ICU is widely
+ portable and gives applications the same results on all
+ platforms."""
+ # FIXME: add a proper url for your package's homepage here.
+ homepage = "http://www.example.com"
+ url = "http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.tgz"
+
+ version('54.1', 'e844caed8f2ca24c088505b0d6271bc0')
+
+
+ def url_for_version(self, version):
+ return "http://download.icu-project.org/files/icu4c/%s/icu4c-%s-src.tgz" % (
+ version, str(version).replace('.', '_'))
+
+
+ def install(self, spec, prefix):
+ with working_dir("source"):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/icu4c/package.py b/var/spack/packages/icu4c/package.py
new file mode 100644
index 0000000000..55b44463b2
--- /dev/null
+++ b/var/spack/packages/icu4c/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class Icu4c(Package):
+ """ICU is a mature, widely used set of C/C++ and Java libraries
+ providing Unicode and Globalization support for software applications."""
+
+ homepage = "http://site.icu-project.org/"
+ url = "http://downloads.sourceforge.net/project/icu/ICU4C/54.1/icu4c-54_1-src.tgz"
+
+ version('54_1', 'e844caed8f2ca24c088505b0d6271bc0')
+
+ def install(self, spec, prefix):
+ cd("source")
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/isl/package.py b/var/spack/packages/isl/package.py
new file mode 100644
index 0000000000..836ef3ea40
--- /dev/null
+++ b/var/spack/packages/isl/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class Isl(Package):
+ """isl is a thread-safe C library for manipulating sets and
+ relations of integer points bounded by affine constraints."""
+ homepage = "http://isl.gforge.inria.fr"
+ url = "http://isl.gforge.inria.fr/isl-0.14.tar.bz2"
+
+ version('0.14', 'acd347243fca5609e3df37dba47fd0bb')
+
+ depends_on("gmp")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--with-gmp-prefix=%s" % spec['gmp'].prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/jdk/package.py b/var/spack/packages/jdk/package.py
new file mode 100644
index 0000000000..8f8076dd14
--- /dev/null
+++ b/var/spack/packages/jdk/package.py
@@ -0,0 +1,46 @@
+#------------------------------------------------------------------------------
+# Author: Justin Too <too1@llnl.gov>
+#------------------------------------------------------------------------------
+import distutils
+from distutils import dir_util
+from subprocess import call
+
+import spack
+from spack import *
+import llnl.util.tty as tty
+
+class Jdk(Package):
+ """The Java Development Kit (JDK) released by Oracle Corporation
+ in the form of a binary product aimed at Java developers."""
+ homepage = "http://www.oracle.com/technetwork/java/javase/downloads/index.html"
+
+ version('8u25-linux-x64', 'e145c03a7edc845215092786bcfba77e',
+ url="http://download.oracle.com/otn-pub/java/jdk/8u25-b17/jdk-8u25-linux-x64.tar.gz")
+
+ # Oracle requires that you accept their License Agreement in order
+ # to access the Java packages in download.oracle.com. In order to
+ # automate this process, we need to utilize these additional curl
+ # commandline options.
+ #
+ # See http://stackoverflow.com/questions/10268583/how-to-automate-download-and-installation-of-java-jdk-on-linux
+ curl_options=[
+ '-j', # junk cookies
+ '-H', # specify required License Agreement cookie
+ 'Cookie: oraclelicense=accept-securebackup-cookie']
+
+ def do_fetch(self):
+ # Add our custom curl commandline options
+ tty.msg(
+ "[Jdk] Adding required commandline options to curl " +
+ "before performing fetch: %s" %
+ (self.curl_options))
+
+ for option in self.curl_options:
+ spack.curl.add_default_arg(option)
+
+ # Now perform the actual fetch
+ super(Jdk, self).do_fetch()
+
+
+ def install(self, spec, prefix):
+ distutils.dir_util.copy_tree(".", prefix)
diff --git a/var/spack/packages/jpeg/package.py b/var/spack/packages/jpeg/package.py
index b34fd5cb2d..87820467db 100644
--- a/var/spack/packages/jpeg/package.py
+++ b/var/spack/packages/jpeg/package.py
@@ -5,7 +5,7 @@ class Jpeg(Package):
homepage = "http://www.ijg.org"
url = "http://www.ijg.org/files/jpegsrc.v9a.tar.gz"
- version('9', 'b397211ddfd506b92cd5e02a22ac924d')
+ version('9a', '3353992aecaee1805ef4109aadd433e7')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
diff --git a/var/spack/packages/lcms/package.py b/var/spack/packages/lcms/package.py
new file mode 100644
index 0000000000..a53c2f997a
--- /dev/null
+++ b/var/spack/packages/lcms/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Lcms(Package):
+ """Little cms is a color management library. Implements fast
+ transforms between ICC profiles. It is focused on speed, and is
+ portable across several platforms (MIT license)."""
+ homepage = "http://www.littlecms.com"
+ url = "http://downloads.sourceforge.net/project/lcms/lcms/2.6/lcms2-2.6.tar.gz"
+
+ version('2.6', 'f4c08d38ceade4a664ebff7228910a33')
+
+ depends_on("jpeg")
+ depends_on("libtiff")
+ depends_on("zlib")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libdrm/package.py b/var/spack/packages/libdrm/package.py
new file mode 100644
index 0000000000..00736b7811
--- /dev/null
+++ b/var/spack/packages/libdrm/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Libdrm(Package):
+ """A userspace library for accessing the DRM, direct
+ rendering manager, on Linux, BSD and other operating
+ systems that support the ioctl interface."""
+
+ homepage = "http://dri.freedesktop.org/libdrm/" # no real website...
+ url = "http://dri.freedesktop.org/libdrm/libdrm-2.4.59.tar.gz"
+
+ version('2.4.59', '105ac7af1afcd742d402ca7b4eb168b6')
+ version('2.4.33', '86e4e3debe7087d5404461e0032231c8')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/libdwarf/package.py b/var/spack/packages/libdwarf/package.py
index c4d71ebc01..099a974e93 100644
--- a/var/spack/packages/libdwarf/package.py
+++ b/var/spack/packages/libdwarf/package.py
@@ -53,13 +53,6 @@ class Libdwarf(Package):
parallel = False
- def clean(self):
- for dir in dwarf_dirs:
- with working_dir(dir):
- if os.path.exists('Makefile'):
- make('clean')
-
-
def install(self, spec, prefix):
# dwarf build does not set arguments for ar properly
make.add_default_arg('ARFLAGS=rcs')
diff --git a/var/spack/packages/libffi/package.py b/var/spack/packages/libffi/package.py
new file mode 100644
index 0000000000..2c1c4eed4d
--- /dev/null
+++ b/var/spack/packages/libffi/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Libffi(Package):
+ """The libffi library provides a portable, high level programming
+ interface to various calling conventions. This allows a programmer
+ 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')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libgcrypt/package.py b/var/spack/packages/libgcrypt/package.py
new file mode 100644
index 0000000000..1d0a57f317
--- /dev/null
+++ b/var/spack/packages/libgcrypt/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Libgcrypt(Package):
+ """Libgcrypt is a general purpose cryptographic library based on
+ the code from GnuPG. It provides functions for all cryptographic
+ building blocks: symmetric ciphers, hash algorithms, MACs, public
+ key algorithms, large integer functions, random numbers and a lot
+ of supporting functions. """
+ homepage = "http://www.gnu.org/software/libgcrypt/"
+ url = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.6.2.tar.bz2"
+
+ version('1.6.2', 'b54395a93cb1e57619943c082da09d5f')
+
+ depends_on("libgpg-error")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libgpg-error/package.py b/var/spack/packages/libgpg-error/package.py
new file mode 100644
index 0000000000..6c1d1a10a7
--- /dev/null
+++ b/var/spack/packages/libgpg-error/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class LibgpgError(Package):
+ """Libgpg-error is a small library that defines common error
+ values for all GnuPG components. Among these are GPG, GPGSM,
+ GPGME, GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry,
+ SmartCard Daemon and possibly more in the future. """
+
+ homepage = "https://www.gnupg.org/related_software/libgpg-error"
+ url = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.18.tar.bz2"
+
+ version('1.18', '12312802d2065774b787cbfc22cc04e9')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libjpeg-turbo/package.py b/var/spack/packages/libjpeg-turbo/package.py
new file mode 100644
index 0000000000..07ee183947
--- /dev/null
+++ b/var/spack/packages/libjpeg-turbo/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class LibjpegTurbo(Package):
+ """libjpeg-turbo is a fork of the original IJG libjpeg which uses
+ SIMD to accelerate baseline JPEG compression and
+ decompression. libjpeg is a library that implements JPEG image
+ encoding, decoding and transcoding."""
+ homepage = "http://libjpeg-turbo.virtualgl.org"
+ url = "http://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-1.3.1.tar.gz"
+
+ version('1.3.1', '2c3a68129dac443a72815ff5bb374b05')
+
+ # Can use either of these.
+ depends_on("yasm")
+ depends_on("nasm")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libmng/package.py b/var/spack/packages/libmng/package.py
new file mode 100644
index 0000000000..e5336ea2c2
--- /dev/null
+++ b/var/spack/packages/libmng/package.py
@@ -0,0 +1,23 @@
+from spack import *
+
+class Libmng(Package):
+ """libmng -THE reference library for reading, displaying, writing
+ and examining Multiple-Image Network Graphics. MNG is the animation
+ extension to the popular PNG image-format."""
+ homepage = "http://sourceforge.net/projects/libmng/"
+ url = "http://downloads.sourceforge.net/project/libmng/libmng-devel/2.0.2/libmng-2.0.2.tar.gz"
+
+ version('2.0.2', '1ffefaed4aac98475ee6267422cbca55')
+
+ depends_on("jpeg")
+ depends_on("zlib")
+ depends_on("lcms")
+
+ def patch(self):
+ # jpeg requires stdio to beincluded before its headrs.
+ filter_file(r'^(\#include \<jpeglib\.h\>)', '#include<stdio.h>\n\\1', 'libmng_types.h')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/libmonitor/package.py b/var/spack/packages/libmonitor/package.py
index ed619e4cce..3b95b86ddf 100644
--- a/var/spack/packages/libmonitor/package.py
+++ b/var/spack/packages/libmonitor/package.py
@@ -28,7 +28,7 @@ class Libmonitor(Package):
"""Libmonitor is a library for process and thread control."""
homepage = "http://hpctoolkit.org"
- version('20130218', svn='https://outreach.scidac.gov/svn/libmonitor/trunk', revision=146)
+ version('20130218', svn='http://libmonitor.googlecode.com/svn/trunk/', revision=146)
def install(self, spec, prefix):
configure("--prefix=" + prefix)
diff --git a/var/spack/packages/libpng/package.py b/var/spack/packages/libpng/package.py
index a6d9bf0b46..e02b08663e 100644
--- a/var/spack/packages/libpng/package.py
+++ b/var/spack/packages/libpng/package.py
@@ -3,12 +3,13 @@ from spack import *
class Libpng(Package):
"""libpng graphics file format"""
homepage = "http://www.libpng.org/pub/png/libpng.html"
- url = "http://sourceforge.net/projects/libpng/files/libpng16/1.6.14/libpng-1.6.14.tar.gz/download"
+ url = "http://download.sourceforge.net/libpng/libpng-1.6.16.tar.gz"
+ version('1.6.16', '1a4ad377919ab15b54f6cb6a3ae2622d')
+ version('1.6.15', '829a256f3de9307731d4f52dc071916d')
version('1.6.14', '2101b3de1d5f348925990f9aa8405660')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
-
make()
make("install")
diff --git a/var/spack/packages/libtiff/package.py b/var/spack/packages/libtiff/package.py
index ec54cf7adf..63c6704cb8 100644
--- a/var/spack/packages/libtiff/package.py
+++ b/var/spack/packages/libtiff/package.py
@@ -8,6 +8,8 @@ class Libtiff(Package):
version('4.0.3', '051c1068e6a0627f461948c365290410')
depends_on('jpeg')
+ depends_on('zlib')
+ depends_on('xz')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
diff --git a/var/spack/packages/libxcb/package.py b/var/spack/packages/libxcb/package.py
new file mode 100644
index 0000000000..521cd0d475
--- /dev/null
+++ b/var/spack/packages/libxcb/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Libxcb(Package):
+ """The X protocol C-language Binding (XCB) is a replacement
+ for Xlib featuring a small footprint, latency hiding, direct
+ access to the protocol, improved threading support, and
+ extensibility."""
+
+ homepage = "http://xcb.freedesktop.org/"
+ url = "http://xcb.freedesktop.org/dist/libxcb-1.11.tar.gz"
+
+ version('1.11', '1698dd837d7e6e94d029dbe8b3a82deb')
+
+ depends_on("python")
+ depends_on("xcb-proto")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/libxml2/package.py b/var/spack/packages/libxml2/package.py
new file mode 100644
index 0000000000..72199d8def
--- /dev/null
+++ b/var/spack/packages/libxml2/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Libxml2(Package):
+ """Libxml2 is the XML C parser and toolkit developed for the Gnome
+ project (but usable outside of the Gnome platform), it is free
+ software available under the MIT License."""
+ homepage = "http://xmlsoft.org"
+ url = "http://xmlsoft.org/sources/libxml2-2.9.2.tar.gz"
+
+ version('2.9.2', '9e6a9aca9d155737868b3dc5fd82f788')
+
+ depends_on('zlib')
+ depends_on('xz')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--without-python")
+ make()
+ make("install")
diff --git a/var/spack/packages/libxshmfence/package.py b/var/spack/packages/libxshmfence/package.py
new file mode 100644
index 0000000000..3aa2448b46
--- /dev/null
+++ b/var/spack/packages/libxshmfence/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Libxshmfence(Package):
+ """This is a tiny library that exposes a event API on top of Linux
+ futexes."""
+
+ homepage = "http://keithp.com/blogs/dri3_extension/" # not really...
+ url = "http://xorg.freedesktop.org/archive/individual/lib/libxshmfence-1.2.tar.gz"
+
+ version('1.2', 'f0b30c0fc568b22ec524859ee28556f1')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/libxslt/package.py b/var/spack/packages/libxslt/package.py
new file mode 100644
index 0000000000..f97332d020
--- /dev/null
+++ b/var/spack/packages/libxslt/package.py
@@ -0,0 +1,24 @@
+from spack import *
+
+class Libxslt(Package):
+ """Libxslt is the XSLT C library developed for the GNOME
+ project. XSLT itself is a an XML language to define
+ transformation for XML. Libxslt is based on libxml2 the XML C
+ library developed for the GNOME project. It also implements
+ most of the EXSLT set of processor-portable extensions
+ functions and some of Saxon's evaluate and expressions
+ extensions."""
+ homepage = "http://www.xmlsoft.org/XSLT/index.html"
+ url = "http://xmlsoft.org/sources/libxslt-1.1.28.tar.gz"
+
+ version('1.1.28', '9667bf6f9310b957254fdcf6596600b7')
+
+ depends_on("libxml2")
+ depends_on("xz")
+ depends_on("zlib")
+ depends_on("libgcrypt")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/llvm/package.py b/var/spack/packages/llvm/package.py
index c7a10df55a..9d2be690bb 100644
--- a/var/spack/packages/llvm/package.py
+++ b/var/spack/packages/llvm/package.py
@@ -32,9 +32,13 @@ class Llvm(Package):
it is the full name of the project.
"""
homepage = "http://llvm.org/"
- url = "http://llvm.org/releases/3.4.2/llvm-3.4.2.src.tar.gz"
+ list_url = "http://llvm.org/releases/download.html"
- version('3.4.2', 'a20669f75967440de949ac3b1bad439c')
+ 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')
def install(self, spec, prefix):
env['CXXFLAGS'] = self.compiler.cxx11_flag
diff --git a/var/spack/packages/memaxes/package.py b/var/spack/packages/memaxes/package.py
new file mode 100644
index 0000000000..afa62009a6
--- /dev/null
+++ b/var/spack/packages/memaxes/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class Memaxes(Package):
+ """MemAxes is a visualizer for sampled memory trace data."""
+
+ homepage = "https://github.com/scalability-llnl/MemAxes"
+
+ version('0.5', 'b0f561d48aa7301e028d074bc4b5751b',
+ url='https://github.com/scalability-llnl/MemAxes/archive/v0.5.tar.gz')
+
+ depends_on("cmake@2.8.9:")
+ depends_on("qt@5:")
+ depends_on("vtk")
+
+ 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/mesa/package.py b/var/spack/packages/mesa/package.py
new file mode 100644
index 0000000000..2dba878a77
--- /dev/null
+++ b/var/spack/packages/mesa/package.py
@@ -0,0 +1,33 @@
+from spack import *
+
+class Mesa(Package):
+ """Mesa is an open-source implementation of the OpenGL
+ specification - a system for rendering interactive 3D graphics."""
+
+ homepage = "http://www.mesa3d.org"
+ url = "ftp://ftp.freedesktop.org/pub/mesa/older-versions/8.x/8.0.5/MesaLib-8.0.5.tar.gz"
+ # url = "ftp://ftp.freedesktop.org/pub/mesa/10.4.4/MesaLib-10.4.4.tar.gz"
+
+ # version('10.4.4', '8d863a3c209bf5116b2babfccccc68ce')
+ version('8.0.5', 'cda5d101f43b8784fa60bdeaca4056f2')
+
+ # mesa 7.x, 8.x, 9.x
+ depends_on("libdrm@2.4.33")
+ depends_on("llvm@3.0")
+
+ # patch("llvm-fixes.patch") # using newer llvm
+
+ # mesa 10.x
+ # depends_on("py-mako")
+ # depends_on("flex")
+ # depends_on("bison")
+ # depends_on("dri2proto")
+ # depends_on("libxcb")
+ # depends_on("libxshmfence")
+
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/mpc/package.py b/var/spack/packages/mpc/package.py
new file mode 100644
index 0000000000..6fbfca3007
--- /dev/null
+++ b/var/spack/packages/mpc/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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 spack import *
+
+class Mpc(Package):
+ """Gnu Mpc is a C library for the arithmetic of complex numbers
+ with arbitrarily high precision and correct rounding of the
+ result."""
+ homepage = "http://www.multiprecision.org"
+ url = "ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz"
+
+ version('1.0.2', '68fadff3358fb3e7976c7a398a0af4c3')
+
+ depends_on("gmp")
+ depends_on("mpfr")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/mpfr/package.py b/var/spack/packages/mpfr/package.py
new file mode 100644
index 0000000000..62dac63206
--- /dev/null
+++ b/var/spack/packages/mpfr/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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 spack import *
+
+class Mpfr(Package):
+ """The MPFR library is a C library for multiple-precision
+ floating-point computations with correct rounding."""
+ homepage = "http://www.mpfr.org"
+ url = "http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.bz2"
+
+ version('3.1.2', 'ee2c3ac63bf0c2359bf08fc3ee094c19')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/mpibash/mpibash-4.3.patch b/var/spack/packages/mpibash/mpibash-4.3.patch
new file mode 100644
index 0000000000..17e285b0bf
--- /dev/null
+++ b/var/spack/packages/mpibash/mpibash-4.3.patch
@@ -0,0 +1,1565 @@
+diff -Naur bash-4.3/builtins/circle.def mpibash-4.3/builtins/circle.def
+--- bash-4.3/builtins/circle.def 1969-12-31 17:00:00.000000000 -0700
++++ mpibash-4.3/builtins/circle.def 2014-05-13 11:27:37.314100671 -0600
+@@ -0,0 +1,620 @@
++This file is circle.def, from which is created circle.c.
++It implements all of the "circle_*" builtins in Bash.
++
++$PRODUCES circle.c
++
++#include <config.h>
++
++#include <stdio.h>
++#if defined (HAVE_UNISTD_H)
++# ifdef _MINIX
++# include <sys/types.h>
++# endif
++# include <unistd.h>
++#endif
++
++#include "../bashintl.h"
++#include "../shell.h"
++#include "common.h"
++#include "bashgetopt.h"
++#include <libcircle.h>
++
++extern int running_trap, trap_saved_exit_value;
++
++static int circle_rank; /* Rank in the Libcircle job */
++static SHELL_VAR *create_func = NULL; /* User-defined callback function for CIRCLE_cb_create. */
++static SHELL_VAR *process_func = NULL; /* User-defined callback function for CIRCLE_cb_process. */
++static SHELL_VAR *reduce_init_func = NULL; /* User-defined callback function for CIRCLE_cb_reduce_init. */
++static SHELL_VAR *reduce_fini_func = NULL; /* User-defined callback function for CIRCLE_cb_reduce_fini. */
++static SHELL_VAR *reduce_op_func = NULL; /* User-defined callback function for CIRCLE_cb_reduce_op. */
++static CIRCLE_handle *current_handle = NULL; /* Active handle within a callback or NULL if not within a callback */
++static int within_reduction = 0; /* 1=within a reduction callback; 0=not */
++
++/* Return with a usage message if no arguments remain. */
++#define YES_ARGS(LIST) \
++ if ((LIST) == 0) \
++ { \
++ builtin_usage (); \
++ return (EX_USAGE); \
++ }
++
++/* Perform the same operation as bind_variable, but with VALUE being a
++ * number, not a string. */
++static SHELL_VAR *
++bind_variable_number (name, value, flags)
++ const char *name;
++ long value;
++ int flags;
++{
++ char numstr[25]; /* String version of VALUE */
++
++ sprintf (numstr, "%ld", value);
++ return bind_variable (name, numstr, flags);
++}
++
++/* Invoke the user-defined creation-callback function (create_func). */
++static void
++internal_create_func (handle)
++ CIRCLE_handle *handle;
++{
++ WORD_LIST *funcargs;
++
++ if (create_func == NULL)
++ return;
++ current_handle = handle;
++ funcargs = make_word_list (make_word ("cb_create"), NULL);
++ execute_shell_function (create_func, funcargs);
++ dispose_words (funcargs);
++ current_handle = NULL;
++}
++
++/* Invoke the user-defined process-callback function (process_func). */
++static void
++internal_process_func (handle)
++ CIRCLE_handle *handle;
++{
++ WORD_LIST *funcargs;
++
++ if (process_func == NULL)
++ return;
++ current_handle = handle;
++ funcargs = make_word_list (make_word ("cb_process"), NULL);
++ execute_shell_function (process_func, funcargs);
++ dispose_words (funcargs);
++ current_handle = NULL;
++}
++
++/* Invoke the user-defined reduction-initiation callback function
++ * (reduce_init_func). */
++static void
++internal_reduce_init_func (void)
++{
++ WORD_LIST *funcargs;
++
++ if (reduce_init_func == NULL)
++ return;
++ within_reduction = 1;
++ funcargs = make_word_list (make_word ("cb_reduce_init"), NULL);
++ execute_shell_function (reduce_init_func, funcargs);
++ dispose_words (funcargs);
++ within_reduction = 0;
++}
++
++/* Invoke the user-defined reduction callback function
++ * (reduce_op_func). */
++static void
++internal_reduce_op_func (buf1, size1, buf2, size2)
++ const void* buf1;
++ size_t size1;
++ const void* buf2;
++ size_t size2;
++{
++ WORD_LIST *funcargs;
++
++ if (reduce_op_func == NULL)
++ return;
++ within_reduction = 1;
++ funcargs = make_word_list (make_word (buf2), NULL);
++ funcargs = make_word_list (make_word (buf1), funcargs);
++ funcargs = make_word_list (make_word ("cb_reduce_op"), funcargs);
++ execute_shell_function (reduce_op_func, funcargs);
++ dispose_words (funcargs);
++ within_reduction = 0;
++}
++
++/* Invoke the user-defined reduction-finalization callback function
++ * (reduce_fini_func). */
++static void
++internal_reduce_fini_func (buf, size)
++ const void* buf;
++ size_t size;
++{
++ WORD_LIST *funcargs;
++
++ if (reduce_fini_func == NULL)
++ return;
++ funcargs = make_word_list (make_word (buf), NULL);
++ funcargs = make_word_list (make_word ("cb_reduce_fini"), funcargs);
++ execute_shell_function (reduce_fini_func, funcargs);
++ dispose_words (funcargs);
++}
++
++/* Look up a user-provided callback function. */
++static int
++find_callback_function (list, user_func)
++ WORD_LIST *list;
++ SHELL_VAR **user_func;
++{
++ char *funcname; /* Name of the user-defined function. */
++
++ /* If no argument was provided, nullify the callback function. */
++ if (list == NULL)
++ {
++ *user_func = NULL;
++ return EXECUTION_SUCCESS;
++ }
++
++ /* Get the callback function. */
++ funcname = list->word->word;
++ list = list->next;
++ no_args (list);
++ *user_func = find_function (funcname);
++ if (*user_func == NULL)
++ {
++ builtin_error (_("function %s not found"), funcname);
++ return EXECUTION_FAILURE;
++ }
++ return EXECUTION_SUCCESS;
++}
++
++/* Initialize Libcircle. */
++void
++initialize_libcircle (argc, argv)
++ int argc;
++ char **argv;
++{
++ circle_rank = CIRCLE_init (argc, argv, CIRCLE_DEFAULT_FLAGS);
++ bind_variable_number ("circle_rank", circle_rank, 0);
++ CIRCLE_enable_logging (CIRCLE_LOG_WARN);
++ CIRCLE_cb_create (internal_create_func);
++ CIRCLE_cb_process (internal_process_func);
++ CIRCLE_cb_reduce_init (internal_reduce_init_func);
++ CIRCLE_cb_reduce_op (internal_reduce_op_func);
++ CIRCLE_cb_reduce_fini (internal_reduce_fini_func);
++}
++
++/* Finalize Libcircle. */
++void
++finalize_libcircle (void)
++{
++ CIRCLE_finalize ();
++}
++
++/* ---------------------------------------------------------------------- */
++
++$BUILTIN circle_set_options
++$FUNCTION circle_set_options_builtin
++$SHORT_DOC circle_set_options [flag]...
++Change Libcircle's run-time behavior.
++
++Arguments:
++ FLAG "split_random", "split_equal", or "create_global"
++
++Multiple flags can be provided. If no flags are provided, Libcircle
++reverts to its default options.
++
++Exit Status:
++Returns 0 unless an invalid option is given.
++$END
++/*'*/
++
++/* Here is the circle_set_options builtin. */
++int
++circle_set_options_builtin (list)
++ WORD_LIST *list;
++{
++ char *word; /* One argument */
++ int flags = 0; /* Flags to pass to CIRCLE_set_options */
++
++ if (list == NULL)
++ flags = CIRCLE_DEFAULT_FLAGS;
++ else
++ while (list != NULL)
++ {
++ word = list->word->word;
++ if (!strcmp (word, "split_random"))
++ flags |= CIRCLE_SPLIT_RANDOM;
++ else if (!strcmp (word, "split_equal"))
++ flags |= CIRCLE_SPLIT_EQUAL;
++ else if (!strcmp (word, "create_global"))
++ flags |= CIRCLE_CREATE_GLOBAL;
++ else
++ {
++ builtin_error (_("invalid flag \"%s\""), word);
++ return (EXECUTION_FAILURE);
++ }
++ list = list->next;
++ }
++ CIRCLE_set_options (flags);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_cb_create
++$FUNCTION circle_cb_create_builtin
++$SHORT_DOC circle_cb_create [func]
++Register a function that will create work when asked.
++
++Arguments:
++ FUNC User-defined callback function that will invoke
++ circle_enqueue when called
++
++If FUNC is omitted, no function will be associated with work creation.
++This can be used to nullify a previous circle_cb_create invocation.
++
++Exit Status:
++Returns 0 unless an invalid function is given or an error occurs.
++$END
++
++/* Here is the circle_cb_create builtin. */
++int
++circle_cb_create_builtin (list)
++ WORD_LIST *list;
++{
++ return find_callback_function (list, &create_func);
++}
++
++$BUILTIN circle_cb_process
++$FUNCTION circle_cb_process_builtin
++$SHORT_DOC circle_cb_process [func]
++Register a function that will process work when asked.
++
++Arguments:
++ FUNC User-defined callback function that will invoke
++ circle_enqueue when called
++
++If FUNC is omitted, no function will be associated with work processing.
++This can be used to nullify a previous circle_cb_process invocation.
++
++Exit Status:
++Returns 0 unless an invalid function is given or an error occurs.
++$END
++
++/* Here is the circle_cb_process builtin. */
++int
++circle_cb_process_builtin (list)
++ WORD_LIST *list;
++{
++ return find_callback_function (list, &process_func);
++}
++
++$BUILTIN circle_begin
++$FUNCTION circle_begin_builtin
++$SHORT_DOC circle_begin
++Begin creation and processing of the distributed work queue.
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++
++/* Here is the circle_begin builtin. */
++int
++circle_begin_builtin (list)
++ WORD_LIST *list;
++{
++ no_args (list);
++ CIRCLE_begin ();
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_enqueue
++$FUNCTION circle_enqueue_builtin
++$SHORT_DOC circle_enqueue work
++Enqueue work onto the distributed queue.
++
++Arguments:
++ WORK "Work" as represented by an arbitrary string of limited
++ size (generally around 4KB)
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++
++/* Here is the circle_enqueue builtin. */
++int
++circle_enqueue_builtin (list)
++ WORD_LIST *list;
++{
++ char *work; /* Work to perform */
++
++ /* Extract the work argument. */
++ YES_ARGS (list);
++ work = list->word->word;
++ list = list->next;
++ no_args (list);
++
++ /* Complain if we're not within a proper callback function. */
++ if (current_handle == NULL)
++ {
++ builtin_error (_("not within a Libcircle \"create\" or \"process\" callback function"));
++ return EXECUTION_FAILURE;
++ }
++
++ /* Enqueue the work. */
++ if (current_handle->enqueue (work) == -1)
++ return EXECUTION_FAILURE;
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_dequeue
++$FUNCTION circle_dequeue_builtin
++$SHORT_DOC circle_dequeue var
++Dequeue work from the distributed queue into a variable.
++
++Arguments:
++ VAR Variable in which to receive previously enqueued "work"
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++
++/* Here is the circle_dequeue builtin. */
++int
++circle_dequeue_builtin (list)
++ WORD_LIST *list;
++{
++ char *varname; /* Variable in which to store the work string */
++ char work[CIRCLE_MAX_STRING_LEN+1]; /* Work to perform */
++
++ /* Extract the variable-name argument. */
++ YES_ARGS (list);
++ varname = list->word->word;
++ list = list->next;
++ no_args (list);
++
++ /* Complain if we're not within a callback function. */
++ if (current_handle == NULL)
++ {
++ builtin_error (_("not within a Libcircle callback function"));
++ return EXECUTION_FAILURE;
++ }
++
++ /* Dequeue the work and bind it to the given variable. */
++ if (current_handle->dequeue (work) == -1)
++ return EXECUTION_FAILURE;
++ bind_variable (varname, work, 0);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_enable_logging
++$FUNCTION circle_enable_logging_builtin
++$SHORT_DOC circle_enable_logging log_level
++Change Libcircle's logging verbosity
++
++Arguments:
++ LOG_LEVEL "fatal", "error", "warning", "info", or "debug"
++
++Exit Status:
++Returns 0 unless an invalid option is given.
++$END
++/*'*/
++
++/* Here is the circle_enable_logging builtin. */
++int
++circle_enable_logging_builtin (list)
++ WORD_LIST *list;
++{
++ char *word; /* One argument */
++ CIRCLE_loglevel loglevel; /* Level to set */
++
++ /* Parse the log level. */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (!strcmp (word, "fatal"))
++ loglevel = CIRCLE_LOG_FATAL;
++ else if (!strcmp (word, "error"))
++ loglevel = CIRCLE_LOG_ERR;
++ else if (!strcmp (word, "warning"))
++ loglevel = CIRCLE_LOG_WARN;
++ else if (!strcmp (word, "info"))
++ loglevel = CIRCLE_LOG_INFO;
++ else if (!strcmp (word, "debug"))
++ loglevel = CIRCLE_LOG_DBG;
++ else
++ {
++ builtin_error (_("invalid log level \"%s\""), word);
++ return (EXECUTION_FAILURE);
++ }
++
++ /* Set the log level. */
++ CIRCLE_enable_logging (loglevel);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_abort
++$FUNCTION circle_abort_builtin
++$SHORT_DOC circle_abort
++Terminate queue processing.
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++
++/* Here is the circle_abort builtin. */
++int
++circle_abort_builtin (list)
++ WORD_LIST *list;
++{
++ no_args (list);
++ CIRCLE_abort ();
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_checkpoint
++$FUNCTION circle_checkpoint_builtin
++$SHORT_DOC circle_checkpoint
++Checkpoint a work queue to disk.
++
++Write a file called circle${circle_rank}.txt containing the current
++queue state of rank ${circle_rank}. On a later run, a worker can
++invoke circle_read_restarts to repopulate its queue from such a
++checkpoint file.
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++/*'*/
++
++/* Here is the circle_checkpoint builtin. */
++int
++circle_checkpoint_builtin (list)
++ WORD_LIST *list;
++{
++ no_args (list);
++ CIRCLE_checkpoint ();
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_read_restarts
++$FUNCTION circle_read_restarts_builtin
++$SHORT_DOC circle_read_restarts
++Repopulate a work queue from a disk checkpoint.
++
++Read queue contents from a file called circle${circle_rank}.txt, which
++was previously produced by circle_checkpoint.
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++/*'*/
++
++/* Here is the circle_read_restarts builtin. */
++int
++circle_read_restarts_builtin (list)
++ WORD_LIST *list;
++{
++ no_args (list);
++ CIRCLE_read_restarts ();
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN circle_cb_reduce_init
++$FUNCTION circle_cb_reduce_init_builtin
++$SHORT_DOC circle_cb_reduce_init [func]
++Register a function that will initiate a reduction operation.
++
++Arguments:
++ FUNC User-defined callback function that will invoke
++ circle_reduce when called
++
++FUNC will be invoked on all ranks.
++
++If FUNC is omitted, no function will be associated with reduction
++initialization. This can be used to nullify a previous
++circle_cb_reduce_init invocation.
++
++Exit Status:
++Returns 0 unless an invalid function is given or an error occurs.
++$END
++
++/* Here is the circle_cb_reduce_init builtin. */
++int
++circle_cb_reduce_init_builtin (list)
++ WORD_LIST *list;
++{
++ return find_callback_function (list, &reduce_init_func);
++}
++
++$BUILTIN circle_cb_reduce_op
++$FUNCTION circle_cb_reduce_op_builtin
++$SHORT_DOC circle_cb_reduce_op [func]
++Register a function that will complete a reduction operation.
++
++Arguments:
++ FUNC User-defined callback function that will receive
++ two items to reduce and invoke circle_reduce on
++ the reduced value
++
++If FUNC is omitted, no function will be associated with reduction
++execution. This can be used to nullify a previous circle_cb_reduce_op
++invocation.
++
++Exit Status:
++Returns 0 unless an invalid function is given or an error occurs.
++$END
++
++/* Here is the circle_cb_reduce_op builtin. */
++int
++circle_cb_reduce_op_builtin (list)
++ WORD_LIST *list;
++{
++ return find_callback_function (list, &reduce_op_func);
++}
++
++$BUILTIN circle_cb_reduce_fini
++$FUNCTION circle_cb_reduce_fini_builtin
++$SHORT_DOC circle_cb_reduce_fini [func]
++Register a function that will complete a reduction operation.
++
++Arguments:
++ FUNC User-defined callback function that will receive
++ the final reduced data
++
++If FUNC is omitted, no function will be associated with reduction
++completion. This can be used to nullify a previous
++circle_cb_reduce_fini invocation.
++
++Libcircle guarantees that FUNC will be invoked only on rank 0.
++
++Exit Status:
++Returns 0 unless an invalid function is given or an error occurs.
++$END
++
++/* Here is the circle_cb_reduce_fini builtin. */
++int
++circle_cb_reduce_fini_builtin (list)
++ WORD_LIST *list;
++{
++ return find_callback_function (list, &reduce_fini_func);
++}
++
++$BUILTIN circle_reduce
++$FUNCTION circle_reduce_builtin
++$SHORT_DOC circle_reduce work
++Seed the next phase of a reduction operation
++
++Arguments:
++ WORK "Work" as represented by an arbitrary string of limited
++ size (generally around 4KB)
++
++This function should be called both by the callback function
++registered with circle_reduce_init and the callback function
++registered with circle_reduce_op.
++
++Exit Status:
++Returns 0 unless an error occurs.
++$END
++
++/* Here is the circle_reduce builtin. */
++int
++circle_reduce_builtin (list)
++ WORD_LIST *list;
++{
++ char *work; /* Work to perform */
++
++ /* Extract the work argument. */
++ YES_ARGS (list);
++ work = list->word->word;
++ list = list->next;
++ no_args (list);
++
++ /* Complain if we're not within a proper callback function. */
++ if (!within_reduction)
++ {
++ builtin_error (_("not within a Libcircle \"reduce_init\" or \"reduce_op\" callback function"));
++ return EXECUTION_FAILURE;
++ }
++
++ /* Reduce the work. */
++ CIRCLE_reduce (work, strlen (work));
++ return EXECUTION_SUCCESS;
++}
+diff -Naur bash-4.3/builtins/Makefile.in mpibash-4.3/builtins/Makefile.in
+--- bash-4.3/builtins/Makefile.in 2012-05-25 07:29:19.000000000 -0600
++++ mpibash-4.3/builtins/Makefile.in 2014-05-13 11:27:37.314100671 -0600
+@@ -141,7 +141,9 @@
+ $(srcdir)/times.def $(srcdir)/trap.def $(srcdir)/type.def \
+ $(srcdir)/ulimit.def $(srcdir)/umask.def $(srcdir)/wait.def \
+ $(srcdir)/reserved.def $(srcdir)/pushd.def $(srcdir)/shopt.def \
+- $(srcdir)/printf.def $(srcdir)/complete.def $(srcdir)/mapfile.def
++ $(srcdir)/printf.def $(srcdir)/complete.def $(srcdir)/mapfile.def \
++ $(srcdir)/mpi.def \
++@CIRCLE@ $(srcdir)/circle.def
+
+ STATIC_SOURCE = common.c evalstring.c evalfile.c getopt.c bashgetopt.c \
+ getopt.h
+@@ -153,7 +155,9 @@
+ jobs.o kill.o let.o mapfile.o \
+ pushd.o read.o return.o set.o setattr.o shift.o source.o \
+ suspend.o test.o times.o trap.o type.o ulimit.o umask.o \
+- wait.o getopts.o shopt.o printf.o getopt.o bashgetopt.o complete.o
++ wait.o getopts.o shopt.o printf.o getopt.o bashgetopt.o complete.o \
++ mpi.o \
++@CIRCLE@ circle.o
+
+ CREATED_FILES = builtext.h builtins.c psize.aux pipesize.h tmpbuiltins.c \
+ tmpbuiltins.h
+@@ -317,6 +321,8 @@
+ getopts.o: getopts.def
+ reserved.o: reserved.def
+ complete.o: complete.def
++@CIRCLE@ circle.o: circle.def
++mpi.o: mpi.def
+
+ # C files
+ bashgetopt.o: ../config.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
+@@ -644,6 +650,19 @@
+ mapfile.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
+ mapfile.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/variables.h $(topdir)/conftypes.h
+ mapfile.o: $(topdir)/arrayfunc.h ../pathnames.h
++@CIRCLE@ circle.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
++@CIRCLE@ circle.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/subst.h $(topdir)/externs.h
++@CIRCLE@ circle.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
++@CIRCLE@ circle.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
++@CIRCLE@ circle.o: $(BASHINCDIR)/maxpath.h ../pathnames.h
++mpi.o: ../config.h ../config-top.h ../config-bot.h ../bashintl.h
++mpi.o: ../include/gettext.h ../shell.h ../config.h ../bashjmp.h
++mpi.o: ../include/posixjmp.h ../command.h ../syntax.h ../general.h
++mpi.o: ../bashtypes.h ../include/chartypes.h ../xmalloc.h ../bashansi.h
++mpi.o: ../error.h ../variables.h ../array.h ../assoc.h ../hashlib.h
++mpi.o: ../conftypes.h ../arrayfunc.h ../quit.h ../sig.h ../include/maxpath.h
++mpi.o: ../unwind_prot.h ../dispose_cmd.h ../make_cmd.h ../include/ocache.h
++mpi.o: ../subst.h ../pathnames.h ../externs.h common.h bashgetopt.h
+
+ #bind.o: $(RL_LIBSRC)chardefs.h $(RL_LIBSRC)readline.h $(RL_LIBSRC)keymaps.h
+
+diff -Naur bash-4.3/builtins/mpi.def mpibash-4.3/builtins/mpi.def
+--- bash-4.3/builtins/mpi.def 1969-12-31 17:00:00.000000000 -0700
++++ mpibash-4.3/builtins/mpi.def 2014-05-13 11:27:37.314100671 -0600
+@@ -0,0 +1,744 @@
++This file is mpi.def, from which is created mpi.c.
++It implements all of the "mpi_*" builtins in Bash.
++
++$PRODUCES mpi.c
++
++#include <config.h>
++
++#include <stdio.h>
++#if defined (HAVE_UNISTD_H)
++# ifdef _MINIX
++# include <sys/types.h>
++# endif
++# include <unistd.h>
++#endif
++
++#include "../bashintl.h"
++#include "../shell.h"
++#include "common.h"
++#include "bashgetopt.h"
++#include <mpi.h>
++
++extern int running_trap, trap_saved_exit_value;
++
++/* Keep track of who we are within MPI_COMM_WORLD. */
++static int mpi_rank;
++static int mpi_num_ranks;
++
++/* Try an MPI operation. Return with an error message on failure. */
++#define MPI_TRY(STMT) \
++ do \
++ { \
++ int mpierr; \
++ mpierr = STMT; \
++ if (mpierr != MPI_SUCCESS) \
++ return report_mpi_error (mpierr); \
++ } \
++ while (0)
++
++/* Return with a usage message if no arguments remain. */
++#define YES_ARGS(LIST) \
++ if ((LIST) == 0) \
++ { \
++ builtin_usage (); \
++ return (EX_USAGE); \
++ }
++
++/* Return with an error message if a given variable is read-only or if
++ * we can't write to it for any other reason (e.g., it's defined as a
++ * function). */
++#define REQUIRE_WRITABLE(NAME) \
++ do \
++ { \
++ SHELL_VAR *bindvar = find_shell_variable (NAME); \
++ if (bindvar) \
++ { \
++ if (readonly_p (bindvar)) \
++ { \
++ err_readonly (NAME); \
++ return (EXECUTION_FAILURE); \
++ } \
++ if (unbind_variable (NAME) == -1) \
++ { \
++ builtin_error ("Failed to write to variable %s", NAME); \
++ return (EXECUTION_FAILURE); \
++ } \
++ } \
++ } \
++ while (0)
++
++/* Initialize MPI. */
++void
++initialize_mpi (argc, argv)
++ int argc;
++ char **argv;
++{
++ int init_done;
++
++ MPI_Initialized (&init_done);
++ if (!init_done)
++ MPI_Init (&argc, &argv);
++ MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_RETURN);
++ MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank);
++ MPI_Comm_size (MPI_COMM_WORLD, &mpi_num_ranks);
++}
++
++/* Finalize MPI. */
++void
++finalize_mpi ()
++{
++ MPI_Finalize ();
++}
++
++/* Parse an operation name into an MPI_Op. Return 1 on success, 0 on
++ * failure. */
++static int
++parse_operation (char *name, MPI_Op *op)
++{
++ /* Define a mapping from operator names to MPI_Op values. */
++ typedef struct {
++ char *name; /* Operation name (e.g., "sum") */
++ MPI_Op value; /* Operation value (e.g., MPI_SUM) */
++ } opname2value_t;
++ static opname2value_t oplist[] = {
++ {"max", MPI_MAX},
++ {"min", MPI_MIN},
++ {"sum", MPI_SUM},
++ {"prod", MPI_PROD},
++ {"land", MPI_LAND},
++ {"band", MPI_BAND},
++ {"lor", MPI_LOR},
++ {"bor", MPI_BOR},
++ {"lxor", MPI_LXOR},
++ {"bxor", MPI_BXOR},
++ {"maxloc", MPI_MAXLOC},
++ {"minloc", MPI_MINLOC}
++ };
++ size_t i;
++
++ for (i = 0; i < sizeof(oplist)/sizeof(opname2value_t); i++)
++ if (!strcmp(name, oplist[i].name))
++ {
++ *op = oplist[i].value;
++ if (i > 0)
++ {
++ /* As a performance optimization, bubble up the value we
++ * just found. */
++ opname2value_t prev = oplist[i - 1];
++ oplist[i - 1] = oplist[i];
++ oplist[i] = prev;
++ }
++ return 1;
++ }
++ return 0;
++}
++
++/* Report an error to the user and return EXECUTION_FAILURE. */
++static int
++report_mpi_error (mpierr)
++ int mpierr;
++{
++ char errstr[MPI_MAX_ERROR_STRING];
++ int errstrlen;
++
++ MPI_Error_string (mpierr, errstr, &errstrlen);
++ builtin_error ("%s", errstr);
++ return EXECUTION_FAILURE;
++}
++
++/* Perform the same operation as bind_variable, but with VALUE being a
++ * number, not a string. */
++static SHELL_VAR *
++bind_variable_number (name, value, flags)
++ const char *name;
++ long value;
++ int flags;
++{
++ char numstr[25]; /* String version of VALUE */
++
++ sprintf (numstr, "%ld", value);
++ return bind_variable (name, numstr, flags);
++}
++
++/* Perform the same operation as bind_array_variable, but with VALUE
++ * being a number, not a string. */
++static SHELL_VAR *
++bind_array_variable_number (name, ind, value, flags)
++ char *name;
++ arrayind_t ind;
++ long value;
++ int flags;
++{
++ char numstr[25]; /* String version of VALUE */
++
++ sprintf (numstr, "%ld", value);
++ return bind_array_variable (name, ind, numstr, flags);
++}
++
++/* Define a reduction-type function (allreduce, scan, exscan, etc.). */
++typedef int (*reduction_func_t)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm);
++
++/* Perform any reduction-type operation (allreduce, scan, exscan, etc.). */
++static int
++reduction_like (list, funcname, func)
++ WORD_LIST *list;
++ char *funcname;
++ reduction_func_t func;
++{
++ char *word; /* One argument */
++ struct {
++ long int value; /* Reduced value */
++ int rank; /* Rank associated with the above */
++ } number, result;
++ MPI_Op operation = MPI_SUM; /* Operation to perform */
++ char *varname; /* Name of the variable to bind the results to */
++ intmax_t n;
++ int i;
++
++ /* Parse "-O OPERATION" (optional), where OPERATION is a reduction
++ * operation. */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (ISOPTION (word, 'O'))
++ {
++ list = list->next;
++ if (list == 0)
++ {
++ sh_needarg (funcname);
++ return (EX_USAGE);
++ }
++ word = list->word->word;
++ if (!parse_operation (word, &operation))
++ {
++ sh_invalidopt ("-O");
++ return (EX_USAGE);
++ }
++ list = list->next;
++ }
++
++ /* Parse the argument, which must be a number. */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (!legal_number (word, &n))
++ {
++ sh_neednumarg (funcname);
++ return (EX_USAGE);
++ }
++ number.value = (long int) n;
++ number.rank = mpi_rank;
++ list = list->next;
++
++ /* Parse the target variable, which must not be read-only. */
++ YES_ARGS (list);
++ varname = list->word->word;
++ if (mpi_rank != 0 || func != MPI_Exscan)
++ REQUIRE_WRITABLE (varname);
++ list = list->next;
++ no_args (list);
++
++ /* Perform the reduction operation. Bind the given array variable
++ * to the result and, for minloc/maxloc, the associated rank. */
++ if (mpi_rank != 0 || func != MPI_Exscan) {
++ bind_array_variable (varname, 0, "", 0);
++ bind_array_variable (varname, 1, "", 0);
++ }
++ if (operation == MPI_MINLOC || operation == MPI_MAXLOC)
++ {
++ MPI_TRY (func (&number, &result, 1, MPI_LONG_INT, operation, MPI_COMM_WORLD));
++ if (mpi_rank != 0 || func != MPI_Exscan)
++ bind_array_variable_number (varname, 1, result.rank, 0);
++ }
++ else
++ MPI_TRY (func (&number.value, &result.value, 1, MPI_LONG, operation, MPI_COMM_WORLD));
++ if (mpi_rank != 0 || func != MPI_Exscan)
++ bind_array_variable_number (varname, 0, result.value, 0);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_comm_rank
++$FUNCTION mpi_comm_rank_builtin
++$SHORT_DOC mpi_comm_rank name
++Return the process's rank in the MPI job.
++
++Arguments:
++ NAME Scalar variable in which to receive the rank
++
++Exit Status:
++Returns 0 unless an invalid option is given.
++$END
++/*'*/
++
++/* Here is the mpi_comm_rank builtin. */
++int
++mpi_comm_rank_builtin (list)
++ WORD_LIST *list;
++{
++ char *varname; /* Name of the variable to bind the results to */
++
++ YES_ARGS (list);
++ varname = list->word->word;
++ REQUIRE_WRITABLE (varname);
++ list = list->next;
++ no_args (list);
++ bind_variable_number (varname, mpi_rank, 0);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_comm_size
++$FUNCTION mpi_comm_size_builtin
++$SHORT_DOC mpi_comm_size name
++Return the total number of ranks in the MPI job.
++
++Arguments:
++ NAME Scalar variable in which to receive the number of ranks
++
++Exit Status:
++Returns 0 unless an invalid option is given.
++$END
++
++/* Here is the mpi_comm_size builtin. */
++int
++mpi_comm_size_builtin (list)
++ WORD_LIST *list;
++{
++ char *varname; /* Name of the variable to bind the results to */
++
++ YES_ARGS (list);
++ varname = list->word->word;
++ REQUIRE_WRITABLE (varname);
++ list = list->next;
++ no_args (list);
++ bind_variable_number (varname, mpi_num_ranks, 0);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_abort
++$FUNCTION mpi_abort_builtin
++$SHORT_DOC mpi_abort [n]
++Abort all processes in the MPI job and exit the shell.
++
++Exits not only the caller's shell (with a status of N) but also all
++remote shells that are part of the same MPI job. If N is omitted, the
++exit status is that of the last command executed.
++
++This command should be used only in extreme circumstances. It is
++better for each process to exit normally on its own.
++$END
++/*'*/
++
++/* Here is the mpi_abort builtin. */
++int
++mpi_abort_builtin (list)
++ WORD_LIST *list;
++{
++ int exit_value;
++
++ exit_value = (running_trap == 1 && list == 0) ? trap_saved_exit_value : get_exitstat (list); /* Copied from exit.def */
++ MPI_TRY (MPI_Abort (MPI_COMM_WORLD, exit_value));
++ return EXECUTION_FAILURE;
++}
++
++$BUILTIN mpi_send
++$FUNCTION mpi_send_builtin
++$SHORT_DOC mpi_send [-t tag] rank message
++Send a message to a remote process in the same MPI job.
++
++Options:
++ -t TAG Send the message using tag TAG (default: 0). TAG must
++ be a nonnegative integer.
++
++Arguments:
++ RANK Whom to send the message to. RANK must be an integer in
++ the range [0, $(mpi_comm_size)-1].
++
++ MESSAGE String to send to rank RANK.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_send builtin. */
++int
++mpi_send_builtin (list)
++ WORD_LIST *list;
++{
++ char *word; /* One argument */
++ intmax_t target_rank; /* MPI target rank */
++ char *message; /* Message to send to rank target_rank */
++ intmax_t tag = 0; /* Message tag to use */
++
++ /* Parse "-t TAG" (optional), where TAG is a number or "any". */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (ISOPTION (word, 't'))
++ {
++ list = list->next;
++ if (list == 0)
++ {
++ sh_needarg ("mpi_recv");
++ return (EX_USAGE);
++ }
++ word = list->word->word;
++ if (!legal_number (word, &tag))
++ {
++ sh_neednumarg ("-t");
++ return (EX_USAGE);
++ }
++ list = list->next;
++ }
++ else if (*word == '-')
++ {
++ sh_invalidopt (word);
++ builtin_usage ();
++ return (EX_USAGE);
++ }
++
++ /* Parse the target rank, which must be a number. */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (!legal_number (word, &target_rank))
++ {
++ builtin_error (_("mpi_send: numeric rank required"));
++ return (EX_USAGE);
++ }
++ list = list->next;
++
++ /* Parse the message to send. */
++ YES_ARGS (list);
++ message = list->word->word;
++ list = list->next;
++ no_args (list);
++
++ /* Send the message. */
++ MPI_TRY (MPI_Send (message, strlen(message)+1, MPI_BYTE, (int)target_rank, (int)tag, MPI_COMM_WORLD));
++ return EXECUTION_SUCCESS;
++}
++
++
++$BUILTIN mpi_recv
++$FUNCTION mpi_recv_builtin
++$SHORT_DOC mpi_recv [-t tag] rank name
++Receive a message from a remote process in the same MPI job.
++
++Options:
++ -t TAG Receive only messages sent using tag TAG (default: 0).
++ TAG must be either a nonnegative integer or the string
++ "any" to receive messages sent using any tag.
++
++Arguments:
++ RANK Receive only messages sent from sender RANK. RANK
++ must either be in the range [0, $(mpi_comm_size)-1] or
++ be the string "any" to receive messages from any sender.
++
++ NAME Array variable in which to receive the message, sender
++ rank, and tag.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_recv builtin. */
++int
++mpi_recv_builtin (list)
++ WORD_LIST *list;
++{
++ char *word; /* One argument */
++ intmax_t source_rank; /* MPI source rank */
++ char *endptr; /* Used for parsing strings into numbers */
++ MPI_Status status; /* Status of an MPI operation */
++ int count; /* Message length in bytes */
++ intmax_t tag = 0; /* Message tag to use */
++ char *varname; /* Name of the variable to bind the results to */
++ static char *message = NULL; /* Message received from MPI */
++ static size_t alloced = 0; /* Number of bytes allocated for the above */
++ int opt; /* Parsed option */
++
++ /* Parse any options provided. */
++ reset_internal_getopt ();
++ while ((opt = internal_getopt (list, "t:")) != -1)
++ {
++ switch (opt)
++ {
++ case 't':
++ if (!strcmp (list_optarg, "any"))
++ tag = MPI_ANY_TAG;
++ else if (!legal_number (list_optarg, &tag))
++ {
++ builtin_error (_("-t: numeric argument or \"any\" required"));
++ return (EX_USAGE);
++ }
++ break;
++
++ default:
++ sh_invalidopt (word);
++ builtin_usage ();
++ return (EX_USAGE);
++ }
++ }
++ list = loptend;
++
++ /* Parse the source rank, which must be a number or "any". */
++ YES_ARGS (list);
++ word = list->word->word;
++ if (!legal_number (word, &source_rank))
++ {
++ if (!strcmp (word, "any"))
++ source_rank = MPI_ANY_SOURCE;
++ else
++ {
++ builtin_error (_("mpi_recv: numeric rank or \"any\" required"));
++ return (EX_USAGE);
++ }
++ }
++ list = list->next;
++
++ /* Parse the target variable, which must not be read-only. */
++ YES_ARGS (list);
++ varname = list->word->word;
++ REQUIRE_WRITABLE (varname);
++ list = list->next;
++ no_args (list);
++
++ /* Receive a message. Because we don't know long the message will
++ * be, we first probe to get the length. */
++ MPI_TRY (MPI_Probe ((int)source_rank, (int)tag, MPI_COMM_WORLD, &status));
++ MPI_TRY (MPI_Get_count (&status, MPI_BYTE, &count));
++ if (alloced < count)
++ {
++ message = xrealloc (message, count);
++ alloced = count;
++ }
++ MPI_TRY (MPI_Recv (message, count, MPI_BYTE, status.MPI_SOURCE, status.MPI_TAG, MPI_COMM_WORLD, &status));
++ bind_array_variable (varname, 0, message, 0);
++ bind_array_variable_number (varname, 1, status.MPI_SOURCE, 0);
++ bind_array_variable_number (varname, 2, status.MPI_TAG, 0);
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_barrier
++$FUNCTION mpi_barrier_builtin
++$SHORT_DOC mpi_barrier
++Synchronizes all of the processes in the MPI job.
++
++No process will return from mpi_barrier until all processes have
++called mpi_barrier.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_barrier builtin. */
++int
++mpi_barrier_builtin (list)
++ WORD_LIST *list;
++{
++ no_args (list);
++ MPI_TRY (MPI_Barrier (MPI_COMM_WORLD));
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_bcast
++$FUNCTION mpi_bcast_builtin
++$SHORT_DOC mpi_bcast [message] name
++Broadcast a message to all processes in the same MPI job.
++
++Arguments:
++ MESSAGE String to broadcast from one process to all the others.
++
++ NAME Scalar variable in which to receive the broadcast message.
++
++Exactly one process in the MPI job must specify a message to
++broadcast. No process will return from mpi_bcast until all processes
++have called mpi_bcast.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_bcast builtin. */
++int
++mpi_bcast_builtin (list)
++ WORD_LIST *list;
++{
++ char *word; /* One argument */
++ int root; /* MPI root rank */
++ char *root_message; /* Message to broadcast */
++ int msglen; /* Length in bytes of the above (including the NULL byte) */
++ char *varname; /* Name of the variable to bind the results to */
++ static int *all_lengths = NULL; /* List of every rank's msglen */
++ static char *message = NULL; /* Message received from the root */
++ static int alloced = 0; /* Bytes allocated for the above */
++ int i;
++
++ /* Parse the optional message and target variable, which must not be
++ * read-only. */
++ YES_ARGS (list);
++ if (list->next == NULL)
++ {
++ /* Non-root */
++ root_message = NULL;
++ msglen = -1;
++ }
++ else
++ {
++ /* Root */
++ root_message = list->word->word;
++ msglen = (int) strlen(root_message) + 1;
++ list = list->next;
++ }
++ varname = list->word->word;
++ REQUIRE_WRITABLE (varname);
++ list = list->next;
++ no_args (list);
++
++ /* Acquire global agreement on the root and the message size. */
++ if (all_lengths == NULL)
++ all_lengths = xmalloc (mpi_num_ranks*sizeof(int));
++ MPI_TRY (MPI_Allgather (&msglen, 1, MPI_INT, all_lengths, 1, MPI_INT, MPI_COMM_WORLD));
++ root = -1;
++ for (i = 0; i < mpi_num_ranks; i++)
++ {
++ if (all_lengths[i] == -1)
++ continue;
++ if (root != -1)
++ {
++ builtin_error (_("mpi_bcast: more than one process specified a message"));
++ return (EXECUTION_FAILURE);
++ }
++ root = i;
++ msglen = all_lengths[i];
++ }
++ if (root == -1)
++ {
++ builtin_error (_("mpi_bcast: no process specified a message"));
++ return (EXECUTION_FAILURE);
++ }
++
++ /* Broadcast the message. */
++ if (mpi_rank == root)
++ {
++ MPI_TRY (MPI_Bcast (root_message, msglen, MPI_BYTE, root, MPI_COMM_WORLD));
++ bind_variable (varname, root_message, 0);
++ }
++ else
++ {
++ if (alloced < msglen)
++ {
++ message = xrealloc (message, msglen);
++ alloced = msglen;
++ }
++ MPI_TRY (MPI_Bcast (message, msglen, MPI_BYTE, root, MPI_COMM_WORLD));
++ bind_variable (varname, message, 0);
++ }
++ return EXECUTION_SUCCESS;
++}
++
++$BUILTIN mpi_scan
++$FUNCTION mpi_scan_builtin
++$SHORT_DOC mpi_scan number name
++Perform an inclusive scan across all processes in the same MPI job.
++
++ -O OPERATION Operation to perform. Must be one of "max", "min",
++ "sum", "prod", "land", "band", "lor", "bor", "lxor",
++ "bxor", "maxloc", or "minloc" (default: "sum").
++
++Arguments:
++ NUMBER Integer to use in the scan operation.
++
++ NAME Array variable in which to receive the result and, in
++ the case of maxloc and minloc, the associated rank.
++
++In an inclusive-scan operation, each process i presents a number,
++a[i]. Once all processes in the MPI job have presented their number,
++the command returns a[0] to rank 0, a[0]+a[1] to rank 1,
++a[0]+a[1]+a[2] to rank 2, and so forth. The -O option enables "+" to
++be replaced with other operations.
++
++Inclusive scans can be useful for assigning a unique index to each
++process in the MPI job.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_scan builtin. */
++int
++mpi_scan_builtin (list)
++ WORD_LIST *list;
++{
++ return reduction_like (list, "mpi_scan", MPI_Scan);
++}
++
++$BUILTIN mpi_exscan
++$FUNCTION mpi_exscan_builtin
++$SHORT_DOC mpi_exscan number name
++Perform an exclusive scan across all processes in the same MPI job.
++
++ -O OPERATION Operation to perform. Must be one of "max", "min",
++ "sum", "prod", "land", "band", "lor", "bor", "lxor",
++ "bxor", "maxloc", or "minloc" (default: "sum").
++
++Arguments:
++ NUMBER Integer to use in the scan operation.
++
++ NAME Array variable in which to receive the result and, in
++ the case of maxloc and minloc, the associated rank.
++
++In a exclusive-scan operation, each process i presents a number, a[i].
++Once all processes in the MPI job have presented their number, the
++command assigns a[0] to NAME on rank 1, a[0]+a[1] to NAME on rank 2,
++a[0]+a[1]+a[2] to NAME on rank 3, and so forth. No assignment is
++performed on rank 0. The -O option enables "+" to be replaced with
++other operations.
++
++Exclusive scans can be useful for assigning a unique index to each
++process in the MPI job.
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_exscan builtin. */
++int
++mpi_exscan_builtin (list)
++ WORD_LIST *list;
++{
++ return reduction_like (list, "mpi_exscan", MPI_Exscan);
++}
++
++$BUILTIN mpi_allreduce
++$FUNCTION mpi_allreduce_builtin
++$SHORT_DOC mpi_allreduce number name
++Reduce numbers from all processes in an MPI job to a single number.
++
++Options:
++
++ -O OPERATION Operation to perform. Must be one of "max", "min",
++ "sum", "prod", "land", "band", "lor", "bor", "lxor",
++ "bxor", "maxloc", or "minloc" (default: "sum").
++
++Arguments:
++ NUMBER Integer to use in the allreduce operation.
++
++ NAME Array variable in which to receive the result and, in
++ the case of maxloc and minloc, the associated rank.
++
++In an all-reduce operation, each process i presents a number, a[i].
++Once all processes in the MPI job have presented their number, the
++command returns a[0]+a[1]+...+a[n-1] to all ranks. The -O option
++enables "+" to be replaced with other operations.
++
++All-reduces can be useful for reaching global agreement (e.g., of a
++termination condition).
++
++Exit Status:
++Returns 0 unless an invalid option is given or an error occurs.
++$END
++
++/* Here is the mpi_allreduce builtin. */
++int
++mpi_allreduce_builtin (list)
++ WORD_LIST *list;
++{
++ return reduction_like (list, "mpi_allreduce", MPI_Allreduce);
++}
+diff -Naur bash-4.3/config.h.in mpibash-4.3/config.h.in
+--- bash-4.3/config.h.in 2013-06-29 15:35:33.000000000 -0600
++++ mpibash-4.3/config.h.in 2014-05-13 11:27:37.314100671 -0600
+@@ -1147,6 +1147,12 @@
+ /* Define if you have the `__argz_stringify' function. */
+ #undef HAVE___ARGZ_STRINGIFY
+
++/* Define if you have both the <libcircle.h> header file and the libcircle library. */
++#undef HAVE_LIBCIRCLE
++
++/* Define if you have the `CIRCLE_cb_reduce_op' function. */
++#undef HAVE_CIRCLE_CB_REDUCE_OP
++
+ /* End additions for lib/intl */
+
+ #include "config-bot.h"
+diff -Naur bash-4.3/configure.ac mpibash-4.3/configure.ac
+--- bash-4.3/configure.ac 2014-02-11 08:37:53.000000000 -0700
++++ mpibash-4.3/configure.ac 2014-05-13 11:27:37.302100179 -0600
+@@ -24,7 +24,7 @@
+ AC_REVISION([for Bash 4.3, version 4.063])dnl
+
+ define(bashvers, 4.3)
+-define(relstatus, release)
++define(relstatus, MPI)
+
+ AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org])
+
+@@ -813,6 +813,21 @@
+ fi
+ ])
+
++dnl Ensure that we can find an MPI library.
++AC_CHECK_FUNCS([MPI_Init], [], [
++ AC_MSG_ERROR([Cannot continue without MPI. Consider specifying CC=mpicc.])])
++
++dnl If we have Libcircle, use it, too.
++AC_SEARCH_LIBS([CIRCLE_cb_create], [circle], [AC_CHECK_HEADERS([libcircle.h])])
++if test "x$ac_cv_header_libcircle_h" = xyes; then
++ libcircle_make_prefix=""
++ AC_DEFINE([HAVE_LIBCIRCLE], [1], [Define if you have the Libcircle header and library.])
++ AC_CHECK_FUNCS([CIRCLE_cb_reduce_op])
++else
++ libcircle_make_prefix="#"
++fi
++AC_SUBST([CIRCLE], [$libcircle_make_prefix])
++
+ BASH_CHECK_DECL(strtoimax)
+ BASH_CHECK_DECL(strtol)
+ BASH_CHECK_DECL(strtoll)
+diff -Naur bash-4.3/Makefile.in mpibash-4.3/Makefile.in
+--- bash-4.3/Makefile.in 2014-01-25 14:27:30.000000000 -0700
++++ mpibash-4.3/Makefile.in 2014-05-13 11:27:37.314100671 -0600
+@@ -104,7 +104,7 @@
+ VERSPROG = bashversion$(EXEEXT)
+ VERSOBJ = bashversion.$(OBJEXT)
+
+-Program = bash$(EXEEXT)
++Program = mpibash$(EXEEXT)
+ Version = @BASHVERS@
+ PatchLevel = `$(BUILD_DIR)/$(VERSPROG) -p`
+ RELSTATUS = @RELSTATUS@
+diff -Naur bash-4.3/shell.c mpibash-4.3/shell.c
+--- bash-4.3/shell.c 2014-01-14 06:04:32.000000000 -0700
++++ mpibash-4.3/shell.c 2014-05-13 11:27:37.314100671 -0600
+@@ -107,6 +107,13 @@
+ extern char *primary_prompt, *secondary_prompt;
+ extern char *this_command_name;
+
++extern void initialize_mpi __P((int, char **));
++extern void finalize_mpi __P((void));
++#ifdef HAVE_LIBCIRCLE
++extern void initialize_libcircle __P((int, char **));
++extern void finalize_libcircle __P((void));
++#endif
++
+ /* Non-zero means that this shell has already been run; i.e. you should
+ call shell_reinitialize () if you need to start afresh. */
+ int shell_initialized = 0;
+@@ -324,7 +331,7 @@
+ static void init_interactive_script __P((void));
+
+ static void set_shell_name __P((char *));
+-static void shell_initialize __P((void));
++static void shell_initialize __P((int, char **));
+ static void shell_reinitialize __P((void));
+
+ static void show_shell_usage __P((FILE *, int));
+@@ -561,7 +568,7 @@
+
+ /* From here on in, the shell must be a normal functioning shell.
+ Variables from the environment are expected to be set, etc. */
+- shell_initialize ();
++ shell_initialize (argc, argv);
+
+ set_default_lang ();
+ set_default_locale_vars ();
+@@ -941,6 +948,12 @@
+ end_job_control ();
+ #endif /* JOB_CONTROL */
+
++#ifdef HAVE_LIBCIRCLE
++ finalize_libcircle ();
++#else
++ finalize_mpi ();
++#endif
++
+ /* Always return the exit status of the last command to our parent. */
+ sh_exit (s);
+ }
+@@ -1691,7 +1704,9 @@
+ /* Do whatever is necessary to initialize the shell.
+ Put new initializations in here. */
+ static void
+-shell_initialize ()
++shell_initialize (argc, argv)
++ int argc;
++ char **argv;
+ {
+ char hostname[256];
+
+@@ -1760,6 +1775,17 @@
+ initialize_shell_options (privileged_mode||running_setuid);
+ initialize_bashopts (privileged_mode||running_setuid);
+ #endif
++
++ /* Initialize Libcircle and MPI. */
++#ifdef HAVE_LIBCIRCLE
++ initialize_libcircle (argc, argv);
++ initialize_mpi (argc, argv);
++ bind_variable ("libcircle", "yes", 0);
++#else
++ initialize_mpi (argc, argv);
++ bind_variable ("libcircle", "no", 0);
++#endif
++ bind_variable ("mpibash", "yes", 0);
+ }
+
+ /* Function called by main () when it appears that the shell has already
diff --git a/var/spack/packages/mpibash/package.py b/var/spack/packages/mpibash/package.py
new file mode 100644
index 0000000000..d0f6dafed6
--- /dev/null
+++ b/var/spack/packages/mpibash/package.py
@@ -0,0 +1,32 @@
+import os
+from spack import *
+
+class Mpibash(Package):
+ """Parallel scripting right from the Bourne-Again Shell (Bash)"""
+ homepage = "http://www.ccs3.lanl.gov/~pakin/software/mpibash-4.3.html"
+
+ version('4.3', '81348932d5da294953e15d4814c74dd1',
+ url="http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz")
+
+ # patch -p1 < ../mpibash-4.3.patch
+ patch('mpibash-4.3.patch', level=1, when='@4.3')
+
+ # above patch modifies configure.ac
+ depends_on('autoconf')
+
+ # uses MPI_Exscan which is in MPI-1.2 and later
+ depends_on('mpi@1.2:')
+
+ depends_on('libcircle')
+
+ def install(self, spec, prefix):
+ # run autoconf to rebuild configure
+ autoconf = which('autoconf')
+ autoconf()
+
+ configure("--prefix=" + prefix,
+ "CC=mpicc")
+
+ make(parallel=False)
+
+ make("install")
diff --git a/var/spack/packages/muster/package.py b/var/spack/packages/muster/package.py
new file mode 100644
index 0000000000..31d03f4b45
--- /dev/null
+++ b/var/spack/packages/muster/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Muster(Package):
+ """The Muster library provides implementations of sequential and
+ parallel K-Medoids clustering algorithms. It is intended as a
+ general framework for parallel cluster analysis, particularly
+ for performance data analysis on systems with very large
+ numbers of processes.
+ """
+ homepage = "https://github.com/scalability-llnl/muster"
+ url = "https://github.com/scalability-llnl/muster/archive/v1.0.tar.gz"
+
+ version('1.0', '2eec6979a4a36d3a65a792d12969be16')
+
+ depends_on("boost")
+ depends_on("mpi")
+
+ def install(self, spec, prefix):
+ cmake(".", *std_cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/nasm/package.py b/var/spack/packages/nasm/package.py
new file mode 100644
index 0000000000..933b6a62c5
--- /dev/null
+++ b/var/spack/packages/nasm/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class Nasm(Package):
+ """NASM (Netwide Assembler) is an 80x86 assembler designed for
+ portability and modularity. It includes a disassembler as well."""
+ homepage = "http://www.nasm.us"
+ url = "http://www.nasm.us/pub/nasm/releasebuilds/2.11.06/nasm-2.11.06.tar.xz"
+
+ version('2.11.06', '2b958e9f5d200641e6fc9564977aecc5')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/ncurses/package.py b/var/spack/packages/ncurses/package.py
index 4885caa628..a22e83503f 100644
--- a/var/spack/packages/ncurses/package.py
+++ b/var/spack/packages/ncurses/package.py
@@ -10,10 +10,14 @@ class Ncurses(Package):
homepage = "http://invisible-island.net/ncurses/ncurses.html"
version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1',
- url='http://invisible-island.net/datafiles/release/ncurses.tar.gz')
+ url='http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz')
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
+ configure("--prefix=%s" % prefix,
+ "--with-shared",
+ "--enable-widec",
+ "--disable-pc-files",
+ "--without-ada")
make()
make("install")
diff --git a/var/spack/packages/netcdf/package.py b/var/spack/packages/netcdf/package.py
new file mode 100644
index 0000000000..34284ea725
--- /dev/null
+++ b/var/spack/packages/netcdf/package.py
@@ -0,0 +1,28 @@
+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."""
+
+ 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')
+
+ # Dependencies:
+ # >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")
+
+ # Check the newly installed netcdf package. Currently disabled.
+ # make("check")
diff --git a/var/spack/packages/nettle/package.py b/var/spack/packages/nettle/package.py
new file mode 100644
index 0000000000..0f20bc06df
--- /dev/null
+++ b/var/spack/packages/nettle/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class Nettle(Package):
+ """The Nettle package contains the low-level cryptographic library
+ that is designed to fit easily in many contexts."""
+
+ homepage = "http://www.example.com"
+ url = "http://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz"
+
+ version('2.7', '2caa1bd667c35db71becb93c5d89737f')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/ompss/package.py b/var/spack/packages/ompss/package.py
index 544671de38..e09e0a624f 100644
--- a/var/spack/packages/ompss/package.py
+++ b/var/spack/packages/ompss/package.py
@@ -16,8 +16,10 @@ class Ompss(Package):
APIs like CUDA or OpenCL. Our OmpSs environment is built on top
of our Mercurium compiler and Nanos++ runtime system."""
homepage = "http://pm.bsc.es/"
- url = "http://pm.bsc.es/sites/default/files/ftp/ompss/releases/ompss-14.06.tar.gz"
- version('14.06', '99be5dce74c0d7eea42636d26af47b4181ae2e11')
+ url = "http://pm.bsc.es/sites/default/files/ftp/ompss/releases/ompss-14.10.tar.gz"
+ list_url = 'http://pm.bsc.es/ompss-downloads'
+
+ version('14.10', '404d161265748f2f96bb35fd8c7e79ee')
# all dependencies are optional, really
depends_on("mpi")
@@ -46,4 +48,3 @@ class Ompss(Package):
configure("--prefix=%s" % prefix, "--with-nanox=%s" % prefix, "--enable-ompss", "--with-mpi=%s" % mpi.prefix, *openmp_options)
make()
make("install")
-
diff --git a/var/spack/packages/openmpi/package.py b/var/spack/packages/openmpi/package.py
index 1ef8a8f000..7e84cbaf65 100644
--- a/var/spack/packages/openmpi/package.py
+++ b/var/spack/packages/openmpi/package.py
@@ -13,9 +13,9 @@ class Openmpi(Package):
version('1.8.2', 'ab538ed8e328079d566fc797792e016e',
url='http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.2.tar.gz')
-
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")
@@ -27,8 +27,8 @@ class Openmpi(Package):
# TODO: use variants for this, e.g. +lanl, +llnl, etc.
# use this for LANL builds, but for LLNL builds, we need:
# "--with-platform=contrib/platform/llnl/optimized"
- if self.version == ver("1.6.5"):
- confg_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas")
+ if self.version == ver("1.6.5") and '+lanl' in spec:
+ config_args.append("--with-platform=contrib/platform/lanl/tlcc2/optimized-nopanasas")
# TODO: Spack should make it so that you can't actually find
# these compilers if they're "disabled" for the current
diff --git a/var/spack/packages/pango/package.py b/var/spack/packages/pango/package.py
new file mode 100644
index 0000000000..df43625bf5
--- /dev/null
+++ b/var/spack/packages/pango/package.py
@@ -0,0 +1,19 @@
+from spack import *
+
+class Pango(Package):
+ """Pango is a library for laying out and rendering of text, with
+ an emphasis on internationalization. It can be used anywhere
+ that text layout is needed, though most of the work on Pango so
+ far has been done in the context of the GTK+ widget toolkit."""
+ homepage = "http://www.pango.org"
+ url = "http://ftp.gnome.org/pub/gnome/sources/pango/1.36/pango-1.36.8.tar.xz"
+
+ version('1.36.8', '217a9a753006275215fa9fa127760ece')
+
+ depends_on("harfbuzz")
+ depends_on("cairo")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/pcre/package.py b/var/spack/packages/pcre/package.py
new file mode 100644
index 0000000000..3424048a6c
--- /dev/null
+++ b/var/spack/packages/pcre/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class Pcre(Package):
+ """The PCRE package contains Perl Compatible Regular Expression
+ libraries. These are useful for implementing regular expression
+ pattern matching using the same syntax and semantics as Perl 5."""
+ homepage = "http://www.pcre.org"""
+ url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.bz2"
+
+ version('8.36', 'b767bc9af0c20bc9c1fe403b0d41ad97')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/pixman/package.py b/var/spack/packages/pixman/package.py
new file mode 100644
index 0000000000..895cbdbca5
--- /dev/null
+++ b/var/spack/packages/pixman/package.py
@@ -0,0 +1,18 @@
+from spack import *
+
+class Pixman(Package):
+ """The Pixman package contains a library that provides low-level
+ pixel manipulation features such as image compositing and
+ trapezoid rasterization."""
+ homepage = "http://www.pixman.org"
+ url = "http://cairographics.org/releases/pixman-0.32.6.tar.gz"
+
+ version('0.32.6', '3a30859719a41bd0f5cccffbfefdd4c2')
+
+ depends_on("libpng")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--disable-gtk")
+ make()
+ make("install")
diff --git a/var/spack/packages/ppl/package.py b/var/spack/packages/ppl/package.py
new file mode 100644
index 0000000000..018d5c523d
--- /dev/null
+++ b/var/spack/packages/ppl/package.py
@@ -0,0 +1,28 @@
+from spack import *
+
+class Ppl(Package):
+ """The Parma Polyhedra Library (PPL) provides numerical
+ abstractions especially targeted at applications in the field of
+ analysis and verification of complex systems. These abstractions
+ include convex polyhedra, some special classes of polyhedra shapes
+ that offer interesting complexity/precision tradeoffs, and grids
+ which represent regularly spaced points that satisfy a set of
+ linear congruence relations. The library also supports finite
+ powersets and products of polyhedra and grids, a mixed integer
+ linear programming problem solver using an exact-arithmetic
+ version of the simplex algorithm, a parametric integer programming
+ solver, and primitives for termination analysis via the automatic
+ synthesis of linear ranking functions."""
+
+ homepage = "http://bugseng.com/products/ppl/"
+ url = "http://bugseng.com/products/ppl/download/ftp/releases/1.1/ppl-1.1.tar.gz"
+
+ version('1.1', '4f2422c0ef3f409707af32108deb30a7')
+
+ depends_on("gmp")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--with-gmp=%s" % spec['gmp'].prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/py-basemap/package.py b/var/spack/packages/py-basemap/package.py
new file mode 100644
index 0000000000..45f1085ba1
--- /dev/null
+++ b/var/spack/packages/py-basemap/package.py
@@ -0,0 +1,20 @@
+from spack import *
+import os
+
+class PyBasemap(Package):
+ """The matplotlib basemap toolkit is a library for plotting 2D data on maps in Python."""
+ homepage = "http://matplotlib.org/basemap/"
+ url = "https://downloads.sourceforge.net/project/matplotlib/matplotlib-toolkits/basemap-1.0.7/basemap-1.0.7.tar.gz"
+
+ version('1.0.7', '48c0557ced9e2c6e440b28b3caff2de8')
+
+ extends('python')
+ depends_on('py-setuptools')
+ depends_on('py-numpy')
+ depends_on('py-matplotlib')
+ depends_on('py-pil')
+ depends_on("geos")
+
+ def install(self, spec, prefix):
+ env['GEOS_DIR'] = spec['geos'].prefix
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-biopython/package.py b/var/spack/packages/py-biopython/package.py
new file mode 100644
index 0000000000..8ecaf48626
--- /dev/null
+++ b/var/spack/packages/py-biopython/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyBiopython(Package):
+ """It is a distributed collaborative effort to develop Python libraries and applications which address the needs of current and future work in bioinformatics."""
+ homepage = "http://biopython.org/wiki/Main_Page"
+ url = "http://biopython.org/DIST/biopython-1.65.tar.gz"
+
+ version('1.65', '143e7861ade85c0a8b5e2bbdd1da1f67')
+
+ extends('python')
+ depends_on('py-mx')
+ depends_on('py-numpy')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-cython/package.py b/var/spack/packages/py-cython/package.py
new file mode 100644
index 0000000000..af67a15526
--- /dev/null
+++ b/var/spack/packages/py-cython/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyCython(Package):
+ """The Cython compiler for writing C extensions for the Python language."""
+ homepage = "https://pypi.python.org/pypi/cython"
+ url = "https://pypi.python.org/packages/source/C/Cython/Cython-0.21.2.tar.gz"
+
+ version('0.21.2', 'd21adb870c75680dc857cd05d41046a4')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-dateutil/package.py b/var/spack/packages/py-dateutil/package.py
new file mode 100644
index 0000000000..3bd2f2ca13
--- /dev/null
+++ b/var/spack/packages/py-dateutil/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyDateutil(Package):
+ """Extensions to the standard Python datetime module."""
+ homepage = "https://pypi.python.org/pypi/dateutil"
+ url = "https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz"
+
+ version('2.4.0', '75714163bb96bedd07685cdb2071b8bc')
+
+ extends('python')
+ depends_on('py-setuptools')
+ depends_on('py-six')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-epydoc/package.py b/var/spack/packages/py-epydoc/package.py
new file mode 100644
index 0000000000..af05510504
--- /dev/null
+++ b/var/spack/packages/py-epydoc/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyEpydoc(Package):
+ """Epydoc is a tool for generating API documentation documentation for Python modules, based on their docstrings."""
+ homepage = "https://pypi.python.org/pypi/epydoc"
+ url = "https://pypi.python.org/packages/source/e/epydoc/epydoc-3.0.1.tar.gz"
+
+ version('3.0.1', '36407974bd5da2af00bf90ca27feeb44')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-gnuplot/package.py b/var/spack/packages/py-gnuplot/package.py
new file mode 100644
index 0000000000..ede4472c03
--- /dev/null
+++ b/var/spack/packages/py-gnuplot/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyGnuplot(Package):
+ """Gnuplot.py is a Python package that allows you to create graphs from within Python using the gnuplot plotting program."""
+ homepage = "http://gnuplot-py.sourceforge.net/"
+ url = "http://downloads.sourceforge.net/project/gnuplot-py/Gnuplot-py/1.8/gnuplot-py-1.8.tar.gz"
+
+ version('1.8', 'abd6f571e7aec68ae7db90a5217cd5b1')
+
+ extends('python')
+ depends_on('py-numpy')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-h5py/package.py b/var/spack/packages/py-h5py/package.py
new file mode 100644
index 0000000000..f72b3ac06e
--- /dev/null
+++ b/var/spack/packages/py-h5py/package.py
@@ -0,0 +1,18 @@
+from spack import *
+import re
+
+class PyH5py(Package):
+ """The h5py package provides both a high- and low-level interface to the HDF5 library from Python."""
+ homepage = "https://pypi.python.org/pypi/h5py"
+ url = "https://pypi.python.org/packages/source/h/h5py/h5py-2.4.0.tar.gz"
+
+ version('2.4.0', '80c9a94ae31f84885cc2ebe1323d6758')
+
+ extends('python', ignore=lambda f: re.match(r'cy*', f))
+ depends_on('hdf5')
+ depends_on('py-numpy')
+ depends_on('py-cython')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'configure', '--hdf5=%s' % spec['hdf5'].prefix)
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-ipython/package.py b/var/spack/packages/py-ipython/package.py
new file mode 100644
index 0000000000..907ea9edcd
--- /dev/null
+++ b/var/spack/packages/py-ipython/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyIpython(Package):
+ """IPython provides a rich toolkit to help you make the most out of using Python interactively."""
+ homepage = "https://pypi.python.org/pypi/ipython"
+ url = "https://pypi.python.org/packages/source/i/ipython/ipython-2.3.1.tar.gz"
+
+ version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf')
+
+ extends('python')
+ depends_on('py-pygments')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-libxml2/package.py b/var/spack/packages/py-libxml2/package.py
new file mode 100644
index 0000000000..59005428e4
--- /dev/null
+++ b/var/spack/packages/py-libxml2/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyLibxml2(Package):
+ """A Python wrapper around libxml2."""
+ homepage = "https://xmlsoft.org/python.html"
+ url = "ftp://xmlsoft.org/libxml2/python/libxml2-python-2.6.21.tar.gz"
+
+ version('2.6.21', '229dd2b3d110a77defeeaa73af83f7f3')
+
+ extends('python')
+ depends_on('libxml2')
+ depends_on('libxslt')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-mako/package.py b/var/spack/packages/py-mako/package.py
new file mode 100644
index 0000000000..3e91ffd8e5
--- /dev/null
+++ b/var/spack/packages/py-mako/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyMako(Package):
+ """A super-fast templating language that borrows the best
+ ideas from the existing templating languages."""
+
+ homepage = "https://pypi.python.org/pypi/mako"
+ url = "https://pypi.python.org/packages/source/M/Mako/Mako-1.0.1.tar.gz"
+
+ version('1.0.1', '9f0aafd177b039ef67b90ea350497a54')
+
+ depends_on('py-setuptools')
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-matplotlib/package.py b/var/spack/packages/py-matplotlib/package.py
new file mode 100644
index 0000000000..04037f004e
--- /dev/null
+++ b/var/spack/packages/py-matplotlib/package.py
@@ -0,0 +1,46 @@
+from spack import *
+import os
+
+class PyMatplotlib(Package):
+ """Python plotting package."""
+ homepage = "https://pypi.python.org/pypi/matplotlib"
+ url = "https://pypi.python.org/packages/source/m/matplotlib/matplotlib-1.4.2.tar.gz"
+
+ version('1.4.2', '7d22efb6cce475025733c50487bd8898')
+
+ extends('python', ignore=r'bin/nosetests.*$')
+
+ depends_on('py-pyside')
+ depends_on('py-ipython')
+ depends_on('py-pyparsing')
+ depends_on('py-six')
+ depends_on('py-dateutil')
+ depends_on('py-pytz')
+ depends_on('py-nose')
+ depends_on('py-numpy')
+
+ depends_on('qt')
+ depends_on('bzip2')
+ depends_on('tcl')
+ depends_on('tk')
+ depends_on('qhull')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
+
+ if str(self.version) == '1.4.2':
+ # hack to fix configuration file
+ config_file = None
+ for p,d,f in os.walk(prefix.lib):
+ for file in f:
+ if file.find('matplotlibrc') != -1:
+ config_file = join_path(p, 'matplotlibrc')
+ print config_file
+ if config_file == None:
+ raise InstallError('could not find config file')
+ filter_file(r'backend : pyside',
+ 'backend : Qt4Agg',
+ config_file)
+ filter_file(r'#backend.qt4 : PyQt4',
+ 'backend.qt4 : PySide',
+ config_file)
diff --git a/var/spack/packages/py-mpi4py/package.py b/var/spack/packages/py-mpi4py/package.py
new file mode 100644
index 0000000000..8001689a18
--- /dev/null
+++ b/var/spack/packages/py-mpi4py/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyMpi4py(Package):
+ """This package provides Python bindings for the Message Passing Interface (MPI) standard. It is implemented on top of the MPI-1/MPI-2 specification and exposes an API which grounds on the standard MPI-2 C++ bindings."""
+ homepage = "https://pypi.python.org/pypi/mpi4py"
+ url = "https://pypi.python.org/packages/source/m/mpi4py/mpi4py-1.3.1.tar.gz"
+
+ version('1.3.1', 'dbe9d22bdc8ed965c23a7ceb6f32fc3c')
+ extends('python')
+ depends_on('py-setuptools')
+ depends_on('mpi')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-mx/package.py b/var/spack/packages/py-mx/package.py
new file mode 100644
index 0000000000..717ee0562b
--- /dev/null
+++ b/var/spack/packages/py-mx/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyMx(Package):
+ """The eGenix.com mx Base Distribution for Python is a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types."""
+ homepage = "http://www.egenix.com/products/python/mxBase/"
+ url = "https://downloads.egenix.com/python/egenix-mx-base-3.2.8.tar.gz"
+
+ version('3.2.8', '9d9d3a25f9dc051a15e97f452413423b')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-nose/package.py b/var/spack/packages/py-nose/package.py
new file mode 100644
index 0000000000..155019289d
--- /dev/null
+++ b/var/spack/packages/py-nose/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyNose(Package):
+ """nose extends the test loading and running features of unittest,
+ making it easier to write, find and run tests."""
+
+ homepage = "https://pypi.python.org/pypi/nose"
+ url = "https://pypi.python.org/packages/source/n/nose/nose-1.3.4.tar.gz"
+
+ version('1.3.4', '6ed7169887580ddc9a8e16048d38274d')
+
+ extends('python', ignore=r'bin/nosetests.*$')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-numpy/package.py b/var/spack/packages/py-numpy/package.py
new file mode 100644
index 0000000000..e6cb6a464f
--- /dev/null
+++ b/var/spack/packages/py-numpy/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyNumpy(Package):
+ """array processing for numbers, strings, records, and objects."""
+ homepage = "https://pypi.python.org/pypi/numpy"
+ url = "https://pypi.python.org/packages/source/n/numpy/numpy-1.9.1.tar.gz"
+
+ version('1.9.1', '78842b73560ec378142665e712ae4ad9')
+
+ extends('python')
+ depends_on('py-nose')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pexpect/package.py b/var/spack/packages/py-pexpect/package.py
new file mode 100644
index 0000000000..ff5fac84e0
--- /dev/null
+++ b/var/spack/packages/py-pexpect/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyPexpect(Package):
+ """Pexpect allows easy control of interactive console applications."""
+ homepage = "https://pypi.python.org/pypi/pexpect"
+ url = "https://pypi.python.org/packages/source/p/pexpect/pexpect-3.3.tar.gz"
+
+ version('3.3', '0de72541d3f1374b795472fed841dce8')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pil/package.py b/var/spack/packages/py-pil/package.py
new file mode 100644
index 0000000000..743b761981
--- /dev/null
+++ b/var/spack/packages/py-pil/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyPil(Package):
+ """The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. This library supports many file formats, and provides powerful image processing and graphics capabilities."""
+
+ homepage = "http://www.pythonware.com/products/pil/"
+ url = "http://effbot.org/media/downloads/Imaging-1.1.7.tar.gz"
+
+ version('1.1.7', 'fc14a54e1ce02a0225be8854bfba478e')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pmw/package.py b/var/spack/packages/py-pmw/package.py
new file mode 100644
index 0000000000..56131811e9
--- /dev/null
+++ b/var/spack/packages/py-pmw/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyPmw(Package):
+ """Pmw is a toolkit for building high-level compound widgets, or megawidgets, constructed using other widgets as component parts."""
+ homepage = "https://pypi.python.org/pypi/Pmw"
+ url = "https://pypi.python.org/packages/source/P/Pmw/Pmw-2.0.0.tar.gz"
+
+ version('2.0.0', 'c7c3f26c4f5abaa99807edefee578fc0')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pychecker/package.py b/var/spack/packages/py-pychecker/package.py
new file mode 100644
index 0000000000..bda5a746aa
--- /dev/null
+++ b/var/spack/packages/py-pychecker/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyPychecker(Package):
+ """"""
+ homepage = "http://pychecker.sourceforge.net/"
+ url = "http://sourceforge.net/projects/pychecker/files/pychecker/0.8.19/pychecker-0.8.19.tar.gz"
+
+ version('0.8.19', 'c37182863dfb09209d6ba4f38fce9d2b')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pygments/package.py b/var/spack/packages/py-pygments/package.py
new file mode 100644
index 0000000000..990eebde65
--- /dev/null
+++ b/var/spack/packages/py-pygments/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyPygments(Package):
+ """Pygments is a syntax highlighting package written in Python."""
+ homepage = "https://pypi.python.org/pypi/pygments"
+ url = "https://pypi.python.org/packages/source/P/Pygments/Pygments-2.0.1.tar.gz"
+
+ version('2.0.1', 'e0daf4c14a4fe5b630da765904de4d6c')
+
+ extends('python')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pylint/package.py b/var/spack/packages/py-pylint/package.py
new file mode 100644
index 0000000000..7a6ee7dbbc
--- /dev/null
+++ b/var/spack/packages/py-pylint/package.py
@@ -0,0 +1,16 @@
+from spack import *
+import re
+
+class PyPylint(Package):
+ """array processing for numbers, strings, records, and objects."""
+ homepage = "https://pypi.python.org/pypi/pylint"
+ url = "https://pypi.python.org/packages/source/p/pylint/pylint-1.4.1.tar.gz"
+
+ version('1.4.1', 'df7c679bdcce5019389038847e4de622')
+
+ extends('python')
+ depends_on('py-nose')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pyparsing/package.py b/var/spack/packages/py-pyparsing/package.py
new file mode 100644
index 0000000000..a6e50ad139
--- /dev/null
+++ b/var/spack/packages/py-pyparsing/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyPyparsing(Package):
+ """A Python Parsing Module."""
+ homepage = "https://pypi.python.org/pypi/pyparsing"
+ url = "https://pypi.python.org/packages/source/p/pyparsing/pyparsing-2.0.3.tar.gz"
+
+ version('2.0.3', '0fe479be09fc2cf005f753d3acc35939')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pyqt/package.py b/var/spack/packages/py-pyqt/package.py
new file mode 100644
index 0000000000..8edca105bb
--- /dev/null
+++ b/var/spack/packages/py-pyqt/package.py
@@ -0,0 +1,24 @@
+from spack import *
+
+class PyPyqt(Package):
+ """PyQt is a set of Python v2 and v3 bindings for Digia's Qt
+ application framework and runs on all platforms supported by Qt
+ including Windows, MacOS/X and Linux."""
+ homepage = "http://www.riverbankcomputing.com/software/pyqt/intro"
+ url = "http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.3/PyQt-x11-gpl-4.11.3.tar.gz"
+
+ version('4.11.3', '997c3e443165a89a559e0d96b061bf70')
+
+ extends('python')
+ depends_on('py-sip')
+
+ # TODO: allow qt5 when conditional deps are supported.
+ # TODO: Fix version matching so that @4 works like @:4
+ depends_on('qt@:4')
+
+ def install(self, spec, prefix):
+ python('configure.py',
+ '--confirm-license',
+ '--destdir=%s' % site_packages_dir)
+ make()
+ make('install')
diff --git a/var/spack/packages/py-pyside/package.py b/var/spack/packages/py-pyside/package.py
new file mode 100644
index 0000000000..bb5da44d02
--- /dev/null
+++ b/var/spack/packages/py-pyside/package.py
@@ -0,0 +1,45 @@
+from spack import *
+import os
+
+class PyPyside(Package):
+ """array processing for numbers, strings, records, and objects."""
+ homepage = "https://pypi.python.org/pypi/pyside"
+ url = "https://pypi.python.org/packages/source/P/PySide/PySide-1.2.2.tar.gz"
+
+ version('1.2.2', 'c45bc400c8a86d6b35f34c29e379e44d')
+
+ # TODO: make build dependency
+ # depends_on("cmake")
+
+ extends('python')
+ depends_on('py-setuptools')
+ depends_on('qt@:4')
+
+ def patch(self):
+ """Undo PySide RPATH handling and add Spack RPATH."""
+ # Figure out the special RPATH
+ pypkg = self.spec['python'].package
+ rpath = self.rpath
+ rpath.append(os.path.join(self.prefix, pypkg.site_packages_dir, 'PySide'))
+
+ # Add Spack's standard CMake args to the sub-builds.
+ # They're called BY setup.py so we have to patch it.
+ filter_file(
+ r'OPTION_CMAKE,',
+ r'OPTION_CMAKE, ' + (
+ '"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE", '
+ '"-DCMAKE_INSTALL_RPATH=%s",' % ':'.join(rpath)),
+ 'setup.py')
+
+ # PySide tries to patch ELF files to remove RPATHs
+ # Disable this and go with the one we set.
+ filter_file(
+ r'^\s*rpath_cmd\(pyside_path, srcpath\)',
+ r'#rpath_cmd(pyside_path, srcpath)',
+ 'pyside_postinstall.py')
+
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install',
+ '--prefix=%s' % prefix,
+ '--jobs=%s' % make_jobs)
diff --git a/var/spack/packages/py-pytz/package.py b/var/spack/packages/py-pytz/package.py
new file mode 100644
index 0000000000..80bcfe82ca
--- /dev/null
+++ b/var/spack/packages/py-pytz/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyPytz(Package):
+ """World timezone definitions, modern and historical."""
+ homepage = "https://pypi.python.org/pypi/pytz"
+ url = "https://pypi.python.org/packages/source/p/pytz/pytz-2014.10.tar.gz"
+
+ version('2014.10', 'eb1cb941a20c5b751352c52486aa1dd7')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-rpy2/package.py b/var/spack/packages/py-rpy2/package.py
new file mode 100644
index 0000000000..dd0c0672af
--- /dev/null
+++ b/var/spack/packages/py-rpy2/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyRpy2(Package):
+ """rpy2 is a redesign and rewrite of rpy. It is providing a low-level interface to R from Python, a proposed high-level interface, including wrappers to graphical libraries, as well as R-like structures and functions."""
+ homepage = "https://pypi.python.org/pypi/rpy2"
+ url = "https://pypi.python.org/packages/source/r/rpy2/rpy2-2.5.4.tar.gz"
+
+ version('2.5.4', '115a20ac30883f096da2bdfcab55196d')
+
+ extends('python')
+ depends_on('py-setuptools')
+
+ depends_on('R')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-scientificpython/package.py b/var/spack/packages/py-scientificpython/package.py
new file mode 100644
index 0000000000..020d830703
--- /dev/null
+++ b/var/spack/packages/py-scientificpython/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class PyScientificpython(Package):
+ """ScientificPython is a collection of Python modules for
+ scientific computing. It contains support for geometry,
+ mathematical functions, statistics, physical units, IO,
+ visualization, and parallelization."""
+
+ homepage = "https://sourcesup.renater.fr/projects/scientific-py/"
+ url = "https://sourcesup.renater.fr/frs/download.php/4411/ScientificPython-2.8.1.tar.gz"
+
+ version('2.8.1', '73ee0df19c7b58cdf2954261f0763c77')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-scikit-learn/package.py b/var/spack/packages/py-scikit-learn/package.py
new file mode 100644
index 0000000000..c59c05a619
--- /dev/null
+++ b/var/spack/packages/py-scikit-learn/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyScikitLearn(Package):
+ """"""
+ homepage = "https://pypi.python.org/pypi/scikit-learn"
+ url = "https://pypi.python.org/packages/source/s/scikit-learn/scikit-learn-0.15.2.tar.gz"
+
+ version('0.15.2', 'd9822ad0238e17b382a3c756ea94fe0d')
+
+ extends('python')
+
+ def install(self, spec, 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
new file mode 100644
index 0000000000..b5325b919f
--- /dev/null
+++ b/var/spack/packages/py-scipy/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyScipy(Package):
+ """Scientific Library for Python."""
+ homepage = "https://pypi.python.org/pypi/scipy"
+ url = "https://pypi.python.org/packages/source/s/scipy/scipy-0.15.0.tar.gz"
+
+ version('0.15.0', '639112f077f0aeb6d80718dc5019dc7a')
+
+ extends('python')
+ depends_on('py-nose')
+ depends_on('py-numpy')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-setuptools/package.py b/var/spack/packages/py-setuptools/package.py
new file mode 100644
index 0000000000..755288d55c
--- /dev/null
+++ b/var/spack/packages/py-setuptools/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PySetuptools(Package):
+ """Easily download, build, install, upgrade, and uninstall Python packages."""
+ homepage = "https://pypi.python.org/pypi/setuptools"
+ url = "https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.tar.gz"
+
+ version('11.3.1', '01f69212e019a2420c1693fb43593930')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-shiboken/package.py b/var/spack/packages/py-shiboken/package.py
new file mode 100644
index 0000000000..e4bf4ce07e
--- /dev/null
+++ b/var/spack/packages/py-shiboken/package.py
@@ -0,0 +1,45 @@
+from spack import *
+import os
+
+class PyShiboken(Package):
+ """Shiboken generates bindings for C++ libraries using CPython source code."""
+ homepage = "https://shiboken.readthedocs.org/"
+ url = "https://pypi.python.org/packages/source/S/Shiboken/Shiboken-1.2.2.tar.gz"
+
+ version('1.2.2', '345cfebda221f525842e079a6141e555')
+
+ # TODO: make build dependency
+ # depends_on("cmake")
+
+ extends('python')
+ depends_on("py-setuptools")
+ depends_on("libxml2")
+ depends_on("qt@:4.8")
+
+ def patch(self):
+ """Undo Shiboken RPATH handling and add Spack RPATH."""
+ # Add Spack's standard CMake args to the sub-builds.
+ # They're called BY setup.py so we have to patch it.
+ pypkg = self.spec['python'].package
+ rpath = self.rpath
+ rpath.append(os.path.join(self.prefix, pypkg.site_packages_dir, 'Shiboken'))
+
+ filter_file(
+ r'OPTION_CMAKE,',
+ r'OPTION_CMAKE, ' + (
+ '"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE", '
+ '"-DCMAKE_INSTALL_RPATH=%s",' % ':'.join(rpath)),
+ 'setup.py')
+
+ # Shiboken tries to patch ELF files to remove RPATHs
+ # Disable this and go with the one we set.
+ filter_file(
+ r'^\s*rpath_cmd\(shiboken_path, srcpath\)',
+ r'#rpath_cmd(shiboken_path, srcpath)',
+ 'shiboken_postinstall.py')
+
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install',
+ '--prefix=%s' % prefix,
+ '--jobs=%s' % make_jobs)
diff --git a/var/spack/packages/py-sip/package.py b/var/spack/packages/py-sip/package.py
new file mode 100644
index 0000000000..6753bdd2a5
--- /dev/null
+++ b/var/spack/packages/py-sip/package.py
@@ -0,0 +1,20 @@
+from spack import *
+import os
+
+class PySip(Package):
+ """SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries."""
+ homepage = "http://www.riverbankcomputing.com/software/sip/intro"
+ url = "http://sourceforge.net/projects/pyqt/files/sip/sip-4.16.5/sip-4.16.5.tar.gz"
+
+ version('4.16.5', '6d01ea966a53e4c7ae5c5e48c40e49e5')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('configure.py',
+ '--destdir=%s' % site_packages_dir,
+ '--bindir=%s' % spec.prefix.bin,
+ '--incdir=%s' % python_include_dir,
+ '--sipdir=%s' % os.path.join(spec.prefix.share, 'sip'))
+ make()
+ make('install')
diff --git a/var/spack/packages/py-six/package.py b/var/spack/packages/py-six/package.py
new file mode 100644
index 0000000000..05c5bd00a9
--- /dev/null
+++ b/var/spack/packages/py-six/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PySix(Package):
+ """Python 2 and 3 compatibility utilities."""
+ homepage = "https://pypi.python.org/pypi/six"
+ url = "https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz"
+
+ version('1.9.0', '476881ef4012262dfc8adc645ee786c4')
+
+ extends('python')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-sympy/package.py b/var/spack/packages/py-sympy/package.py
new file mode 100644
index 0000000000..c17e35b95f
--- /dev/null
+++ b/var/spack/packages/py-sympy/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PySympy(Package):
+ """SymPy is a Python library for symbolic mathematics."""
+ homepage = "https://pypi.python.org/pypi/sympy"
+ url = "https://pypi.python.org/packages/source/s/sympy/sympy-0.7.6.tar.gz"
+
+ version('0.7.6', '3d04753974306d8a13830008e17babca')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-virtualenv/package.py b/var/spack/packages/py-virtualenv/package.py
new file mode 100644
index 0000000000..2d10d440a6
--- /dev/null
+++ b/var/spack/packages/py-virtualenv/package.py
@@ -0,0 +1,15 @@
+from spack import *
+import shutil
+
+class PyVirtualenv(Package):
+ """virtualenv is a tool to create isolated Python environments."""
+ homepage = "http://virtualenv.readthedocs.org/projects/virtualenv/"
+ url = "https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz"
+
+ version('1.11.6', 'f61cdd983d2c4e6aeabb70b1060d6f49')
+
+ extends('python')
+ depends_on('py-setuptools')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/python/package.py b/var/spack/packages/python/package.py
new file mode 100644
index 0000000000..31a12ea653
--- /dev/null
+++ b/var/spack/packages/python/package.py
@@ -0,0 +1,157 @@
+import os
+import re
+from contextlib import closing
+from llnl.util.lang import match_predicate
+
+from spack import *
+import spack
+
+
+class Python(Package):
+ """The Python programming language."""
+ homepage = "http://www.python.org"
+ url = "http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz"
+
+ extendable = True
+
+ version('2.7.8', 'd235bdfa75b8396942e360a70487ee00')
+
+ depends_on("openssl")
+ depends_on("bzip2")
+ depends_on("readline")
+ depends_on("ncurses")
+ depends_on("sqlite")
+
+ def install(self, spec, prefix):
+ # Need this to allow python build to find the Python installation.
+ env['PYTHONHOME'] = prefix
+
+ # Rest of install is pretty standard.
+ configure("--prefix=%s" % prefix,
+ "--with-threads",
+ "--enable-shared")
+ make()
+ make("install")
+
+
+ # ========================================================================
+ # Set up environment to make install easy for python extensions.
+ # ========================================================================
+
+ @property
+ def python_lib_dir(self):
+ return os.path.join('lib', 'python%d.%d' % self.version[:2])
+
+
+ @property
+ def python_include_dir(self):
+ return os.path.join('include', 'python%d.%d' % self.version[:2])
+
+
+ @property
+ def site_packages_dir(self):
+ return os.path.join(self.python_lib_dir, 'site-packages')
+
+
+ def setup_dependent_environment(self, module, spec, ext_spec):
+ """Called before python modules' install() methods.
+
+ In most cases, extensions will only need to have one line::
+
+ python('setup.py', 'install', '--prefix=%s' % prefix)
+ """
+ # Python extension builds can have a global python executable function
+ module.python = Executable(join_path(spec.prefix.bin, 'python'))
+
+ # Add variables for lib/pythonX.Y and lib/pythonX.Y/site-packages dirs.
+ module.python_lib_dir = os.path.join(ext_spec.prefix, self.python_lib_dir)
+ module.python_include_dir = os.path.join(ext_spec.prefix, self.python_include_dir)
+ module.site_packages_dir = os.path.join(ext_spec.prefix, self.site_packages_dir)
+
+ # Make the site packages directory if it does not exist already.
+ mkdirp(module.site_packages_dir)
+
+ # Set PYTHONPATH to include site-packages dir for the
+ # extension and any other python extensions it depends on.
+ python_paths = []
+ for d in ext_spec.traverse():
+ if d.package.extends(self.spec):
+ python_paths.append(os.path.join(d.prefix, self.site_packages_dir))
+ os.environ['PYTHONPATH'] = ':'.join(python_paths)
+
+
+ # ========================================================================
+ # Handle specifics of activating and deactivating python modules.
+ # ========================================================================
+
+ def python_ignore(self, ext_pkg, args):
+ """Add some ignore files to activate/deactivate args."""
+ ignore_arg = args.get('ignore', lambda f: False)
+
+ # Always ignore easy-install.pth, as it needs to be merged.
+ patterns = [r'easy-install\.pth$']
+
+ # Ignore pieces of setuptools installed by other packages.
+ if ext_pkg.name != 'py-setuptools':
+ patterns.append(r'/site\.pyc?$')
+ patterns.append(r'setuptools\.pth')
+ patterns.append(r'bin/easy_install[^/]*$')
+ patterns.append(r'setuptools.*egg$')
+
+ return match_predicate(ignore_arg, patterns)
+
+
+ def write_easy_install_pth(self, exts):
+ paths = []
+ for ext in sorted(exts.values()):
+ ext_site_packages = os.path.join(ext.prefix, self.site_packages_dir)
+ easy_pth = "%s/easy-install.pth" % ext_site_packages
+
+ if not os.path.isfile(easy_pth):
+ continue
+
+ with closing(open(easy_pth)) as f:
+ for line in f:
+ line = line.rstrip()
+
+ # Skip lines matching these criteria
+ if not line: continue
+ if re.search(r'^(import|#)', line): continue
+ if (ext.name != 'py-setuptools' and
+ re.search(r'setuptools.*egg$', line)): continue
+
+ paths.append(line)
+
+ site_packages = os.path.join(self.prefix, self.site_packages_dir)
+ main_pth = "%s/easy-install.pth" % site_packages
+
+ if not paths:
+ if os.path.isfile(main_pth):
+ os.remove(main_pth)
+
+ else:
+ with closing(open(main_pth, 'w')) as f:
+ f.write("import sys; sys.__plen = len(sys.path)\n")
+ for path in paths:
+ f.write("%s\n" % path)
+ f.write("import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; "
+ "p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)\n")
+
+
+ def activate(self, ext_pkg, **args):
+ args.update(ignore=self.python_ignore(ext_pkg, args))
+ super(Python, self).activate(ext_pkg, **args)
+
+ exts = spack.install_layout.extension_map(self.spec)
+ exts[ext_pkg.name] = ext_pkg.spec
+ self.write_easy_install_pth(exts)
+
+
+ def deactivate(self, ext_pkg, **args):
+ args.update(ignore=self.python_ignore(ext_pkg, args))
+ super(Python, self).deactivate(ext_pkg, **args)
+
+ exts = spack.install_layout.extension_map(self.spec)
+ if ext_pkg.name in exts: # Make deactivate idempotent.
+ del exts[ext_pkg.name]
+ self.write_easy_install_pth(exts)
diff --git a/var/spack/packages/qhull/package.py b/var/spack/packages/qhull/package.py
new file mode 100644
index 0000000000..9da4078a70
--- /dev/null
+++ b/var/spack/packages/qhull/package.py
@@ -0,0 +1,27 @@
+from spack import *
+
+class Qhull(Package):
+ """Qhull computes the convex hull, Delaunay triangulation, Voronoi
+ diagram, halfspace intersection about a point, furt hest-site
+ Delaunay triangulation, and furthest-site Voronoi diagram. The
+ source code runs in 2-d, 3-d, 4-d, and higher dimensions. Qhull
+ implements the Quickhull algorithm for computing the convex
+ hull. It handles roundoff errors from floating point
+ arithmetic. It computes volumes, surface areas, and
+ approximations to the convex hull.
+
+ Qhull does not support triangulation of non-convex surfaces,
+ mesh generation of non-convex objects, medium-sized inputs in
+ 9-D and higher, alpha shapes, weighted Voronoi diagrams,
+ Voronoi volumes, or constrained Delaunay triangulations."""
+
+ homepage = "http://www.qhull.org"
+
+ version('1.0', 'd0f978c0d8dfb2e919caefa56ea2953c',
+ url="http://www.qhull.org/download/qhull-2012.1-src.tgz")
+
+ 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/qt/package.py b/var/spack/packages/qt/package.py
new file mode 100644
index 0000000000..4a9a867511
--- /dev/null
+++ b/var/spack/packages/qt/package.py
@@ -0,0 +1,107 @@
+import os
+from spack import *
+import os
+
+class Qt(Package):
+ """Qt is a comprehensive cross-platform C++ application framework."""
+ homepage = "http://qt.io"
+ list_url = 'http://download.qt-project.org/official_releases/qt/'
+ list_depth = 2
+
+ version('5.4.0', 'e8654e4b37dd98039ba20da7a53877e6',
+ url='http://download.qt-project.org/official_releases/qt/5.4/5.4.0/single/qt-everywhere-opensource-src-5.4.0.tar.gz')
+ version('5.3.2', 'febb001129927a70174467ecb508a682',
+ url='http://download.qt.io/archive/qt/5.3/5.3.2/single/qt-everywhere-opensource-src-5.3.2.tar.gz')
+
+ version('5.2.1', 'a78408c887c04c34ce615da690e0b4c8',
+ url='http://download.qt.io/archive/qt/5.2/5.2.1/single/qt-everywhere-opensource-src-5.2.1.tar.gz')
+ version('4.8.6', '2edbe4d6c2eff33ef91732602f3518eb',
+ url="http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz")
+
+ # Use system openssl for security.
+ #depends_on("openssl")
+
+ depends_on("glib")
+ depends_on("gtkplus")
+ depends_on("libxml2")
+ depends_on("zlib")
+ depends_on("dbus")
+ depends_on("libtiff")
+ depends_on("libpng")
+ depends_on("libmng")
+ depends_on("jpeg")
+
+ # Webkit
+ # depends_on("gperf")
+ # depends_on("flex")
+ # depends_on("bison")
+ # depends_on("ruby")
+ # depends_on("icu4c")
+
+ # OpenGL hardware acceleration
+ depends_on("mesa")
+ depends_on("libxcb")
+
+
+ def setup_dependent_environment(self, module, spec, dep_spec):
+ """Dependencies of Qt find it using the QTDIR environment variable."""
+ os.environ['QTDIR'] = self.prefix
+
+
+ def patch(self):
+ if self.spec.satisfies('@4'):
+ qmake_conf = 'mkspecs/common/g++-base.conf'
+ elif self.spec.satisfies('@5'):
+ qmake_conf = 'qtbase/mkspecs/common/g++-base.conf'
+ else:
+ return
+
+ # Fix qmake compilers in the default mkspec
+ filter_file(r'^QMAKE_COMPILER *=.*$', 'QMAKE_COMPILER = cc', qmake_conf)
+ filter_file(r'^QMAKE_CC *=.*$', 'QMAKE_CC = cc', qmake_conf)
+ filter_file(r'^QMAKE_CXX *=.*$', 'QMAKE_CXX = c++', qmake_conf)
+
+
+
+ @property
+ def common_config_args(self):
+ return [
+ '-prefix', self.prefix,
+ '-v',
+ '-opensource',
+ '-opengl',
+ "-release",
+ '-shared',
+ '-confirm-license',
+ '-openssl-linked',
+ '-dbus-linked',
+ '-optimized-qmake',
+ '-no-openvg',
+ '-no-pch',
+ # NIS is deprecated in more recent glibc
+ "-no-nis"]
+ # Don't disable all the database drivers, but should
+ # really get them into spack at some point.
+
+
+ @when('@4')
+ def configure(self):
+ configure('-fast',
+ '-no-webkit',
+ *self.common_config_args)
+
+
+ @when('@5')
+ def configure(self):
+ configure('-no-eglfs',
+ '-no-directfb',
+ '-qt-xcb',
+ # If someone wants to get a webkit build working, be my guest!
+ '-skip', 'qtwebkit',
+ *self.common_config_args)
+
+
+ def install(self, spec, prefix):
+ self.configure()
+ make()
+ make("install")
diff --git a/var/spack/packages/qthreads/package.py b/var/spack/packages/qthreads/package.py
new file mode 100644
index 0000000000..dacdb71524
--- /dev/null
+++ b/var/spack/packages/qthreads/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class Qthreads(Package):
+ """The qthreads API is designed to make using large numbers of
+ threads convenient and easy, and to allow portable access to
+ threading constructs used in massively parallel shared memory
+ environments. The API maps well to both MTA-style threading and
+ PIM-style threading, and we provide an implementation of this
+ interface in both a standard SMP context as well as the SST
+ context. The qthreads API provides access to full/empty-bit
+ (FEB) semantics, where every word of memory can be marked
+ either full or empty, and a thread can wait for any word to
+ attain either state."""
+ homepage = "http://www.cs.sandia.gov/qthreads/"
+ url = "https://qthreads.googlecode.com/files/qthread-1.10.tar.bz2"
+
+ version('1.10', '5af8c8bbe88c2a6d45361643780d1671')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/readline/package.py b/var/spack/packages/readline/package.py
new file mode 100644
index 0000000000..1b870e0e7f
--- /dev/null
+++ b/var/spack/packages/readline/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Readline(Package):
+ """The GNU Readline library provides a set of functions for use by
+ applications that allow users to edit command li nes as they
+ are typed in. Both Emacs and vi editing modes are
+ available. The Readline library includes additional functions
+ to maintain a list of previously-entered command lines, to
+ recall and perhaps reedit those lines, and perform csh-like
+ history expansion on previous commands. """
+ homepage = "http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html"
+ url = "ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz"
+
+ version('6.3', '33c8fb279e981274f485fd91da77e94a')
+
+ depends_on("ncurses")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make("SHLIB_LIBS=-lncurses")
+ make("install")
diff --git a/var/spack/packages/rose/add_spack_compiler_recognition.patch b/var/spack/packages/rose/add_spack_compiler_recognition.patch
new file mode 100644
index 0000000000..ce61ae4e4c
--- /dev/null
+++ b/var/spack/packages/rose/add_spack_compiler_recognition.patch
@@ -0,0 +1,13 @@
+diff --git a/config/compiler-defs.m4 b/config/compiler-defs.m4
+index d7d85d2..780c8de 100644
+--- a/config/compiler-defs.m4
++++ b/config/compiler-defs.m4
+@@ -28,7 +28,7 @@ dnl predefined by a specific compiler
+ # g++|gcc|mpicc|mpic++|mpicxx|mpiCC)
+ # TOO (2/16/2011): added support for tensilica compilers, assuming they are
+ # like GCC (they use a GCC front-end)
+- g++*|gcc*|mpicc|mpic++|mpicxx|mpiCC|xt-xc++|xt-xcc)
++ cc*|c++*|g++*|gcc*|mpicc|mpic++|mpicxx|mpiCC|xt-xc++|xt-xcc)
+ BACKEND_GCC_MAJOR=`echo|$BACKEND_CXX_COMPILER -dumpversion | cut -d\. -f1`
+ BACKEND_GCC_MINOR=`echo|$BACKEND_CXX_COMPILER -dumpversion | cut -d\. -f2`
+ BACKEND_GCC_PATCHLEVEL=`echo|$BACKEND_CXX_COMPILER -dumpversion | cut -d\. -f3`
diff --git a/var/spack/packages/rose/package.py b/var/spack/packages/rose/package.py
new file mode 100644
index 0000000000..1d7294acab
--- /dev/null
+++ b/var/spack/packages/rose/package.py
@@ -0,0 +1,39 @@
+#------------------------------------------------------------------------------
+# Author: Justin Too <too1@llnl.gov>
+#------------------------------------------------------------------------------
+
+from spack import *
+
+class Rose(Package):
+ """A compiler infrastructure to build source-to-source program
+ transformation and analysis tools.
+ (Developed at Lawrence Livermore National Lab)"""
+
+ homepage = "http://rosecompiler.org/"
+ url = "https://github.com/rose-compiler/edg4x-rose"
+
+ version('master', branch='master', git='https://github.com/rose-compiler/edg4x-rose.git')
+
+ patch('add_spack_compiler_recognition.patch')
+
+ depends_on("autoconf@2.69")
+ depends_on("automake@1.14")
+ depends_on("libtool@2.4")
+ depends_on("boost@1.54.0")
+ depends_on("jdk@8u25-linux-x64")
+
+ def install(self, spec, prefix):
+ # Bootstrap with autotools
+ bash = which('bash')
+ bash('build')
+
+ # Configure, compile & install
+ with working_dir('rose-build', create=True):
+ boost = spec['boost']
+
+ configure = Executable('../configure')
+ configure("--prefix=" + prefix,
+ "--with-boost=" + boost.prefix,
+ "--disable-boost-version-check")
+ make("install-core")
+
diff --git a/var/spack/packages/ruby/package.py b/var/spack/packages/ruby/package.py
new file mode 100644
index 0000000000..718fd0a3be
--- /dev/null
+++ b/var/spack/packages/ruby/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Ruby(Package):
+ """A dynamic, open source programming language with a focus on
+ simplicity and productivity."""
+
+ homepage = "https://www.ruby-lang.org/"
+ url = "http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz"
+
+ version('2.2.0', 'cd03b28fd0b555970f5c4fd481700852')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/scr/package.py b/var/spack/packages/scr/package.py
index d456ecaba0..74b75a8742 100644
--- a/var/spack/packages/scr/package.py
+++ b/var/spack/packages/scr/package.py
@@ -28,7 +28,7 @@ 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-rnd.llnl.gov/scr"
+ homepage = "https://computation.llnl.gov/project/scr/"
url = "http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz"
depends_on("mpi")
diff --git a/var/spack/packages/spindle/package.py b/var/spack/packages/spindle/package.py
index fd59282ebb..06a1e14284 100644
--- a/var/spack/packages/spindle/package.py
+++ b/var/spack/packages/spindle/package.py
@@ -30,7 +30,7 @@ class Spindle(Package):
overload on a shared file system when loading dynamically
linked libraries, causing site-wide performance problems.
"""
- homepage = "https://computation-rnd.llnl.gov/spindle"
+ homepage = "https://computation.llnl.gov/project/spindle/"
url = "https://github.com/hpc/Spindle/archive/v0.8.1.tar.gz"
list_url = "https://github.com/hpc/Spindle/releases"
diff --git a/var/spack/packages/tcl/package.py b/var/spack/packages/tcl/package.py
new file mode 100644
index 0000000000..529adf7788
--- /dev/null
+++ b/var/spack/packages/tcl/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class Tcl(Package):
+ """Tcl (Tool Command Language) is a very powerful but easy to
+ learn dynamic programming language, suitable for a very wide
+ range of uses, including web and desktop applications,
+ networking, administration, testing and many more. Open source
+ and business-friendly, Tcl is a mature yet evolving language
+ that is truly cross platform, easily deployed and highly
+ extensible."""
+ homepage = "http://www.tcl.tk"
+
+ version('8.6.3', 'db382feca91754b7f93da16dc4cdad1f',
+ url="http://prdownloads.sourceforge.net/tcl/tcl8.6.3-src.tar.gz")
+
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ with working_dir('unix'):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/tk/package.py b/var/spack/packages/tk/package.py
new file mode 100644
index 0000000000..96736f6f95
--- /dev/null
+++ b/var/spack/packages/tk/package.py
@@ -0,0 +1,22 @@
+from spack import *
+
+class Tk(Package):
+ """Tk is a graphical user interface toolkit that takes developing
+ desktop applications to a higher level than conventional
+ approaches. Tk is the standard GUI not only for Tcl, but for
+ many other dynamic languages, and can produce rich, native
+ applications that run unchanged across Windows, Mac OS X, Linux
+ and more."""
+ homepage = "http://www.tcl.tk"
+ url = "http://prdownloads.sourceforge.net/tcl/tk8.6.3-src.tar.gz"
+
+ version('src', '85ca4dbf4dcc19777fd456f6ee5d0221')
+
+ depends_on("tcl")
+
+ def install(self, spec, prefix):
+ with working_dir('unix'):
+ configure("--prefix=%s" % prefix,
+ "--with-tcl=%s" % spec['tcl'].prefix.lib)
+ make()
+ make("install")
diff --git a/var/spack/packages/util-linux/package.py b/var/spack/packages/util-linux/package.py
new file mode 100644
index 0000000000..cb7ceabf57
--- /dev/null
+++ b/var/spack/packages/util-linux/package.py
@@ -0,0 +1,20 @@
+from spack import *
+import os
+
+class UtilLinux(Package):
+ """Util-linux is a suite of essential utilities for any Linux system."""
+
+ homepage = "http://freecode.com/projects/util-linux"
+ url = "https://www.kernel.org/pub/linux/utils/util-linux/v2.25/util-linux-2.25.tar.gz"
+
+ version('2.25', 'f6d7fc6952ec69c4dc62c8d7c59c1d57')
+
+ depends_on("python@2.7:")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "PKG_CONFIG_PATH=%s/pkgconfig" % spec['python'].prefix.lib,
+ "--disable-use-tty-group")
+
+ make()
+ make("install")
diff --git a/var/spack/packages/vtk/package.py b/var/spack/packages/vtk/package.py
new file mode 100644
index 0000000000..4a27a8fedb
--- /dev/null
+++ b/var/spack/packages/vtk/package.py
@@ -0,0 +1,40 @@
+from spack import *
+
+class Vtk(Package):
+ """The Visualization Toolkit (VTK) is an open-source, freely
+ available software system for 3D computer graphics, image
+ processing and visualization. """
+ homepage = "http://www.vtk.org"
+ url = "http://www.vtk.org/files/release/6.1/VTK-6.1.0.tar.gz"
+
+ version('6.1.0', '25e4dfb3bad778722dcaec80cd5dab7d')
+
+ depends_on("qt")
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake_args = [
+ "..",
+ "-DBUILD_SHARED_LIBS=ON",
+ # Disable wrappers for other languages.
+ "-DVTK_WRAP_PYTHON=OFF",
+ "-DVTK_WRAP_JAVA=OFF",
+ "-DVTK_WRAP_TCL=OFF"]
+ cmake_args.extend(std_cmake_args)
+
+ # Enable Qt support here.
+ cmake_args.extend([
+ "-DQT_QMAKE_EXECUTABLE:PATH=%s/qmake" % spec['qt'].prefix.bin,
+ "-DVTK_Group_Qt:BOOL=ON",
+ # Ignore webkit because it's hard to build w/Qt
+ "-DVTK_Group_Qt=OFF",
+ "-DModule_vtkGUISupportQt:BOOL=ON",
+ "-DModule_vtkGUISupportQtOpenGL:BOOL=ON"
+ ])
+
+ if spec['qt'].satisfies('@5'):
+ cmake_args.append("-DVTK_QT_VERSION:STRING=5")
+
+ cmake(*cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/packages/wget/package.py b/var/spack/packages/wget/package.py
new file mode 100644
index 0000000000..c8fd025122
--- /dev/null
+++ b/var/spack/packages/wget/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Wget(Package):
+ """GNU Wget is a free software package for retrieving files using
+ HTTP, HTTPS and FTP, the most widely-used Internet protocols. It
+ is a non-interactive commandline tool, so it may easily be called
+ from scripts, cron jobs, terminals without X-Windows support,
+ etc."""
+
+ homepage = "http://www.gnu.org/software/wget/"
+ url = "http://ftp.gnu.org/gnu/wget/wget-1.16.tar.xz"
+
+ version('1.16', 'fe102975ab3a6c049777883f1bb9ad07')
+
+ depends_on("openssl")
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix,
+ "--with-ssl=openssl")
+ make()
+ make("install")
diff --git a/var/spack/packages/xcb-proto/package.py b/var/spack/packages/xcb-proto/package.py
new file mode 100644
index 0000000000..17a94bd892
--- /dev/null
+++ b/var/spack/packages/xcb-proto/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class XcbProto(Package):
+ """Protocol for libxcb"""
+
+ homepage = "http://xcb.freedesktop.org/"
+ url = "http://xcb.freedesktop.org/dist/xcb-proto-1.11.tar.gz"
+
+ version('1.11', 'c8c6cb72c84f58270f4db1f39607f66a')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/xz/package.py b/var/spack/packages/xz/package.py
new file mode 100644
index 0000000000..88c5793018
--- /dev/null
+++ b/var/spack/packages/xz/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Xz(Package):
+ """XZ Utils is free general-purpose data compression software with
+ high compression ratio. XZ Utils were written for POSIX-like
+ systems, but also work on some not-so-POSIX systems. XZ Utils are
+ the successor to LZMA Utils."""
+ homepage = "http://tukaani.org/xz/"
+ url = "http://tukaani.org/xz/xz-5.2.0.tar.bz2"
+
+ version('5.2.0', '867cc8611760240ebf3440bd6e170bb9')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/yasm/package.py b/var/spack/packages/yasm/package.py
new file mode 100644
index 0000000000..d3a695b16d
--- /dev/null
+++ b/var/spack/packages/yasm/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Yasm(Package):
+ """Yasm is a complete rewrite of the NASM-2.11.06 assembler. It
+ supports the x86 and AMD64 instruction sets, accepts NASM and
+ GAS assembler syntaxes and outputs binary, ELF32 and ELF64
+ object formats."""
+ homepage = "http://yasm.tortall.net"
+ url = "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz"
+
+ version('1.3.0', 'fc9e586751ff789b34b1f21d572d96af')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")