From ac088bae6a09c8d2ee7f9deac3e701126ca5dfa4 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Tue, 1 Sep 2015 16:02:14 -0700 Subject: [PATCH 01/37] update boost --- var/spack/packages/boost/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/var/spack/packages/boost/package.py b/var/spack/packages/boost/package.py index 254d1afda1..35824d53a2 100644 --- a/var/spack/packages/boost/package.py +++ b/var/spack/packages/boost/package.py @@ -14,6 +14,10 @@ class Boost(Package): list_url = "http://sourceforge.net/projects/boost/files/boost/" list_depth = 2 + version('1.59.0', '6aa9a5c6a4ca1016edd0ed1178e3cb87') + version('1.58.0', 'b8839650e61e9c1c0a89f371dd475546') + version('1.57.0', '1be49befbdd9a5ce9def2983ba3e7b76') + version('1.56.0', 'a744cf167b05d72335f27c88115f211d') version('1.55.0', 'd6eef4b4cacb2183f2bf265a5a03a354') version('1.54.0', '15cb8c0803064faef0c4ddf5bc5ca279') version('1.53.0', 'a00d22605d5dbcfb4c9936a9b35bc4c2') From b06117f77a71a5c82a07b2ff063c30cb9a9a25c3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 3 Sep 2015 14:19:27 -0700 Subject: [PATCH 02/37] Add fish (shell) package --- var/spack/packages/fish/package.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 var/spack/packages/fish/package.py diff --git a/var/spack/packages/fish/package.py b/var/spack/packages/fish/package.py new file mode 100644 index 0000000000..1225558705 --- /dev/null +++ b/var/spack/packages/fish/package.py @@ -0,0 +1,18 @@ +from spack import * + +class Fish(Package): + """fish is a smart and user-friendly command line shell for OS X, Linux, and + the rest of the family. + """ + + homepage = "http://fishshell.com/" + url = "http://fishshell.com/files/2.2.0/fish-2.2.0.tar.gz" + list_url = homepage + + version('2.2.0', 'a76339fd14ce2ec229283c53e805faac48c3e99d9e3ede9d82c0554acfc7b77a') + + def install(self, spec, prefix): + configure('--prefix=%s' % prefix) + + make() + make("install") From 99ca0f31531059037a6508aab8ecc62d080f8ce5 Mon Sep 17 00:00:00 2001 From: Justin Too Date: Fri, 11 Sep 2015 20:27:09 +0000 Subject: [PATCH 03/37] (Package) Add Doxygen (v1.8.10) --- var/spack/packages/doxygen/package.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 var/spack/packages/doxygen/package.py diff --git a/var/spack/packages/doxygen/package.py b/var/spack/packages/doxygen/package.py new file mode 100644 index 0000000000..3d4a4e47a7 --- /dev/null +++ b/var/spack/packages/doxygen/package.py @@ -0,0 +1,25 @@ +#------------------------------------------------------------------------------ +# Author: Justin Too +# Date: September 11, 2015 +#------------------------------------------------------------------------------ + +from spack import * + +class Doxygen(Package): + """Doxygen is the de facto standard tool for generating documentation + from annotated C++ sources, but it also supports other popular programming + languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, + Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.. + """ + homepage = "http://www.stack.nl/~dimitri/doxygen/" + url = "http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.10.src.tar.gz" + + version('1.8.10', '79767ccd986f12a0f949015efb5f058f') + + depends_on("cmake@2.8.12:") + + def install(self, spec, prefix): + cmake('.', *std_cmake_args) + + make() + make("install") From e4e22ed17ec92a7be2895070e1d720ba4afb3dcb Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 21 Sep 2015 16:19:50 -0700 Subject: [PATCH 04/37] add protobuf package --- var/spack/packages/protobuf/package.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 var/spack/packages/protobuf/package.py diff --git a/var/spack/packages/protobuf/package.py b/var/spack/packages/protobuf/package.py new file mode 100644 index 0000000000..34085c7ce9 --- /dev/null +++ b/var/spack/packages/protobuf/package.py @@ -0,0 +1,16 @@ +import os +from spack import * + +class Protobuf(Package): + """Google's data interchange format.""" + + homepage = "https://developers.google.com/protocol-buffers" + url = "https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2" + + version('2.5.0', 'a72001a9067a4c2c4e0e836d0f92ece4') + + def install(self, spec, prefix): + configure("--prefix=" + prefix) + make() + make("check") + make("install") From b5d7cd55ce197bf4e6d476996ab874083efb86a2 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 21 Sep 2015 16:30:11 -0700 Subject: [PATCH 05/37] add glog package --- var/spack/packages/glog/package.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 var/spack/packages/glog/package.py diff --git a/var/spack/packages/glog/package.py b/var/spack/packages/glog/package.py new file mode 100644 index 0000000000..d73386b394 --- /dev/null +++ b/var/spack/packages/glog/package.py @@ -0,0 +1,15 @@ +import os +from spack import * + +class Glog(Package): + """C++ implementation of the Google logging module.""" + + homepage = "https://github.com/google/glog" + url = "https://github.com/google/glog/archive/v0.3.3.tar.gz" + + version('0.3.3', 'c1f86af27bd9c73186730aa957607ed0') + + def install(self, spec, prefix): + configure("--prefix=" + prefix) + make() + make("install") From 22ba02b22b50107463928878430dbab2b26c39d1 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 21 Sep 2015 16:40:23 -0700 Subject: [PATCH 06/37] add gflags package --- var/spack/packages/gflags/package.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 var/spack/packages/gflags/package.py diff --git a/var/spack/packages/gflags/package.py b/var/spack/packages/gflags/package.py new file mode 100644 index 0000000000..62dd80a094 --- /dev/null +++ b/var/spack/packages/gflags/package.py @@ -0,0 +1,21 @@ +import os +from spack import * + +class Gflags(Package): + """The gflags package contains a C++ library that implements + commandline flags processing. It includes built-in support for + standard types such as string and the ability to define flags + in the source file in which they are used. Online documentation + available at: https://gflags.github.io/gflags/""" + + homepage = "https://gflags.github.io/gflags" + url = "https://github.com/gflags/gflags/archive/v2.1.2.tar.gz" + + version('2.1.2', 'ac432de923f9de1e9780b5254884599f') + + def install(self, spec, prefix): + cmake("-DCMAKE_INSTALL_PREFIX=" + prefix, + "-DBUILD_SHARED_LIBS=ON") + make() + make("test") + make("install") From 30acc6f2f04beb56ef67af385cc8543ceeca82af Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Mon, 21 Sep 2015 16:45:59 -0700 Subject: [PATCH 07/37] add snappy package --- var/spack/packages/snappy/package.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 var/spack/packages/snappy/package.py diff --git a/var/spack/packages/snappy/package.py b/var/spack/packages/snappy/package.py new file mode 100644 index 0000000000..c8f9ceef7d --- /dev/null +++ b/var/spack/packages/snappy/package.py @@ -0,0 +1,15 @@ +import os +from spack import * + +class Snappy(Package): + """A fast compressor/decompressor: https://code.google.com/p/snappy""" + + homepage = "https://code.google.com/p/snappy" + url = "https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz" + + version('1.1.3', '7358c82f133dc77798e4c2062a749b73') + + def install(self, spec, prefix): + configure("--prefix=" + prefix) + make() + make("install") From 3ade141829bc382cd7d50d02d79967e78d0de147 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Tue, 22 Sep 2015 11:59:09 -0700 Subject: [PATCH 08/37] add leveldb package --- var/spack/packages/leveldb/package.py | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 var/spack/packages/leveldb/package.py diff --git a/var/spack/packages/leveldb/package.py b/var/spack/packages/leveldb/package.py new file mode 100644 index 0000000000..da68a9cbcb --- /dev/null +++ b/var/spack/packages/leveldb/package.py @@ -0,0 +1,29 @@ +import os +import glob +from spack import * + +class Leveldb(Package): + """LevelDB is a fast key-value storage library written at Google + that provides an ordered mapping from string keys to string values.""" + + homepage = "https://github.com/google/leveldb" + url = "https://github.com/google/leveldb/archive/v1.18.tar.gz" + + version('1.18', '73770de34a2a5ab34498d2e05b2b7fa0') + + depends_on("snappy") + + def install(self, spec, prefix): + make() + + mkdirp(prefix.include) + mkdirp(prefix.lib) + + cp = which('cp') + + # cp --preserve=links libleveldb.* prefix/lib + args = glob.glob('libleveldb.*') + args.append(prefix + '/lib') + cp('--preserve=links', *args) + + cp('-r', 'include/leveldb', prefix + '/include') From 84823ed828599aa03ba9d6cd49488d975652d242 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Tue, 22 Sep 2015 12:17:01 -0700 Subject: [PATCH 09/37] add lmdb package --- var/spack/packages/lmdb/package.py | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 var/spack/packages/lmdb/package.py diff --git a/var/spack/packages/lmdb/package.py b/var/spack/packages/lmdb/package.py new file mode 100644 index 0000000000..875b8100c5 --- /dev/null +++ b/var/spack/packages/lmdb/package.py @@ -0,0 +1,39 @@ +import os +from spack import * + +class Lmdb(Package): + """Read-only mirror of official repo on openldap.org. Issues and + pull requests here are ignored. Use OpenLDAP ITS for issues. + http://www.openldap.org/software/repo.html""" + + + homepage = "http://www.openldap.org/software/repo.html" + url = "https://github.com/LMDB/lmdb/archive/LMDB_0.9.16.tar.gz" + + version('0.9.16', '0de89730b8f3f5711c2b3a4ba517b648') + + def install(self, spec, prefix): + os.chdir('libraries/liblmdb') + + make() + + mkdirp(prefix.bin) + mkdirp(prefix + '/man/man1') + mkdirp(prefix.lib) + mkdirp(prefix.include) + + bins = ['mdb_stat', 'mdb_copy', 'mdb_dump', 'mdb_load'] + for f in bins: + install(f, prefix.bin) + + mans = ['mdb_stat.1', 'mdb_copy.1', 'mdb_dump.1', 'mdb_load.1'] + for f in mans: + install(f, prefix + '/man/man1') + + libs = ['liblmdb.a', 'liblmdb.so'] + for f in libs: + install(f, prefix.lib) + + includes = ['lmdb.h'] + for f in includes: + install(f, prefix.include) From 521632b3dc30c81fe4230ef010b972e65d80c47a Mon Sep 17 00:00:00 2001 From: Mario Melara Date: Wed, 23 Sep 2015 16:30:44 -0700 Subject: [PATCH 10/37] Added samtools bioinformatics software --- var/spack/packages/samtools/package.py | 18 +++++++++++++++++ var/spack/packages/samtools/samtools1.2.patch | 20 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 var/spack/packages/samtools/package.py create mode 100644 var/spack/packages/samtools/samtools1.2.patch diff --git a/var/spack/packages/samtools/package.py b/var/spack/packages/samtools/package.py new file mode 100644 index 0000000000..72900398d8 --- /dev/null +++ b/var/spack/packages/samtools/package.py @@ -0,0 +1,18 @@ +from spack import * + +class Samtools(Package): + """SAM Tools provide various utilities for manipulating alignments in the SAM format, + including sorting, merging, indexing and generating + alignments in a per-position format""" + + homepage = "www.htslib.org" + version('1.2','988ec4c3058a6ceda36503eebecd4122',url = "https://github.com/samtools/samtools/releases/download/1.2/samtools-1.2.tar.bz2") + + depends_on("zlib") + depends_on("mpc") + parallel=False + patch("samtools1.2.patch",level=0) + + def install(self, spec, prefix): + make("prefix=%s" % prefix, "install") + diff --git a/var/spack/packages/samtools/samtools1.2.patch b/var/spack/packages/samtools/samtools1.2.patch new file mode 100644 index 0000000000..ead3ab4e2c --- /dev/null +++ b/var/spack/packages/samtools/samtools1.2.patch @@ -0,0 +1,20 @@ +--- Makefile 2015-02-03 08:27:34.000000000 -0800 ++++ Makefile.new 2015-07-21 10:38:27.881406892 -0700 +@@ -26,7 +26,7 @@ + CFLAGS = -g -Wall -O2 + LDFLAGS = + LDLIBS = +-DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=1 ++DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=0 + LOBJS= bam_aux.o bam.o bam_import.o sam.o \ + sam_header.o bam_plbuf.o + AOBJS= bam_index.o bam_plcmd.o sam_view.o \ +@@ -37,7 +37,7 @@ + faidx.o stats.o stats_isize.o bam_flags.o bam_split.o \ + bam_tview.o bam_tview_curses.o bam_tview_html.o bam_lpileup.o + INCLUDES= -I. -I$(HTSDIR) +-LIBCURSES= -lcurses # -lXCurses ++#LIBCURSES= -lcurses # -lXCurses + + prefix = /usr/local + exec_prefix = $(prefix) From 13eb461ec31520c75d6d604038e455468d061a61 Mon Sep 17 00:00:00 2001 From: Mario Melara Date: Thu, 24 Sep 2015 11:21:54 -0700 Subject: [PATCH 11/37] Adding bowtie2 package along with patch --- var/spack/packages/bowtie2/bowtie2-2.5.patch | 16 +++++++++++++ var/spack/packages/bowtie2/package.py | 24 ++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 var/spack/packages/bowtie2/bowtie2-2.5.patch create mode 100644 var/spack/packages/bowtie2/package.py diff --git a/var/spack/packages/bowtie2/bowtie2-2.5.patch b/var/spack/packages/bowtie2/bowtie2-2.5.patch new file mode 100644 index 0000000000..290be39c73 --- /dev/null +++ b/var/spack/packages/bowtie2/bowtie2-2.5.patch @@ -0,0 +1,16 @@ +--- Makefile 2015-02-26 10:50:00.000000000 -0800 ++++ Makefile.new 2015-07-29 18:03:59.891357399 -0700 +@@ -22,10 +22,10 @@ + # + + INC = +-GCC_PREFIX = $(shell dirname `which gcc`) ++GCC_PREFIX = + GCC_SUFFIX = +-CC = $(GCC_PREFIX)/gcc$(GCC_SUFFIX) +-CPP = $(GCC_PREFIX)/g++$(GCC_SUFFIX) ++CC = cc ++CPP = c++ + CXX = $(CPP) + HEADERS = $(wildcard *.h) + BOWTIE_MM = 1 diff --git a/var/spack/packages/bowtie2/package.py b/var/spack/packages/bowtie2/package.py new file mode 100644 index 0000000000..339aab6598 --- /dev/null +++ b/var/spack/packages/bowtie2/package.py @@ -0,0 +1,24 @@ +from spack import * +from glob import glob +class Bowtie2(Package): + """Description""" + homepage = "bowtie-bio.sourceforge.net/bowtie2/index.shtml" + version('2.2.5','51fa97a862d248d7ee660efc1147c75f', url = "http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.5/bowtie2-2.2.5-source.zip") + + patch('bowtie2-2.5.patch',when='@2.2.5', level=0) + + def install(self, spec, prefix): + make() + mkdirp(prefix.bin) + for bow in glob("bowtie2*"): + install(bow, prefix.bin) + # install('bowtie2',prefix.bin) + # install('bowtie2-align-l',prefix.bin) + # install('bowtie2-align-s',prefix.bin) + # install('bowtie2-build',prefix.bin) + # install('bowtie2-build-l',prefix.bin) + # install('bowtie2-build-s',prefix.bin) + # install('bowtie2-inspect',prefix.bin) + # install('bowtie2-inspect-l',prefix.bin) + # install('bowtie2-inspect-s',prefix.bin) + From adbd393c390dd78dca6cdb986ae72835dc1bf8b1 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sun, 27 Sep 2015 16:52:38 -0700 Subject: [PATCH 12/37] Remove special characters (@, %, +, ~, etc) from stage name --- lib/spack/spack/package.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index 3507807373..61606d0590 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -438,9 +438,16 @@ def stage(self): raise ValueError("Can only get a stage for a concrete package.") if self._stage is None: + # Construct a mirror path (TODO: get this out of package.py) mp = spack.mirror.mirror_archive_path(self.spec) - self._stage = Stage( - self.fetcher, mirror_path=mp, name=self.spec.short_spec) + + # Construct a path where the stage should build.. + s = self.spec + stage_name = "%s-%s-%s" % (s.name, s.version, s.dag_hash()) + + # Build the stage + self._stage = Stage(self.fetcher, mirror_path=mp, name=stage_name) + return self._stage From 8818f4ac5e9ce8e7669e06fa71ca17b8301bda19 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sun, 27 Sep 2015 16:57:20 -0700 Subject: [PATCH 13/37] Remove enabled variants from install prefix. - these make the prefix too long in many cases. - users can figure out which install is which by querying. --- lib/spack/spack/directory_layout.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py index e61929d8fd..85ecc1ce2b 100644 --- a/lib/spack/spack/directory_layout.py +++ b/lib/spack/spack/directory_layout.py @@ -187,14 +187,9 @@ def hidden_file_paths(self): def relative_path_for_spec(self, spec): _check_concrete(spec) - enabled_variants = ( - '-' + v.name for v in spec.variants.values() - if v.enabled) - - dir_name = "%s-%s%s-%s" % ( + dir_name = "%s-%s-%s" % ( spec.name, spec.version, - ''.join(enabled_variants), spec.dag_hash(self.hash_len)) path = join_path( From 5563c666758f593b311a2de3e47cf617966a4c25 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Tue, 29 Sep 2015 18:18:34 -0700 Subject: [PATCH 14/37] update scr to 1.1.8 --- var/spack/packages/scr/package.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/var/spack/packages/scr/package.py b/var/spack/packages/scr/package.py index 74b75a8742..9fb758f072 100644 --- a/var/spack/packages/scr/package.py +++ b/var/spack/packages/scr/package.py @@ -28,12 +28,14 @@ class Scr(Package): """SCR caches checkpoint data in storage on the compute nodes of a Linux cluster to provide a fast, scalable checkpoint/restart capability for MPI codes""" + homepage = "https://computation.llnl.gov/project/scr/" - url = "http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz" depends_on("mpi") +# depends_on("dtcmp") - version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd') + version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd', url='http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz') + version('1.1.8', '6a0f11ad18e27fcfc00a271ff587b06e', url='https://github.com/hpc/scr/releases/download/v1.1.8/scr-1.1.8.tar.gz') def install(self, spec, prefix): configure("--prefix=" + prefix, From 75d30b08fbf09cbbc587891d0df472327d3669b9 Mon Sep 17 00:00:00 2001 From: Mario Melara Date: Thu, 1 Oct 2015 21:51:55 -0700 Subject: [PATCH 15/37] Added current version 3.2 of libffi version 3.1 has a bug that interferes with glib --- var/spack/packages/libffi/package.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/var/spack/packages/libffi/package.py b/var/spack/packages/libffi/package.py index 2c1c4eed4d..acec031717 100644 --- a/var/spack/packages/libffi/package.py +++ b/var/spack/packages/libffi/package.py @@ -6,11 +6,12 @@ class Libffi(Package): to call any function specified by a call interface description at run time.""" homepage = "https://sourceware.org/libffi/" - url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz" - - version('3.1', 'f5898b29bbfd70502831a212d9249d10') + + version('3.2.1','83b89587607e3eb65c70d361f13bab43',url = "ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz") + #version('3.1', 'f5898b29bbfd70502831a212d9249d10',url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz") # Has a bug $(lib64) instead of ${lib64} in libffi.pc def install(self, spec, prefix): configure("--prefix=%s" % prefix) make() make("install") + From 6fcf16b710ef5e8ec8639aa191200661be7be2fd Mon Sep 17 00:00:00 2001 From: "Gregory L. Lee" Date: Mon, 5 Oct 2015 12:59:26 -0700 Subject: [PATCH 16/37] added libxcb version 1.11.1 --- var/spack/packages/libxcb/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/var/spack/packages/libxcb/package.py b/var/spack/packages/libxcb/package.py index 521cd0d475..16a5525c0d 100644 --- a/var/spack/packages/libxcb/package.py +++ b/var/spack/packages/libxcb/package.py @@ -10,7 +10,7 @@ class Libxcb(Package): url = "http://xcb.freedesktop.org/dist/libxcb-1.11.tar.gz" version('1.11', '1698dd837d7e6e94d029dbe8b3a82deb') - + version('1.11.1', '118623c15a96b08622603a71d8789bf3') depends_on("python") depends_on("xcb-proto") From 58c53738900db52615062387165e1e8ba9801362 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Thu, 8 Oct 2015 00:14:44 -0700 Subject: [PATCH 17/37] update warning message for spack -k. - warning said it didn't do checksums; really does. --- bin/spack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/spack b/bin/spack index 5c042edd2d..127a85f6fe 100755 --- a/bin/spack +++ b/bin/spack @@ -118,7 +118,7 @@ def main(): # If the user asked for it, don't check ssl certs. if args.insecure: - tty.warn("You asked for --insecure, which does not check SSL certificates or checksums.") + tty.warn("You asked for --insecure, which does not check SSL certificates.") spack.curl.add_default_arg('-k') # Try to load the particular command asked for and run it From 5dd39bfca56e984089236f4383d3ad348e1b0a54 Mon Sep 17 00:00:00 2001 From: "Gregory L. Lee" Date: Thu, 8 Oct 2015 08:12:30 -0700 Subject: [PATCH 18/37] bug fix for github issue 122 --- var/spack/packages/bzip2/package.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/var/spack/packages/bzip2/package.py b/var/spack/packages/bzip2/package.py index fbd5869a53..d88336664d 100644 --- a/var/spack/packages/bzip2/package.py +++ b/var/spack/packages/bzip2/package.py @@ -22,8 +22,10 @@ def install(self, spec, prefix): bzip2_exe = join_path(prefix.bin, 'bzip2') install('bzip2-shared', bzip2_exe) - for libfile in glob('libbz2.so*'): + for i, libfile in enumerate(glob('libbz2.so*')): install(libfile, prefix.lib) + if i == 0: + symlink(join_path(prefix.lib, libfile), join_path(prefix.lib, 'libbz2.so')) bunzip2 = join_path(prefix.bin, 'bunzip2') remove(bunzip2) From 2c81875019803af7b7f08b070f37c45e51a3c7d5 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Mon, 12 Oct 2015 14:44:41 -0700 Subject: [PATCH 19/37] Fix bug in colify color handling. --- lib/spack/llnl/util/tty/colify.py | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/lib/spack/llnl/util/tty/colify.py b/lib/spack/llnl/util/tty/colify.py index 66c52c3968..db928444c7 100644 --- a/lib/spack/llnl/util/tty/colify.py +++ b/lib/spack/llnl/util/tty/colify.py @@ -33,8 +33,7 @@ from StringIO import StringIO from llnl.util.tty import terminal_size -from llnl.util.tty.color import clen - +from llnl.util.tty.color import clen, cextra class ColumnConfig: def __init__(self, cols): @@ -42,7 +41,6 @@ def __init__(self, cols): self.line_length = 0 self.valid = True self.widths = [0] * cols # does not include ansi colors - self.cwidths = [0] * cols # includes ansi colors def __repr__(self): attrs = [(a,getattr(self, a)) for a in dir(self) if not a.startswith("__")] @@ -66,8 +64,6 @@ def config_variable_cols(elts, console_width, padding, cols=0): # Get a bound on the most columns we could possibly have. # 'clen' ignores length of ansi color sequences. lengths = [clen(e) for e in elts] - clengths = [len(e) for e in elts] - max_cols = max(1, console_width / (min(lengths) + padding)) max_cols = min(len(elts), max_cols) @@ -85,7 +81,6 @@ def config_variable_cols(elts, console_width, padding, cols=0): if conf.widths[col] < (length + p): conf.line_length += length + p - conf.widths[col] conf.widths[col] = length + p - conf.cwidths[col] = clengths[i] + p conf.valid = (conf.line_length < console_width) try: @@ -118,7 +113,6 @@ def config_uniform_cols(elts, console_width, padding, cols=0): config = ColumnConfig(cols) config.widths = [max_len] * cols - config.cwidths = [max_clen] * cols return config @@ -147,9 +141,6 @@ def colify(elts, **options): method= Method to use to fit columns. Options are variable or uniform. Variable-width columns are tighter, uniform columns are all the same width and fit less data on the screen. - - len= Function to use for calculating string length. - Useful for ignoring ansi color. Default is 'len'. """ # Get keyword arguments or set defaults cols = options.pop("cols", 0) @@ -199,9 +190,6 @@ def colify(elts, **options): raise ValueError("method must be one of: " + allowed_methods) cols = config.cols - formats = ["%%-%ds" % width for width in config.cwidths[:-1]] - formats.append("%s") # last column has no trailing space - rows = (len(elts) + cols - 1) / cols rows_last_col = len(elts) % rows @@ -209,7 +197,9 @@ def colify(elts, **options): output.write(" " * indent) for col in xrange(cols): elt = col * rows + row - output.write(formats[col] % elts[elt]) + width = config.widths[col] + cextra(elts[elt]) + fmt = '%%-%ds' % width + output.write(fmt % elts[elt]) output.write("\n") row += 1 From d16095c8560cbaae1020a8e84494b8877bfe36f5 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Tue, 13 Oct 2015 10:35:19 -0700 Subject: [PATCH 20/37] Add forgotten file from previous commit. --- lib/spack/llnl/util/tty/color.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/spack/llnl/util/tty/color.py b/lib/spack/llnl/util/tty/color.py index 22080a7b37..0d09303da0 100644 --- a/lib/spack/llnl/util/tty/color.py +++ b/lib/spack/llnl/util/tty/color.py @@ -158,6 +158,11 @@ def clen(string): return len(re.sub(r'\033[^m]*m', '', string)) +def cextra(string): + """"Length of extra color characters in a string""" + return len(''.join(re.findall(r'\033[^m]*m', string))) + + def cwrite(string, stream=sys.stdout, color=None): """Replace all color expressions in string with ANSI control codes and write the result to the stream. If color is From 9ec4ae83af7f88110e464fca22a9d1377d74b28e Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 15 Oct 2015 09:20:16 -0400 Subject: [PATCH 21/37] netcdf: link to MPI Newer GNU linker refuses to use transitive linking; if netcdf calls MPI_Allreduce, it must link the providing library directly. Also switched to CMake because I don't know autoconf well enough to know how to put MPI stuff into it. --- .../packages/netcdf/netcdf-4.3.3-mpi.patch | 25 ++++++++++++++++ var/spack/packages/netcdf/package.py | 29 +++++++++---------- 2 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch diff --git a/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch b/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch new file mode 100644 index 0000000000..46dda5fc9d --- /dev/null +++ b/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch @@ -0,0 +1,25 @@ +diff -Nur netcdf-4.3.3/CMakeLists.txt netcdf-4.3.3.mpi/CMakeLists.txt +--- netcdf-4.3.3/CMakeLists.txt 2015-02-12 16:44:35.000000000 -0500 ++++ netcdf-4.3.3.mpi/CMakeLists.txt 2015-10-14 16:44:41.176300658 -0400 +@@ -753,6 +753,7 @@ + SET(USE_PARALLEL OFF CACHE BOOL "") + MESSAGE(STATUS "Cannot find HDF5 library built with parallel support. Disabling parallel build.") + ELSE() ++ FIND_PACKAGE(MPI REQUIRED) + SET(USE_PARALLEL ON CACHE BOOL "") + SET(STATUS_PARALLEL "ON") + ENDIF() +diff -Nur netcdf-4.3.3/liblib/CMakeLists.txt netcdf-4.3.3.mpi/liblib/CMakeLists.txt +--- netcdf-4.3.3/liblib/CMakeLists.txt 2015-02-12 16:44:35.000000000 -0500 ++++ netcdf-4.3.3.mpi/liblib/CMakeLists.txt 2015-10-14 16:44:57.757793634 -0400 +@@ -71,6 +71,10 @@ + SET(TLL_LIBS ${TLL_LIBS} ${CURL_LIBRARY}) + ENDIF() + ++IF(USE_PARALLEL) ++ SET(TLL_LIBS ${TLL_LIBS} ${MPI_C_LIBRARIES}) ++ENDIF() ++ + IF(USE_HDF4) + SET(TLL_LIBS ${TLL_LIBS} ${HDF4_LIBRARIES}) + ENDIF() diff --git a/var/spack/packages/netcdf/package.py b/var/spack/packages/netcdf/package.py index 34284ea725..e1e0d836c6 100644 --- a/var/spack/packages/netcdf/package.py +++ b/var/spack/packages/netcdf/package.py @@ -1,28 +1,27 @@ from spack import * class Netcdf(Package): - """NetCDF is a set of software libraries and self-describing, machine-independent - data formats that support the creation, access, and sharing of array-oriented - scientific data.""" + """NetCDF is a set of software libraries and self-describing, machine-independent + data formats that support the creation, access, and sharing of array-oriented + scientific data.""" homepage = "http://www.unidata.ucar.edu/software/netcdf/" url = "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.3.tar.gz" version('4.3.3', '5fbd0e108a54bd82cb5702a73f56d2ae') + patch('netcdf-4.3.3-mpi.patch') + # Dependencies: - # >HDF5 + # >HDF5 depends_on("hdf5") - def install(self, spec, prefix): - configure( - "--prefix=%s" % prefix, - "--disable-dap", # Disable DAP. - "--disable-shared", # Don't build shared libraries (use static libs). - "CPPFLAGS=-I%s/include" % spec['hdf5'].prefix, # Link HDF5's include dir. - "LDFLAGS=-L%s/lib" % spec['hdf5'].prefix) # Link HDF5's lib dir. - - make("install") + def install(self, spec, prefix): + with working_dir('spack-build', create=True): + cmake('..', + "-DCMAKE_INSTALL_PREFIX:PATH=%s" % prefix, + "-DENABLE_DAP:BOOL=OFF", # Disable DAP. + "-DBUILD_SHARED_LIBS:BOOL=OFF") # Don't build shared libraries (use static libs). - # Check the newly installed netcdf package. Currently disabled. - # make("check") + make() + make("install") From 3ce85b22708769ff9d8b2b0ba79e4157dac46d74 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Thu, 15 Oct 2015 09:27:05 -0400 Subject: [PATCH 22/37] spack: split spack_root from prefix A foundation for allowing runtime configuring of the prefix. --- lib/spack/spack/__init__.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py index caa09eb6e0..6e8d41895f 100644 --- a/lib/spack/spack/__init__.py +++ b/lib/spack/spack/__init__.py @@ -27,24 +27,26 @@ from llnl.util.filesystem import * # This lives in $prefix/lib/spack/spack/__file__ -prefix = ancestor(__file__, 4) +spack_root = ancestor(__file__, 4) # The spack script itself -spack_file = join_path(prefix, "bin", "spack") +spack_file = join_path(spack_root, "bin", "spack") # spack directory hierarchy -etc_path = join_path(prefix, "etc") -lib_path = join_path(prefix, "lib", "spack") +lib_path = join_path(spack_root, "lib", "spack") build_env_path = join_path(lib_path, "env") module_path = join_path(lib_path, "spack") compilers_path = join_path(module_path, "compilers") test_path = join_path(module_path, "test") hooks_path = join_path(module_path, "hooks") -var_path = join_path(prefix, "var", "spack") +var_path = join_path(spack_root, "var", "spack") stage_path = join_path(var_path, "stage") +share_path = join_path(spack_root, "share", "spack") + +prefix = spack_root opt_path = join_path(prefix, "opt") install_path = join_path(opt_path, "spack") -share_path = join_path(prefix, "share", "spack") +etc_path = join_path(prefix, "etc") # # Set up the packages database. From 13e02bb179176218ad05975d848b013728abead9 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Fri, 16 Oct 2015 06:33:03 -0400 Subject: [PATCH 23/37] README.md: trivial typo fix Signed-off-by: Jeff Squyres --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74d618ed2f..03a5bc8af0 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ can coexist on the same system. Most importantly, Spack is simple. It offers a simple spec syntax so that users can specify versions and configuration options concisely. Spack is also simple for package authors: package files are -writtin in pure Python, and specs allow package authors to write a +written in pure Python, and specs allow package authors to write a single build script for many different builds of the same package. See the From f39e40664f8415493b2c5e511fdc608e97009186 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Fri, 16 Oct 2015 15:26:58 -0400 Subject: [PATCH 24/37] openmpi: add v1.10.0 and update v1.8.2->v1.8.8 --- var/spack/packages/openmpi/package.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/var/spack/packages/openmpi/package.py b/var/spack/packages/openmpi/package.py index 7e84cbaf65..925d390281 100644 --- a/var/spack/packages/openmpi/package.py +++ b/var/spack/packages/openmpi/package.py @@ -11,8 +11,10 @@ class Openmpi(Package): homepage = "http://www.open-mpi.org" - version('1.8.2', 'ab538ed8e328079d566fc797792e016e', - url='http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.2.tar.gz') + version('1.10.0', '280cf952de68369cebaca886c5ce0304', + url = "http://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.0.tar.bz2") + version('1.8.8', '0dab8e602372da1425e9242ae37faf8c', + url = 'http://www.open-mpi.org/software/ompi/v1.8/downloads/openmpi-1.8.8.tar.bz2') version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475', url = "http://www.open-mpi.org/software/ompi/v1.6/downloads/openmpi-1.6.5.tar.bz2") From 43f58d9f6183725f84c90bdd33a8386a5a9a8a97 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Fri, 16 Oct 2015 15:27:22 -0400 Subject: [PATCH 25/37] openmpi: update the MPI conformance for each Open MPI version --- var/spack/packages/openmpi/package.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/var/spack/packages/openmpi/package.py b/var/spack/packages/openmpi/package.py index 925d390281..f9d0034878 100644 --- a/var/spack/packages/openmpi/package.py +++ b/var/spack/packages/openmpi/package.py @@ -21,7 +21,9 @@ class Openmpi(Package): patch('ad_lustre_rwcontig_open_source.patch', when="@1.6.5") patch('llnl-platforms.patch', when="@1.6.5") - provides('mpi@:2') + provides('mpi@:2.2', when='@1.6.5') # Open MPI 1.6.5 supports MPI-2.2 + provides('mpi@:3.0', when='@1.8.8') # Open MPI 1.8.8 supports MPI-3.0 + provides('mpi@:3.0', when='@1.10.0') # Open MPI 1.10.0 supports MPI-3.0 def install(self, spec, prefix): config_args = ["--prefix=%s" % prefix] From 67b94acd42fcb883993d99fc965beae3d0a76a45 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Sat, 17 Oct 2015 07:06:06 -0400 Subject: [PATCH 26/37] mpich: add fine-grained MPI conformance versions Similar to the Open MPI and MVAPICH packages. Signed-off-by: Jeff Squyres --- var/spack/packages/mpich/package.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py index b6b2dfde21..c25c3eed91 100644 --- a/var/spack/packages/mpich/package.py +++ b/var/spack/packages/mpich/package.py @@ -35,8 +35,8 @@ class Mpich(Package): version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0') - provides('mpi@:3', when='@3:') - provides('mpi@:1', when='@1:') + provides('mpi@:3.0', when='@3:') + provides('mpi@:1.3', when='@1:') def setup_dependent_environment(self, module, spec, dep_spec): """For dependencies, make mpicc's use spack wrapper.""" From 44ba16a391d75f97bab9ebf0a8f1b609b18aba1d Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sat, 17 Oct 2015 17:03:49 -0700 Subject: [PATCH 27/37] Add libiberty option to binutils --- var/spack/packages/binutils/package.py | 16 ++++++++++++++-- var/spack/packages/gcc/package.py | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/var/spack/packages/binutils/package.py b/var/spack/packages/binutils/package.py index 5a3059bbcf..0c33bf0426 100644 --- a/var/spack/packages/binutils/package.py +++ b/var/spack/packages/binutils/package.py @@ -10,8 +10,20 @@ class Binutils(Package): version('2.23.2', '4f8fa651e35ef262edc01d60fb45702e') version('2.20.1', '2b9dc8f2b7dbd5ec5992c6e29de0b764') - def install(self, spec, prefix): - configure("--prefix=%s" % prefix) + variant('libiberty', default=False, description='Also install libiberty.') + def install(self, spec, prefix): + configure_args = [ + '--prefix=%s' % prefix, + '--disable-dependency-tracking', + '--enable-interwork', + '--enable-multilib', + '--enable-64-bit-bfd', + '--enable-targets=all'] + + if '+libiberty' in spec: + configure_args.append('--enable-install-libiberty') + + configure(*configure_args) make() make("install") diff --git a/var/spack/packages/gcc/package.py b/var/spack/packages/gcc/package.py index 5e3d1a3efa..2fc6794b70 100644 --- a/var/spack/packages/gcc/package.py +++ b/var/spack/packages/gcc/package.py @@ -47,7 +47,7 @@ class Gcc(Package): depends_on("gmp") depends_on("mpc") # when @4.5: depends_on("libelf") - depends_on("binutils") + depends_on("binutils~libiberty") # Save these until we can do optional deps. #depends_on("isl") From 7598612b86c35c062c2b7f4ed2bcee1729e11a03 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sat, 17 Oct 2015 17:34:39 -0700 Subject: [PATCH 28/37] Better info variant output. --- lib/spack/spack/cmd/info.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py index c6209523f0..085e4db44d 100644 --- a/lib/spack/spack/cmd/info.py +++ b/lib/spack/spack/cmd/info.py @@ -65,11 +65,21 @@ def print_text_info(pkg): print "None" else: pad = padder(pkg.variants, 4) + + maxv = max(len(v) for v in sorted(pkg.variants)) + fmt = "%%-%ss%%-10s%%s" % (maxv + 4) + + print " " + fmt % ('Name', 'Default', 'Description') + print for name in sorted(pkg.variants): v = pkg.variants[name] - print " %s%s" % ( - pad(('+' if v.default else '-') + name + ':'), - "\n".join(textwrap.wrap(v.description))) + default = 'on' if v.default else 'off' + + lines = textwrap.wrap(v.description) + lines[1:] = [" " + (" " * maxv) + l for l in lines[1:]] + desc = "\n".join(lines) + + print " " + fmt % (name, default, desc) print print "Dependencies:" From 805fa969517c24c65e123afe9c4304259aff288e Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sat, 17 Oct 2015 17:41:17 -0700 Subject: [PATCH 29/37] Update to link to more contributors. --- README.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 03a5bc8af0..98d781564c 100644 --- a/README.md +++ b/README.md @@ -62,21 +62,9 @@ latest stable release. Authors ---------------- -Spack was written by Todd Gamblin, tgamblin@llnl.gov. +Many thanks go to Spack's [contributors](https://github.com/scalability-llnl/spack/graphs/contributors). -Significant contributions were also made by: - - * David Beckingsale - * David Boehme - * Alfredo Gimenez - * Luc Jaulmes - * Matt Legendre - * Greg Lee - * Adam Moody - * Saravan Pantham - * Joachim Protze - * Bob Robey - * Justin Too +Spack was originally written by Todd Gamblin, tgamblin@llnl.gov. Release ---------------- From 3c788147cacfbf48f2eec9f3ee785d0e5d67bed3 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Sun, 18 Oct 2015 18:45:32 -0700 Subject: [PATCH 30/37] Add Spack logo. --- README.md | 4 ++-- lib/spack/docs/conf.py | 6 +++--- share/spack/logo/favicon.ico | Bin 0 -> 1150 bytes share/spack/logo/spack-logo-text-64.png | Bin 0 -> 18644 bytes share/spack/logo/spack-logo-white-text-48.png | Bin 0 -> 12201 bytes 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100755 share/spack/logo/favicon.ico create mode 100644 share/spack/logo/spack-logo-text-64.png create mode 100644 share/spack/logo/spack-logo-white-text-48.png diff --git a/README.md b/README.md index 98d781564c..3a2c535d4e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -Spack -=========== +![image](share/spack/logo/spack-logo-text-64.png "Spack") +============ Spack is a package management tool designed to support multiple versions and configurations of software on a wide variety of platforms diff --git a/lib/spack/docs/conf.py b/lib/spack/docs/conf.py index 7303d7fef6..bce9ef0e94 100644 --- a/lib/spack/docs/conf.py +++ b/lib/spack/docs/conf.py @@ -149,7 +149,7 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = [('show_copyright', False)] +html_theme_options = { 'logo_only' : True } # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ["_themes"] @@ -163,12 +163,12 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +html_logo = '../../../share/spack/logo/spack-logo-white-text-48.png' # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = None +html_favicon = '../../../share/spack/logo/favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, diff --git a/share/spack/logo/favicon.ico b/share/spack/logo/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..95a67ae5b1a21ec4a5a1a98278fa609a4ac91570 GIT binary patch literal 1150 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 N002ovPDHLkV1jT!k9+_C literal 0 HcmV?d00001 diff --git a/share/spack/logo/spack-logo-white-text-48.png b/share/spack/logo/spack-logo-white-text-48.png new file mode 100644 index 0000000000000000000000000000000000000000..9e60867e81cac2b86fe38b12bd506653682e964b GIT binary patch literal 12201 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 literal 0 HcmV?d00001 From f4460894beea13c2d028338503c9cef5608e05b6 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Fri, 25 Sep 2015 10:44:47 +0200 Subject: [PATCH 31/37] hdf5 : updated version mpich : updated version trilinos : created stub --- var/spack/packages/hdf5/package.py | 3 +- var/spack/packages/mpich/package.py | 5 ++++ var/spack/packages/trilinos/package.py | 40 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 var/spack/packages/trilinos/package.py diff --git a/var/spack/packages/hdf5/package.py b/var/spack/packages/hdf5/package.py index 992dd8ec70..15e0ef9338 100644 --- a/var/spack/packages/hdf5/package.py +++ b/var/spack/packages/hdf5/package.py @@ -10,7 +10,8 @@ class Hdf5(Package): url = "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz" list_url = "http://www.hdfgroup.org/ftp/HDF5/releases" list_depth = 3 - + + version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24') version('1.8.13', 'c03426e9e77d7766944654280b467289') depends_on("mpi") diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py index b6b2dfde21..315fc4a5a3 100644 --- a/var/spack/packages/mpich/package.py +++ b/var/spack/packages/mpich/package.py @@ -33,6 +33,11 @@ class Mpich(Package): list_url = "http://www.mpich.org/static/downloads/" list_depth = 2 + version('3.1.4', '2ab544607986486562e076b83937bba2') + version('3.1.3', '93cb17f91ac758cbf9174ecb03563778') + version('3.1.2', '7fbf4b81dcb74b07ae85939d1ceee7f1') + version('3.1.1', '40dc408b1e03cc36d80209baaa2d32b7') + version('3.1', '5643dd176499bfb7d25079aaff25f2ec') version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0') provides('mpi@:3', when='@3:') diff --git a/var/spack/packages/trilinos/package.py b/var/spack/packages/trilinos/package.py new file mode 100644 index 0000000000..2fa4f3cc84 --- /dev/null +++ b/var/spack/packages/trilinos/package.py @@ -0,0 +1,40 @@ +# FIXME: +# This is a template package file for Spack. We've conveniently +# put "FIXME" labels next to all the things you'll want to change. +# +# Once you've edited all the FIXME's, delete this whole message, +# save this file, and test out your package like this: +# +# spack install trilinos +# +# You can always get back here to change things with: +# +# spack edit trilinos +# +# See the spack documentation for more information on building +# packages. +# +from spack import * + +class Trilinos(Package): + """FIXME: put a proper description of your package here.""" + # FIXME: add a proper url for your package's homepage here. + homepage = "http://www.example.com" + url = "http://trilinos.csbsju.edu/download/files/trilinos-12.2.1-Source.tar.gz" + + version('12.2.1' , '6161926ea247863c690e927687f83be9') + version('12.0.1' , 'bd99741d047471e127b8296b2ec08017') + version('11.14.3', '2f4f83f8333e4233c57d0f01c4b57426') + version('11.14.2', 'a43590cf896c677890d75bfe75bc6254') + version('11.14.1', '40febc57f76668be8b6a77b7607bb67f') + + # FIXME: Add dependencies if this package requires them. + # depends_on("foo") + + def install(self, spec, prefix): + # FIXME: Modify the configure line to suit your build system here. + cmake('.', *std_cmake_args) + + # FIXME: Add logic to build and install here + make() + make("install") From ff0d039a1fea0b713455c38ab4df6a5cbe0d4783 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Thu, 15 Oct 2015 08:48:39 +0200 Subject: [PATCH 32/37] trilinos : prototype for the whole package --- var/spack/packages/trilinos/package.py | 53 +++++++++++++++++++------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/var/spack/packages/trilinos/package.py b/var/spack/packages/trilinos/package.py index 2fa4f3cc84..6f7cc253dd 100644 --- a/var/spack/packages/trilinos/package.py +++ b/var/spack/packages/trilinos/package.py @@ -16,25 +16,50 @@ # from spack import * -class Trilinos(Package): - """FIXME: put a proper description of your package here.""" - # FIXME: add a proper url for your package's homepage here. - homepage = "http://www.example.com" - url = "http://trilinos.csbsju.edu/download/files/trilinos-12.2.1-Source.tar.gz" - version('12.2.1' , '6161926ea247863c690e927687f83be9') - version('12.0.1' , 'bd99741d047471e127b8296b2ec08017') +class Trilinos(Package): + """ + The Trilinos Project is an effort to develop algorithms and enabling technologies within an object-oriented + software framework for the solution of large-scale, complex multi-physics engineering and scientific problems. + A unique design feature of Trilinos is its focus on packages. + """ + homepage = "https://trilinos.org/" + url = "http://trilinos.csbsju.edu/download/files/trilinos-12.2.1-Source.tar.gz" + + version('12.2.1', '6161926ea247863c690e927687f83be9') + version('12.0.1', 'bd99741d047471e127b8296b2ec08017') version('11.14.3', '2f4f83f8333e4233c57d0f01c4b57426') version('11.14.2', 'a43590cf896c677890d75bfe75bc6254') version('11.14.1', '40febc57f76668be8b6a77b7607bb67f') - # FIXME: Add dependencies if this package requires them. - # depends_on("foo") + variant('mpi', default=True, description='Add a dependency on MPI and enables MPI dependent packages') + + # Everything should be compiled with -fpic + depends_on('blas') + depends_on('lapack') + depends_on('boost') + depends_on('netcdf') + depends_on('matio') + depends_on('glm') + depends_on('swig') + depends_on('mpi', when='+mpi') def install(self, spec, prefix): - # FIXME: Modify the configure line to suit your build system here. - cmake('.', *std_cmake_args) - # FIXME: Add logic to build and install here - make() - make("install") + options = [ + '-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=ON', + '-DTrilinos_ENABLE_TESTS:BOOL=ON', + '-DBUILD_SHARED_LIBS:BOOL=ON', + '-DBLAS_LIBRARY_DIRS:PATH=%s' % spec['blas'].prefix, + '-DLAPACK_LIBRARY_DIRS:PATH=%s' % spec['lapack'].prefix + ] + if '+mpi' in spec: + mpi_options = ['-DTPL_ENABLE_MPI:BOOL=ON'] + options.extend(mpi_options) + + # -DCMAKE_INSTALL_PREFIX and all the likes... + options.extend(std_cmake_args) + with working_dir('spack-build', create=True): + cmake('..', *options) + make() + make('install') From 3a4bdf1856685ae63116793e532d45aa2ee7fd28 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Fri, 16 Oct 2015 13:02:27 +0200 Subject: [PATCH 33/37] trilinos : first version that compiles on bellatrix --- var/spack/packages/swig/package.py | 2 ++ var/spack/packages/trilinos/package.py | 19 ++----------------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/var/spack/packages/swig/package.py b/var/spack/packages/swig/package.py index d7a3d815b9..ee536d7063 100644 --- a/var/spack/packages/swig/package.py +++ b/var/spack/packages/swig/package.py @@ -38,6 +38,8 @@ class Swig(Package): version('3.0.2', '62f9b0d010cef36a13a010dc530d0d41') + depends_on('pcre') + def install(self, spec, prefix): configure("--prefix=%s" % prefix) make() diff --git a/var/spack/packages/trilinos/package.py b/var/spack/packages/trilinos/package.py index 6f7cc253dd..7c43f796a4 100644 --- a/var/spack/packages/trilinos/package.py +++ b/var/spack/packages/trilinos/package.py @@ -1,19 +1,3 @@ -# FIXME: -# This is a template package file for Spack. We've conveniently -# put "FIXME" labels next to all the things you'll want to change. -# -# Once you've edited all the FIXME's, delete this whole message, -# save this file, and test out your package like this: -# -# spack install trilinos -# -# You can always get back here to change things with: -# -# spack edit trilinos -# -# See the spack documentation for more information on building -# packages. -# from spack import * @@ -48,7 +32,8 @@ def install(self, spec, prefix): options = [ '-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=ON', - '-DTrilinos_ENABLE_TESTS:BOOL=ON', + '-DTrilinos_ENABLE_TESTS:BOOL=OFF', + '-DTrilinos_ENABLE_EXAMPLES:BOOL=OFF', '-DBUILD_SHARED_LIBS:BOOL=ON', '-DBLAS_LIBRARY_DIRS:PATH=%s' % spec['blas'].prefix, '-DLAPACK_LIBRARY_DIRS:PATH=%s' % spec['lapack'].prefix From aab7102b9bcf2b35461ef3816f874f53d9eef976 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 14 Oct 2015 15:52:46 +0200 Subject: [PATCH 34/37] matio : added basic configuration for the package --- var/spack/packages/matio/package.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 var/spack/packages/matio/package.py diff --git a/var/spack/packages/matio/package.py b/var/spack/packages/matio/package.py new file mode 100644 index 0000000000..12cfb80926 --- /dev/null +++ b/var/spack/packages/matio/package.py @@ -0,0 +1,15 @@ +from spack import * + + +class Matio(Package): + """matio is an C library for reading and writing Matlab MAT files""" + homepage = "http://sourceforge.net/projects/matio/" + url = "http://downloads.sourceforge.net/project/matio/matio/1.5.2/matio-1.5.2.tar.gz" + + version('1.5.2', '85b007b99916c63791f28398f6a4c6f1') + + def install(self, spec, prefix): + configure('--prefix=%s' % prefix) + + make() + make("install") From ec5560374c218bfb1f16934259108ebc305cf838 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Wed, 14 Oct 2015 16:13:56 +0200 Subject: [PATCH 35/37] glm : added basic configuration for the package --- var/spack/packages/glm/package.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 var/spack/packages/glm/package.py diff --git a/var/spack/packages/glm/package.py b/var/spack/packages/glm/package.py new file mode 100644 index 0000000000..d00c301b4c --- /dev/null +++ b/var/spack/packages/glm/package.py @@ -0,0 +1,19 @@ +from spack import * + + +class Glm(Package): + """ + OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on + the OpenGL Shading Language (GLSL) specification. + """ + + homepage = "https://github.com/g-truc/glm" + url = "https://github.com/g-truc/glm/archive/0.9.7.1.tar.gz" + + version('0.9.7.1', '61af6639cdf652d1cdd7117190afced8') + + def install(self, spec, prefix): + with working_dir('spack-build', create=True): + cmake('..', *std_cmake_args) + make() + make("install") From 7e2f3cff443dd1ae634eb375fd06ee41df149989 Mon Sep 17 00:00:00 2001 From: David Beckingsale Date: Mon, 19 Oct 2015 15:41:46 -0700 Subject: [PATCH 36/37] Added ncdu package --- var/spack/packages/ncdu/package.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 var/spack/packages/ncdu/package.py diff --git a/var/spack/packages/ncdu/package.py b/var/spack/packages/ncdu/package.py new file mode 100644 index 0000000000..234f9730d6 --- /dev/null +++ b/var/spack/packages/ncdu/package.py @@ -0,0 +1,28 @@ +from spack import * + +class Ncdu(Package): + """ + Ncdu is a disk usage analyzer with an ncurses interface. It is designed + to find space hogs on a remote server where you don't have an entire + gaphical setup available, but it is a useful tool even on regular desktop + systems. Ncdu aims to be fast, simple and easy to use, and should be able + to run in any minimal POSIX-like environment with ncurses installed. + """ + + homepage = "http://dev.yorhel.nl/ncdu" + url = "http://dev.yorhel.nl/download/ncdu-1.11.tar.gz" + + version('1.11', '9e44240a5356b029f05f0e70a63c4d12') + version('1.10', '7535decc8d54eca811493e82d4bfab2d') + version('1.9' , '93258079db897d28bb8890e2db89b1fb') + version('1.8' , '94d7a821f8a0d7ba8ef3dd926226f7d5') + version('1.7' , '172047c29d232724cc62e773e82e592a') + + depends_on("ncurses") + + def install(self, spec, prefix): + configure('--prefix=%s' % prefix, + '--with-ncurses=%s' % spec['ncurses']) + + make() + make("install") From e0e79a2cb3cda043bf1fb456c58ceff8d4e9375d Mon Sep 17 00:00:00 2001 From: Kevin Huck Date: Wed, 21 Oct 2015 11:56:01 -0700 Subject: [PATCH 37/37] Adding package for activeharmony. --- var/spack/packages/activeharmony/package.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 var/spack/packages/activeharmony/package.py diff --git a/var/spack/packages/activeharmony/package.py b/var/spack/packages/activeharmony/package.py new file mode 100644 index 0000000000..45dcc7c0e8 --- /dev/null +++ b/var/spack/packages/activeharmony/package.py @@ -0,0 +1,15 @@ +from spack import * + +class Activeharmony(Package): + """Active Harmony: a framework for auto-tuning (the automated search for values to improve the performance of a target application).""" + homepage = "http://www.dyninst.org/harmony" + url = "http://www.dyninst.org/sites/default/files/downloads/harmony/ah-4.5.tar.gz" + + version('4.5', 'caee5b864716d376e2c25d739251b2a9') + + def install(self, spec, prefix): + make("CFLAGS=-O3") + make("install", 'PREFIX=%s' % prefix) + +from spack import * +