summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/spack47
-rw-r--r--lib/spack/docs/workflows.rst7
-rw-r--r--lib/spack/spack/compilers/cce.py12
-rw-r--r--lib/spack/spack/variant.py4
-rwxr-xr-xshare/spack/qa/run-unit-tests3
-rwxr-xr-xshare/spack/spack-completion.bash5
-rw-r--r--var/spack/repos/builtin/packages/cgal/package.py1
-rw-r--r--var/spack/repos/builtin/packages/emacs/package.py16
-rw-r--r--var/spack/repos/builtin/packages/findutils/package.py53
-rw-r--r--var/spack/repos/builtin/packages/ghostscript/package.py43
-rw-r--r--var/spack/repos/builtin/packages/hdf5/package.py1
-rw-r--r--var/spack/repos/builtin/packages/libconfig/package.py43
-rw-r--r--var/spack/repos/builtin/packages/mvapich2/package.py1
-rw-r--r--var/spack/repos/builtin/packages/py-beautifulsoup4/package.py7
-rw-r--r--var/spack/repos/builtin/packages/py-dryscrape/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-libconf/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-lxml/package.py4
-rw-r--r--var/spack/repos/builtin/packages/py-pyprof2html/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch10
-rw-r--r--var/spack/repos/builtin/packages/py-webkit-server/package.py35
-rw-r--r--var/spack/repos/builtin/packages/py-xvfbwrapper/package.py37
-rw-r--r--var/spack/repos/builtin/packages/wget/package.py1
22 files changed, 421 insertions, 25 deletions
diff --git a/bin/spack b/bin/spack
index c737a0f178..5ab805fe54 100755
--- a/bin/spack
+++ b/bin/spack
@@ -93,6 +93,12 @@ from llnl.util.tty.color import *
import spack
from spack.error import SpackError
import argparse
+import pstats
+
+# Get the allowed names of statistics for cProfile, and make a list of
+# groups of 7 names to wrap them nicely.
+stat_names = pstats.Stats.sort_arg_dict_default
+stat_lines = list(zip(*(iter(stat_names),)*7))
# Command parsing
parser = argparse.ArgumentParser(
@@ -120,10 +126,15 @@ parser.add_argument('-m', '--mock', action='store_true',
help="use mock packages instead of real ones")
parser.add_argument('-p', '--profile', action='store_true',
help="profile execution using cProfile")
+parser.add_argument('-P', '--sorted-profile', default=None, metavar="STAT",
+ help="profile and sort by one or more of:\n[%s]" %
+ ',\n '.join([', '.join(line) for line in stat_lines]))
+parser.add_argument('--lines', default=20, action='store',
+ help="lines of profile output: default 20; 'all' for all")
parser.add_argument('-v', '--verbose', action='store_true',
help="print additional output during builds")
parser.add_argument('-s', '--stacktrace', action='store_true',
- help="add stacktrace information to all printed statements")
+ help="add stacktrace info to all printed statements")
parser.add_argument('-V', '--version', action='version',
version="%s" % spack.spack_version)
@@ -183,6 +194,8 @@ def _main(args, unknown_args):
return_val = command(parser, args)
except SpackError as e:
e.die()
+ except Exception as e:
+ tty.die(str(e))
except KeyboardInterrupt:
sys.stderr.write('\n')
tty.die("Keyboard interrupt.")
@@ -206,9 +219,37 @@ def main(args):
# actually parse the args.
args, unknown = parser.parse_known_args()
- if args.profile:
+ if args.profile or args.sorted_profile:
import cProfile
- cProfile.runctx('_main(args, unknown)', globals(), locals())
+
+ try:
+ nlines = int(args.lines)
+ except ValueError:
+ if args.lines != 'all':
+ tty.die('Invalid number for --lines: %s' % args.lines)
+ nlines = -1
+
+ # allow comma-separated list of fields
+ sortby = ['time']
+ if args.sorted_profile:
+ sortby = args.sorted_profile.split(',')
+ for stat in sortby:
+ if stat not in stat_names:
+ tty.die("Invalid sort field: %s" % stat)
+
+ try:
+ # make a profiler and run the code.
+ pr = cProfile.Profile()
+ pr.enable()
+ _main(args, unknown)
+ finally:
+ pr.disable()
+
+ # print out profile stats.
+ stats = pstats.Stats(pr)
+ stats.sort_stats(*sortby)
+ stats.print_stats(nlines)
+
elif args.pdb:
import pdb
pdb.runctx('_main(args, unknown)', globals(), locals())
diff --git a/lib/spack/docs/workflows.rst b/lib/spack/docs/workflows.rst
index 7814ebf3cd..84da3b0f44 100644
--- a/lib/spack/docs/workflows.rst
+++ b/lib/spack/docs/workflows.rst
@@ -476,10 +476,11 @@ if the view is built with hardlinks.
.. FIXME: reference the relocation work of Hegner and Gartung (PR #1013)
+.. _cmd-spack-view:
-""""""""""""""""""""""
-Using Filesystem Views
-""""""""""""""""""""""
+""""""""""""""
+``spack view``
+""""""""""""""
A filesystem view is created, and packages are linked in, by the ``spack
view`` command's ``symlink`` and ``hardlink`` sub-commands. The
diff --git a/lib/spack/spack/compilers/cce.py b/lib/spack/spack/compilers/cce.py
index 43d000dd69..94956b9d83 100644
--- a/lib/spack/spack/compilers/cce.py
+++ b/lib/spack/spack/compilers/cce.py
@@ -53,3 +53,15 @@ class Cce(Compiler):
@classmethod
def default_version(cls, comp):
return get_compiler_version(comp, '-V', r'[Vv]ersion.*(\d+(\.\d+)+)')
+
+ @property
+ def openmp_flag(self):
+ return "-h omp"
+
+ @property
+ def cxx11_flag(self):
+ return "-h std=c++11"
+
+ @property
+ def pic_flag(self):
+ return "-h PIC"
diff --git a/lib/spack/spack/variant.py b/lib/spack/spack/variant.py
index 7102676b69..2d02ab1253 100644
--- a/lib/spack/spack/variant.py
+++ b/lib/spack/spack/variant.py
@@ -389,9 +389,9 @@ class BoolValuedVariant(SingleValuedVariant):
self._original_value = value
self._value = False
else:
- msg = 'cannot construct a BoolValuedVariant from '
+ msg = 'cannot construct a BoolValuedVariant for "{0}" from '
msg += 'a value that does not represent a bool'
- raise ValueError(msg)
+ raise ValueError(msg.format(self.name))
def __contains__(self, item):
return item is self.value
diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests
index 7e300280ff..fe2ec6f54a 100755
--- a/share/spack/qa/run-unit-tests
+++ b/share/spack/qa/run-unit-tests
@@ -20,6 +20,9 @@ cd "$SPACK_ROOT"
# Print compiler information
spack config get compilers
+# Profile and print top 20 lines for a simple call to spack spec
+${coverage_run} bin/spack -p --lines 20 spec mpileaks
+
# Run unit tests with code coverage
${coverage_run} bin/spack test "$@"
${coverage_combine}
diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash
index 819dcc06ab..b8d104aca8 100755
--- a/share/spack/spack-completion.bash
+++ b/share/spack/spack-completion.bash
@@ -53,6 +53,9 @@ function _bash_completion_spack {
# For example, `spack -d install []` will call _spack_install
# and `spack compiler add []` will call _spack_compiler_add
local subfunction=$(IFS='_'; echo "_${COMP_WORDS_NO_FLAGS[*]}")
+ # Translate dashes to underscores, as dashes are not permitted in
+ # compatibility mode. See https://github.com/LLNL/spack/pull/4079
+ subfunction=${subfunction//-/_}
# However, the word containing the current cursor position needs to be
# added regardless of whether or not it is a flag. This allows us to
@@ -288,7 +291,7 @@ function _spack_debug {
fi
}
-function _spack_create-db-tarball {
+function _spack_debug_create_db_tarball {
compgen -W "-h --help" -- "$cur"
}
diff --git a/var/spack/repos/builtin/packages/cgal/package.py b/var/spack/repos/builtin/packages/cgal/package.py
index a16572246b..60762006f9 100644
--- a/var/spack/repos/builtin/packages/cgal/package.py
+++ b/var/spack/repos/builtin/packages/cgal/package.py
@@ -35,6 +35,7 @@ class Cgal(Package):
homepage = 'http://www.cgal.org/'
url = 'https://github.com/CGAL/cgal/archive/releases/CGAL-4.7.tar.gz'
+ version('4.9.1', 'df6517df3320bf6c9de2e1b0361738b9')
version('4.9', '7b628db3e5614347f776c046b7666089')
version('4.7', '4826714810f3b4c65cac96b90fb03b67')
version('4.6.3', 'e8ee2ecc8d2b09b94a121c09257b576d')
diff --git a/var/spack/repos/builtin/packages/emacs/package.py b/var/spack/repos/builtin/packages/emacs/package.py
index dac57682ea..195cb1281f 100644
--- a/var/spack/repos/builtin/packages/emacs/package.py
+++ b/var/spack/repos/builtin/packages/emacs/package.py
@@ -36,10 +36,17 @@ class Emacs(AutotoolsPackage):
version('24.5', 'd74b597503a68105e61b5b9f6d065b44')
variant('X', default=False, description="Enable an X toolkit")
- variant('toolkit', default='gtk',
- description="Select an X toolkit (gtk, athena)")
+ variant(
+ 'toolkit',
+ default='gtk',
+ values=('gtk', 'athena'),
+ description="Select an X toolkit (gtk, athena)"
+ )
+
+ depends_on('pkg-config@0.9.0:', type='build')
depends_on('ncurses')
+ depends_on('zlib')
depends_on('libtiff', when='+X')
depends_on('libpng', when='+X')
depends_on('libxpm', when='+X')
@@ -50,12 +57,9 @@ class Emacs(AutotoolsPackage):
def configure_args(self):
spec = self.spec
- args = []
+
toolkit = spec.variants['toolkit'].value
if '+X' in spec:
- if toolkit not in ('gtk', 'athena'):
- raise InstallError("toolkit must be in (gtk, athena), not %s" %
- toolkit)
args = [
'--with-x',
'--with-x-toolkit={0}'.format(toolkit)
diff --git a/var/spack/repos/builtin/packages/findutils/package.py b/var/spack/repos/builtin/packages/findutils/package.py
new file mode 100644
index 0000000000..f436e53d1a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/findutils/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 Findutils(AutotoolsPackage):
+ """The GNU Find Utilities are the basic directory searching
+ utilities of the GNU operating system."""
+
+ homepage = "https://www.gnu.org/software/findutils/"
+ url = "http://ftpmirror.gnu.org/findutils/findutils-4.6.0.tar.gz"
+
+ version('4.6.0', '9936aa8009438ce185bea2694a997fc1')
+ version('4.4.2', '351cc4adb07d54877fa15f75fb77d39f')
+ version('4.4.1', '5883f569dc021eee765f330bb7a3782d')
+ version('4.4.0', '49e769ac4382fae6f104f99d54d0a112')
+ version('4.2.33', 'b7e35aa175778c84942b1fee4144988b')
+ version('4.2.32', 'aaa6beeb41a6f04963dff58f24a55b96')
+ version('4.2.31', 'a0e31a0f18a49709bf5a449867c8049a')
+ version('4.2.30', 'c35ff6502e0b3514c99089cb5d333c25')
+ version('4.2.29', '24e76434ca74ba3c2c6ad621eb64e1ff')
+ version('4.2.28', 'f5fb3349354ee3d94fceb81dab5c71fd')
+ version('4.2.27', 'f1e0ddf09f28f8102ff3b90f3b5bc920')
+ version('4.2.26', '9ac4e62937b1fdc4eb643d1d4bf117d3')
+ version('4.2.25', 'e92fef6714ffa9972f28a1a423066921')
+ version('4.2.23', 'ecaff8b060e8d69c10eb2391a8032e26')
+ version('4.2.20', '7c8e12165b221dd67a19c00d780437a4')
+ version('4.2.18', '8aac2498435f3f1882678fb9ebda5c34')
+ version('4.2.15', 'a881b15aa7170aea045bf35cc92d48e7')
+ version('4.1.20', 'e90ce7222daadeb8616b8db461e17cbc')
+ version('4.1', '3ea8fe58ef5386da75f6c707713aa059')
diff --git a/var/spack/repos/builtin/packages/ghostscript/package.py b/var/spack/repos/builtin/packages/ghostscript/package.py
index 2e884b4278..255abaa6bd 100644
--- a/var/spack/repos/builtin/packages/ghostscript/package.py
+++ b/var/spack/repos/builtin/packages/ghostscript/package.py
@@ -23,28 +23,59 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import shutil
-class Ghostscript(Package):
+class Ghostscript(AutotoolsPackage):
"""An interpreter for the PostScript language and for PDF."""
homepage = "http://ghostscript.com/"
url = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs921/ghostscript-9.21.tar.gz"
- version('9.21', '6f60d7fcb5eef6a8bec5abedf21c6a7008a8c0c7')
+ version('9.21', '5f213281761d2750fcf27476c404d17f')
version('9.18', '33a47567d7a591c00a253caddd12a88a')
- parallel = False
+ depends_on('pkg-config', type='build')
+ depends_on('freetype@2.4.2:')
+ depends_on('jpeg')
+ depends_on('lcms')
+ depends_on('libpng')
depends_on('libtiff')
+ depends_on('zlib')
def url_for_version(self, version):
baseurl = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs{0}/ghostscript-{1}.tar.gz"
return baseurl.format(version.joined, version.dotted)
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix),
- '--with-system-libtiff')
+ def patch(self):
+ """Ghostscript comes with all of its dependencies vendored.
+ In order to build with Spack versions of these dependencies,
+ we have to remove these vendored dependencies.
+
+ Note that this approach is also recommended by Linux from Scratch:
+ http://www.linuxfromscratch.org/blfs/view/svn/pst/gs.html
+ """
+ directories = ['freetype', 'jpeg', 'lcms2', 'libpng', 'zlib']
+ for directory in directories:
+ shutil.rmtree(directory)
+
+ filter_file('ZLIBDIR=src',
+ 'ZLIBDIR={0}'.format(self.spec['zlib'].prefix.include),
+ 'configure.ac', 'configure',
+ string=True)
+ def configure_args(self):
+ return [
+ '--disable-compile-inits',
+ '--enable-dynamic',
+ '--with-system-libtiff',
+ ]
+
+ def build(self, spec, prefix):
make()
+ make('so')
+
+ def install(self, spec, prefix):
make('install')
+ make('soinstall')
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 5a3f9e5657..3fc978e725 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -37,6 +37,7 @@ class Hdf5(AutotoolsPackage):
list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
list_depth = 3
+ version('1.10.1', '43a2f9466702fb1db31df98ae6677f15')
version('1.10.0-patch1', '9180ff0ef8dc2ef3f61bd37a7404f295')
version('1.10.0', 'bdc935337ee8282579cd6bc4270ad199')
version('1.8.18', 'dd2148b740713ca0295442ec683d7b1c',
diff --git a/var/spack/repos/builtin/packages/libconfig/package.py b/var/spack/repos/builtin/packages/libconfig/package.py
new file mode 100644
index 0000000000..54aeec5b2f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libconfig/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 Libconfig(AutotoolsPackage):
+ """C/C++ Configuration File Library"""
+
+ homepage = "http://www.hyperrealm.com/libconfig/"
+ url = "https://github.com/hyperrealm/libconfig/archive/v1.6.tar.gz"
+
+ force_autoreconf = True
+ # there is currently a build error with version 1.6, see:
+ # https://github.com/hyperrealm/libconfig/issues/47
+ # version('1.6', '2ccd24b6a2ee39f7ff8a3badfafb6539')
+ version('1.5', 'e92a91c2ddf3bf77bea0f5ed7f09e492', preferred=True)
+
+ depends_on('m4', type=('build'))
+ depends_on('autoconf', type=('build'))
+ depends_on('automake', type=('build'))
+ depends_on('libtool', type=('build'))
diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index 3844f804be..cc874356d3 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -190,6 +190,7 @@ class Mvapich2(AutotoolsPackage):
)
def configure_args(self):
+ spec = self.spec
args = [
'--enable-shared',
'--enable-romio',
diff --git a/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py b/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
index 3a90d02127..f97c01dced 100644
--- a/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
+++ b/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
@@ -31,11 +31,10 @@ class PyBeautifulsoup4(PythonPackage):
of navigating, searching, and modifying the parse tree."""
homepage = "https://www.crummy.com/software/BeautifulSoup"
- url = "https://pypi.python.org/packages/source/b/beautifulsoup4/beautifulsoup4-4.4.1.tar.gz"
+ url = "https://pypi.io/packages/source/b/beautifulsoup4/beautifulsoup4-4.5.3.tar.gz"
- version('4.5.1', '994abd90e691beaf7d42c00ffb2f3a67',
- url='https://www.crummy.com/software/BeautifulSoup/bs4/'
- 'download/4.5/beautifulsoup4-4.5.1.tar.gz')
+ version('4.5.3', '937e0df0d699a1237646f38fd567f0c6')
+ version('4.5.1', '994abd90e691beaf7d42c00ffb2f3a67')
version('4.4.1', '8fbd9a7cac0704645fa20d1419036815')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-dryscrape/package.py b/var/spack/repos/builtin/packages/py-dryscrape/package.py
new file mode 100644
index 0000000000..e3dd3506a2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dryscrape/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 PyDryscrape(PythonPackage):
+ """a lightweight Javascript-aware, headless web scraping library
+ for Python"""
+
+ homepage = "https://github.com/niklasb/dryscrape"
+ url = "https://pypi.io/packages/source/d/dryscrape/dryscrape-1.0.tar.gz"
+
+ version('develop', git="https://github.com/niklasb/dryscrape",
+ branch="master")
+ version('1.0', '267e380a8efaf9cd8fd94de1639d3198')
+
+ depends_on('py-lxml', type=('build', 'run'))
+ depends_on('py-webkit-server@1.0:', type=('build', 'run'))
+ depends_on('py-xvfbwrapper', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-libconf/package.py b/var/spack/repos/builtin/packages/py-libconf/package.py
new file mode 100644
index 0000000000..d43479d9ef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-libconf/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 PyLibconf(PythonPackage):
+ """A pure-Python libconfig reader/writer with permissive license"""
+
+ homepage = "https://pypi.python.org/pypi/libconf"
+ url = "https://pypi.io/packages/source/l/libconf/libconf-1.0.1.tar.gz"
+
+ version('1.0.1', 'd37d355b3248f99802c46669ba38e406')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-lxml/package.py b/var/spack/repos/builtin/packages/py-lxml/package.py
index ad78d816ce..fe63f87639 100644
--- a/var/spack/repos/builtin/packages/py-lxml/package.py
+++ b/var/spack/repos/builtin/packages/py-lxml/package.py
@@ -32,6 +32,10 @@ class PyLxml(PythonPackage):
homepage = "http://lxml.de/"
url = "https://pypi.io/packages/source/l/lxml/lxml-2.3.tar.gz"
+ version('3.7.3', '075692ce442e69bbd604d44e21c02753')
version('2.3', 'a245a015fd59b63e220005f263e1682a')
depends_on('py-setuptools@0.6c5:', type='build')
+ depends_on('py-cython@0.20:', type='build')
+ depends_on('libxml2', type=('build', 'run'))
+ depends_on('libxslt', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyprof2html/package.py b/var/spack/repos/builtin/packages/py-pyprof2html/package.py
new file mode 100644
index 0000000000..19e3967e35
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyprof2html/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 PyPyprof2html(PythonPackage):
+ """Python cProfile and hotshot profile's data to HTML Converter"""
+
+ homepage = "https://pypi.python.org/pypi/pyprof2html/"
+ url = "https://pypi.io/packages/source/p/pyprof2html/pyprof2html-0.3.1.tar.gz"
+
+ version('0.3.1', 'aa65a1635aac95e0487d7749a6351c43')
+
+ patch('version_0.3.1.patch', when="@0.3.1")
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-jinja2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch b/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch
new file mode 100644
index 0000000000..fd0e856cb5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch
@@ -0,0 +1,10 @@
+diff --git a/pyprof2html/__init__.py b/pyprof2html/__init__.py
+index 342eb6d..74b3392 100644
+--- a/pyprof2html/__init__.py
++++ b/pyprof2html/__init__.py
+@@ -10,3 +10,5 @@ __licence__ = 'New BSD License'
+ __author__ = 'Hideo Hattori <hhatto.jp@gmail.com>'
+
+ __all__ = ['Converter', 'pyprof2html_main']
++
++__version__ = '0.3.1'
diff --git a/var/spack/repos/builtin/packages/py-webkit-server/package.py b/var/spack/repos/builtin/packages/py-webkit-server/package.py
new file mode 100644
index 0000000000..8393ddabbf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-webkit-server/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 PyWebkitServer(PythonPackage):
+ """a Webkit-based, headless web client"""
+
+ homepage = "https://github.com/niklasb/webkit-server"
+ url = "https://pypi.io/packages/source/w/webkit-server/webkit-server-1.0.tar.gz"
+
+ version('develop', git="https://github.com/niklasb/webkit-server", branch="master")
+ version('1.0', '8463245c2b4f0264d934c0ae20bd4654')
diff --git a/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py b/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py
new file mode 100644
index 0000000000..3c10c179d1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created 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 Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, 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 Lesser 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 PyXvfbwrapper(PythonPackage):
+ """run headless display inside X virtual framebuffer (Xvfb)"""
+
+ homepage = "https://pypi.python.org/pypi/xvfbwrapper/0.2.9"
+ url = "https://pypi.io/packages/source/x/xvfbwrapper/xvfbwrapper-0.2.9.tar.gz"
+
+ version('0.2.9', '3f3cbed698606f4b14e76ccc7b5dd366')
+
+ depends_on('py-setuptools', type='build')
+ # Eventually add xvfb!
diff --git a/var/spack/repos/builtin/packages/wget/package.py b/var/spack/repos/builtin/packages/wget/package.py
index aff771b723..10b8c33d31 100644
--- a/var/spack/repos/builtin/packages/wget/package.py
+++ b/var/spack/repos/builtin/packages/wget/package.py
@@ -39,6 +39,7 @@ class Wget(Package):
version('1.16', '293a37977c41b5522f781d3a3a078426')
depends_on("openssl")
+ depends_on("perl@5.12.0:", type='build')
def install(self, spec, prefix):
configure(