summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/cmd/create.py4
-rw-r--r--lib/spack/spack/cmd/url-parse.py75
-rw-r--r--lib/spack/spack/fetch_strategy.py4
-rw-r--r--lib/spack/spack/package.py86
-rw-r--r--lib/spack/spack/stage.py53
-rw-r--r--lib/spack/spack/util/web.py140
-rwxr-xr-xshare/spack/setup-env.sh8
-rw-r--r--var/spack/packages/atop/package.py16
-rw-r--r--var/spack/packages/boost/package.py62
-rw-r--r--var/spack/packages/cereal/Werror.patch33
-rw-r--r--var/spack/packages/cereal/package.py34
-rw-r--r--var/spack/packages/cgal/package.py73
-rw-r--r--var/spack/packages/cmake/package.py5
-rw-r--r--var/spack/packages/cube/package.py79
-rw-r--r--var/spack/packages/fftw/package.py55
-rw-r--r--var/spack/packages/fltk/font.patch44
-rw-r--r--var/spack/packages/fltk/package.py58
-rw-r--r--var/spack/packages/gdb/package.py12
-rw-r--r--var/spack/packages/git/package.py16
-rw-r--r--var/spack/packages/glpk/package.py53
-rw-r--r--var/spack/packages/gmsh/package.py84
-rw-r--r--var/spack/packages/gperftools/package.py3
-rw-r--r--var/spack/packages/hdf5/package.py30
-rw-r--r--var/spack/packages/julia/gc.patch11
-rw-r--r--var/spack/packages/julia/package.py69
-rw-r--r--var/spack/packages/libedit/package.py14
-rw-r--r--var/spack/packages/libpciaccess/package.py9
-rw-r--r--var/spack/packages/lua/package.py12
-rw-r--r--var/spack/packages/mbedtls/package.py20
-rw-r--r--var/spack/packages/metis/package.py92
-rw-r--r--var/spack/packages/mpfr/package.py4
-rw-r--r--var/spack/packages/mpich/package.py3
-rw-r--r--var/spack/packages/ninja/package.py22
-rw-r--r--var/spack/packages/opari2/package.py81
-rw-r--r--var/spack/packages/openblas/package.py4
-rw-r--r--var/spack/packages/openssl/package.py14
-rw-r--r--var/spack/packages/otf2/package.py85
-rw-r--r--var/spack/packages/paraview/package.py4
-rw-r--r--var/spack/packages/parmetis/package.py103
-rw-r--r--var/spack/packages/patchelf/package.py16
-rw-r--r--var/spack/packages/pcre2/package.py15
-rw-r--r--var/spack/packages/petsc/package.py6
-rw-r--r--var/spack/packages/py-astropy/package.py28
-rw-r--r--var/spack/packages/py-blessings/package.py15
-rw-r--r--var/spack/packages/py-coverage/package.py16
-rw-r--r--var/spack/packages/py-funcsigs/package.py19
-rw-r--r--var/spack/packages/py-matplotlib/package.py5
-rw-r--r--var/spack/packages/py-mock/package.py1
-rw-r--r--var/spack/packages/py-mysqldb1/package.py15
-rw-r--r--var/spack/packages/py-numexpr/package.py15
-rw-r--r--var/spack/packages/py-pbr/package.py18
-rw-r--r--var/spack/packages/py-periodictable/package.py17
-rw-r--r--var/spack/packages/py-pytables/package.py19
-rw-r--r--var/spack/packages/py-setuptools/package.py1
-rw-r--r--var/spack/packages/py-tappy/package.py15
-rw-r--r--var/spack/packages/py-urwid/package.py16
-rw-r--r--var/spack/packages/python/package.py13
-rw-r--r--var/spack/packages/scalasca/package.py96
-rw-r--r--var/spack/packages/scorep/package.py20
-rw-r--r--var/spack/packages/szip/package.py21
-rw-r--r--var/spack/packages/texinfo/package.py10
-rw-r--r--var/spack/packages/wget/package.py5
62 files changed, 1507 insertions, 469 deletions
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index 5e42860f3e..9ecb709110 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -34,8 +34,8 @@ from llnl.util.filesystem import mkdirp
import spack
import spack.cmd
import spack.cmd.checksum
-import spack.package
import spack.url
+import spack.util.web
from spack.util.naming import *
import spack.util.crypto as crypto
@@ -166,7 +166,7 @@ def create(parser, args):
tty.msg("This looks like a URL for %s version %s." % (name, version))
tty.msg("Creating template for package %s" % name)
- versions = spack.package.find_versions_of_archive(url)
+ versions = spack.util.web.find_versions_of_archive(url)
rkeys = sorted(versions.keys(), reverse=True)
versions = OrderedDict(zip(rkeys, (versions[v] for v in rkeys)))
diff --git a/lib/spack/spack/cmd/url-parse.py b/lib/spack/spack/cmd/url-parse.py
new file mode 100644
index 0000000000..077c793d2e
--- /dev/null
+++ b/lib/spack/spack/cmd/url-parse.py
@@ -0,0 +1,75 @@
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+import sys
+
+import llnl.util.tty as tty
+
+import spack
+import spack.url
+from spack.util.web import find_versions_of_archive
+
+description = "Show parsing of a URL, optionally spider web for other versions."
+
+def setup_parser(subparser):
+ subparser.add_argument('url', help="url of a package archive")
+ subparser.add_argument(
+ '-s', '--spider', action='store_true', help="Spider the source page for versions.")
+
+
+def print_name_and_version(url):
+ name, ns, nl, ntup, ver, vs, vl, vtup = spack.url.substitution_offsets(url)
+ underlines = [" "] * max(ns+nl, vs+vl)
+ for i in range(ns, ns+nl):
+ underlines[i] = '-'
+ for i in range(vs, vs+vl):
+ underlines[i] = '~'
+
+ print " %s" % url
+ print " %s" % ''.join(underlines)
+
+
+def url_parse(parser, args):
+ url = args.url
+
+ ver, vs, vl = spack.url.parse_version_offset(url)
+ name, ns, nl = spack.url.parse_name_offset(url, ver)
+
+ tty.msg("Parsing URL:")
+ try:
+ print_name_and_version(url)
+ except spack.url.UrlParseError as e:
+ tty.error(str(e))
+
+ print
+ tty.msg("Substituting version 9.9.9b:")
+ newurl = spack.url.substitute_version(url, '9.9.9b')
+ print_name_and_version(newurl)
+
+ if args.spider:
+ print
+ tty.msg("Spidering for versions:")
+ versions = find_versions_of_archive(url)
+ for v in sorted(versions):
+ print "%-20s%s" % (v, versions[v])
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index a9374fb34b..0657146bf6 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -687,7 +687,7 @@ def for_package_version(pkg, version):
class FetchError(spack.error.SpackError):
- def __init__(self, msg, long_msg):
+ def __init__(self, msg, long_msg=None):
super(FetchError, self).__init__(msg, long_msg)
@@ -705,7 +705,7 @@ class NoArchiveFileError(FetchError):
class NoDigestError(FetchError):
- def __init__(self, msg, long_msg):
+ def __init__(self, msg, long_msg=None):
super(NoDigestError, self).__init__(msg, long_msg)
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 6673e4f392..84bcb15f7f 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -733,9 +733,10 @@ class Package(object):
# Construct paths to special files in the archive dir used to
# keep track of whether patches were successfully applied.
- archive_dir = self.stage.source_path
- good_file = join_path(archive_dir, '.spack_patched')
- bad_file = join_path(archive_dir, '.spack_patch_failed')
+ archive_dir = self.stage.source_path
+ good_file = join_path(archive_dir, '.spack_patched')
+ no_patches_file = join_path(archive_dir, '.spack_no_patches')
+ bad_file = join_path(archive_dir, '.spack_patch_failed')
# If we encounter an archive that failed to patch, restage it
# so that we can apply all the patches again.
@@ -749,29 +750,46 @@ class Package(object):
if os.path.isfile(good_file):
tty.msg("Already patched %s" % self.name)
return
+ elif os.path.isfile(no_patches_file):
+ tty.msg("No patches needed for %s." % self.name)
+ return
# Apply all the patches for specs that match this one
+ patched = False
for spec, patch_list in self.patches.items():
if self.spec.satisfies(spec):
for patch in patch_list:
- tty.msg('Applying patch %s' % patch.path_or_url)
try:
patch.apply(self.stage)
+ tty.msg('Applied patch %s' % patch.path_or_url)
+ patched = True
except:
# Touch bad file if anything goes wrong.
+ tty.msg('Patch %s failed.' % patch.path_or_url)
touch(bad_file)
raise
- # patch succeeded. Get rid of failed file & touch good file so we
- # don't try to patch again again next time.
+ if has_patch_fun:
+ try:
+ self.patch()
+ tty.msg("Ran patch() for %s." % self.name)
+ patched = True
+ except:
+ tty.msg("patch() function failed for %s." % self.name)
+ touch(bad_file)
+ raise
+
+ # Get rid of any old failed file -- patches have either succeeded
+ # or are not needed. This is mostly defensive -- it's needed
+ # if the restage() method doesn't clean *everything* (e.g., for a repo)
if os.path.isfile(bad_file):
os.remove(bad_file)
- touch(good_file)
-
- if has_patch_fun:
- self.patch()
- tty.msg("Patched %s" % self.name)
+ # touch good or no patches file so that we skip next time.
+ if patched:
+ touch(good_file)
+ else:
+ touch(no_patches_file)
def do_fake_install(self):
@@ -1164,7 +1182,7 @@ class Package(object):
raise VersionFetchError(self.__class__)
try:
- return find_versions_of_archive(
+ return spack.util.web.find_versions_of_archive(
*self.all_urls, list_url=self.list_url, list_depth=self.list_depth)
except spack.error.NoNetworkConnectionError, e:
tty.die("Package.fetch_versions couldn't connect to:",
@@ -1188,50 +1206,6 @@ class Package(object):
return " ".join("-Wl,-rpath=%s" % p for p in self.rpath)
-def find_versions_of_archive(*archive_urls, **kwargs):
- list_url = kwargs.get('list_url', None)
- list_depth = kwargs.get('list_depth', 1)
-
- # Generate a list of list_urls based on archive urls and any
- # explicitly listed list_url in the package
- list_urls = set()
- if list_url:
- list_urls.add(list_url)
- for aurl in archive_urls:
- list_urls.add(spack.url.find_list_url(aurl))
-
- # Grab some web pages to scrape.
- page_map = {}
- for lurl in list_urls:
- pages = spack.util.web.get_pages(lurl, depth=list_depth)
- page_map.update(pages)
-
- # Scrape them for archive URLs
- regexes = []
- for aurl in archive_urls:
- # This creates a regex from the URL with a capture group for
- # the version part of the URL. The capture group is converted
- # to a generic wildcard, so we can use this to extract things
- # on a page that look like archive URLs.
- url_regex = spack.url.wildcard_version(aurl)
-
- # We'll be a bit more liberal and just look for the archive
- # part, not the full path.
- regexes.append(os.path.basename(url_regex))
-
- # Build a version list from all the matches we find
- versions = {}
- for page_url, content in page_map.iteritems():
- # extract versions from matches.
- for regex in regexes:
- for m in re.finditer(regex, content):
- url = urljoin(page_url, m.group(0))
- ver = spack.url.parse_version(url)
- versions[ver] = url
-
- return versions
-
-
def validate_package_url(url_string):
"""Determine whether spack can handle a particular URL or not."""
url = urlparse(url_string)
diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py
index 754344fc01..76ca7273cb 100644
--- a/lib/spack/spack/stage.py
+++ b/lib/spack/spack/stage.py
@@ -82,14 +82,18 @@ class Stage(object):
stage object later). If name is not provided, then this
stage will be given a unique name automatically.
"""
+ # TODO: fetch/stage coupling needs to be reworked -- the logic
+ # TODO: here is convoluted and not modular enough.
if isinstance(url_or_fetch_strategy, basestring):
self.fetcher = fs.from_url(url_or_fetch_strategy)
elif isinstance(url_or_fetch_strategy, fs.FetchStrategy):
self.fetcher = url_or_fetch_strategy
else:
raise ValueError("Can't construct Stage without url or fetch strategy")
-
self.fetcher.set_stage(self)
+ self.default_fetcher = self.fetcher # self.fetcher can change with mirrors.
+ self.skip_checksum_for_mirror = True # used for mirrored archives of repositories.
+
self.name = kwargs.get('name')
self.mirror_path = kwargs.get('mirror_path')
@@ -198,17 +202,18 @@ class Stage(object):
@property
def archive_file(self):
"""Path to the source archive within this stage directory."""
- if not isinstance(self.fetcher, fs.URLFetchStrategy):
- return None
+ paths = []
+ if isinstance(self.fetcher, fs.URLFetchStrategy):
+ paths.append(os.path.join(self.path, os.path.basename(self.fetcher.url)))
- paths = [os.path.join(self.path, os.path.basename(self.fetcher.url))]
if self.mirror_path:
paths.append(os.path.join(self.path, os.path.basename(self.mirror_path)))
for path in paths:
if os.path.exists(path):
return path
- return None
+ else:
+ return None
@property
@@ -238,23 +243,34 @@ class Stage(object):
"""Downloads an archive or checks out code from a repository."""
self.chdir()
- fetchers = [self.fetcher]
+ fetchers = [self.default_fetcher]
# TODO: move mirror logic out of here and clean it up!
+ # TODO: Or @alalazo may have some ideas about how to use a
+ # TODO: CompositeFetchStrategy here.
+ self.skip_checksum_for_mirror = True
if self.mirror_path:
urls = ["%s/%s" % (m, self.mirror_path) for m in _get_mirrors()]
+ # If this archive is normally fetched from a tarball URL,
+ # then use the same digest. `spack mirror` ensures that
+ # the checksum will be the same.
digest = None
- if isinstance(self.fetcher, fs.URLFetchStrategy):
- digest = self.fetcher.digest
- fetchers = [fs.URLFetchStrategy(url, digest)
- for url in urls] + fetchers
- for f in fetchers:
- f.set_stage(self)
+ if isinstance(self.default_fetcher, fs.URLFetchStrategy):
+ digest = self.default_fetcher.digest
+
+ # Have to skip the checkesum for things archived from
+ # repositories. How can this be made safer?
+ self.skip_checksum_for_mirror = not bool(digest)
+
+ for url in urls:
+ fetchers.insert(0, fs.URLFetchStrategy(url, digest))
for fetcher in fetchers:
try:
- fetcher.fetch()
+ fetcher.set_stage(self)
+ self.fetcher = fetcher
+ self.fetcher.fetch()
break
except spack.error.SpackError, e:
tty.msg("Fetching from %s failed." % fetcher)
@@ -262,13 +278,22 @@ class Stage(object):
continue
else:
errMessage = "All fetchers failed for %s" % self.name
+ self.fetcher = self.default_fetcher
raise fs.FetchError(errMessage, None)
def check(self):
"""Check the downloaded archive against a checksum digest.
No-op if this stage checks code out of a repository."""
- self.fetcher.check()
+ if self.fetcher is not self.default_fetcher and self.skip_checksum_for_mirror:
+ tty.warn("Fetching from mirror without a checksum!",
+ "This package is normally checked out from a version "
+ "control system, but it has been archived on a spack "
+ "mirror. This means we cannot know a checksum for the "
+ "tarball in advance. Be sure that your connection to "
+ "this mirror is secure!.")
+ else:
+ self.fetcher.check()
def expand_archive(self):
diff --git a/lib/spack/spack/util/web.py b/lib/spack/spack/util/web.py
index 94384e9c86..e26daef296 100644
--- a/lib/spack/spack/util/web.py
+++ b/lib/spack/spack/util/web.py
@@ -23,6 +23,7 @@
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import re
+import os
import sys
import subprocess
import urllib2, cookielib
@@ -70,7 +71,9 @@ def _spider(args):
"""
url, visited, root, opener, depth, max_depth, raise_on_error = args
- pages = {}
+ pages = {} # dict from page URL -> text content.
+ links = set() # set of all links seen on visited pages.
+
try:
# Make a HEAD request first to check the content type. This lets
# us ignore tarballs and gigantic files.
@@ -99,42 +102,45 @@ def _spider(args):
page = response.read()
pages[response_url] = page
- # If we're not at max depth, parse out the links in the page
- if depth < max_depth:
- link_parser = LinkParser()
- subcalls = []
- link_parser.feed(page)
-
- while link_parser.links:
- raw_link = link_parser.links.pop()
+ # Parse out the links in the page
+ link_parser = LinkParser()
+ subcalls = []
+ link_parser.feed(page)
- # Skip stuff that looks like an archive
- if any(raw_link.endswith(suf) for suf in ALLOWED_ARCHIVE_TYPES):
- continue
+ while link_parser.links:
+ raw_link = link_parser.links.pop()
+ abs_link = urlparse.urljoin(response_url, raw_link)
- # Evaluate the link relative to the page it came from.
- abs_link = urlparse.urljoin(response_url, raw_link)
+ links.add(abs_link)
- # Skip things outside the root directory
- if not abs_link.startswith(root):
- continue
+ # Skip stuff that looks like an archive
+ if any(raw_link.endswith(suf) for suf in ALLOWED_ARCHIVE_TYPES):
+ continue
- # Skip already-visited links
- if abs_link in visited:
- continue
+ # Skip things outside the root directory
+ if not abs_link.startswith(root):
+ continue
- subcalls.append((abs_link, visited, root, None, depth+1, max_depth, raise_on_error))
- visited.add(abs_link)
+ # Skip already-visited links
+ if abs_link in visited:
+ continue
- if subcalls:
- try:
- pool = Pool(processes=len(subcalls))
- dicts = pool.map(_spider, subcalls)
- for d in dicts:
- pages.update(d)
- finally:
- pool.terminate()
- pool.join()
+ # If we're not at max depth, follow links.
+ if depth < max_depth:
+ subcalls.append((abs_link, visited, root, None,
+ depth+1, max_depth, raise_on_error))
+ visited.add(abs_link)
+
+ if subcalls:
+ try:
+ pool = Pool(processes=len(subcalls))
+ results = pool.map(_spider, subcalls)
+ for sub_pages, sub_links in results:
+ pages.update(sub_pages)
+ links.update(sub_links)
+ finally:
+ pool.terminate()
+ pool.join()
except urllib2.URLError, e:
tty.debug(e)
@@ -155,10 +161,10 @@ def _spider(args):
# Other types of errors are completely ignored, except in debug mode.
tty.debug("Error in _spider: %s" % e)
- return pages
+ return pages, links
-def get_pages(root_url, **kwargs):
+def spider(root_url, **kwargs):
"""Gets web pages from a root URL.
If depth is specified (e.g., depth=2), then this will also fetches pages
linked from the root and its children up to depth.
@@ -167,5 +173,69 @@ def get_pages(root_url, **kwargs):
performance over a sequential fetch.
"""
max_depth = kwargs.setdefault('depth', 1)
- pages = _spider((root_url, set(), root_url, None, 1, max_depth, False))
- return pages
+ pages, links = _spider((root_url, set(), root_url, None, 1, max_depth, False))
+ return pages, links
+
+
+def find_versions_of_archive(*archive_urls, **kwargs):
+ """Scrape web pages for new versions of a tarball.
+
+ Arguments:
+ archive_urls:
+ URLs for different versions of a package. Typically these
+ are just the tarballs from the package file itself. By
+ default, this searches the parent directories of archives.
+
+ Keyword Arguments:
+ list_url:
+
+ URL for a listing of archives. Spack wills scrape these
+ pages for download links that look like the archive URL.
+
+ list_depth:
+ Max depth to follow links on list_url pages.
+
+ """
+ list_url = kwargs.get('list_url', None)
+ list_depth = kwargs.get('list_depth', 1)
+
+ # Generate a list of list_urls based on archive urls and any
+ # explicitly listed list_url in the package
+ list_urls = set()
+ if list_url:
+ list_urls.add(list_url)
+ for aurl in archive_urls:
+ list_urls.add(spack.url.find_list_url(aurl))
+
+ # Grab some web pages to scrape.
+ pages = {}
+ links = set()
+ for lurl in list_urls:
+ p, l = spider(lurl, depth=list_depth)
+ pages.update(p)
+ links.update(l)
+
+ # Scrape them for archive URLs
+ regexes = []
+ for aurl in archive_urls:
+ # This creates a regex from the URL with a capture group for
+ # the version part of the URL. The capture group is converted
+ # to a generic wildcard, so we can use this to extract things
+ # on a page that look like archive URLs.
+ url_regex = spack.url.wildcard_version(aurl)
+
+ # We'll be a bit more liberal and just look for the archive
+ # part, not the full path.
+ regexes.append(os.path.basename(url_regex))
+
+ # Build a dict version -> URL from any links that match the wildcards.
+ versions = {}
+ for url in links:
+ if any(re.search(r, url) for r in regexes):
+ try:
+ ver = spack.url.parse_version(url)
+ versions[ver] = url
+ except spack.url.UndetectableVersionError as e:
+ continue
+
+ return versions
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index 47202f6087..586a5b836b 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -55,13 +55,11 @@
# avoids the need to come up with a user-friendly naming scheme for
# spack dotfiles.
########################################################################
+
function spack {
# save raw arguments into an array before butchering them
- args=()
- for a in "$@"; do
- # yup, this is awful, blame bash2 compat
- args=("${args[@]}" "$a")
- done
+ args=( "$@" )
+
# accumulate initial flags for main spack command
_sp_flags=""
while [[ "$1" =~ ^- ]]; do
diff --git a/var/spack/packages/atop/package.py b/var/spack/packages/atop/package.py
new file mode 100644
index 0000000000..346ab0763c
--- /dev/null
+++ b/var/spack/packages/atop/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Atop(Package):
+ """Atop is an ASCII full-screen performance monitor for Linux"""
+ homepage = "http://www.atoptool.nl/index.php"
+ url = "http://www.atoptool.nl/download/atop-2.2-3.tar.gz"
+
+ version('2.2-3', '034dc1544f2ec4e4d2c739d320dc326d')
+
+ def install(self, spec, prefix):
+ make()
+ mkdirp(prefix.bin)
+ install("atop", join_path(prefix.bin, "atop"))
+ mkdirp(join_path(prefix.man, "man1"))
+ install(join_path("man", "atop.1"),
+ join_path(prefix.man, "man1", "atop.1"))
diff --git a/var/spack/packages/boost/package.py b/var/spack/packages/boost/package.py
index 81dadbbf61..3427b74ad6 100644
--- a/var/spack/packages/boost/package.py
+++ b/var/spack/packages/boost/package.py
@@ -14,6 +14,7 @@ class Boost(Package):
list_url = "http://sourceforge.net/projects/boost/files/boost/"
list_depth = 2
+ version('1.60.0', '65a840e1a0b13a558ff19eeb2c4f0cbe')
version('1.59.0', '6aa9a5c6a4ca1016edd0ed1178e3cb87')
version('1.58.0', 'b8839650e61e9c1c0a89f371dd475546')
version('1.57.0', '1be49befbdd9a5ce9def2983ba3e7b76')
@@ -48,11 +49,11 @@ class Boost(Package):
variant('mpi', default=False, description='Activate the component Boost.MPI')
variant('compression', default=True, description='Activate the compression Boost.iostreams')
- depends_on('mpi', when='+mpi')
depends_on('python', when='+python')
- depends_on('zlib', when='+compression')
+ depends_on('mpi', when='+mpi')
depends_on('bzip2', when='+compression')
-
+ depends_on('zlib', when='+compression')
+
def url_for_version(self, version):
"""Handle Boost's weird URLs, which write the version two different ways."""
parts = [str(p) for p in Version(version)]
@@ -61,20 +62,23 @@ class Boost(Package):
return "http://downloads.sourceforge.net/project/boost/boost/%s/boost_%s.tar.bz2" % (
dots, underscores)
- def determine_toolset(self):
- toolsets = {'gcc': 'gcc',
+ def determine_toolset(self, spec):
+ if spec.satisfies("=darwin-x86_64"):
+ return 'darwin'
+
+ toolsets = {'g++': 'gcc',
'icpc': 'intel',
'clang++': 'clang'}
for cc, toolset in toolsets.iteritems():
- if(cc in self.compiler.cxx_names):
+ if cc in self.compiler.cxx_names:
return toolset
# fallback to gcc if no toolset found
return 'gcc'
def determine_bootstrap_options(self, spec, options):
- options.append('--with-toolset=%s' % self.determine_toolset())
+ options.append('--with-toolset=%s' % self.determine_toolset(spec))
without_libs = []
if '~mpi' in spec:
@@ -82,17 +86,20 @@ class Boost(Package):
if '~python' in spec:
without_libs.append('python')
else:
- options.append('--with-python=%s' % (spec['python'].prefix.bin + '/python'))
+ options.append('--with-python=%s' %
+ join_path(spec['python'].prefix.bin, 'python'))
if without_libs:
options.append('--without-libraries=%s' % ','.join(without_libs))
with open('user-config.jam', 'w') as f:
if '+mpi' in spec:
- f.write('using mpi : %s ;\n' % (spec['mpi'].prefix.bin + '/mpicxx'))
+ f.write('using mpi : %s ;\n' %
+ join_path(spec['mpi'].prefix.bin, 'mpicxx'))
if '+python' in spec:
- f.write('using python : %s : %s ;\n' % (spec['python'].version,
- (spec['python'].prefix.bin + '/python')))
+ f.write('using python : %s : %s ;\n' %
+ (spec['python'].version,
+ join_path(spec['python'].prefix.bin, 'python')))
def determine_b2_options(self, spec, options):
if '+debug' in spec:
@@ -101,22 +108,26 @@ class Boost(Package):
options.append('variant=release')
if '~compression' in spec:
- options.extend(['-s NO_BZIP2=1',
- '-s NO_ZLIB=1',
- ])
+ options.extend([
+ '-s', 'NO_BZIP2=1',
+ '-s', 'NO_ZLIB=1'])
if '+compression' in spec:
- options.extend(['-s BZIP2_INCLUDE=%s' % spec['bzip2'].prefix.include,
- '-s BZIP2_LIBPATH=%s' % spec['bzip2'].prefix.lib,
- '-s ZLIB_INCLUDE=%s' % spec['zlib'].prefix.include,
- '-s ZLIB_LIBPATH=%s' % spec['zlib'].prefix.lib])
-
- options.extend(['toolset=%s' % self.determine_toolset(),
- 'link=static,shared',
- '--layout=tagged'])
+ options.extend([
+ '-s', 'BZIP2_INCLUDE=%s' % spec['bzip2'].prefix.include,
+ '-s', 'BZIP2_LIBPATH=%s' % spec['bzip2'].prefix.lib,
+ '-s', 'ZLIB_INCLUDE=%s' % spec['zlib'].prefix.include,
+ '-s', 'ZLIB_LIBPATH=%s' % spec['zlib'].prefix.lib,
+ ])
+
+ options.extend([
+ 'toolset=%s' % self.determine_toolset(spec),
+ 'link=static,shared',
+ 'threading=single,multi',
+ '--layout=tagged'])
def install(self, spec, prefix):
- # to make him find the user-config.jam
+ # to make Boost find the user-config.jam
env['BOOST_BUILD_PATH'] = './'
bootstrap = Executable('./bootstrap.sh')
@@ -130,9 +141,8 @@ class Boost(Package):
b2name = './b2' if spec.satisfies('@1.47:') else './bjam'
b2 = Executable(b2name)
- b2_options = ['-j %s' % make_jobs]
+ b2_options = ['-j', '%s' % make_jobs]
self.determine_b2_options(spec, b2_options)
- b2('install', 'threading=single', *b2_options)
- b2('install', 'threading=multi', *b2_options)
+ b2('install', *b2_options)
diff --git a/var/spack/packages/cereal/Werror.patch b/var/spack/packages/cereal/Werror.patch
new file mode 100644
index 0000000000..d39eaaffdb
--- /dev/null
+++ b/var/spack/packages/cereal/Werror.patch
@@ -0,0 +1,33 @@
+--- old/sandbox/CMakeLists.txt
++++ new/sandbox/CMakeLists.txt
+@@ -4,9 +4,11 @@
+ add_executable(sandbox_json sandbox_json.cpp)
+ add_executable(sandbox_rtti sandbox_rtti.cpp)
+
++if(Boost_FOUND)
+ add_executable(sandbox_vs sandbox_vs.cpp)
+ target_link_libraries(sandbox_vs sandbox_vs_dll)
+ include_directories(sandbox_shared_lib)
++endif(Boost_FOUND)
+
+ if(Boost_FOUND)
+ add_executable(performance performance.cpp)
+--- old/include/cereal/types/common.hpp
++++ new/include/cereal/types/common.hpp
+@@ -106,14 +106,16 @@
+ t = reinterpret_cast<typename common_detail::is_enum<T>::type const &>( value );
+ }
+
++#ifndef CEREAL_ENABLE_RAW_POINTER_SERIALIZATION
+ //! Serialization for raw pointers
+ /*! This exists only to throw a static_assert to let users know we don't support raw pointers. */
+ template <class Archive, class T> inline
+ void CEREAL_SERIALIZE_FUNCTION_NAME( Archive &, T * & )
+ {
+ static_assert(cereal::traits::detail::delay_static_assert<T>::value,
+ "Cereal does not support serializing raw pointers - please use a smart pointer");
+ }
++#endif
+
+ //! Serialization for C style arrays
+ template <class Archive, class T> inline
diff --git a/var/spack/packages/cereal/package.py b/var/spack/packages/cereal/package.py
new file mode 100644
index 0000000000..a83927456f
--- /dev/null
+++ b/var/spack/packages/cereal/package.py
@@ -0,0 +1,34 @@
+from spack import *
+import shutil
+
+class Cereal(Package):
+ """cereal is a header-only C++11 serialization library. cereal takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. cereal was designed to be fast, light-weight, and easy to extend - it has no external dependencies and can be easily bundled with other code or used standalone."""
+ homepage = "http://uscilab.github.io/cereal/"
+ url = "https://github.com/USCiLab/cereal/archive/v1.1.2.tar.gz"
+
+ version('1.1.2', '34d4ad174acbff005c36d4d10e48cbb9')
+ version('1.1.1', '0ceff308c38f37d5b5f6df3927451c27')
+ version('1.1.0', '9f2d5f72e935c54f4c6d23e954ce699f')
+ version('1.0.0', 'd1bacca70a95cec0ddbff68b0871296b')
+ version('0.9.1', '8872d4444ff274ce6cd1ed364d0fc0ad')
+
+ patch("Werror.patch")
+
+ depends_on("cmake @2.6.2:")
+
+ def install(self, spec, prefix):
+ # Don't use -Werror
+ filter_file(r'-Werror', '', 'CMakeLists.txt')
+
+ # configure
+ # Boost is only used for self-tests, which we are not running (yet?)
+ cmake('.', '-DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE', *std_cmake_args)
+
+ # Build
+ make()
+
+ # Install
+ shutil.rmtree(join_path(prefix, 'doc'), ignore_errors=True)
+ shutil.rmtree(join_path(prefix, 'include'), ignore_errors=True)
+ shutil.copytree('doc', join_path(prefix, 'doc'), symlinks=True)
+ shutil.copytree('include', join_path(prefix, 'include'), symlinks=True)
diff --git a/var/spack/packages/cgal/package.py b/var/spack/packages/cgal/package.py
new file mode 100644
index 0000000000..97356433be
--- /dev/null
+++ b/var/spack/packages/cgal/package.py
@@ -0,0 +1,73 @@
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
+from spack import *
+
+
+class Cgal(Package):
+ """
+ CGAL is a software project that provides easy access to efficient and reliable geometric algorithms in the form of
+ a C++ library. CGAL is used in various areas needing geometric computation, such as geographic information systems,
+ computer aided design, molecular biology, medical imaging, computer graphics, and robotics.
+ """
+ homepage = 'http://www.cgal.org/'
+ url = 'https://github.com/CGAL/cgal/archive/releases/CGAL-4.7.tar.gz'
+
+ version('4.7', '4826714810f3b4c65cac96b90fb03b67')
+ version('4.6.3', 'e8ee2ecc8d2b09b94a121c09257b576d')
+
+ # Installation instructions : http://doc.cgal.org/latest/Manual/installation.html
+ variant('shared', default=True, description='Enables the build of shared libraries')
+ variant('debug', default=False, description='Builds a debug version of the libraries')
+
+ depends_on('boost')
+ depends_on('mpfr')
+ depends_on('gmp')
+ depends_on('zlib')
+
+ # FIXME : Qt5 dependency missing (needs Qt5 and OpenGL)
+ # FIXME : Optional third party libraries missing
+
+ def install(self, spec, prefix):
+
+ options = []
+ options.extend(std_cmake_args)
+ # CGAL supports only Release and Debug build type. Any other build type will raise an error at configure time
+ if '+debug' in spec:
+ options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
+ else:
+ options.append('-DCMAKE_BUILD_TYPE:STRING=Release')
+
+ if '+shared' in spec:
+ options.append('-DBUILD_SHARED_LIBS:BOOL=ON')
+ else:
+ options.append('-DBUILD_SHARED_LIBS:BOOL=OFF')
+
+ build_directory = join_path(self.stage.path, 'spack-build')
+ source_directory = self.stage.source_path
+ with working_dir(build_directory, create=True):
+ cmake(source_directory, *options)
+ make()
+ make("install")
diff --git a/var/spack/packages/cmake/package.py b/var/spack/packages/cmake/package.py
index cb54c92d69..173f72742c 100644
--- a/var/spack/packages/cmake/package.py
+++ b/var/spack/packages/cmake/package.py
@@ -38,8 +38,9 @@ class Cmake(Package):
version('3.4.0', 'cd3034e0a44256a0917e254167217fc8',
url = 'https://cmake.org/files/v3.4/cmake-3.4.0.tar.gz')
-# version('3.0.1', 'e2e05d84cb44a42f1371d9995631dcf5')
-# version('3.0.0', '21a1c85e1a3b803c4b48e7ff915a863e')
+ variant('ncurses', default=True, description='Enables the build of the ncurses gui')
+
+ depends_on('ncurses', when='+ncurses')
def install(self, spec, prefix):
configure('--prefix=' + prefix,
diff --git a/var/spack/packages/cube/package.py b/var/spack/packages/cube/package.py
index cc1c684594..17d388c33d 100644
--- a/var/spack/packages/cube/package.py
+++ b/var/spack/packages/cube/package.py
@@ -1,58 +1,55 @@
-# FIXME: Add copyright statement
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
from spack import *
-from contextlib import closing
+
class Cube(Package):
- """Cube the profile viewer for Score-P and Scalasca profiles. It
- displays a multi-dimensional performance space consisting
- of the dimensions (i) performance metric, (ii) call path,
- and (iii) system resource."""
+ """
+ Cube the profile viewer for Score-P and Scalasca profiles. It displays a multi-dimensional performance space
+ consisting of the dimensions:
+ - performance metric
+ - call path
+ - system resource
+ """
homepage = "http://www.scalasca.org/software/cube-4.x/download.html"
- url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
+ url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
version('4.3.3', '07e109248ed8ffc7bdcce614264a2909',
url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz')
- version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20')
-
- version('4.3TP1', 'a2090fbc7b2ba394bd5c09ba971e237f',
- url = 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz')
-
- # Using CC as C++ compiler provides quirky workaround for a Score-P build system attempt
- # to guess a matching C compiler when configuring scorep-score
- backend_user_provided = """\
-CC=cc
-CXX=CC
-F77=f77
-FC=f90
-#CFLAGS=-fPIC
-#CXXFLAGS=-fPIC
-"""
- frontend_user_provided = """\
-CC_FOR_BUILD=cc
-CXX_FOR_BUILD=CC
-F77_FOR_BUILD=f70
-FC_FOR_BUILD=f90
-"""
+ version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20',
+ url="http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz")
- def install(self, spec, prefix):
- # Use a custom compiler configuration, otherwise the score-p
- # build system messes with spack's compiler settings.
- # Create these three files in the build directory
-
- with closing(open("vendor/common/build-config/platforms/platform-backend-user-provided", "w")) as backend_file:
- backend_file.write(self.backend_user_provided)
- with closing(open("vendor/common/build-config/platforms/platform-frontend-user-provided", "w")) as frontend_file:
- frontend_file.write(self.frontend_user_provided)
+ # TODO : add variant that builds GUI on top of Qt
+ def install(self, spec, prefix):
configure_args = ["--prefix=%s" % prefix,
- "--with-custom-compilers",
- "--without-paraver",
+ "--without-paraver",
"--without-gui"]
-
configure(*configure_args)
-
make(parallel=False)
make("install", parallel=False)
diff --git a/var/spack/packages/fftw/package.py b/var/spack/packages/fftw/package.py
index 5f71762c4f..4d2b964242 100644
--- a/var/spack/packages/fftw/package.py
+++ b/var/spack/packages/fftw/package.py
@@ -39,54 +39,21 @@ class Fftw(Package):
version('3.3.4', '2edab8c06b24feeb3b82bbb3ebf3e7b3')
- ##########
- # Floating point precision
- FLOAT = 'float'
- LONG_DOUBLE = 'long_double'
- QUAD_PRECISION = 'quad'
- PRECISION_OPTIONS = {
- FLOAT: '--enable-float',
- LONG_DOUBLE: '--enable--long-double',
- QUAD_PRECISION: '--enable-quad-precision'
- }
- variant(FLOAT, default=False, description='Produces a single precision version of the library')
- variant(LONG_DOUBLE, default=False, description='Produces a long double precision version of the library')
- variant(QUAD_PRECISION, default=False, description='Produces a quad precision version of the library (works only with GCC and libquadmath)')
- ##########
+ variant('float', default=True, description='Produces a single precision version of the library')
+ variant('long_double', default=True, description='Produces a long double precision version of the library')
+ variant('quad', default=False, description='Produces a quad precision version of the library (works only with GCC and libquadmath)')
variant('mpi', default=False, description='Activate MPI support')
depends_on('mpi', when='+mpi')
- @staticmethod
- def enabled(x):
- """
- Given a variant name returns the string that means the variant is enabled
-
- :param x: variant name
- """
- # FIXME : duplicated from MVAPICH2
- return '+' + x
-
- def check_fortran_availability(self, options):
- if not self.compiler.f77 or not self.compiler.fc:
- options.append("--disable-fortran")
-
- def set_floating_point_precision(self, spec, options):
- l = [option for variant, option in Fftw.PRECISION_OPTIONS.iteritems() if self.enabled(variant) in spec]
- if len(l) > 1:
- raise RuntimeError('At most one floating point precision variant may activated per build.')
- options.extend(l)
-
def install(self, spec, prefix):
-
options = ['--prefix=%s' % prefix,
'--enable-shared',
'--enable-threads',
'--enable-openmp']
- self.check_fortran_availability(options)
- self.set_floating_point_precision(spec, options)
-
+ if not self.compiler.f77 or not self.compiler.fc:
+ options.append("--disable-fortran")
if '+mpi' in spec:
options.append('--enable-mpi')
@@ -94,3 +61,15 @@ class Fftw(Package):
make()
make("install")
+ if '+float' in spec:
+ configure('--enable-float', *options)
+ make()
+ make("install")
+ if '+long_double' in spec:
+ configure('--enable-long-double', *options)
+ make()
+ make("install")
+ if '+quad' in spec:
+ configure('--enable-quad-precision', *options)
+ make()
+ make("install")
diff --git a/var/spack/packages/fltk/font.patch b/var/spack/packages/fltk/font.patch
new file mode 100644
index 0000000000..7706a1b4ee
--- /dev/null
+++ b/var/spack/packages/fltk/font.patch
@@ -0,0 +1,44 @@
+Index: FL/x.H
+===================================================================
+--- a/FL/x.H (revision 10476)
++++ b/FL/x.H (working copy)
+@@ -132,6 +132,7 @@
+ XFontStruct *ptr;
+ };
+ extern FL_EXPORT Fl_XFont_On_Demand fl_xfont;
++extern FL_EXPORT XFontStruct* fl_core_font();
+
+ // this object contains all X-specific stuff about a window:
+ // Warning: this object is highly subject to change!
+Index: src/fl_font.cxx
+===================================================================
+--- a/src/fl_font.cxx (revision 10476)
++++ b/src/fl_font.cxx (working copy)
+@@ -55,6 +55,14 @@
+ # include "fl_font_x.cxx"
+ #endif // WIN32
+
++#ifdef WIN32
++#elif defined(__APPLE__)
++#else
++XFontStruct *fl_core_font()
++{
++ return fl_xfont.value();
++}
++#endif
+
+ double fl_width(const char* c) {
+ if (c) return fl_width(c, (int) strlen(c));
+Index: src/gl_draw.cxx
+===================================================================
+--- a/src/gl_draw.cxx (revision 10476)
++++ b/src/gl_draw.cxx (working copy)
+@@ -84,7 +84,7 @@
+ * then sorting through them at draw time (for normal X rendering) to find which one can
+ * render the current glyph... But for now, just use the first font in the list for GL...
+ */
+- XFontStruct *font = fl_xfont;
++ XFontStruct *font = fl_core_font();
+ int base = font->min_char_or_byte2;
+ int count = font->max_char_or_byte2-base+1;
+ fl_fontsize->listbase = glGenLists(256);
diff --git a/var/spack/packages/fltk/package.py b/var/spack/packages/fltk/package.py
new file mode 100644
index 0000000000..0b462f83f8
--- /dev/null
+++ b/var/spack/packages/fltk/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+
+
+class Fltk(Package):
+ """
+ FLTK (pronounced "fulltick") is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and
+ MacOS X. FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL and its
+ built-in GLUT emulation.
+
+ FLTK is designed to be small and modular enough to be statically linked, but works fine as a shared library. FLTK
+ also includes an excellent UI builder called FLUID that can be used to create applications in minutes.
+ """
+ homepage = 'http://www.fltk.org/'
+ url = 'http://fltk.org/pub/fltk/1.3.3/fltk-1.3.3-source.tar.gz'
+
+ version('1.3.3', '9ccdb0d19dc104b87179bd9fd10822e3')
+
+ patch('font.patch', when='@1.3.3')
+
+ variant('shared', default=True, description='Enables the build of shared libraries')
+
+ def install(self, spec, prefix):
+ options = ['--prefix=%s' % prefix,
+ '--enable-localjpeg',
+ '--enable-localpng',
+ '--enable-localzlib']
+
+ if '+shared' in spec:
+ options.append('--enable-shared')
+
+ # FLTK needs to be built in-source
+ configure(*options)
+ make()
+ make('install')
diff --git a/var/spack/packages/gdb/package.py b/var/spack/packages/gdb/package.py
index fd567f346b..85ed3215e2 100644
--- a/var/spack/packages/gdb/package.py
+++ b/var/spack/packages/gdb/package.py
@@ -32,13 +32,13 @@ class Gdb(Package):
-- or what another program was doing at the moment it crashed.
"""
homepage = "https://www.gnu.org/software/gdb"
- url = "http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.xz"
+ url = "http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz"
- version('7.10.1', '39e654460c9cdd80200a29ac020cfe11')
- version('7.10', '2a35bac41fa8e10bf04f3a0dd7f7f363')
- version('7.9.1', '35374c77a70884eb430c97061053a36e')
- version('7.9', 'e6279f26559d839f0b4218a482bcb43e')
- version('7.8.2', 'a80cf252ed2e775d4e4533341bbf2459')
+ version('7.10.1', 'b93a2721393e5fa226375b42d567d90b')
+ version('7.10', 'fa6827ad0fd2be1daa418abb11a54d86')
+ version('7.9.1', 'f3b97de919a9dba84490b2e076ec4cb0')
+ version('7.9', '8f8ced422fe462a00e0135a643544f17')
+ version('7.8.2', '8b0ea8b3559d3d90b3ff4952f0aeafbc')
depends_on('texinfo')
diff --git a/var/spack/packages/git/package.py b/var/spack/packages/git/package.py
index 28c7aa8161..ddc5078c4d 100644
--- a/var/spack/packages/git/package.py
+++ b/var/spack/packages/git/package.py
@@ -5,14 +5,14 @@ class Git(Package):
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.6.3', '5a6375349c3f13c8dbbabfc327bae429')
- version('2.6.2', '32ae5ad29763fc927bfcaeab55385fd9')
- version('2.6.1', 'dd4a3a7fe96598c553edd39d40c9c290')
- version('2.6.0', '6b7d43d615fb3f0dfecf4d131e23f438')
- version('2.5.4', 'ec118fcd1cf984edc17eb6588b78e81b')
- version('2.2.1', '43e01f9d96ba8c11611e0eef0d9f9f28')
+ url = "https://www.kernel.org/pub/software/scm/git/git-2.2.1.tar.gz"
+
+ version('2.6.3', 'b711be7628a4a2c25f38d859ee81b423')
+ version('2.6.2', 'da293290da69f45a86a311ad3cd43dc8')
+ version('2.6.1', '4c62ee9c5991fe93d99cf2a6b68397fd')
+ version('2.6.0', 'eb76a07148d94802a1745d759716a57e')
+ version('2.5.4', '3eca2390cf1fa698b48e2a233563a76b')
+ version('2.2.1', 'ff41fdb094eed1ec430aed8ee9b9849c')
# Git compiles with curl support by default on but if your system
diff --git a/var/spack/packages/glpk/package.py b/var/spack/packages/glpk/package.py
new file mode 100644
index 0000000000..855f459fb3
--- /dev/null
+++ b/var/spack/packages/glpk/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
+from spack import *
+
+
+class Glpk(Package):
+ """
+ The GLPK (GNU Linear Programming Kit) package is intended for solving large-scale linear programming (LP), mixed
+ integer programming (MIP), and other related problems. It is a set of routines written in ANSI C and organized in
+ the form of a callable library
+ """
+ homepage = "https://www.gnu.org/software/glpk"
+ url = "http://ftp.gnu.org/gnu/glpk/glpk-4.57.tar.gz"
+
+ version('4.57', '237531a54f73155842f8defe51aedb0f')
+
+ variant('gmp', default=False, description='Activates support for GMP library')
+
+ depends_on('gmp', when='+gmp')
+
+ def install(self, spec, prefix):
+
+ options = ['--prefix=%s' % prefix]
+
+ if '+gmp' in spec:
+ options.append('--with-gmp')
+
+ configure(*options)
+ make()
+ make("install")
diff --git a/var/spack/packages/gmsh/package.py b/var/spack/packages/gmsh/package.py
new file mode 100644
index 0000000000..9d759303cb
--- /dev/null
+++ b/var/spack/packages/gmsh/package.py
@@ -0,0 +1,84 @@
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+
+
+class Gmsh(Package):
+ """
+ Gmsh is a free 3D finite element grid generator with a built-in CAD engine and post-processor. Its design goal is
+ to provide a fast, light and user-friendly meshing tool with parametric input and advanced visualization
+ capabilities. Gmsh is built around four modules: geometry, mesh, solver and post-processing. The specification of
+ any input to these modules is done either interactively using the graphical user interface or in ASCII text files
+ using Gmsh's own scripting language.
+ """
+ homepage = 'http://gmsh.info'
+ url = 'http://gmsh.info/src/gmsh-2.11.0-source.tgz'
+
+ version('2.11.0', 'f15b6e7ac9ca649c9a74440e1259d0db')
+
+ # FIXME : Misses dependencies on gmm, PetsC, TetGen
+
+ variant('shared', default=True, description='Enables the build of shared libraries')
+ variant('debug', default=False, description='Builds the library in debug mode')
+ variant('mpi', default=False, description='Builds MPI support for parser and solver')
+ variant('fltk', default=False, description='Enables the build of the FLTK GUI')
+ variant('hdf5', default=False, description='Enables HDF5 support')
+ variant('compression', default=True, description='Enables IO compression through zlib')
+
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('gmp')
+ depends_on('mpi', when='+mpi')
+ depends_on('fltk', when='+fltk') # Assumes OpenGL with GLU is already provided by the system
+ depends_on('hdf5', when='+hdf5')
+ depends_on('zlib', when='+compression')
+
+ def install(self, spec, prefix):
+
+ options = []
+ options.extend(std_cmake_args)
+
+ build_directory = join_path(self.stage.path, 'spack-build')
+ source_directory = self.stage.source_path
+
+ if '+shared' in spec:
+ options.extend(['-DENABLE_BUILD_SHARED:BOOL=ON',
+ '-DENABLE_BUILD_DYNAMIC:BOOL=ON']) # Builds dynamic executable and installs shared library
+ else:
+ options.append('-DENABLE_BUILD_LIB:BOOL=ON') # Builds and installs static library
+
+ if '+debug' in spec:
+ options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
+
+ if '+mpi' in spec:
+ options.append('-DENABLE_MPI:BOOL=ON')
+
+ if '+compression' in spec:
+ options.append('-DENABLE_COMPRESSED_IO:BOOL=ON')
+
+ with working_dir(build_directory, create=True):
+ cmake(source_directory, *options)
+ make()
+ make('install')
diff --git a/var/spack/packages/gperftools/package.py b/var/spack/packages/gperftools/package.py
index 0ba44c9329..22b2e6c424 100644
--- a/var/spack/packages/gperftools/package.py
+++ b/var/spack/packages/gperftools/package.py
@@ -30,8 +30,11 @@ class Gperftools(Package):
homepage = "https://code.google.com/p/gperftools"
url = "https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.3.tar.gz"
+ version('2.4', '2171cea3bbe053036fb5d5d25176a160', url="https://github.com/gperftools/gperftools/releases/download/gperftools-2.4/gperftools-2.4.tar.gz")
version('2.3', 'f54dd119f0e46ac1f13264f8d97adf90', url="https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.3.tar.gz")
+ depends_on("libunwind")
+
def install(self, spec, prefix):
configure("--prefix=" + prefix)
make()
diff --git a/var/spack/packages/hdf5/package.py b/var/spack/packages/hdf5/package.py
index adac79d9bb..9a40164341 100644
--- a/var/spack/packages/hdf5/package.py
+++ b/var/spack/packages/hdf5/package.py
@@ -10,12 +10,15 @@ 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.16', 'b8ed9a36ae142317f88b0c7ef4b9c618')
version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24')
version('1.8.13', 'c03426e9e77d7766944654280b467289')
+ variant('cxx', default=True, description='Enable C++ support')
+ variant('fortran', default=True, description='Enable Fortran support')
variant('mpi', default=False, description='Enable MPI support')
+ variant('threadsafe', default=False, description='Enable multithreading')
depends_on("mpi", when='+mpi')
depends_on("zlib")
@@ -23,11 +26,36 @@ class Hdf5(Package):
# TODO: currently hard-coded to use OpenMPI
def install(self, spec, prefix):
extra_args = []
+ if '+cxx' in spec:
+ extra_args.extend([
+ '--enable-cxx'
+ ])
+ if '+fortran' in spec:
+ extra_args.extend([
+ '--enable-fortran',
+ '--enable-fortran2003'
+ ])
if '+mpi' in spec:
+ # The HDF5 configure script warns if cxx and mpi are enabled
+ # together. There doesn't seem to be a real reason for this, except
+ # that parts of the MPI interface are not accessible via the C++
+ # interface. Since they are still accessible via the C interface,
+ # this is not actually a problem.
extra_args.extend([
"--enable-parallel",
+ "--enable-unsupported",
"CC=%s" % spec['mpi'].prefix.bin + "/mpicc",
"CXX=%s" % spec['mpi'].prefix.bin + "/mpic++",
+ "FC=%s" % spec['mpi'].prefix.bin + "/mpifort",
+ ])
+ if '+threads' in spec:
+ if '+cxx' in spec or '+fortran' in spec:
+ die("Cannot use variant +threads with either +cxx or +fortran")
+ extra_args.extend([
+ '--enable-threadsafe',
+ '--disable-hl',
+ 'CPPFLAGS=-DHDatexit=""',
+ 'CFLAGS=-DHDatexit=""'
])
configure(
diff --git a/var/spack/packages/julia/gc.patch b/var/spack/packages/julia/gc.patch
new file mode 100644
index 0000000000..6db69c6c1b
--- /dev/null
+++ b/var/spack/packages/julia/gc.patch
@@ -0,0 +1,11 @@
+--- julia/src/gc.c
++++ julia/src/gc.c
+@@ -162,7 +162,7 @@
+ // A region is contiguous storage for up to REGION_PG_COUNT naturally aligned GC_PAGE_SZ pages
+ // It uses a very naive allocator (see malloc_page & free_page)
+ #if defined(_P64) && !defined(_COMPILER_MICROSOFT_)
+-#define REGION_PG_COUNT 16*8*4096 // 8G because virtual memory is cheap
++#define REGION_PG_COUNT 8*4096 // 512M
+ #else
+ #define REGION_PG_COUNT 8*4096 // 512M
+ #endif
diff --git a/var/spack/packages/julia/package.py b/var/spack/packages/julia/package.py
new file mode 100644
index 0000000000..d978842d9c
--- /dev/null
+++ b/var/spack/packages/julia/package.py
@@ -0,0 +1,69 @@
+from spack import *
+import os
+
+class Julia(Package):
+ """The Julia Language: A fresh approach to technical computing"""
+ homepage = "http://julialang.org"
+ url = "http://github.com/JuliaLang/julia/releases/download/v0.4.2/julia-0.4.2.tar.gz"
+
+ version('0.4.2', 'ccfeb4f4090c8b31083f5e1ccb03eb06')
+
+ patch('gc.patch')
+
+ # Build-time dependencies
+ depends_on("cmake @2.8:")
+ # depends_on("awk")
+ # depends_on("m4")
+ # depends_on("pkg-config")
+ depends_on("python @2.6:2.9")
+
+ # I think that Julia requires the dependencies above, but it builds find (on
+ # my system) without these. We should enable them as necessary.
+
+ # Run-time dependencies
+ # depends_on("arpack")
+ # depends_on("fftw +float")
+ # depends_on("gmp")
+ # depends_on("mpfr")
+ # depends_on("pcre2")
+
+ # ARPACK: Requires BLAS and LAPACK; needs to use the same version as Julia.
+
+ # BLAS and LAPACK: Julia prefers 64-bit versions on 64-bit systems. OpenBLAS
+ # has an option for this; make it available as variant.
+
+ # FFTW: Something doesn't work when using a pre-installed FFTW library; need
+ # to investigate.
+
+ # GMP, MPFR: Something doesn't work when using a pre-installed FFTW library;
+ # need to investigate.
+
+ # LLVM: Julia works only with specific versions, and might require patches.
+ # Thus we let Julia install its own LLVM.
+
+ # Other possible dependencies:
+ # USE_SYSTEM_OPENLIBM=0
+ # USE_SYSTEM_OPENSPECFUN=0
+ # USE_SYSTEM_DSFMT=0
+ # USE_SYSTEM_SUITESPARSE=0
+ # USE_SYSTEM_UTF8PROC=0
+ # USE_SYSTEM_LIBGIT2=0
+
+ def install(self, spec, prefix):
+ # Explicitly setting CC, CXX, or FC breaks building libuv, one of
+ # Julia's dependencies. This might be a Darwin-specific problem. Given
+ # how Spack sets up compilers, Julia should still use Spack's compilers,
+ # even if we don't specify them explicitly.
+ options = [#"CC=cc",
+ #"CXX=c++",
+ #"FC=fc",
+ #"USE_SYSTEM_ARPACK=1",
+ #"USE_SYSTEM_FFTW=1",
+ #"USE_SYSTEM_GMP=1",
+ #"USE_SYSTEM_MPFR=1",
+ #TODO "USE_SYSTEM_PCRE=1",
+ "prefix=%s" % prefix]
+ with open('Make.user', 'w') as f:
+ f.write('\n'.join(options) + '\n')
+ make()
+ make("install")
diff --git a/var/spack/packages/libedit/package.py b/var/spack/packages/libedit/package.py
new file mode 100644
index 0000000000..bcd5212b9e
--- /dev/null
+++ b/var/spack/packages/libedit/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class Libedit(Package):
+ """An autotools compatible port of the NetBSD editline library"""
+ homepage = "http://thrysoee.dk/editline/"
+ url = "http://thrysoee.dk/editline/libedit-20150325-3.1.tar.gz"
+
+ version('3.1', '43cdb5df3061d78b5e9d59109871b4f6', url="http://thrysoee.dk/editline/libedit-20150325-3.1.tar.gz")
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/libpciaccess/package.py b/var/spack/packages/libpciaccess/package.py
index 403bafbbd2..0c0847d323 100644
--- a/var/spack/packages/libpciaccess/package.py
+++ b/var/spack/packages/libpciaccess/package.py
@@ -5,12 +5,10 @@ class Libpciaccess(Package):
"""Generic PCI access library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libpciaccess/"
- url = "http://cgit.freedesktop.org/xorg/lib/libpciaccess/"
+ url = "http://xorg.freedesktop.org/archive/individual/lib/libpciaccess-0.13.4.tar.bz2"
- version('0.13.4', git='http://anongit.freedesktop.org/git/xorg/lib/libpciaccess.git',
- tag='libpciaccess-0.13.4')
+ version('0.13.4', 'ace78aec799b1cf6dfaea55d3879ed9f')
- depends_on('autoconf')
depends_on('libtool')
def install(self, spec, prefix):
@@ -20,9 +18,6 @@ class Libpciaccess(Package):
mkdir(prefix.lib)
return
- from subprocess import call
- call(["./autogen.sh"])
configure("--prefix=%s" % prefix)
-
make()
make("install")
diff --git a/var/spack/packages/lua/package.py b/var/spack/packages/lua/package.py
index 6d8f7806d9..ca8cfc5365 100644
--- a/var/spack/packages/lua/package.py
+++ b/var/spack/packages/lua/package.py
@@ -6,6 +6,7 @@ class Lua(Package):
homepage = "http://www.lua.org"
url = "http://www.lua.org/ftp/lua-5.1.5.tar.gz"
+ version('5.3.2', '33278c2ab5ee3c1a875be8d55c1ca2a1')
version('5.3.1', '797adacada8d85761c079390ff1d9961')
version('5.3.0', 'a1b0a7e92d0c85bbff7a8d27bf29f8af')
version('5.2.4', '913fdb32207046b273fdb17aad70be13')
@@ -18,11 +19,16 @@ class Lua(Package):
version('5.1.3', 'a70a8dfaa150e047866dc01a46272599')
depends_on('ncurses')
+ depends_on('readline')
def install(self, spec, prefix):
+ if spec.satisfies("=darwin-i686") or spec.satisfies("=darwin-x86_64"):
+ target = 'macosx'
+ else:
+ target = 'linux'
make('INSTALL_TOP=%s' % prefix,
- 'MYLDFLAGS="-L%s/lib -Wl,-rpath,%s"' % (spec['ncurses'].prefix,spec['ncurses'].prefix),
- 'linux')
+ 'MYLDFLAGS=-L%s -lncurses' % spec['ncurses'].prefix.lib,
+ target)
make('INSTALL_TOP=%s' % prefix,
- 'MYLDFLAGS="-L%s/lib -Wl,-rpath,%s"' % (spec['ncurses'].prefix,spec['ncurses'].prefix),
+ 'MYLDFLAGS=-L%s -lncurses' % spec['ncurses'].prefix.lib,
'install')
diff --git a/var/spack/packages/mbedtls/package.py b/var/spack/packages/mbedtls/package.py
new file mode 100644
index 0000000000..7745522956
--- /dev/null
+++ b/var/spack/packages/mbedtls/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class Mbedtls(Package):
+ """
+ mbed TLS (formerly known as PolarSSL) makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.
+ """
+ homepage = "https://tls.mbed.org"
+ url = "https://github.com/ARMmbed/mbedtls/archive/mbedtls-2.2.1.tar.gz"
+
+ version('2.2.1' , '73a38f96898d6d03e32f55dd9f9a67be')
+ version('2.2.0' , 'eaf4586c1ef93ae872e606b6c1203942')
+ version('2.1.4' , '40cdf67b6c6d92c9cbcfd552d39ea3ae')
+ version('2.1.3' , '7eb4cf1dfa68578a2c8dbd0b6fa752dd')
+ version('1.3.16', '4144d7320c691f721aeb9e67a1bc38e0')
+
+ def install(self, spec, prefix):
+ cmake('.', *std_cmake_args)
+
+ make()
+ make("install")
diff --git a/var/spack/packages/metis/package.py b/var/spack/packages/metis/package.py
index 7ce5ae1925..bbfc4de7d1 100644
--- a/var/spack/packages/metis/package.py
+++ b/var/spack/packages/metis/package.py
@@ -1,27 +1,83 @@
+##############################################################################
+# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
from spack import *
+
class Metis(Package):
- """METIS is a set of serial programs for partitioning graphs,
- partitioning finite element meshes, and producing fill reducing
- orderings for sparse matrices. The algorithms implemented in
- METIS are based on the multilevel recursive-bisection,
- multilevel k-way, and multi-constraint partitioning schemes."""
+ """
+ METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, and producing fill
+ reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the multilevel
+ recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.
+ """
- homepage = "http://glaros.dtc.umn.edu/gkhome/metis/metis/overview"
- url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"
+ homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview'
+ url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"
version('5.1.0', '5465e67079419a69e0116de24fce58fe')
- depends_on('mpi')
+ variant('shared', default=True, description='Enables the build of shared libraries')
+ variant('debug', default=False, description='Builds the library in debug mode')
+ variant('gdb', default=False, description='Enables gdb support')
+
+ variant('idx64', default=False, description='Use int64_t as default index type')
+ variant('double', default=False, description='Use double precision floating point types')
+
+ depends_on('cmake @2.8:') # build-time dependency
+
+ depends_on('gdb', when='+gdb')
def install(self, spec, prefix):
- cmake(".",
- '-DGKLIB_PATH=%s/GKlib' % pwd(),
- '-DSHARED=1',
- '-DCMAKE_C_COMPILER=mpicc',
- '-DCMAKE_CXX_COMPILER=mpicxx',
- '-DSHARED=1',
- *std_cmake_args)
-
- make()
- make("install")
+
+ options = []
+ options.extend(std_cmake_args)
+
+ build_directory = join_path(self.stage.path, 'spack-build')
+ source_directory = self.stage.source_path
+
+ options.append('-DGKLIB_PATH:PATH={metis_source}/GKlib'.format(metis_source=source_directory))
+
+ if '+shared' in spec:
+ options.append('-DSHARED:BOOL=ON')
+
+ if '+debug' in spec:
+ options.extend(['-DDEBUG:BOOL=ON',
+ '-DCMAKE_BUILD_TYPE:STRING=Debug'])
+
+ if '+gdb' in spec:
+ options.append('-DGDB:BOOL=ON')
+
+ metis_header = join_path(source_directory, 'include', 'metis.h')
+
+ if '+idx64' in spec:
+ filter_file('IDXTYPEWIDTH 32', 'IDXTYPEWIDTH 64', metis_header)
+
+ if '+double' in spec:
+ filter_file('REALTYPEWIDTH 32', 'REALTYPEWIDTH 64', metis_header)
+
+ with working_dir(build_directory, create=True):
+ cmake(source_directory, *options)
+ make()
+ make("install") \ No newline at end of file
diff --git a/var/spack/packages/mpfr/package.py b/var/spack/packages/mpfr/package.py
index 0f2baac004..2758b0da2e 100644
--- a/var/spack/packages/mpfr/package.py
+++ b/var/spack/packages/mpfr/package.py
@@ -31,9 +31,9 @@ class Mpfr(Package):
url = "http://www.mpfr.org/mpfr-current/mpfr-3.1.3.tar.bz2"
version('3.1.3', '5fdfa3cfa5c86514ee4a241a1affa138')
- # version('3.1.2', 'ee2c3ac63bf0c2359bf08fc3ee094c19')
+ version('3.1.2', 'ee2c3ac63bf0c2359bf08fc3ee094c19')
- depends_on('gmp')
+ depends_on('gmp@4.1.0:')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py
index 7cfa0a3b61..00b7dfda75 100644
--- a/var/spack/packages/mpich/package.py
+++ b/var/spack/packages/mpich/package.py
@@ -33,11 +33,12 @@ class Mpich(Package):
list_url = "http://www.mpich.org/static/downloads/"
list_depth = 2
+ version('3.2', 'f414cfa77099cd1fa1a5ae4e22db508a')
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.1', '5643dd176499bfb7d25079aaff25f2ec')
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
provides('mpi@:3.0', when='@3:')
diff --git a/var/spack/packages/ninja/package.py b/var/spack/packages/ninja/package.py
new file mode 100644
index 0000000000..9e6bf4e358
--- /dev/null
+++ b/var/spack/packages/ninja/package.py
@@ -0,0 +1,22 @@
+from spack import *
+import os
+
+class Ninja(Package):
+ """ A small, fast Make alternative """
+ homepage = "https://martine.github.io/ninja/"
+ url = "https://github.com/martine/ninja/archive/v1.6.0.tar.gz"
+
+ version('1.6.0', '254133059f2da79d8727f654d7198f43')
+
+ extends('python')
+
+ def install(self, spec, prefix):
+ sh = which('sh')
+ python('configure.py', '--bootstrap')
+
+ cp = which('cp')
+
+ bindir = os.path.join(prefix, 'bin')
+ mkdir(bindir)
+ cp('-a', '-t', bindir, 'ninja')
+ cp('-ra', 'misc', prefix)
diff --git a/var/spack/packages/opari2/package.py b/var/spack/packages/opari2/package.py
index 3f8c65377d..c68978f5c0 100644
--- a/var/spack/packages/opari2/package.py
+++ b/var/spack/packages/opari2/package.py
@@ -1,18 +1,38 @@
-# FIXME: Add copyright statement here
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
from spack import *
-from contextlib import closing
class Opari2(Package):
- """OPARI2 is a source-to-source instrumentation tool for OpenMP and
- hybrid codes. It surrounds OpenMP directives and runtime library
- calls with calls to the POMP2 measurement interface.
- OPARI2 will provide you with a new initialization method that allows
- for multi-directory and parallel builds as well as the usage of
- pre-instrumented libraries. Furthermore, an efficient way of
- tracking parent-child relationships was added. Additionally, we
- extended OPARI2 to support instrumentation of OpenMP 3.0
- tied tasks. """
+ """
+ OPARI2 is a source-to-source instrumentation tool for OpenMP and hybrid codes. It surrounds OpenMP directives and
+ runtime library calls with calls to the POMP2 measurement interface. OPARI2 will provide you with a new
+ initialization method that allows for multi-directory and parallel builds as well as the usage of pre-instrumented
+ libraries. Furthermore, an efficient way of tracking parent-child relationships was added. Additionally, we extended
+ OPARI2 to support instrumentation of OpenMP 3.0 tied tasks.
+ """
homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz"
@@ -21,47 +41,8 @@ class Opari2(Package):
url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz')
version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e')
- backend_user_provided = """\
-CC=cc
-CXX=c++
-F77=f77
-FC=f90
-CFLAGS=-fPIC
-CXXFLAGS=-fPIC
-"""
- frontend_user_provided = """\
-CC_FOR_BUILD=cc
-CXX_FOR_BUILD=c++
-F77_FOR_BUILD=f70
-FC_FOR_BUILD=f90
-CFLAGS_FOR_BUILD=-fPIC
-CXXFLAGS_FOR_BUILD=-fPIC
-"""
- mpi_user_provided = """\
-MPICC=mpicc
-MPICXX=mpicxx
-MPIF77=mpif77
-MPIFC=mpif90
-MPI_CFLAGS=-fPIC
-MPI_CXXFLAGS=-fPIC
-"""
-
def install(self, spec, prefix):
- # Use a custom compiler configuration, otherwise the score-p
- # build system messes with spack's compiler settings.
- # Create these three files in the build directory
- with closing(open("platform-backend-user-provided", "w")) as backend_file:
- backend_file.write(self.backend_user_provided)
- with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
- frontend_file.write(self.frontend_user_provided)
- with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
- mpi_file.write(self.mpi_user_provided)
-
- # FIXME: Modify the configure line to suit your build system here.
configure("--prefix=%s" % prefix,
- "--with-custom-compilers",
"--enable-shared")
-
- # FIXME: Add logic to build and install here
make()
make("install")
diff --git a/var/spack/packages/openblas/package.py b/var/spack/packages/openblas/package.py
index e01467c05a..9c8fa1c694 100644
--- a/var/spack/packages/openblas/package.py
+++ b/var/spack/packages/openblas/package.py
@@ -19,3 +19,7 @@ class Openblas(Package):
with working_dir(prefix.lib):
symlink('libopenblas.a', 'blas.a')
symlink('libopenblas.a', 'libblas.a')
+
+ # Lapack virtual package should provide liblapack.a
+ with working_dir(prefix.lib):
+ symlink('libopenblas.a', 'liblapack.a')
diff --git a/var/spack/packages/openssl/package.py b/var/spack/packages/openssl/package.py
index 40648fca49..bbb169ec6b 100644
--- a/var/spack/packages/openssl/package.py
+++ b/var/spack/packages/openssl/package.py
@@ -17,12 +17,24 @@ class Openssl(Package):
parallel = False
def install(self, spec, prefix):
+ # OpenSSL uses a variable APPS in its Makefile. If it happens to be set
+ # in the environment, then this will override what is set in the
+ # Makefile, leading to build errors.
+ env.pop('APPS', None)
+ if spec.satisfies("=darwin-x86_64") or spec.satisfies("=ppc64"):
+ # This needs to be done for all 64-bit architectures (except Linux,
+ # where it happens automatically?)
+ env['KERNEL_BITS'] = '64'
config = Executable("./config")
config("--prefix=%s" % prefix,
- "--openssldir=%s/etc/openssl" % prefix,
+ "--openssldir=%s" % join_path(prefix, 'etc', 'openssl'),
"zlib",
"no-krb5",
"shared")
+ # Remove non-standard compiler options if present. These options are
+ # present e.g. on Darwin. They are non-standard, i.e. most compilers
+ # (e.g. gcc) will not accept them.
+ filter_file(r'-arch x86_64', '', 'Makefile')
make()
make("install")
diff --git a/var/spack/packages/otf2/package.py b/var/spack/packages/otf2/package.py
index b3d3a5b663..c3d61bc228 100644
--- a/var/spack/packages/otf2/package.py
+++ b/var/spack/packages/otf2/package.py
@@ -1,12 +1,35 @@
-# FIXME: Add copyright
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
from spack import *
-from contextlib import closing
-import os
+
class Otf2(Package):
- """The Open Trace Format 2 is a highly scalable, memory efficient event
- trace data format plus support library."""
+ """
+ The Open Trace Format 2 is a highly scalable, memory efficient event trace data format plus support library.
+ """
homepage = "http://www.vi-hps.org/score-p"
url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
@@ -22,57 +45,11 @@ class Otf2(Package):
version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8',
url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz")
- backend_user_provided = """\
-CC=cc
-CXX=c++
-F77=f77
-FC=f90
-CFLAGS=-fPIC
-CXXFLAGS=-fPIC
-"""
- frontend_user_provided = """\
-CC_FOR_BUILD=cc
-CXX_FOR_BUILD=c++
-F77_FOR_BUILD=f70
-FC_FOR_BUILD=f90
-CFLAGS_FOR_BUILD=-fPIC
-CXXFLAGS_FOR_BUILD=-fPIC
-"""
- mpi_user_provided = """\
-MPICC=cc
-MPICXX=c++
-MPIF77=f77
-MPIFC=f90
-MPI_CFLAGS=-fPIC
-MPI_CXXFLAGS=-fPIC
-"""
-
- @when('@:1.2.1')
- def version_specific_args(self):
- return ["--with-platform=disabled", "CC=cc", "CXX=c++", "F77=f77", "F90=f90", "CFLAGS=-fPIC", "CXXFLAGS=-fPIC"]
-
- @when('@1.3:')
- def version_specific_args(self):
- # TODO: figure out what scorep's build does as of otf2 1.3
- return ["--with-custom-compilers"]
-
def install(self, spec, prefix):
- # Use a custom compiler configuration, otherwise the score-p
- # build system messes with spack's compiler settings.
- # Create these three files in the build directory
- with closing(open("platform-backend-user-provided", "w")) as backend_file:
- backend_file.write(self.backend_user_provided)
- with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
- frontend_file.write(self.frontend_user_provided)
- with closing(open("platform-mpi-user-provided", "w")) as mpi_file:
- mpi_file.write(self.mpi_user_provided)
-
configure_args=["--prefix=%s" % prefix,
- "--enable-shared"]
-
- configure_args.extend(self.version_specific_args())
-
+ "--enable-shared",
+ "CFLAGS=-fPIC",
+ "CXXFLAGS=-fPIC"]
configure(*configure_args)
-
make()
make("install")
diff --git a/var/spack/packages/paraview/package.py b/var/spack/packages/paraview/package.py
index 1d99b34899..aaab352e66 100644
--- a/var/spack/packages/paraview/package.py
+++ b/var/spack/packages/paraview/package.py
@@ -60,6 +60,10 @@ class Paraview(Package):
feature_args.extend(std_cmake_args)
+ if 'darwin' in self.spec.architecture:
+ feature_args.append('-DVTK_USE_X:BOOL=OFF')
+ feature_args.append('-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON')
+
cmake('..',
'-DCMAKE_INSTALL_PREFIX:PATH=%s' % prefix,
'-DBUILD_TESTING:BOOL=OFF',
diff --git a/var/spack/packages/parmetis/package.py b/var/spack/packages/parmetis/package.py
index d8cd337304..c897dec7e4 100644
--- a/var/spack/packages/parmetis/package.py
+++ b/var/spack/packages/parmetis/package.py
@@ -1,26 +1,95 @@
+##############################################################################
+# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
from spack import *
+# FIXME : lot of code is duplicated from packages/metis/package.py . Inheriting from there may reduce
+# FIXME : the installation rules to just a few lines
+
+
class Parmetis(Package):
- """ParMETIS is an MPI-based parallel library that implements a
- variety of algorithms for partitioning unstructured graphs,
- meshes, and for computing fill-reducing orderings of sparse
- matrices."""
- homepage = "http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview"
- url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz"
+ """
+ ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured
+ graphs, meshes, and for computing fill-reducing orderings of sparse matrices.
+ """
+ homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview'
+ url = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz'
version('4.0.3', 'f69c479586bf6bb7aff6a9bc0c739628')
+ variant('shared', default=True, description='Enables the build of shared libraries')
+ variant('debug', default=False, description='Builds the library in debug mode')
+ variant('gdb', default=False, description='Enables gdb support')
+
+ variant('idx64', default=False, description='Use int64_t as default index type')
+ variant('double', default=False, description='Use double precision floating point types')
+
+ depends_on('cmake @2.8:') # build dependency
depends_on('mpi')
+ # FIXME : this should conflict with metis as it builds its own version internally
+
+ depends_on('gdb', when='+gdb')
+
def install(self, spec, prefix):
- cmake(".",
- '-DGKLIB_PATH=%s/metis/GKlib' % pwd(),
- '-DMETIS_PATH=%s/metis' % pwd(),
- '-DSHARED=1',
- '-DCMAKE_C_COMPILER=mpicc',
- '-DCMAKE_CXX_COMPILER=mpicxx',
- '-DSHARED=1',
- *std_cmake_args)
-
- make()
- make("install")
+ options = []
+ options.extend(std_cmake_args)
+
+ build_directory = join_path(self.stage.path, 'spack-build')
+ source_directory = self.stage.source_path
+ metis_source = join_path(source_directory, 'metis')
+
+ # FIXME : Once a contract is defined, MPI compilers should be retrieved indirectly via spec['mpi'] in case
+ # FIXME : they use a non-standard name
+ options.extend(['-DGKLIB_PATH:PATH={metis_source}/GKlib'.format(metis_source=metis_source),
+ '-DMETIS_PATH:PATH={metis_source}'.format(metis_source=metis_source),
+ '-DCMAKE_C_COMPILER:STRING=mpicc',
+ '-DCMAKE_CXX_COMPILER:STRING=mpicxx'])
+
+ if '+shared' in spec:
+ options.append('-DSHARED:BOOL=ON')
+
+ if '+debug' in spec:
+ options.extend(['-DDEBUG:BOOL=ON',
+ '-DCMAKE_BUILD_TYPE:STRING=Debug'])
+
+ if '+gdb' in spec:
+ options.append('-DGDB:BOOL=ON')
+
+ metis_header = join_path(metis_source, 'include', 'metis.h')
+
+ if '+idx64' in spec:
+ filter_file('IDXTYPEWIDTH 32', 'IDXTYPEWIDTH 64', metis_header)
+
+ if '+double' in spec:
+ filter_file('REALTYPEWIDTH 32', 'REALTYPEWIDTH 64', metis_header)
+
+ with working_dir(build_directory, create=True):
+ cmake(source_directory, *options)
+ make()
+ make("install")
+ # Parmetis build system doesn't allow for an external metis to be used, but doesn't copy the required
+ # metis header either
+ install(metis_header, self.prefix.include)
diff --git a/var/spack/packages/patchelf/package.py b/var/spack/packages/patchelf/package.py
new file mode 100644
index 0000000000..036dc6bd17
--- /dev/null
+++ b/var/spack/packages/patchelf/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class Patchelf(Package):
+ """PatchELF is a small utility to modify the dynamic linker and RPATH of ELF executables."""
+
+ homepage = "https://nixos.org/patchelf.html"
+ url = "http://nixos.org/releases/patchelf/patchelf-0.8/patchelf-0.8.tar.gz"
+ list_url = "http://nixos.org/releases/patchelf/"
+ list_depth = 2
+
+ version('0.8', '407b229e6a681ffb0e2cdd5915cb2d01')
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/pcre2/package.py b/var/spack/packages/pcre2/package.py
new file mode 100644
index 0000000000..6a0244a15e
--- /dev/null
+++ b/var/spack/packages/pcre2/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class Pcre2(Package):
+ """The PCRE2 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/pcre2-10.20.tar.bz2"
+
+ version('10.20', 'dcd027c57ecfdc8a6c3af9d0acf5e3f7')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
diff --git a/var/spack/packages/petsc/package.py b/var/spack/packages/petsc/package.py
index f3ed3d72ec..87f700629d 100644
--- a/var/spack/packages/petsc/package.py
+++ b/var/spack/packages/petsc/package.py
@@ -12,6 +12,8 @@ class Petsc(Package):
version('3.5.2', 'ad170802b3b058b5deb9cd1f968e7e13')
version('3.5.1', 'a557e029711ebf425544e117ffa44d8f')
+ depends_on("python @2.6:2.9") # requires Python for building
+
depends_on("boost")
depends_on("blas")
depends_on("lapack")
@@ -23,9 +25,6 @@ class Petsc(Package):
def install(self, spec, prefix):
configure("--prefix=%s" % prefix,
- "CC=cc",
- "CXX=c++",
- "FC=f90",
"--with-blas-lib=%s/libblas.a" % spec['blas'].prefix.lib,
"--with-lapack-lib=%s/liblapack.a" % spec['lapack'].prefix.lib,
"--with-boost-dir=%s" % spec['boost'].prefix,
@@ -33,6 +32,7 @@ class Petsc(Package):
"--with-parmetis-dir=%s" % spec['parmetis'].prefix,
"--with-metis-dir=%s" % spec['metis'].prefix,
"--with-hdf5-dir=%s" % spec['hdf5'].prefix,
+ "--with-mpi-dir=%s" % spec['mpi'].prefix,
"--with-shared-libraries=0")
# PETSc has its own way of doing parallel make.
diff --git a/var/spack/packages/py-astropy/package.py b/var/spack/packages/py-astropy/package.py
new file mode 100644
index 0000000000..d138a514f6
--- /dev/null
+++ b/var/spack/packages/py-astropy/package.py
@@ -0,0 +1,28 @@
+from spack import *
+
+class PyAstropy(Package):
+ """
+ The Astropy Project is a community effort to develop a single core
+ package for Astronomy in Python and foster interoperability between
+ Python astronomy packages.
+ """
+ homepage = 'http://www.astropy.org/'
+
+ version('1.1.post1', 'b52919f657a37d45cc45f5cb0f58c44d')
+
+ def url_for_version(self, version):
+ return 'https://pypi.python.org/packages/source/a/astropy/astropy-{0}.tar.gz'.format(version)
+
+ extends('python')
+
+ depends_on('cfitsio')
+ depends_on('expat')
+ depends_on('py-h5py')
+ depends_on('py-numpy')
+ depends_on('py-scipy')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'build', '--use-system-cfitsio',
+ '--use-system-expat')
+ python('setup.py', 'install', '--prefix=' + prefix)
+
diff --git a/var/spack/packages/py-blessings/package.py b/var/spack/packages/py-blessings/package.py
new file mode 100644
index 0000000000..f2475a0efd
--- /dev/null
+++ b/var/spack/packages/py-blessings/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyBlessings(Package):
+ """A nicer, kinder way to write to the terminal """
+ homepage = "https://github.com/erikrose/blessings"
+ url = "https://pypi.python.org/packages/source/b/blessings/blessings-1.6.tar.gz"
+
+ version('1.6', '4f552a8ebcd4982693c92571beb99394')
+
+ 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-coverage/package.py b/var/spack/packages/py-coverage/package.py
new file mode 100644
index 0000000000..39b2ac3b01
--- /dev/null
+++ b/var/spack/packages/py-coverage/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyCoverage(Package):
+ """ Testing coverage checker for python """
+ # FIXME: add a proper url for your package's homepage here.
+ homepage = "http://nedbatchelder.com/code/coverage/"
+ url = "https://pypi.python.org/packages/source/c/coverage/coverage-4.0a6.tar.gz"
+
+ version('4.0a6', '1bb4058062646148965bef0796b61efc')
+
+ 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-funcsigs/package.py b/var/spack/packages/py-funcsigs/package.py
new file mode 100644
index 0000000000..a428890288
--- /dev/null
+++ b/var/spack/packages/py-funcsigs/package.py
@@ -0,0 +1,19 @@
+from spack import *
+import os
+
+class PyFuncsigs(Package):
+ """Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2."""
+ homepage = "https://pypi.python.org/pypi/funcsigs"
+ url = "https://pypi.python.org/packages/source/f/funcsigs/funcsigs-0.4.tar.gz"
+
+ version('0.4', 'fb1d031f284233e09701f6db1281c2a5')
+
+ 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-matplotlib/package.py b/var/spack/packages/py-matplotlib/package.py
index a5fee39d42..4776c581ee 100644
--- a/var/spack/packages/py-matplotlib/package.py
+++ b/var/spack/packages/py-matplotlib/package.py
@@ -12,7 +12,7 @@ class PyMatplotlib(Package):
variant('gui', default=False, description='Enable GUI')
variant('ipython', default=False, description='Enable ipython support')
- extends('python', ignore=r'bin/nosetests.*$')
+ extends('python', ignore=r'bin/nosetests.*$|bin/pbr$')
depends_on('py-pyside', when='+gui')
depends_on('py-ipython', when='+ipython')
@@ -22,6 +22,9 @@ class PyMatplotlib(Package):
depends_on('py-pytz')
depends_on('py-nose')
depends_on('py-numpy')
+ depends_on('py-mock')
+ depends_on('py-pbr')
+ depends_on('py-funcsigs')
depends_on('qt', when='+gui')
depends_on('bzip2')
diff --git a/var/spack/packages/py-mock/package.py b/var/spack/packages/py-mock/package.py
index 3b08428ba0..e89af8802a 100644
--- a/var/spack/packages/py-mock/package.py
+++ b/var/spack/packages/py-mock/package.py
@@ -11,6 +11,7 @@ class PyMock(Package):
version('1.3.0', '73ee8a4afb3ff4da1b4afa287f39fdeb')
extends('python')
+ depends_on('py-pbr')
depends_on('py-setuptools@17.1:')
def install(self, spec, prefix):
diff --git a/var/spack/packages/py-mysqldb1/package.py b/var/spack/packages/py-mysqldb1/package.py
new file mode 100644
index 0000000000..fda02b4982
--- /dev/null
+++ b/var/spack/packages/py-mysqldb1/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyMysqldb1(Package):
+ """Legacy mysql bindings for python"""
+ homepage = "https://github.com/farcepest/MySQLdb1"
+ url = "https://github.com/farcepest/MySQLdb1/archive/MySQLdb-1.2.5.tar.gz"
+
+ version('1.2.5', '332c8f4955b6bc0c79ea15170bf7321b')
+
+ 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-numexpr/package.py b/var/spack/packages/py-numexpr/package.py
new file mode 100644
index 0000000000..89f8a525b1
--- /dev/null
+++ b/var/spack/packages/py-numexpr/package.py
@@ -0,0 +1,15 @@
+from spack import *
+import re
+
+class PyNumexpr(Package):
+ """Fast numerical expression evaluator for NumPy"""
+ homepage = "https://pypi.python.org/pypi/numexpr"
+ url = "https://pypi.python.org/packages/source/n/numexpr/numexpr-2.4.6.tar.gz"
+
+ version('2.4.6', '17ac6fafc9ea1ce3eb970b9abccb4fbd')
+
+ 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-pbr/package.py b/var/spack/packages/py-pbr/package.py
new file mode 100644
index 0000000000..02957483d4
--- /dev/null
+++ b/var/spack/packages/py-pbr/package.py
@@ -0,0 +1,18 @@
+from spack import *
+import os
+
+class PyPbr(Package):
+ """PBR is a library that injects some useful and sensible default behaviors into your setuptools run."""
+ homepage = "https://pypi.python.org/pypi/pbr"
+ url = "https://pypi.python.org/packages/source/p/pbr/pbr-1.8.1.tar.gz"
+
+ version('1.8.1', 'c8f9285e1a4ca6f9654c529b158baa3a')
+
+ 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-periodictable/package.py b/var/spack/packages/py-periodictable/package.py
new file mode 100644
index 0000000000..6a495a1cc8
--- /dev/null
+++ b/var/spack/packages/py-periodictable/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class PyPeriodictable(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/periodictable"
+ url = "https://pypi.python.org/packages/source/p/periodictable/periodictable-1.4.1.tar.gz"
+
+ version('1.4.1', '7246b63cc0b6b1be6e86b6616f9e866e')
+
+ depends_on('py-numpy')
+ depends_on('py-pyparsing')
+ extends('python')
+
+ def install(self, spec, prefix):
+ python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pytables/package.py b/var/spack/packages/py-pytables/package.py
new file mode 100644
index 0000000000..a5b1e78ab3
--- /dev/null
+++ b/var/spack/packages/py-pytables/package.py
@@ -0,0 +1,19 @@
+from spack import *
+import re
+
+class PyPytables(Package):
+ """PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope with extremely large amounts of data."""
+ homepage = "http://www.pytables.org/"
+ url = "https://github.com/PyTables/PyTables/archive/v.3.2.2.tar.gz"
+
+ version('3.2.2', '7cbb0972e4d6580f629996a5bed92441')
+
+ extends('python')
+ depends_on('hdf5')
+ depends_on('py-numpy')
+ depends_on('py-numexpr')
+ depends_on('py-cython')
+
+ def install(self, spec, prefix):
+ env["HDF5_DIR"] = spec['hdf5'].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
index 760ad4d6db..26c048bfd4 100644
--- a/var/spack/packages/py-setuptools/package.py
+++ b/var/spack/packages/py-setuptools/package.py
@@ -8,6 +8,7 @@ class PySetuptools(Package):
version('11.3.1', '01f69212e019a2420c1693fb43593930')
version('16.0', '0ace0b96233516fc5f7c857d086aa3ad')
version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06')
+ version('19.2', '78353b1f80375ca5e088f4b4627ffe03')
extends('python')
diff --git a/var/spack/packages/py-tappy/package.py b/var/spack/packages/py-tappy/package.py
new file mode 100644
index 0000000000..df61a909da
--- /dev/null
+++ b/var/spack/packages/py-tappy/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyTappy(Package):
+ """Python TAP interface module for unit tests"""
+ homepage = "https://github.com/mblayman/tappy"
+ # base https://pypi.python.org/pypi/cffi
+ url = "https://pypi.python.org/packages/source/t/tap.py/tap.py-1.6.tar.gz"
+
+ version('1.6', 'c8bdb93ad66e05f939905172a301bedf')
+
+ 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-urwid/package.py b/var/spack/packages/py-urwid/package.py
new file mode 100644
index 0000000000..aaa11c681d
--- /dev/null
+++ b/var/spack/packages/py-urwid/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyUrwid(Package):
+ """A full-featured console UI library"""
+ homepage = "http://urwid.org/"
+ url = "https://pypi.python.org/packages/source/u/urwid/urwid-1.3.0.tar.gz"
+
+ version('1.3.0', 'a989acd54f4ff1a554add464803a9175')
+
+ depends_on('py-setuptools')
+
+ extends("python")
+
+ 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
index eae2566b57..a1ce06feb0 100644
--- a/var/spack/packages/python/package.py
+++ b/var/spack/packages/python/package.py
@@ -11,15 +11,16 @@ 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"
+ url = "http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz"
extendable = True
- version('2.7.8', 'd235bdfa75b8396942e360a70487ee00')
- version('2.7.10', 'c685ef0b8e9f27b5e3db5db12b268ac6')
- version('2.7.11', '1dbcc848b4cd8399a8199d000f9f823c', preferred=True)
- version('3.5.0', 'd149d2812f10cbe04c042232e7964171')
- version('3.5.1', 'e9ea6f2623fffcdd871b7b19113fde80')
+ version('3.5.1', 'be78e48cdfc1a7ad90efff146dce6cfe')
+ version('3.5.0', 'a56c0c0b45d75a0ec9c6dee933c41c36')
+ version('2.7.11', '6b6076ec9e93f05dd63e47eb9c15728b', preferred=True)
+ version('2.7.10', 'd7547558fd673bd9d38e2108c6b42521')
+ version('2.7.9', '5eebcaa0030dc4061156d3429657fb83')
+ version('2.7.8', 'd4bca0159acb0b44a781292b5231936f')
depends_on("openssl")
depends_on("bzip2")
diff --git a/var/spack/packages/scalasca/package.py b/var/spack/packages/scalasca/package.py
index cf7a40c1f5..6de14564b2 100644
--- a/var/spack/packages/scalasca/package.py
+++ b/var/spack/packages/scalasca/package.py
@@ -1,65 +1,63 @@
-# FIXME: Add copyright
+##############################################################################
+# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the LICENSE file for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License (as published by
+# the Free Software Foundation) version 2.1 dated February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
from spack import *
+
class Scalasca(Package):
- """Scalasca is a software tool that supports the performance optimization
- of parallel programs by measuring and analyzing their runtime behavior.
- The analysis identifies potential performance bottlenecks - in
- particular those concerning communication and synchronization - and
- offers guidance in exploring their causes."""
+ """
+ Scalasca is a software tool that supports the performance optimization of parallel programs by measuring and
+ analyzing their runtime behavior. The analysis identifies potential performance bottlenecks - in particular those
+ concerning communication and synchronization - and offers guidance in exploring their causes.
+ """
- # FIXME: add a proper url for your package's homepage here.
homepage = "http://www.scalasca.org"
- url = "http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz"
+ url = "http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz"
- version('2.1', 'bab9c2b021e51e2ba187feec442b96e6',
- url = 'http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz' )
+ version('2.2.2', '2bafce988b0522d18072f7771e491ab9',
+ url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.2/dist/scalasca-2.2.2.tar.gz')
- depends_on("mpi")
- depends_on("otf2@1.4")
- depends_on("cube@4.2.3")
+ version('2.1', 'bab9c2b021e51e2ba187feec442b96e6',
+ url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz')
- backend_user_provided = """\
-CC=cc
-CXX=c++
-F77=f77
-FC=f90
-CFLAGS=-fPIC
-CXXFLAGS=-fPIC
-"""
- frontend_user_provided = """\
-CC_FOR_BUILD=cc
-CXX_FOR_BUILD=c++
-F77_FOR_BUILD=f70
-FC_FOR_BUILD=f90
-CFLAGS_FOR_BUILD=-fPIC
-CXXFLAGS_FOR_BUILD=-fPIC
-"""
- mpi_user_provided = """\
-MPICC=mpicc
-MPICXX=mpicxx
-MPIF77=mpif77
-MPIFC=mpif90
-MPI_CFLAGS=-fPIC
-MPI_CXXFLAGS=-fPIC
-"""
+ depends_on("mpi")
+ ##########
+ # Hard-code dependencies for Scalasca according to what stated in the release page
+ # The OTF2 library path should be detected automatically from SCOREP
+ # SCALASCA 2.2.2
+ depends_on("scorep@1.4:", when='@2.2.2')
+ depends_on("cube@4.3:", when='@2.2.2')
+ # SCALASCA 2.1
+ depends_on("scorep@1.3", when='@2.1')
+ depends_on("cube@4.2:", when='@2.1')
+ ##########
def install(self, spec, prefix):
configure_args = ["--prefix=%s" % prefix,
- "--with-custom-compilers",
- "--with-otf2=%s" % spec['otf2'].prefix.bin,
"--with-cube=%s" % spec['cube'].prefix.bin,
"--enable-shared"]
-
configure(*configure_args)
-
- make()
- make("install")
-
- # FIXME: Modify the configure line to suit your build system here.
- configure("--prefix=%s" % prefix)
-
- # FIXME: Add logic to build and install here
make()
- make("install")
+ make("install") \ No newline at end of file
diff --git a/var/spack/packages/scorep/package.py b/var/spack/packages/scorep/package.py
index 0820f2d8ac..5127e814b6 100644
--- a/var/spack/packages/scorep/package.py
+++ b/var/spack/packages/scorep/package.py
@@ -28,9 +28,9 @@ from spack import *
class Scorep(Package):
"""
- The Score-P measurement infrastructure is a highly scalable and
- easy-to-use tool suite for profiling, event tracing, and online
- analysis of HPC applications."""
+ The Score-P measurement infrastructure is a highly scalable and easy-to-use tool suite for profiling, event
+ tracing, and online analysis of HPC applications.
+ """
homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz"
@@ -55,15 +55,6 @@ class Scorep(Package):
depends_on("mpi")
depends_on("papi")
- def get_compiler_config_line(self):
- backend_user_provided = ['CC=%s' % self.compiler.cc_names[0],
- 'CXX=%s' % self.compiler.cxx_names[0],
- 'F77=%s' % self.compiler.f77_names[0] if len(self.compiler.f77_names) else "",
- 'FC=%s' % self.compiler.fc_names[0] if len(self.compiler.fc_names) else "",
- 'CFLAGS=-fPIC %s' % self.rpath_args,
- 'CXXFLAGS=-fPIC %s'% self.rpath_args]
- return backend_user_provided
-
def install(self, spec, prefix):
configure = Executable( join_path(self.stage.source_path, 'configure') )
with working_dir('spack-build', create=True):
@@ -73,8 +64,9 @@ class Scorep(Package):
"--with-cube=%s" % spec['cube'].prefix.bin,
"--with-papi-header=%s" % spec['papi'].prefix.include,
"--with-papi-lib=%s" % spec['papi'].prefix.lib,
- "--enable-shared"]
- configure_args.extend(self.get_compiler_config_line())
+ "--enable-shared",
+ "CFLAGS=-fPIC",
+ "CXXFLAGS=-fPIC"]
configure(*configure_args)
make()
make("install")
diff --git a/var/spack/packages/szip/package.py b/var/spack/packages/szip/package.py
new file mode 100644
index 0000000000..c48c5b431e
--- /dev/null
+++ b/var/spack/packages/szip/package.py
@@ -0,0 +1,21 @@
+from spack import *
+
+class Szip(Package):
+ """Szip is an implementation of the extended-Rice lossless compression algorithm.
+ It provides lossless compression of scientific data, and is provided with HDF
+ software products."""
+
+ homepage = "https://www.hdfgroup.org/doc_resource/SZIP/"
+ url = "http://www.hdfgroup.org/ftp/lib-external/szip/2.1/src/szip-2.1.tar.gz"
+
+ version('2.1', '902f831bcefb69c6b635374424acbead')
+
+ def install(self, spec, prefix):
+ configure('--prefix=%s' % prefix,
+ '--enable-production',
+ '--enable-shared',
+ '--enable-static',
+ '--enable-encoding')
+
+ make()
+ make("install")
diff --git a/var/spack/packages/texinfo/package.py b/var/spack/packages/texinfo/package.py
index 460db65b3e..1b22c72e72 100644
--- a/var/spack/packages/texinfo/package.py
+++ b/var/spack/packages/texinfo/package.py
@@ -33,12 +33,12 @@ class Texinfo(Package):
used by many non-GNU projects as well.FIXME: put a proper description of your package here.
"""
homepage = "https://www.gnu.org/software/texinfo/"
- url = "http://ftp.gnu.org/gnu/texinfo/texinfo-6.0.tar.xz"
+ url = "http://ftp.gnu.org/gnu/texinfo/texinfo-6.0.tar.gz"
- version('6.0', '02818e62a5b8ae0213a7ff572991bb50')
- version('5.2', 'cb489df8a7ee9d10a236197aefdb32c5')
- version('5.1', '52ee905a3b705020d2a1b6ec36d53ca6')
- version('5.0', 'ef2fad34c71ddc95b20c7d6a08c0d7a6')
+ version('6.0', 'e1a2ef5dce5018b53f0f6eed45b247a7')
+ version('5.2', '1b8f98b80a8e6c50422125e07522e8db')
+ version('5.1', '54e250014fe698fb4832016158747c03')
+ version('5.0', '918432285abe6fe96c98355594c5656a')
def install(self, spec, prefix):
configure('--prefix=%s' % prefix)
diff --git a/var/spack/packages/wget/package.py b/var/spack/packages/wget/package.py
index c8fd025122..55728b0515 100644
--- a/var/spack/packages/wget/package.py
+++ b/var/spack/packages/wget/package.py
@@ -8,9 +8,10 @@ class Wget(Package):
etc."""
homepage = "http://www.gnu.org/software/wget/"
- url = "http://ftp.gnu.org/gnu/wget/wget-1.16.tar.xz"
+ url = "http://ftp.gnu.org/gnu/wget/wget-1.16.tar.gz"
- version('1.16', 'fe102975ab3a6c049777883f1bb9ad07')
+ version('1.17', 'c4c4727766f24ac716936275014a0536')
+ version('1.16', '293a37977c41b5522f781d3a3a078426')
depends_on("openssl")