Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
Jim Galarowicz 2015-08-18 08:05:25 -05:00
commit fe9959d4da
28 changed files with 388 additions and 31 deletions

11
.mailmap Normal file
View file

@ -0,0 +1,11 @@
Todd Gamblin <tgamblin@llnl.gov> George Todd Gamblin <gamblin2@llnl.gov>
Adam Moody <moody20@llnl.gov> Adam T. Moody <moody20@llnl.gov>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Gimenez <alfredo.gimenez@gmail.com>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra324.llnl.gov>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra648.llnl.gov>
Kevin Brandstatter <kjbrandstatter@gmail.com> Kevin Brandstatter <kbrandst@hawk.iit.edu>
Luc Jaulmes <luc.jaulmes@bsc.es> Luc Jaulmes <jaulmes1@llnl.gov>
Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@surface86.llnl.gov
Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com>
Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de>

View file

@ -165,12 +165,24 @@ def visitCallFunc(self, node):
def rollup(n):
if isinstance(n, compiler.ast.Name):
return n.name
elif isinstance(n, compiler.ast.Const):
return type(n.value).__name__
elif isinstance(n, compiler.ast.Getattr):
r = rollup(n.expr)
if r:
return r + "." + n.attrname
name = rollup(node.node)
if name:
# Special handling for empty format strings, which aren't
# allowed in Python 2.6
if name in ('unicode.format', 'str.format'):
n = node.node
if isinstance(n, compiler.ast.Getattr):
n = n.expr
if isinstance(n, compiler.ast.Const):
if '{}' in n.value:
self.add(node, (2,7), name + ' with {} format string')
v = Functions.get(name)
if v is not None:
self.add(node, v, name)

View file

@ -88,10 +88,10 @@ def set_compiler_environment_variables(pkg):
compiler = pkg.compiler
# Set compiler variables used by CMake and autotools
os.environ['CC'] = 'cc'
os.environ['CXX'] = 'c++'
os.environ['F77'] = 'f77'
os.environ['FC'] = 'f90'
os.environ['CC'] = join_path(spack.build_env_path, 'cc')
os.environ['CXX'] = join_path(spack.build_env_path, 'c++')
os.environ['F77'] = join_path(spack.build_env_path, 'f77')
os.environ['FC'] = join_path(spack.build_env_path, 'f90')
# Set SPACK compiler variables so that our wrapper knows what to call
if compiler.cc:

View file

@ -92,7 +92,7 @@ def display_specs(specs, **kwargs):
# Print one spec per line along with prefix path
width = max(len(s) for s in abbreviated)
width += 2
format = " %-{}s%s".format(width)
format = " %%-%ds%%s" % width
for abbrv, spec in zip(abbreviated, specs):
if hashes:

View file

@ -425,12 +425,21 @@ def fetch(self):
if self.git_version > ver('1.7.10'):
args.append('--single-branch')
cloned = False
# Yet more efficiency, only download a 1-commit deep tree
if self.git_version >= ver('1.7.1'):
args.extend(['--depth','1'])
try:
self.git(*(args + ['--depth','1', self.url]))
cloned = True
except spack.error.SpackError:
# This will fail with the dumb HTTP transport
# continue and try without depth, cleanup first
pass
if not cloned:
args.append(self.url)
self.git(*args)
args.append(self.url)
self.git(*args)
self.stage.chdir_to_source()
# For tags, be conservative and check them out AFTER

View file

@ -41,13 +41,10 @@
class PythonVersionTest(unittest.TestCase):
def spack_python_files(self):
def pyfiles(self, *search_paths):
# first file is the spack script.
yield spack.spack_file
# Next files are all the source files and package files.
search_paths = [spack.lib_path, spack.var_path]
# Iterate through the whole spack source tree.
for path in search_paths:
for root, dirnames, filenames in os.walk(path):
@ -56,16 +53,20 @@ def spack_python_files(self):
yield os.path.join(root, filename)
def all_package_py_files(self):
def package_py_files(self):
for name in spack.db.all_package_names():
yield spack.db.filename_for_package_name(name)
def check_python_versions(self, files):
def check_python_versions(self, *files):
# dict version -> filename -> reasons
all_issues = {}
for fn in files:
if fn != '/Users/gamblin2/src/spack/var/spack/packages/vim/package.py':
continue
print fn
with open(fn) as pyfile:
versions = pyqver2.get_versions(pyfile.read())
for ver, reasons in versions.items():
@ -101,8 +102,8 @@ def check_python_versions(self, files):
def test_core_module_compatibility(self):
self.check_python_versions(self.spack_python_files())
self.check_python_versions(*self.pyfiles(spack.lib_path))
def test_package_module_compatibility(self):
self.check_python_versions(self.all_package_py_files())
self.check_python_versions(*self.pyfiles(spack.packages_path))

View file

@ -34,6 +34,7 @@
import spack
import spack.error
class Executable(object):
"""Class representing a program that can be run on the command line."""
def __init__(self, name):
@ -58,7 +59,20 @@ def __call__(self, *args, **kwargs):
return_output = kwargs.get("return_output", False)
fail_on_error = kwargs.get("fail_on_error", True)
ignore_errors = kwargs.get("ignore_errors", ())
output = kwargs.get("output", sys.stdout)
error = kwargs.get("error", sys.stderr)
input = kwargs.get("input", None)
def streamify(arg, mode):
if isinstance(arg, basestring):
return open(arg, mode), True
elif arg is None and mode != 'r':
return open(os.devnull, mode), True
return arg, False
output, ostream = streamify(output, 'w')
error, estream = streamify(error, 'w')
input, istream = streamify(input, 'r')
# if they just want to ignore one error code, make it a tuple.
if isinstance(ignore_errors, int):
@ -77,16 +91,12 @@ def __call__(self, *args, **kwargs):
cmd_line = ' '.join(cmd)
tty.debug(cmd_line)
close_error = False
try:
if error is None:
error = open(os.devnull, 'w')
close_error = True
proc = subprocess.Popen(
cmd,
stdin=input,
stderr=error,
stdout=subprocess.PIPE if return_output else sys.stdout)
stdout=subprocess.PIPE if return_output else output)
out, err = proc.communicate()
self.returncode = proc.returncode
@ -110,8 +120,9 @@ def __call__(self, *args, **kwargs):
% (proc.returncode, cmd_line))
finally:
if close_error:
error.close()
if ostream: output.close()
if estream: error.close()
if istream: input.close()
def __eq__(self, other):

View file

@ -0,0 +1,18 @@
from spack import *
class Asciidoc(Package):
""" A presentable text document format for writing articles, UNIX man
pages and other small to medium sized documents."""
homepage = "http://asciidoc.org"
url = "http://downloads.sourceforge.net/project/asciidoc/asciidoc/8.6.9/asciidoc-8.6.9.tar.gz"
version('8.6.9', 'c59018f105be8d022714b826b0be130a')
depends_on('libxml2')
depends_on('libxslt')
def install(self, spec, prefix):
configure('--prefix=%s' % prefix)
make()
make("install")

View file

@ -0,0 +1,17 @@
from spack import *
class Bear(Package):
"""Bear is a tool that generates a compilation database for clang tooling from non-cmake build systems."""
homepage = "https://github.com/rizsotto/Bear"
url = "https://github.com/rizsotto/Bear/archive/2.0.4.tar.gz"
version('2.0.4', 'fd8afb5e8e18f8737ba06f90bd77d011')
depends_on("cmake")
depends_on("python")
def install(self, spec, prefix):
cmake('.', *std_cmake_args)
make("all")
make("install")

View file

@ -0,0 +1,17 @@
from spack import *
class Cscope(Package):
"""Cscope is a developer's tool for browsing source code."""
homepage = "http://http://cscope.sourceforge.net/"
url = "http://downloads.sourceforge.net/project/cscope/cscope/15.8b/cscope-15.8b.tar.gz"
version('15.8b', '8f9409a238ee313a96f9f87fe0f3b176')
# Can be configured to use flex (not necessary)
# ./configure --with-flex
def install(self, spec, prefix):
configure('--prefix=%s' % prefix)
make()
make("install")

View file

@ -0,0 +1,19 @@
from spack import *
class Czmq(Package):
""" A C interface to the ZMQ library """
homepage = "http://czmq.zeromq.org"
url = "https://github.com/zeromq/czmq/archive/v3.0.2.tar.gz"
version('3.0.2', '23e9885f7ee3ce88d99d0425f52e9be1', url='https://github.com/zeromq/czmq/archive/v3.0.2.tar.gz')
depends_on('zeromq')
def install(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh")
configure("--prefix=%s" % prefix)
make()
make("install")

View file

@ -0,0 +1,19 @@
import os
import glob
from spack import *
class DocbookXml(Package):
"""Docbook DTD XML files."""
homepage = "http://www.oasis-open.org/docbook"
url = "http://www.oasis-open.org/docbook/xml/4.5/docbook-xml-4.5.zip"
version('4.5', '03083e288e87a7e829e437358da7ef9e')
def install(self, spec, prefix):
cp = which('cp')
install_args = ['-a', '-t', prefix]
install_args.extend(glob.glob('*'))
cp(*install_args)

View file

@ -0,0 +1,36 @@
from spack import *
import os
class Flux(Package):
""" A next-generation resource manager (pre-alpha) """
homepage = "https://github.com/flux-framework/flux-core"
url = "https://github.com/flux-framework/flux-core"
version('master', branch='master', git='https://github.com/flux-framework/flux-core')
# Also needs autotools, but should use the system version if available
depends_on("zeromq@4.0.4:")
depends_on("czmq@2.2:")
depends_on("lua@5.1:5.1.99")
depends_on("munge")
depends_on("libjson-c")
depends_on("libxslt")
# TODO: This provides a catalog, hacked with environment below for now
depends_on("docbook-xml")
depends_on("asciidoc")
depends_on("python")
depends_on("py-cffi")
def install(self, spec, prefix):
# Bootstrap with autotools
bash = which('bash')
bash('./autogen.sh')
# Fix asciidoc dependency on xml style sheets and whatnot
os.environ['XML_CATALOG_FILES'] = os.path.join(spec['docbook-xml'].prefix,
'catalog.xml')
# Configure, compile & install
configure("--prefix=" + prefix)
make("install", "V=1")

View file

@ -0,0 +1,14 @@
from spack import *
class LibjsonC(Package):
""" A JSON implementation in C """
homepage = "https://github.com/json-c/json-c/wiki"
url = "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.11.tar.gz"
version('0.11', 'aa02367d2f7a830bf1e3376f77881e98')
def install(self, spec, prefix):
configure('--prefix=%s' % prefix)
make()
make("install")

View file

@ -0,0 +1,21 @@
from spack import *
class Libpciaccess(Package):
"""Generic PCI access library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libpciaccess/"
url = "http://cgit.freedesktop.org/xorg/lib/libpciaccess/"
version('0.13.4', git='http://anongit.freedesktop.org/git/xorg/lib/libpciaccess.git',
tag='libpciaccess-0.13.4')
depends_on('autoconf')
depends_on('libtool')
def install(self, spec, prefix):
from subprocess import call
call(["./autogen.sh"])
configure("--prefix=%s" % prefix)
make()
make("install")

View file

@ -0,0 +1,19 @@
from spack import *
class Libsodium(Package):
"""Sodium is a modern, easy-to-use software library for encryption,
decryption, signatures, password hashing and more."""
homepage = "https://download.libsodium.org/doc/"
url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.3.tar.gz"
version('1.0.3', 'b3bcc98e34d3250f55ae196822307fab')
version('1.0.2', 'dc40eb23e293448c6fc908757738003f')
version('1.0.1', '9a221b49fba7281ceaaf5e278d0f4430')
version('1.0.0', '3093dabe4e038d09f0d150cef064b2f7')
version('0.7.1', 'c224fe3923d1dcfe418c65c8a7246316')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()
make("install")

View file

@ -9,11 +9,12 @@ class Libxml2(Package):
version('2.9.2', '9e6a9aca9d155737868b3dc5fd82f788')
extends('python')
depends_on('zlib')
depends_on('xz')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix,
"--without-python")
configure("--prefix=%s" % prefix)
make()
make("install")

View file

@ -0,0 +1,26 @@
from spack import *
import os
class Lua(Package):
""" The Lua programming language interpreter and library """
homepage = "http://www.lua.org"
url = "http://www.lua.org/ftp/lua-5.1.5.tar.gz"
version('5.3.1', '797adacada8d85761c079390ff1d9961')
version('5.3.0', 'a1b0a7e92d0c85bbff7a8d27bf29f8af')
version('5.2.4', '913fdb32207046b273fdb17aad70be13')
version('5.2.3', 'dc7f94ec6ff15c985d2d6ad0f1b35654')
version('5.2.2', 'efbb645e897eae37cad4344ce8b0a614')
version('5.2.1', 'ae08f641b45d737d12d30291a5e5f6e3')
version('5.2.0', 'f1ea831f397214bae8a265995ab1a93e')
version('5.1.5', '2e115fe26e435e33b0d5c022e4490567')
version('5.1.4', 'd0870f2de55d59c1c8419f36e8fac150')
version('5.1.3', 'a70a8dfaa150e047866dc01a46272599')
depends_on('ncurses')
def install(self, spec, prefix):
make('INSTALL_TOP=%s' % prefix,
'MYLDFLAGS=-L%s/lib' % spec['ncurses'].prefix,
'linux',
'install')

View file

@ -1,7 +1,7 @@
from spack import *
class Mesa(Package):
"""Mesa is an open-source implementation of the OpenGL
"""Mesa is an open-source implementation of the OpenGL
specification - a system for rendering interactive 3D graphics."""
homepage = "http://www.mesa3d.org"
@ -11,9 +11,10 @@ class Mesa(Package):
# version('10.4.4', '8d863a3c209bf5116b2babfccccc68ce')
version('8.0.5', 'cda5d101f43b8784fa60bdeaca4056f2')
# mesa 7.x, 8.x, 9.x
# mesa 7.x, 8.x, 9.x
depends_on("libdrm@2.4.33")
depends_on("llvm@3.0")
depends_on("libxml2")
# patch("llvm-fixes.patch") # using newer llvm

View file

@ -33,6 +33,8 @@ class Mpfr(Package):
version('3.1.3', '5fdfa3cfa5c86514ee4a241a1affa138')
# version('3.1.2', 'ee2c3ac63bf0c2359bf08fc3ee094c19')
depends_on('gmp')
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
make()

View file

@ -0,0 +1,20 @@
from spack import *
import os
class Munge(Package):
""" MUNGE Uid 'N' Gid Emporium """
homepage = "https://code.google.com/p/munge/"
url = "https://github.com/dun/munge/releases/download/munge-0.5.11/munge-0.5.11.tar.bz2"
version('0.5.11', 'bd8fca8d5f4c1fcbef1816482d49ee01', url='https://github.com/dun/munge/releases/download/munge-0.5.11/munge-0.5.11.tar.bz2')
depends_on('openssl')
depends_on('libgcrypt')
def install(self, spec, prefix):
os.makedirs(os.path.join(prefix, "lib/systemd/system"))
configure("--prefix=%s" % prefix)
make()
make("install")

View file

@ -21,3 +21,11 @@ def install(self, spec, prefix):
make()
make("install")
configure("--prefix=%s" % prefix,
"--with-shared",
"--disable-widec",
"--disable-pc-files",
"--without-ada")
make()
make("install")

View file

@ -0,0 +1,17 @@
from spack import *
class PyMock(Package):
"""mock is a library for testing in Python. It allows you to replace parts
of your system under test with mock objects and make assertions about how
they have been used."""
homepage = "https://github.com/testing-cabal/mock"
url = "https://pypi.python.org/packages/source/m/mock/mock-1.3.0.tar.gz"
version('1.3.0', '73ee8a4afb3ff4da1b4afa287f39fdeb')
extends('python')
depends_on('py-setuptools@17.1:')
def install(self, spec, prefix):
python('setup.py', 'install', '--prefix=%s' % prefix)

View file

@ -16,6 +16,10 @@ class PyPandas(Package):
depends_on('py-scipy')
depends_on('py-setuptools')
depends_on('py-pytz')
depends_on('libdrm')
depends_on('libpciaccess')
depends_on('llvm')
depends_on('mesa')
def install(self, spec, prefix):
python('setup.py', 'install', '--prefix=%s' % prefix)

View file

@ -7,6 +7,7 @@ class PySetuptools(Package):
version('11.3.1', '01f69212e019a2420c1693fb43593930')
version('16.0', '0ace0b96233516fc5f7c857d086aa3ad')
version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06')
extends('python')

View file

@ -35,15 +35,26 @@ class Vim(Package):
variant('ruby', default=False, description="build with Ruby")
depends_on('ruby', when='+ruby')
variant('cscope', default=False, description="build with cscope support")
depends_on('cscope', when='+cscope')
variant('gui', default=False, description="build with gui (gvim)")
# virtual dependency?
def install(self, spec, prefix):
feature_set = None
for fs in self.feature_sets:
if "+" + fs in spec:
if feature_set is not None:
tty.error("Only one feature set allowed, both {} and {} specified".format(
feature_set,
fs))
tty.error("Only one feature set allowed, both %s and %s specified"
% (feature_set, fs))
feature_set = fs
if '+gui' in spec:
if feature_set is not None:
if feature_set is not 'huge':
tty.error("+gui variant requires 'huge' feature set, %s was specified"
% feature_set)
feature_set = 'huge'
if feature_set is None:
feature_set = 'normal'
@ -60,6 +71,12 @@ def install(self, spec, prefix):
else:
configure_args.append("--enable-rubyinterp=dynamic")
if '+gui' in spec:
configure_args.append("--enable-gui=auto")
if '+cscope' in spec:
configure_args.append("--enable-cscope")
configure("--prefix=%s" % prefix, *configure_args)
make()

View file

@ -0,0 +1,20 @@
from spack import *
class Zeromq(Package):
""" The ZMQ networking/concurrency library and core API """
homepage = "http://zguide.zeromq.org/"
url = "http://download.zeromq.org/zeromq-4.1.2.tar.gz"
version('4.1.2', '159c0c56a895472f02668e692d122685')
version('4.1.1', '0a4b44aa085644f25c177f79dc13f253')
version('4.0.7', '9b46f7e7b0704b83638ef0d461fd59ab')
version('4.0.6', 'd47dd09ed7ae6e7fd6f9a816d7f5fdf6')
version('4.0.5', '73c39f5eb01b9d7eaf74a5d899f1d03d')
depends_on("libsodium")
def install(self, spec, prefix):
configure("--with-libsodium","--prefix=%s" % prefix)
make()
make("install")

View file

@ -0,0 +1,16 @@
from spack import *
class Zsh(Package):
""" The ZSH shell """
homepage = "http://www.zsh.org"
url = "http://www.zsh.org/pub/zsh-5.0.8.tar.bz2"
version('5.0.8', 'e6759e8dd7b714d624feffd0a73ba0fe')
depends_on("pcre")
def install(self, spec, prefix):
configure('--prefix=%s' % prefix)
make()
make("install")