From c6cd8ae243c07fa80d54207c334883585eca0d97 Mon Sep 17 00:00:00 2001
From: Mario Melara <mamelara@genepool1.nersc.gov>
Date: Thu, 1 Oct 2015 21:35:25 -0700
Subject: Use more recent version of libffi. 3.1 has a known bug that is fixed
 in current version

---
 var/spack/packages/libffi/package.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/var/spack/packages/libffi/package.py b/var/spack/packages/libffi/package.py
index 2c1c4eed4d..18acabb00c 100644
--- a/var/spack/packages/libffi/package.py
+++ b/var/spack/packages/libffi/package.py
@@ -6,9 +6,9 @@ class Libffi(Package):
     to call any function specified by a call interface description at
     run time."""
     homepage = "https://sourceware.org/libffi/"
-    url      = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz"
-
-    version('3.1', 'f5898b29bbfd70502831a212d9249d10')
+    
+    version('3.2.1','83b89587607e3eb65c70d361f13bab43',url = "ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
+    #version('3.1', 'f5898b29bbfd70502831a212d9249d10',url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz") # Has a bug $(lib64) instead of ${lib64} in libffi.pc
 
     def install(self, spec, prefix):
         configure("--prefix=%s" % prefix)
-- 
cgit v1.2.3-70-g09d2


From 1501786fd9be0a01abe7f6bb917e416fb3256aa6 Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Sat, 3 Oct 2015 13:04:37 -0700
Subject: adding python_recipe_parser as a submodule under the folder utils

---
 .gitmodules                | 3 +++
 utils/python_recipe_parser | 1 +
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 utils/python_recipe_parser

diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000..a097fcd8cf
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "utils/python_recipe_parser"]
+	path = utils/python_recipe_parser
+	url = https://github.com/karenyyng/spack_python_package_parser
diff --git a/utils/python_recipe_parser b/utils/python_recipe_parser
new file mode 160000
index 0000000000..3158074a2d
--- /dev/null
+++ b/utils/python_recipe_parser
@@ -0,0 +1 @@
+Subproject commit 3158074a2d74f99aa72289dfcf093b1b0ba4474e
-- 
cgit v1.2.3-70-g09d2


From 79808da760eabcb3e692c88e29ea3c7c558b131d Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Sat, 3 Oct 2015 18:47:36 -0700
Subject: added a bunch of packages and added submodule

---
 .gitignore                                         |  1 +
 .gitmodules                                        |  4 +-
 utils/python_recipe_parser                         |  1 -
 var/spack/packages/ImageMagick/package.py          |  0
 var/spack/packages/Mitos/package.py                |  0
 var/spack/packages/R/package.py                    |  0
 var/spack/packages/SAMRAI/no-tool-build.patch      |  0
 var/spack/packages/SAMRAI/package.py               |  0
 var/spack/packages/adept-utils/package.py          |  0
 var/spack/packages/arpack/package.py               |  0
 var/spack/packages/asciidoc/package.py             | 18 -------
 var/spack/packages/atk/package.py                  |  0
 var/spack/packages/atlas/package.py                |  0
 var/spack/packages/autoconf/package.py             |  0
 var/spack/packages/automaded/package.py            |  0
 var/spack/packages/automake/package.py             |  0
 var/spack/packages/bear/package.py                 |  0
 var/spack/packages/bib2xhtml/package.py            |  0
 var/spack/packages/binutils/package.py             |  0
 var/spack/packages/bison/package.py                |  0
 var/spack/packages/boost/package.py                |  4 --
 var/spack/packages/bowtie2/bowtie2-2.5.patch       | 16 ------
 var/spack/packages/bowtie2/package.py              | 24 ---------
 var/spack/packages/boxlib/package.py               |  0
 var/spack/packages/bzip2/package.py                |  0
 var/spack/packages/cairo/package.py                |  0
 var/spack/packages/callpath/package.py             |  0
 var/spack/packages/cblas/package.py                |  0
 var/spack/packages/cgm/package.py                  |  0
 var/spack/packages/clang/package.py                |  0
 var/spack/packages/cloog/package.py                |  0
 var/spack/packages/cmake/package.py                |  0
 var/spack/packages/coreutils/package.py            |  0
 var/spack/packages/cppcheck/package.py             |  0
 var/spack/packages/cram/package.py                 |  0
 var/spack/packages/cscope/package.py               | 17 -------
 var/spack/packages/cube/package.py                 |  0
 var/spack/packages/czmq/package.py                 | 19 -------
 var/spack/packages/dbus/package.py                 |  0
 var/spack/packages/docbook-xml/package.py          | 19 -------
 var/spack/packages/doxygen/package.py              | 25 ---------
 var/spack/packages/dri2proto/package.py            |  0
 var/spack/packages/dtcmp/package.py                |  0
 var/spack/packages/dyninst/package.py              |  0
 var/spack/packages/eigen/package.py                | 17 +++++++
 var/spack/packages/elfutils/package.py             | 26 ----------
 var/spack/packages/extrae/package.py               |  0
 var/spack/packages/exuberant-ctags/package.py      |  0
 var/spack/packages/fish/package.py                 | 18 -------
 var/spack/packages/flex/package.py                 |  0
 var/spack/packages/flux/package.py                 | 36 -------------
 var/spack/packages/fontconfig/package.py           |  0
 var/spack/packages/freetype/package.py             |  0
 var/spack/packages/gasnet/package.py               |  0
 var/spack/packages/gcc/package.py                  |  0
 var/spack/packages/gdk-pixbuf/package.py           |  0
 var/spack/packages/geos/package.py                 |  0
 var/spack/packages/gflags/package.py               | 21 --------
 var/spack/packages/ghostscript/package.py          | 17 -------
 var/spack/packages/git/package.py                  |  0
 var/spack/packages/glib/package.py                 |  0
 var/spack/packages/global/package.py               |  0
 var/spack/packages/glog/package.py                 | 15 ------
 var/spack/packages/gmp/package.py                  |  0
 var/spack/packages/gnutls/package.py               |  0
 var/spack/packages/gperf/package.py                |  0
 var/spack/packages/gperftools/package.py           |  0
 var/spack/packages/graphlib/package.py             |  0
 var/spack/packages/graphviz/package.py             | 19 ++++---
 var/spack/packages/gtkplus/package.py              |  0
 var/spack/packages/harfbuzz/package.py             |  0
 var/spack/packages/hdf5/package.py                 |  0
 var/spack/packages/hwloc/package.py                |  0
 var/spack/packages/hypre/package.py                |  0
 var/spack/packages/icu/package.py                  |  0
 var/spack/packages/icu4c/package.py                |  0
 var/spack/packages/isl/package.py                  |  0
 var/spack/packages/jdk/package.py                  |  0
 var/spack/packages/jpeg/package.py                 |  0
 var/spack/packages/lapack/package.py               | 45 +++++++++++++++++
 var/spack/packages/launchmon/package.py            |  0
 .../packages/launchmon/patch.lmon_install_dir      |  0
 var/spack/packages/lcms/package.py                 |  0
 var/spack/packages/leveldb/package.py              | 29 -----------
 var/spack/packages/libNBC/package.py               |  0
 var/spack/packages/libarchive/package.py           |  0
 var/spack/packages/libcircle/package.py            |  0
 var/spack/packages/libdrm/package.py               |  5 +-
 var/spack/packages/libdwarf/package.py             |  0
 var/spack/packages/libelf/package.py               |  2 -
 var/spack/packages/libevent/package.py             |  0
 var/spack/packages/libffi/package.py               |  6 +--
 var/spack/packages/libgcrypt/package.py            |  0
 var/spack/packages/libgpg-error/package.py         |  0
 var/spack/packages/libjpeg-turbo/package.py        |  0
 var/spack/packages/libjson-c/package.py            | 14 -----
 var/spack/packages/libmng/package.py               |  0
 var/spack/packages/libmonitor/package.py           |  0
 var/spack/packages/libpciaccess/package.py         | 17 +++----
 var/spack/packages/libpng/package.py               |  0
 var/spack/packages/libsodium/package.py            | 19 -------
 var/spack/packages/libtiff/package.py              |  0
 var/spack/packages/libtool/package.py              |  0
 var/spack/packages/libunwind/package.py            |  0
 var/spack/packages/libuuid/package.py              |  0
 var/spack/packages/libxcb/package.py               |  0
 var/spack/packages/libxml2/package.py              |  5 +-
 var/spack/packages/libxshmfence/package.py         |  0
 var/spack/packages/libxslt/package.py              |  0
 var/spack/packages/llvm-lld/package.py             |  0
 var/spack/packages/llvm/package.py                 |  0
 var/spack/packages/lmdb/package.py                 | 39 --------------
 var/spack/packages/lua/package.py                  | 26 ----------
 var/spack/packages/lwgrp/package.py                |  0
 var/spack/packages/lwm2/package.py                 |  0
 var/spack/packages/memaxes/package.py              |  0
 var/spack/packages/mesa/package.py                 |  5 +-
 var/spack/packages/metis/package.py                |  0
 var/spack/packages/mpc/package.py                  |  0
 var/spack/packages/mpe2/mpe2.patch                 |  0
 var/spack/packages/mpe2/package.py                 |  0
 var/spack/packages/mpfr/package.py                 |  0
 var/spack/packages/mpibash/mpibash-4.3.patch       |  0
 var/spack/packages/mpibash/package.py              |  0
 var/spack/packages/mpich/package.py                |  1 +
 var/spack/packages/mpileaks/package.py             |  0
 var/spack/packages/mrnet/package.py                |  0
 var/spack/packages/munge/package.py                | 20 --------
 var/spack/packages/muster/package.py               |  0
 .../mvapich2/ad_lustre_rwcontig_open_source.patch  |  0
 var/spack/packages/mvapich2/package.py             |  0
 var/spack/packages/nasm/package.py                 |  0
 var/spack/packages/ncurses/package.py              |  8 ---
 var/spack/packages/netcdf/package.py               |  0
 var/spack/packages/netgauge/package.py             |  0
 var/spack/packages/netlib-blas/package.py          |  6 ---
 var/spack/packages/netlib-lapack/package.py        | 59 ----------------------
 var/spack/packages/nettle/package.py               |  0
 var/spack/packages/ompss/package.py                |  0
 var/spack/packages/opari2/package.py               |  0
 .../openmpi/ad_lustre_rwcontig_open_source.patch   |  0
 var/spack/packages/openmpi/llnl-platforms.patch    |  0
 var/spack/packages/openmpi/package.py              |  0
 var/spack/packages/openssl/package.py              |  0
 var/spack/packages/otf/package.py                  |  0
 var/spack/packages/otf2/package.py                 |  0
 var/spack/packages/pango/package.py                |  0
 var/spack/packages/papi/package.py                 |  0
 var/spack/packages/paraver/package.py              |  0
 var/spack/packages/parmetis/package.py             |  0
 var/spack/packages/parpack/package.py              |  0
 var/spack/packages/pcre/package.py                 |  0
 var/spack/packages/petsc/package.py                |  0
 var/spack/packages/pidx/package.py                 | 21 --------
 var/spack/packages/pixman/package.py               |  0
 var/spack/packages/pkg-config/package.py           | 17 -------
 var/spack/packages/pmgr_collective/package.py      |  0
 var/spack/packages/postgresql/package.py           |  0
 var/spack/packages/ppl/package.py                  |  0
 var/spack/packages/protobuf/package.py             | 16 ------
 var/spack/packages/py-Cython/package.py            | 12 +++++
 var/spack/packages/py-Distutils2/package.py        | 15 ++++++
 var/spack/packages/py-astroML/package.py           | 12 +++++
 var/spack/packages/py-astropy/package.py           | 12 +++++
 var/spack/packages/py-autopep8/package.py          | 12 +++++
 var/spack/packages/py-basemap/package.py           |  0
 var/spack/packages/py-biopython/package.py         |  0
 var/spack/packages/py-certifi/package.py           | 12 +++++
 var/spack/packages/py-cffi/package.py              |  0
 var/spack/packages/py-cython/package.py            |  0
 var/spack/packages/py-dateutil/package.py          |  0
 var/spack/packages/py-decorator/package.py         | 12 +++++
 var/spack/packages/py-emcee/package.py             | 12 +++++
 var/spack/packages/py-epydoc/package.py            |  0
 var/spack/packages/py-fitsio/package.py            | 13 +++++
 var/spack/packages/py-genders/package.py           |  0
 var/spack/packages/py-gnuplot/package.py           |  0
 var/spack/packages/py-gnureadline/package.py       | 12 +++++
 var/spack/packages/py-h5py/package.py              |  0
 var/spack/packages/py-ipython/package.py           | 21 ++++++--
 var/spack/packages/py-ipython/package.py.backup    | 27 ++++++++++
 var/spack/packages/py-ipython_genutils/package.py  | 12 +++++
 var/spack/packages/py-joblib/package.py            | 12 +++++
 var/spack/packages/py-jsonschema/package.py        | 16 ++++++
 var/spack/packages/py-libxml2/package.py           |  0
 var/spack/packages/py-lockfile/package.py          |  0
 var/spack/packages/py-mako/package.py              |  0
 var/spack/packages/py-matplotlib/package.py        |  1 -
 var/spack/packages/py-mock/package.py              | 17 +++----
 var/spack/packages/py-mpi4py/package.py            |  0
 var/spack/packages/py-mx/package.py                |  0
 var/spack/packages/py-nose/package.py              |  0
 var/spack/packages/py-numexpr/package.py           | 12 +++++
 var/spack/packages/py-numpy/package.py             | 15 +-----
 var/spack/packages/py-pandas/package.py            |  2 +
 var/spack/packages/py-pep8/package.py              | 12 +++++
 var/spack/packages/py-pexpect/package.py           |  0
 var/spack/packages/py-pickleshare/package.py       | 12 +++++
 var/spack/packages/py-pil/package.py               |  0
 var/spack/packages/py-pip/package.py               | 12 +++++
 var/spack/packages/py-pmw/package.py               |  0
 var/spack/packages/py-py/package.py                | 12 +++++
 var/spack/packages/py-py4j/package.py              | 15 ++++++
 var/spack/packages/py-pychecker/package.py         |  0
 var/spack/packages/py-pycparser/package.py         |  0
 var/spack/packages/py-pyelftools/package.py        |  0
 var/spack/packages/py-pygments/package.py          |  0
 var/spack/packages/py-pylint/package.py            |  0
 var/spack/packages/py-pypar/package.py             |  0
 var/spack/packages/py-pyparsing/package.py         |  0
 var/spack/packages/py-pyqt/package.py              |  0
 var/spack/packages/py-pyside/package.py            |  5 +-
 var/spack/packages/py-pytest/package.py            | 12 +++++
 var/spack/packages/py-python-daemon/package.py     |  0
 var/spack/packages/py-python-dateutil/package.py   | 12 +++++
 var/spack/packages/py-pytz/package.py              |  2 +
 var/spack/packages/py-pyzmq/package.py             | 16 ++++++
 var/spack/packages/py-rpy2/package.py              |  0
 var/spack/packages/py-scientificpython/package.py  |  0
 var/spack/packages/py-scikit-learn/package.py      |  3 ++
 var/spack/packages/py-scipy/package.py             |  4 +-
 var/spack/packages/py-seaborn/package.py           | 12 +++++
 var/spack/packages/py-setuptools/package.py        |  9 ++--
 var/spack/packages/py-shiboken/package.py          |  0
 var/spack/packages/py-sip/package.py               |  0
 var/spack/packages/py-six/package.py               |  2 +
 var/spack/packages/py-statsmodels/package.py       | 12 +++++
 var/spack/packages/py-sympy/package.py             |  0
 var/spack/packages/py-tables/package.py            | 12 +++++
 var/spack/packages/py-tornado/package.py           | 17 +++++++
 var/spack/packages/py-traitlets/package.py         | 14 +++++
 var/spack/packages/py-triangle-plot/package.py     | 12 +++++
 var/spack/packages/py-virtualenv/package.py        |  0
 var/spack/packages/py-yapf/package.py              |  0
 var/spack/packages/python/package.py               |  0
 var/spack/packages/qhull/package.py                |  0
 var/spack/packages/qt/package.py                   |  0
 var/spack/packages/qthreads/package.py             |  0
 var/spack/packages/ravel/package.py                |  0
 var/spack/packages/readline/package.py             |  0
 .../rose/add_spack_compiler_recognition.patch      |  0
 var/spack/packages/rose/package.py                 |  0
 var/spack/packages/ruby/package.py                 |  0
 var/spack/packages/samtools/package.py             | 18 -------
 var/spack/packages/samtools/samtools1.2.patch      | 20 --------
 var/spack/packages/scalasca/package.py             |  0
 var/spack/packages/scorep/package.py               | 15 +++---
 var/spack/packages/scotch/package.py               |  0
 var/spack/packages/scr/package.py                  |  0
 var/spack/packages/silo/package.py                 |  0
 var/spack/packages/snappy/package.py               | 15 ------
 var/spack/packages/spindle/package.py              |  0
 var/spack/packages/sqlite/package.py               |  0
 var/spack/packages/stat/configure_mpicxx.patch     |  0
 var/spack/packages/stat/package.py                 | 11 +---
 var/spack/packages/sundials/package.py             |  0
 var/spack/packages/swig/package.py                 |  0
 var/spack/packages/task/package.py                 |  0
 var/spack/packages/taskd/package.py                |  0
 var/spack/packages/tau/package.py                  |  0
 var/spack/packages/tcl/package.py                  |  0
 var/spack/packages/the_silver_searcher/package.py  |  0
 var/spack/packages/thrift/package.py               |  0
 var/spack/packages/tk/package.py                   |  0
 var/spack/packages/tmux/package.py                 |  0
 var/spack/packages/tmuxinator/package.py           |  0
 var/spack/packages/uncrustify/package.py           |  0
 var/spack/packages/util-linux/package.py           |  0
 var/spack/packages/vim/package.py                  | 23 ++-------
 var/spack/packages/vtk/package.py                  |  0
 var/spack/packages/wget/package.py                 |  0
 var/spack/packages/wx/package.py                   |  0
 var/spack/packages/wxpropgrid/package.py           |  0
 var/spack/packages/xcb-proto/package.py            |  0
 var/spack/packages/xz/package.py                   |  0
 var/spack/packages/yasm/package.py                 |  0
 var/spack/packages/zeromq/package.py               | 20 --------
 var/spack/packages/zlib/package.py                 |  0
 var/spack/packages/zsh/package.py                  |  0
 279 files changed, 534 insertions(+), 731 deletions(-)
 delete mode 160000 utils/python_recipe_parser
 mode change 100644 => 100755 var/spack/packages/ImageMagick/package.py
 mode change 100644 => 100755 var/spack/packages/Mitos/package.py
 mode change 100644 => 100755 var/spack/packages/R/package.py
 mode change 100644 => 100755 var/spack/packages/SAMRAI/no-tool-build.patch
 mode change 100644 => 100755 var/spack/packages/SAMRAI/package.py
 mode change 100644 => 100755 var/spack/packages/adept-utils/package.py
 mode change 100644 => 100755 var/spack/packages/arpack/package.py
 delete mode 100644 var/spack/packages/asciidoc/package.py
 mode change 100644 => 100755 var/spack/packages/atk/package.py
 mode change 100644 => 100755 var/spack/packages/atlas/package.py
 mode change 100644 => 100755 var/spack/packages/autoconf/package.py
 mode change 100644 => 100755 var/spack/packages/automaded/package.py
 mode change 100644 => 100755 var/spack/packages/automake/package.py
 mode change 100644 => 100755 var/spack/packages/bear/package.py
 mode change 100644 => 100755 var/spack/packages/bib2xhtml/package.py
 mode change 100644 => 100755 var/spack/packages/binutils/package.py
 mode change 100644 => 100755 var/spack/packages/bison/package.py
 mode change 100644 => 100755 var/spack/packages/boost/package.py
 delete mode 100644 var/spack/packages/bowtie2/bowtie2-2.5.patch
 delete mode 100644 var/spack/packages/bowtie2/package.py
 mode change 100644 => 100755 var/spack/packages/boxlib/package.py
 mode change 100644 => 100755 var/spack/packages/bzip2/package.py
 mode change 100644 => 100755 var/spack/packages/cairo/package.py
 mode change 100644 => 100755 var/spack/packages/callpath/package.py
 mode change 100644 => 100755 var/spack/packages/cblas/package.py
 mode change 100644 => 100755 var/spack/packages/cgm/package.py
 mode change 100644 => 100755 var/spack/packages/clang/package.py
 mode change 100644 => 100755 var/spack/packages/cloog/package.py
 mode change 100644 => 100755 var/spack/packages/cmake/package.py
 mode change 100644 => 100755 var/spack/packages/coreutils/package.py
 mode change 100644 => 100755 var/spack/packages/cppcheck/package.py
 mode change 100644 => 100755 var/spack/packages/cram/package.py
 delete mode 100644 var/spack/packages/cscope/package.py
 mode change 100644 => 100755 var/spack/packages/cube/package.py
 delete mode 100644 var/spack/packages/czmq/package.py
 mode change 100644 => 100755 var/spack/packages/dbus/package.py
 delete mode 100644 var/spack/packages/docbook-xml/package.py
 delete mode 100644 var/spack/packages/doxygen/package.py
 mode change 100644 => 100755 var/spack/packages/dri2proto/package.py
 mode change 100644 => 100755 var/spack/packages/dtcmp/package.py
 mode change 100644 => 100755 var/spack/packages/dyninst/package.py
 create mode 100644 var/spack/packages/eigen/package.py
 delete mode 100644 var/spack/packages/elfutils/package.py
 mode change 100644 => 100755 var/spack/packages/extrae/package.py
 mode change 100644 => 100755 var/spack/packages/exuberant-ctags/package.py
 delete mode 100644 var/spack/packages/fish/package.py
 mode change 100644 => 100755 var/spack/packages/flex/package.py
 delete mode 100644 var/spack/packages/flux/package.py
 mode change 100644 => 100755 var/spack/packages/fontconfig/package.py
 mode change 100644 => 100755 var/spack/packages/freetype/package.py
 mode change 100644 => 100755 var/spack/packages/gasnet/package.py
 mode change 100644 => 100755 var/spack/packages/gcc/package.py
 mode change 100644 => 100755 var/spack/packages/gdk-pixbuf/package.py
 mode change 100644 => 100755 var/spack/packages/geos/package.py
 delete mode 100644 var/spack/packages/gflags/package.py
 delete mode 100644 var/spack/packages/ghostscript/package.py
 mode change 100644 => 100755 var/spack/packages/git/package.py
 mode change 100644 => 100755 var/spack/packages/glib/package.py
 mode change 100644 => 100755 var/spack/packages/global/package.py
 delete mode 100644 var/spack/packages/glog/package.py
 mode change 100644 => 100755 var/spack/packages/gmp/package.py
 mode change 100644 => 100755 var/spack/packages/gnutls/package.py
 mode change 100644 => 100755 var/spack/packages/gperf/package.py
 mode change 100644 => 100755 var/spack/packages/gperftools/package.py
 mode change 100644 => 100755 var/spack/packages/graphlib/package.py
 mode change 100644 => 100755 var/spack/packages/gtkplus/package.py
 mode change 100644 => 100755 var/spack/packages/harfbuzz/package.py
 mode change 100644 => 100755 var/spack/packages/hdf5/package.py
 mode change 100644 => 100755 var/spack/packages/hwloc/package.py
 mode change 100644 => 100755 var/spack/packages/hypre/package.py
 mode change 100644 => 100755 var/spack/packages/icu/package.py
 mode change 100644 => 100755 var/spack/packages/icu4c/package.py
 mode change 100644 => 100755 var/spack/packages/isl/package.py
 mode change 100644 => 100755 var/spack/packages/jdk/package.py
 mode change 100644 => 100755 var/spack/packages/jpeg/package.py
 create mode 100755 var/spack/packages/lapack/package.py
 mode change 100644 => 100755 var/spack/packages/launchmon/package.py
 mode change 100644 => 100755 var/spack/packages/launchmon/patch.lmon_install_dir
 mode change 100644 => 100755 var/spack/packages/lcms/package.py
 delete mode 100644 var/spack/packages/leveldb/package.py
 mode change 100644 => 100755 var/spack/packages/libNBC/package.py
 mode change 100644 => 100755 var/spack/packages/libarchive/package.py
 mode change 100644 => 100755 var/spack/packages/libcircle/package.py
 mode change 100644 => 100755 var/spack/packages/libdrm/package.py
 mode change 100644 => 100755 var/spack/packages/libdwarf/package.py
 mode change 100644 => 100755 var/spack/packages/libelf/package.py
 mode change 100644 => 100755 var/spack/packages/libevent/package.py
 mode change 100644 => 100755 var/spack/packages/libffi/package.py
 mode change 100644 => 100755 var/spack/packages/libgcrypt/package.py
 mode change 100644 => 100755 var/spack/packages/libgpg-error/package.py
 mode change 100644 => 100755 var/spack/packages/libjpeg-turbo/package.py
 delete mode 100644 var/spack/packages/libjson-c/package.py
 mode change 100644 => 100755 var/spack/packages/libmng/package.py
 mode change 100644 => 100755 var/spack/packages/libmonitor/package.py
 mode change 100644 => 100755 var/spack/packages/libpciaccess/package.py
 mode change 100644 => 100755 var/spack/packages/libpng/package.py
 delete mode 100644 var/spack/packages/libsodium/package.py
 mode change 100644 => 100755 var/spack/packages/libtiff/package.py
 mode change 100644 => 100755 var/spack/packages/libtool/package.py
 mode change 100644 => 100755 var/spack/packages/libunwind/package.py
 mode change 100644 => 100755 var/spack/packages/libuuid/package.py
 mode change 100644 => 100755 var/spack/packages/libxcb/package.py
 mode change 100644 => 100755 var/spack/packages/libxml2/package.py
 mode change 100644 => 100755 var/spack/packages/libxshmfence/package.py
 mode change 100644 => 100755 var/spack/packages/libxslt/package.py
 mode change 100644 => 100755 var/spack/packages/llvm-lld/package.py
 mode change 100644 => 100755 var/spack/packages/llvm/package.py
 delete mode 100644 var/spack/packages/lmdb/package.py
 delete mode 100644 var/spack/packages/lua/package.py
 mode change 100644 => 100755 var/spack/packages/lwgrp/package.py
 mode change 100644 => 100755 var/spack/packages/lwm2/package.py
 mode change 100644 => 100755 var/spack/packages/memaxes/package.py
 mode change 100644 => 100755 var/spack/packages/mesa/package.py
 mode change 100644 => 100755 var/spack/packages/metis/package.py
 mode change 100644 => 100755 var/spack/packages/mpc/package.py
 mode change 100644 => 100755 var/spack/packages/mpe2/mpe2.patch
 mode change 100644 => 100755 var/spack/packages/mpe2/package.py
 mode change 100644 => 100755 var/spack/packages/mpfr/package.py
 mode change 100644 => 100755 var/spack/packages/mpibash/mpibash-4.3.patch
 mode change 100644 => 100755 var/spack/packages/mpibash/package.py
 mode change 100644 => 100755 var/spack/packages/mpich/package.py
 mode change 100644 => 100755 var/spack/packages/mpileaks/package.py
 mode change 100644 => 100755 var/spack/packages/mrnet/package.py
 delete mode 100644 var/spack/packages/munge/package.py
 mode change 100644 => 100755 var/spack/packages/muster/package.py
 mode change 100644 => 100755 var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch
 mode change 100644 => 100755 var/spack/packages/mvapich2/package.py
 mode change 100644 => 100755 var/spack/packages/nasm/package.py
 mode change 100644 => 100755 var/spack/packages/ncurses/package.py
 mode change 100644 => 100755 var/spack/packages/netcdf/package.py
 mode change 100644 => 100755 var/spack/packages/netgauge/package.py
 mode change 100644 => 100755 var/spack/packages/netlib-blas/package.py
 delete mode 100644 var/spack/packages/netlib-lapack/package.py
 mode change 100644 => 100755 var/spack/packages/nettle/package.py
 mode change 100644 => 100755 var/spack/packages/ompss/package.py
 mode change 100644 => 100755 var/spack/packages/opari2/package.py
 mode change 100644 => 100755 var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch
 mode change 100644 => 100755 var/spack/packages/openmpi/llnl-platforms.patch
 mode change 100644 => 100755 var/spack/packages/openmpi/package.py
 mode change 100644 => 100755 var/spack/packages/openssl/package.py
 mode change 100644 => 100755 var/spack/packages/otf/package.py
 mode change 100644 => 100755 var/spack/packages/otf2/package.py
 mode change 100644 => 100755 var/spack/packages/pango/package.py
 mode change 100644 => 100755 var/spack/packages/papi/package.py
 mode change 100644 => 100755 var/spack/packages/paraver/package.py
 mode change 100644 => 100755 var/spack/packages/parmetis/package.py
 mode change 100644 => 100755 var/spack/packages/parpack/package.py
 mode change 100644 => 100755 var/spack/packages/pcre/package.py
 mode change 100644 => 100755 var/spack/packages/petsc/package.py
 delete mode 100644 var/spack/packages/pidx/package.py
 mode change 100644 => 100755 var/spack/packages/pixman/package.py
 delete mode 100644 var/spack/packages/pkg-config/package.py
 mode change 100644 => 100755 var/spack/packages/pmgr_collective/package.py
 mode change 100644 => 100755 var/spack/packages/postgresql/package.py
 mode change 100644 => 100755 var/spack/packages/ppl/package.py
 delete mode 100644 var/spack/packages/protobuf/package.py
 create mode 100644 var/spack/packages/py-Cython/package.py
 create mode 100644 var/spack/packages/py-Distutils2/package.py
 create mode 100644 var/spack/packages/py-astroML/package.py
 create mode 100644 var/spack/packages/py-astropy/package.py
 create mode 100644 var/spack/packages/py-autopep8/package.py
 mode change 100644 => 100755 var/spack/packages/py-basemap/package.py
 mode change 100644 => 100755 var/spack/packages/py-biopython/package.py
 create mode 100644 var/spack/packages/py-certifi/package.py
 mode change 100644 => 100755 var/spack/packages/py-cffi/package.py
 mode change 100644 => 100755 var/spack/packages/py-cython/package.py
 mode change 100644 => 100755 var/spack/packages/py-dateutil/package.py
 create mode 100644 var/spack/packages/py-decorator/package.py
 create mode 100644 var/spack/packages/py-emcee/package.py
 mode change 100644 => 100755 var/spack/packages/py-epydoc/package.py
 create mode 100644 var/spack/packages/py-fitsio/package.py
 mode change 100644 => 100755 var/spack/packages/py-genders/package.py
 mode change 100644 => 100755 var/spack/packages/py-gnuplot/package.py
 create mode 100644 var/spack/packages/py-gnureadline/package.py
 mode change 100644 => 100755 var/spack/packages/py-h5py/package.py
 mode change 100644 => 100755 var/spack/packages/py-ipython/package.py
 create mode 100755 var/spack/packages/py-ipython/package.py.backup
 create mode 100644 var/spack/packages/py-ipython_genutils/package.py
 create mode 100644 var/spack/packages/py-joblib/package.py
 create mode 100755 var/spack/packages/py-jsonschema/package.py
 mode change 100644 => 100755 var/spack/packages/py-libxml2/package.py
 mode change 100644 => 100755 var/spack/packages/py-lockfile/package.py
 mode change 100644 => 100755 var/spack/packages/py-mako/package.py
 mode change 100644 => 100755 var/spack/packages/py-matplotlib/package.py
 mode change 100644 => 100755 var/spack/packages/py-mpi4py/package.py
 mode change 100644 => 100755 var/spack/packages/py-mx/package.py
 mode change 100644 => 100755 var/spack/packages/py-nose/package.py
 create mode 100644 var/spack/packages/py-numexpr/package.py
 mode change 100644 => 100755 var/spack/packages/py-numpy/package.py
 mode change 100644 => 100755 var/spack/packages/py-pandas/package.py
 create mode 100644 var/spack/packages/py-pep8/package.py
 mode change 100644 => 100755 var/spack/packages/py-pexpect/package.py
 create mode 100644 var/spack/packages/py-pickleshare/package.py
 mode change 100644 => 100755 var/spack/packages/py-pil/package.py
 create mode 100644 var/spack/packages/py-pip/package.py
 mode change 100644 => 100755 var/spack/packages/py-pmw/package.py
 create mode 100644 var/spack/packages/py-py/package.py
 create mode 100755 var/spack/packages/py-py4j/package.py
 mode change 100644 => 100755 var/spack/packages/py-pychecker/package.py
 mode change 100644 => 100755 var/spack/packages/py-pycparser/package.py
 mode change 100644 => 100755 var/spack/packages/py-pyelftools/package.py
 mode change 100644 => 100755 var/spack/packages/py-pygments/package.py
 mode change 100644 => 100755 var/spack/packages/py-pylint/package.py
 mode change 100644 => 100755 var/spack/packages/py-pypar/package.py
 mode change 100644 => 100755 var/spack/packages/py-pyparsing/package.py
 mode change 100644 => 100755 var/spack/packages/py-pyqt/package.py
 mode change 100644 => 100755 var/spack/packages/py-pyside/package.py
 create mode 100644 var/spack/packages/py-pytest/package.py
 mode change 100644 => 100755 var/spack/packages/py-python-daemon/package.py
 create mode 100644 var/spack/packages/py-python-dateutil/package.py
 mode change 100644 => 100755 var/spack/packages/py-pytz/package.py
 create mode 100755 var/spack/packages/py-pyzmq/package.py
 mode change 100644 => 100755 var/spack/packages/py-rpy2/package.py
 mode change 100644 => 100755 var/spack/packages/py-scientificpython/package.py
 mode change 100644 => 100755 var/spack/packages/py-scikit-learn/package.py
 mode change 100644 => 100755 var/spack/packages/py-scipy/package.py
 create mode 100644 var/spack/packages/py-seaborn/package.py
 mode change 100644 => 100755 var/spack/packages/py-setuptools/package.py
 mode change 100644 => 100755 var/spack/packages/py-shiboken/package.py
 mode change 100644 => 100755 var/spack/packages/py-sip/package.py
 mode change 100644 => 100755 var/spack/packages/py-six/package.py
 create mode 100644 var/spack/packages/py-statsmodels/package.py
 mode change 100644 => 100755 var/spack/packages/py-sympy/package.py
 create mode 100644 var/spack/packages/py-tables/package.py
 create mode 100755 var/spack/packages/py-tornado/package.py
 create mode 100755 var/spack/packages/py-traitlets/package.py
 create mode 100644 var/spack/packages/py-triangle-plot/package.py
 mode change 100644 => 100755 var/spack/packages/py-virtualenv/package.py
 mode change 100644 => 100755 var/spack/packages/py-yapf/package.py
 mode change 100644 => 100755 var/spack/packages/python/package.py
 mode change 100644 => 100755 var/spack/packages/qhull/package.py
 mode change 100644 => 100755 var/spack/packages/qt/package.py
 mode change 100644 => 100755 var/spack/packages/qthreads/package.py
 mode change 100644 => 100755 var/spack/packages/ravel/package.py
 mode change 100644 => 100755 var/spack/packages/readline/package.py
 mode change 100644 => 100755 var/spack/packages/rose/add_spack_compiler_recognition.patch
 mode change 100644 => 100755 var/spack/packages/rose/package.py
 mode change 100644 => 100755 var/spack/packages/ruby/package.py
 delete mode 100644 var/spack/packages/samtools/package.py
 delete mode 100644 var/spack/packages/samtools/samtools1.2.patch
 mode change 100644 => 100755 var/spack/packages/scalasca/package.py
 mode change 100644 => 100755 var/spack/packages/scorep/package.py
 mode change 100644 => 100755 var/spack/packages/scotch/package.py
 mode change 100644 => 100755 var/spack/packages/scr/package.py
 mode change 100644 => 100755 var/spack/packages/silo/package.py
 delete mode 100644 var/spack/packages/snappy/package.py
 mode change 100644 => 100755 var/spack/packages/spindle/package.py
 mode change 100644 => 100755 var/spack/packages/sqlite/package.py
 mode change 100644 => 100755 var/spack/packages/stat/configure_mpicxx.patch
 mode change 100644 => 100755 var/spack/packages/stat/package.py
 mode change 100644 => 100755 var/spack/packages/sundials/package.py
 mode change 100644 => 100755 var/spack/packages/swig/package.py
 mode change 100644 => 100755 var/spack/packages/task/package.py
 mode change 100644 => 100755 var/spack/packages/taskd/package.py
 mode change 100644 => 100755 var/spack/packages/tau/package.py
 mode change 100644 => 100755 var/spack/packages/tcl/package.py
 mode change 100644 => 100755 var/spack/packages/the_silver_searcher/package.py
 mode change 100644 => 100755 var/spack/packages/thrift/package.py
 mode change 100644 => 100755 var/spack/packages/tk/package.py
 mode change 100644 => 100755 var/spack/packages/tmux/package.py
 mode change 100644 => 100755 var/spack/packages/tmuxinator/package.py
 mode change 100644 => 100755 var/spack/packages/uncrustify/package.py
 mode change 100644 => 100755 var/spack/packages/util-linux/package.py
 mode change 100644 => 100755 var/spack/packages/vim/package.py
 mode change 100644 => 100755 var/spack/packages/vtk/package.py
 mode change 100644 => 100755 var/spack/packages/wget/package.py
 mode change 100644 => 100755 var/spack/packages/wx/package.py
 mode change 100644 => 100755 var/spack/packages/wxpropgrid/package.py
 mode change 100644 => 100755 var/spack/packages/xcb-proto/package.py
 mode change 100644 => 100755 var/spack/packages/xz/package.py
 mode change 100644 => 100755 var/spack/packages/yasm/package.py
 delete mode 100644 var/spack/packages/zeromq/package.py
 mode change 100644 => 100755 var/spack/packages/zlib/package.py
 mode change 100644 => 100755 var/spack/packages/zsh/package.py

diff --git a/.gitignore b/.gitignore
index 1c6ca4c99e..8146921fd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
 /etc/spackconfig
 /share/spack/dotkit
 /share/spack/modules
+*.ropeproject
diff --git a/.gitmodules b/.gitmodules
index a097fcd8cf..1d770f415b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
-[submodule "utils/python_recipe_parser"]
-	path = utils/python_recipe_parser
+[submodule "/lib/spack/spack/util/python_recipe_parser"]
+	path = /lib/spack/spack/util/python_recipe_parser
 	url = https://github.com/karenyyng/spack_python_package_parser
diff --git a/utils/python_recipe_parser b/utils/python_recipe_parser
deleted file mode 160000
index 3158074a2d..0000000000
--- a/utils/python_recipe_parser
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 3158074a2d74f99aa72289dfcf093b1b0ba4474e
diff --git a/var/spack/packages/ImageMagick/package.py b/var/spack/packages/ImageMagick/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/Mitos/package.py b/var/spack/packages/Mitos/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/R/package.py b/var/spack/packages/R/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/SAMRAI/no-tool-build.patch b/var/spack/packages/SAMRAI/no-tool-build.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/SAMRAI/package.py b/var/spack/packages/SAMRAI/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/adept-utils/package.py b/var/spack/packages/adept-utils/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/arpack/package.py b/var/spack/packages/arpack/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/asciidoc/package.py b/var/spack/packages/asciidoc/package.py
deleted file mode 100644
index 828f3b3f4f..0000000000
--- a/var/spack/packages/asciidoc/package.py
+++ /dev/null
@@ -1,18 +0,0 @@
-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")
diff --git a/var/spack/packages/atk/package.py b/var/spack/packages/atk/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/atlas/package.py b/var/spack/packages/atlas/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/autoconf/package.py b/var/spack/packages/autoconf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/automaded/package.py b/var/spack/packages/automaded/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/automake/package.py b/var/spack/packages/automake/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/bear/package.py b/var/spack/packages/bear/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/bib2xhtml/package.py b/var/spack/packages/bib2xhtml/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/binutils/package.py b/var/spack/packages/binutils/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/bison/package.py b/var/spack/packages/bison/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/boost/package.py b/var/spack/packages/boost/package.py
old mode 100644
new mode 100755
index 35824d53a2..254d1afda1
--- a/var/spack/packages/boost/package.py
+++ b/var/spack/packages/boost/package.py
@@ -14,10 +14,6 @@ class Boost(Package):
     list_url = "http://sourceforge.net/projects/boost/files/boost/"
     list_depth = 2
 
-    version('1.59.0', '6aa9a5c6a4ca1016edd0ed1178e3cb87')
-    version('1.58.0', 'b8839650e61e9c1c0a89f371dd475546')
-    version('1.57.0', '1be49befbdd9a5ce9def2983ba3e7b76')
-    version('1.56.0', 'a744cf167b05d72335f27c88115f211d')
     version('1.55.0', 'd6eef4b4cacb2183f2bf265a5a03a354')
     version('1.54.0', '15cb8c0803064faef0c4ddf5bc5ca279')
     version('1.53.0', 'a00d22605d5dbcfb4c9936a9b35bc4c2')
diff --git a/var/spack/packages/bowtie2/bowtie2-2.5.patch b/var/spack/packages/bowtie2/bowtie2-2.5.patch
deleted file mode 100644
index 290be39c73..0000000000
--- a/var/spack/packages/bowtie2/bowtie2-2.5.patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- Makefile	2015-02-26 10:50:00.000000000 -0800
-+++ Makefile.new	2015-07-29 18:03:59.891357399 -0700
-@@ -22,10 +22,10 @@
- #
- 
- INC =
--GCC_PREFIX = $(shell dirname `which gcc`)
-+GCC_PREFIX =
- GCC_SUFFIX =
--CC = $(GCC_PREFIX)/gcc$(GCC_SUFFIX)
--CPP = $(GCC_PREFIX)/g++$(GCC_SUFFIX)
-+CC = cc 
-+CPP = c++
- CXX = $(CPP)
- HEADERS = $(wildcard *.h)
- BOWTIE_MM = 1
diff --git a/var/spack/packages/bowtie2/package.py b/var/spack/packages/bowtie2/package.py
deleted file mode 100644
index 339aab6598..0000000000
--- a/var/spack/packages/bowtie2/package.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from spack import *
-from glob import glob
-class Bowtie2(Package):
-    """Description"""
-    homepage = "bowtie-bio.sourceforge.net/bowtie2/index.shtml"
-    version('2.2.5','51fa97a862d248d7ee660efc1147c75f', url = "http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.5/bowtie2-2.2.5-source.zip")
-
-    patch('bowtie2-2.5.patch',when='@2.2.5', level=0)
-
-    def install(self, spec, prefix):
-        make()
-        mkdirp(prefix.bin)
-        for bow in glob("bowtie2*"):
-            install(bow, prefix.bin)
-        # install('bowtie2',prefix.bin)
-        # install('bowtie2-align-l',prefix.bin)
-        # install('bowtie2-align-s',prefix.bin)
-        # install('bowtie2-build',prefix.bin)
-        # install('bowtie2-build-l',prefix.bin)
-        # install('bowtie2-build-s',prefix.bin)
-        # install('bowtie2-inspect',prefix.bin)
-        # install('bowtie2-inspect-l',prefix.bin)
-        # install('bowtie2-inspect-s',prefix.bin)
-
diff --git a/var/spack/packages/boxlib/package.py b/var/spack/packages/boxlib/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/bzip2/package.py b/var/spack/packages/bzip2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cairo/package.py b/var/spack/packages/cairo/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/callpath/package.py b/var/spack/packages/callpath/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cblas/package.py b/var/spack/packages/cblas/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cgm/package.py b/var/spack/packages/cgm/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/clang/package.py b/var/spack/packages/clang/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cloog/package.py b/var/spack/packages/cloog/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cmake/package.py b/var/spack/packages/cmake/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/coreutils/package.py b/var/spack/packages/coreutils/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cppcheck/package.py b/var/spack/packages/cppcheck/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cram/package.py b/var/spack/packages/cram/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/cscope/package.py b/var/spack/packages/cscope/package.py
deleted file mode 100644
index 9aac0f7304..0000000000
--- a/var/spack/packages/cscope/package.py
+++ /dev/null
@@ -1,17 +0,0 @@
-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")
diff --git a/var/spack/packages/cube/package.py b/var/spack/packages/cube/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/czmq/package.py b/var/spack/packages/czmq/package.py
deleted file mode 100644
index a2f1947554..0000000000
--- a/var/spack/packages/czmq/package.py
+++ /dev/null
@@ -1,19 +0,0 @@
-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")
-
diff --git a/var/spack/packages/dbus/package.py b/var/spack/packages/dbus/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/docbook-xml/package.py b/var/spack/packages/docbook-xml/package.py
deleted file mode 100644
index fce1de7deb..0000000000
--- a/var/spack/packages/docbook-xml/package.py
+++ /dev/null
@@ -1,19 +0,0 @@
-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)
diff --git a/var/spack/packages/doxygen/package.py b/var/spack/packages/doxygen/package.py
deleted file mode 100644
index 3d4a4e47a7..0000000000
--- a/var/spack/packages/doxygen/package.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#------------------------------------------------------------------------------
-# Author: Justin Too <justin@doubleotoo.com>
-# Date: September 11, 2015
-#------------------------------------------------------------------------------
-
-from spack import *
-
-class Doxygen(Package):
-    """Doxygen is the de facto standard tool for generating documentation
-    from annotated C++ sources, but it also supports other popular programming
-    languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba,
-    Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D..
-    """
-    homepage = "http://www.stack.nl/~dimitri/doxygen/"
-    url      = "http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.10.src.tar.gz"
-
-    version('1.8.10', '79767ccd986f12a0f949015efb5f058f')
-
-    depends_on("cmake@2.8.12:")
-
-    def install(self, spec, prefix):
-        cmake('.', *std_cmake_args)
-
-        make()
-        make("install")
diff --git a/var/spack/packages/dri2proto/package.py b/var/spack/packages/dri2proto/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/dtcmp/package.py b/var/spack/packages/dtcmp/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/dyninst/package.py b/var/spack/packages/dyninst/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/eigen/package.py b/var/spack/packages/eigen/package.py
new file mode 100644
index 0000000000..b4d89ea3a0
--- /dev/null
+++ b/var/spack/packages/eigen/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class Eigen(Package):
+    """Eigen is a C++ template library for linear algebra: matrices, vectors,
+    numerical solvers, and related algorithms.."""
+    homepage = "http://eigen.tuxfamily.org/"
+    url      = "http://bitbucket.org/eigen/eigen/get/3.2.5.tar.gz"
+
+    version('3.2.5', '8cc513ac6ec687117acadddfcacf551b')
+
+    def install(self, spec, prefix):
+        import os 
+        os.system("mkdir ./build_dir && cd ./build_dir")
+        cmake('../', *std_cmake_args)
+
+        make()
+        make("install")
diff --git a/var/spack/packages/elfutils/package.py b/var/spack/packages/elfutils/package.py
deleted file mode 100644
index 926d234584..0000000000
--- a/var/spack/packages/elfutils/package.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from spack import *
-
-class Elfutils(Package):
-    """elfutils is a collection of various binary tools such as
-    eu-objdump, eu-readelf, and other utilities that allow you to
-    inspect and manipulate ELF files. Refer to Table 5.Tools Included
-    in elfutils for Red Hat Developer for a complete list of binary
-    tools that are distributed with the Red Hat Developer Toolset
-    version of elfutils."""
-
-    homepage = "https://fedorahosted.org/elfutils/"
-
-    version('0.163',
-            git='git://git.fedorahosted.org/git/elfutils.git',
-            tag='elfutils-0.163')
-
-    provides('elf')
-
-    def install(self, spec, prefix):
-        autoreconf = which('autoreconf')
-        autoreconf('-if')
-
-        configure('--prefix=%s' % prefix, '--enable-maintainer-mode')
-        make()
-        make("install")
-
diff --git a/var/spack/packages/extrae/package.py b/var/spack/packages/extrae/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/exuberant-ctags/package.py b/var/spack/packages/exuberant-ctags/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/fish/package.py b/var/spack/packages/fish/package.py
deleted file mode 100644
index 1225558705..0000000000
--- a/var/spack/packages/fish/package.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from spack import *
-
-class Fish(Package):
-    """fish is a smart and user-friendly command line shell for OS X, Linux, and
-    the rest of the family.
-    """
-
-    homepage = "http://fishshell.com/"
-    url      = "http://fishshell.com/files/2.2.0/fish-2.2.0.tar.gz"
-    list_url = homepage
-
-    version('2.2.0', 'a76339fd14ce2ec229283c53e805faac48c3e99d9e3ede9d82c0554acfc7b77a')
-
-    def install(self, spec, prefix):
-        configure('--prefix=%s' % prefix)
-
-        make()
-        make("install")
diff --git a/var/spack/packages/flex/package.py b/var/spack/packages/flex/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/flux/package.py b/var/spack/packages/flux/package.py
deleted file mode 100644
index c128f46be8..0000000000
--- a/var/spack/packages/flux/package.py
+++ /dev/null
@@ -1,36 +0,0 @@
-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")
-
diff --git a/var/spack/packages/fontconfig/package.py b/var/spack/packages/fontconfig/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/freetype/package.py b/var/spack/packages/freetype/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gasnet/package.py b/var/spack/packages/gasnet/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gcc/package.py b/var/spack/packages/gcc/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gdk-pixbuf/package.py b/var/spack/packages/gdk-pixbuf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/geos/package.py b/var/spack/packages/geos/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gflags/package.py b/var/spack/packages/gflags/package.py
deleted file mode 100644
index 62dd80a094..0000000000
--- a/var/spack/packages/gflags/package.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import os
-from spack import *
-
-class Gflags(Package):
-    """The gflags package contains a C++ library that implements
-    commandline flags processing. It includes built-in support for
-    standard types such as string and the ability to define flags
-    in the source file in which they are used. Online documentation
-    available at: https://gflags.github.io/gflags/"""
-
-    homepage = "https://gflags.github.io/gflags"
-    url      = "https://github.com/gflags/gflags/archive/v2.1.2.tar.gz"
-
-    version('2.1.2', 'ac432de923f9de1e9780b5254884599f')
-
-    def install(self, spec, prefix):
-        cmake("-DCMAKE_INSTALL_PREFIX=" + prefix,
-              "-DBUILD_SHARED_LIBS=ON")
-        make()
-        make("test")
-        make("install")
diff --git a/var/spack/packages/ghostscript/package.py b/var/spack/packages/ghostscript/package.py
deleted file mode 100644
index 0ab49d425f..0000000000
--- a/var/spack/packages/ghostscript/package.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from spack import *
-
-class Ghostscript(Package):
-    """an interpreter for the PostScript language and for PDF. """
-    homepage = "http://ghostscript.com/"
-    url      = "http://downloads.ghostscript.com/public/ghostscript-9.16.tar.gz"
-
-    version('9.16', '829319325bbdb83f5c81379a8f86f38f')
-
-    parallel = False
-
-    def install(self, spec, prefix):
-        configure("--prefix=%s" %prefix, "--enable-shared")
-
-        make()
-        make("install")
-
diff --git a/var/spack/packages/git/package.py b/var/spack/packages/git/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/glib/package.py b/var/spack/packages/glib/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/global/package.py b/var/spack/packages/global/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/glog/package.py b/var/spack/packages/glog/package.py
deleted file mode 100644
index d73386b394..0000000000
--- a/var/spack/packages/glog/package.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import os
-from spack import *
-
-class Glog(Package):
-    """C++ implementation of the Google logging module."""
-
-    homepage = "https://github.com/google/glog"
-    url      = "https://github.com/google/glog/archive/v0.3.3.tar.gz"
-
-    version('0.3.3', 'c1f86af27bd9c73186730aa957607ed0')
-
-    def install(self, spec, prefix):
-        configure("--prefix=" + prefix)
-        make()
-        make("install")
diff --git a/var/spack/packages/gmp/package.py b/var/spack/packages/gmp/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gnutls/package.py b/var/spack/packages/gnutls/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gperf/package.py b/var/spack/packages/gperf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/gperftools/package.py b/var/spack/packages/gperftools/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/graphlib/package.py b/var/spack/packages/graphlib/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/graphviz/package.py b/var/spack/packages/graphviz/package.py
index 7af7da1881..8244feccfd 100644
--- a/var/spack/packages/graphviz/package.py
+++ b/var/spack/packages/graphviz/package.py
@@ -1,21 +1,24 @@
 from spack import *
 
 class Graphviz(Package):
-    """Graph Visualization Software"""
+    """graph visualization software."""
     homepage = "http://www.graphviz.org"
     url      = "http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz"
 
     version('2.38.0', '5b6a829b2ac94efcd5fa3c223ed6d3ae')
+    version('2.36.0', '1f41664dba0c93109ac8b71216bf2b57')
 
-    parallel = False
-
-    depends_on("swig")
-    depends_on("python")
-    depends_on("ghostscript")
+    depends_on("cairo@1.1.10")
+    depends_on("freetype@2.1.10")
+    depends_on("fontconfig")
+    depends_on("zlib@1.2.3")
+    # depends_on("libpng@1.2.10")
+    # depends_on("expat@2.0.0")
+    # depends_on("gd@2.0.34")
 
     def install(self, spec, prefix):
-        configure("--prefix=%s" %prefix)
+        configure('--prefix=%s' % prefix)
 
+        # FIXME: Add logic to build and install here
         make()
         make("install")
-
diff --git a/var/spack/packages/gtkplus/package.py b/var/spack/packages/gtkplus/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/harfbuzz/package.py b/var/spack/packages/harfbuzz/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/hdf5/package.py b/var/spack/packages/hdf5/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/hwloc/package.py b/var/spack/packages/hwloc/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/hypre/package.py b/var/spack/packages/hypre/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/icu/package.py b/var/spack/packages/icu/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/icu4c/package.py b/var/spack/packages/icu4c/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/isl/package.py b/var/spack/packages/isl/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/jdk/package.py b/var/spack/packages/jdk/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/jpeg/package.py b/var/spack/packages/jpeg/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/lapack/package.py b/var/spack/packages/lapack/package.py
new file mode 100755
index 0000000000..d9d37e3e4a
--- /dev/null
+++ b/var/spack/packages/lapack/package.py
@@ -0,0 +1,45 @@
+from spack import *
+
+class Lapack(Package):
+    """
+    LAPACK version 3.X is a comprehensive FORTRAN library that does
+    linear algebra operations including matrix inversions, least
+    squared solutions to linear sets of equations, eigenvector
+    analysis, singular value decomposition, etc. It is a very
+    comprehensive and reputable package that has found extensive
+    use in the scientific community.
+    """
+    homepage = "http://www.netlib.org/lapack/"
+    url      = "http://www.netlib.org/lapack/lapack-3.5.0.tgz"
+
+    version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
+    version('3.4.2', '61bf1a8a4469d4bdb7604f5897179478')
+    version('3.4.1', '44c3869c38c8335c2b9c2a8bb276eb55')
+    version('3.4.0', '02d5706ec03ba885fc246e5fa10d8c70')
+    version('3.3.1', 'd0d533ec9a5b74933c2a1e84eedc58b4')
+
+    # blas is a virtual dependency.
+    depends_on('blas')
+
+    # Doesn't always build correctly in parallel
+    parallel = False
+
+    @when('^netlib-blas')
+    def get_blas_libs(self):
+        blas = self.spec['netlib-blas']
+        return [join_path(blas.prefix.lib, 'blas.a')]
+
+
+    @when('^atlas')
+    def get_blas_libs(self):
+        blas = self.spec['atlas']
+        return [join_path(blas.prefix.lib, l)
+                for l in ('libf77blas.a', 'libatlas.a')]
+
+
+    def install(self, spec, prefix):
+        blas_libs = ";".join(self.get_blas_libs())
+        cmake(".", '-DBLAS_LIBRARIES=' + blas_libs, *std_cmake_args)
+        make()
+        make("install")
+
diff --git a/var/spack/packages/launchmon/package.py b/var/spack/packages/launchmon/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/launchmon/patch.lmon_install_dir b/var/spack/packages/launchmon/patch.lmon_install_dir
old mode 100644
new mode 100755
diff --git a/var/spack/packages/lcms/package.py b/var/spack/packages/lcms/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/leveldb/package.py b/var/spack/packages/leveldb/package.py
deleted file mode 100644
index da68a9cbcb..0000000000
--- a/var/spack/packages/leveldb/package.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import os
-import glob
-from spack import *
-
-class Leveldb(Package):
-    """LevelDB is a fast key-value storage library written at Google
-    that provides an ordered mapping from string keys to string values."""
-
-    homepage = "https://github.com/google/leveldb"
-    url      = "https://github.com/google/leveldb/archive/v1.18.tar.gz"
-
-    version('1.18', '73770de34a2a5ab34498d2e05b2b7fa0')
-
-    depends_on("snappy")
-
-    def install(self, spec, prefix):
-        make()
-
-        mkdirp(prefix.include)
-        mkdirp(prefix.lib)
-
-        cp = which('cp')
-
-        # cp --preserve=links libleveldb.* prefix/lib
-        args = glob.glob('libleveldb.*')
-        args.append(prefix + '/lib')
-        cp('--preserve=links', *args)
-
-        cp('-r', 'include/leveldb', prefix + '/include')
diff --git a/var/spack/packages/libNBC/package.py b/var/spack/packages/libNBC/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libarchive/package.py b/var/spack/packages/libarchive/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libcircle/package.py b/var/spack/packages/libcircle/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libdrm/package.py b/var/spack/packages/libdrm/package.py
old mode 100644
new mode 100755
index 00736b7811..1cab5372be
--- a/var/spack/packages/libdrm/package.py
+++ b/var/spack/packages/libdrm/package.py
@@ -2,7 +2,7 @@ from spack import *
 
 class Libdrm(Package):
     """A userspace  library for  accessing the  DRM, direct
-    rendering  manager, on  Linux,  BSD and  other  operating 
+    rendering  manager, on  Linux,  BSD and  other  operating
     systems that support the  ioctl interface."""
 
     homepage = "http://dri.freedesktop.org/libdrm/" # no real website...
@@ -11,8 +11,11 @@ class Libdrm(Package):
     version('2.4.59', '105ac7af1afcd742d402ca7b4eb168b6')
     version('2.4.33', '86e4e3debe7087d5404461e0032231c8')
 
+    depends_on("libpciaccess")
+
     def install(self, spec, prefix):
         configure("--prefix=%s" % prefix)
 
+        make("clean")
         make()
         make("install")
diff --git a/var/spack/packages/libdwarf/package.py b/var/spack/packages/libdwarf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libelf/package.py b/var/spack/packages/libelf/package.py
old mode 100644
new mode 100755
index 9338b8f393..bf2fefabd5
--- a/var/spack/packages/libelf/package.py
+++ b/var/spack/packages/libelf/package.py
@@ -36,8 +36,6 @@ class Libelf(Package):
     version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
     version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
 
-    provides('elf')
-
     def install(self, spec, prefix):
         configure("--prefix=" + prefix,
                   "--enable-shared",
diff --git a/var/spack/packages/libevent/package.py b/var/spack/packages/libevent/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libffi/package.py b/var/spack/packages/libffi/package.py
old mode 100644
new mode 100755
index 18acabb00c..2c1c4eed4d
--- a/var/spack/packages/libffi/package.py
+++ b/var/spack/packages/libffi/package.py
@@ -6,9 +6,9 @@ class Libffi(Package):
     to call any function specified by a call interface description at
     run time."""
     homepage = "https://sourceware.org/libffi/"
-    
-    version('3.2.1','83b89587607e3eb65c70d361f13bab43',url = "ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
-    #version('3.1', 'f5898b29bbfd70502831a212d9249d10',url = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz") # Has a bug $(lib64) instead of ${lib64} in libffi.pc
+    url      = "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz"
+
+    version('3.1', 'f5898b29bbfd70502831a212d9249d10')
 
     def install(self, spec, prefix):
         configure("--prefix=%s" % prefix)
diff --git a/var/spack/packages/libgcrypt/package.py b/var/spack/packages/libgcrypt/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libgpg-error/package.py b/var/spack/packages/libgpg-error/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libjpeg-turbo/package.py b/var/spack/packages/libjpeg-turbo/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libjson-c/package.py b/var/spack/packages/libjson-c/package.py
deleted file mode 100644
index c0801cce9c..0000000000
--- a/var/spack/packages/libjson-c/package.py
+++ /dev/null
@@ -1,14 +0,0 @@
-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")
diff --git a/var/spack/packages/libmng/package.py b/var/spack/packages/libmng/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libmonitor/package.py b/var/spack/packages/libmonitor/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libpciaccess/package.py b/var/spack/packages/libpciaccess/package.py
old mode 100644
new mode 100755
index 6022fc34a3..371fbb6685
--- a/var/spack/packages/libpciaccess/package.py
+++ b/var/spack/packages/libpciaccess/package.py
@@ -1,21 +1,16 @@
 from spack import *
 
 class Libpciaccess(Package):
-    """Generic PCI access library."""
-
+    """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')
+    url      = "http://pkgs.fedoraproject.org/repo/pkgs/libpciaccess/libpciaccess-0.13.2.tar.bz2/b7c0d3afce14eedca57312a3141ec13a/libpciaccess-0.13.2.tar.bz2"
 
-    depends_on('autoconf')
-    depends_on('libtool')
+    version('0.13.2', 'b7c0d3afce14eedca57312a3141ec13a')
 
     def install(self, spec, prefix):
-        from subprocess import call
-        call(["./autogen.sh"])
-        configure("--prefix=%s" % prefix)
+        import os
+        os.system("autoconf")
+        configure('--prefix=%s' % prefix)
 
         make()
         make("install")
diff --git a/var/spack/packages/libpng/package.py b/var/spack/packages/libpng/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libsodium/package.py b/var/spack/packages/libsodium/package.py
deleted file mode 100644
index 1c8a16d998..0000000000
--- a/var/spack/packages/libsodium/package.py
+++ /dev/null
@@ -1,19 +0,0 @@
-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")
diff --git a/var/spack/packages/libtiff/package.py b/var/spack/packages/libtiff/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libtool/package.py b/var/spack/packages/libtool/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libunwind/package.py b/var/spack/packages/libunwind/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libuuid/package.py b/var/spack/packages/libuuid/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libxcb/package.py b/var/spack/packages/libxcb/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libxml2/package.py b/var/spack/packages/libxml2/package.py
old mode 100644
new mode 100755
index 3a0af6b368..72199d8def
--- a/var/spack/packages/libxml2/package.py
+++ b/var/spack/packages/libxml2/package.py
@@ -9,12 +9,11 @@ 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)
-
+        configure("--prefix=%s" % prefix,
+                  "--without-python")
         make()
         make("install")
diff --git a/var/spack/packages/libxshmfence/package.py b/var/spack/packages/libxshmfence/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/libxslt/package.py b/var/spack/packages/libxslt/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/llvm-lld/package.py b/var/spack/packages/llvm-lld/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/llvm/package.py b/var/spack/packages/llvm/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/lmdb/package.py b/var/spack/packages/lmdb/package.py
deleted file mode 100644
index 875b8100c5..0000000000
--- a/var/spack/packages/lmdb/package.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import os
-from spack import *
-
-class Lmdb(Package):
-    """Read-only mirror of official repo on openldap.org. Issues and
-    pull requests here are ignored. Use OpenLDAP ITS for issues.
-    http://www.openldap.org/software/repo.html"""
-
-
-    homepage = "http://www.openldap.org/software/repo.html"
-    url      = "https://github.com/LMDB/lmdb/archive/LMDB_0.9.16.tar.gz"
-
-    version('0.9.16', '0de89730b8f3f5711c2b3a4ba517b648')
-
-    def install(self, spec, prefix):
-        os.chdir('libraries/liblmdb')
-
-        make()
-
-        mkdirp(prefix.bin)
-        mkdirp(prefix + '/man/man1')
-        mkdirp(prefix.lib)
-        mkdirp(prefix.include)
-
-        bins = ['mdb_stat', 'mdb_copy', 'mdb_dump', 'mdb_load']
-        for f in bins:
-            install(f, prefix.bin)
-
-        mans = ['mdb_stat.1', 'mdb_copy.1', 'mdb_dump.1', 'mdb_load.1']
-        for f in mans:
-            install(f, prefix + '/man/man1')
-
-        libs = ['liblmdb.a', 'liblmdb.so']
-        for f in libs:
-            install(f, prefix.lib)
-
-        includes = ['lmdb.h']
-        for f in includes:
-            install(f, prefix.include)
diff --git a/var/spack/packages/lua/package.py b/var/spack/packages/lua/package.py
deleted file mode 100644
index 57c443cc2d..0000000000
--- a/var/spack/packages/lua/package.py
+++ /dev/null
@@ -1,26 +0,0 @@
-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')
diff --git a/var/spack/packages/lwgrp/package.py b/var/spack/packages/lwgrp/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/lwm2/package.py b/var/spack/packages/lwm2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/memaxes/package.py b/var/spack/packages/memaxes/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mesa/package.py b/var/spack/packages/mesa/package.py
old mode 100644
new mode 100755
index 2a04a8fd51..2dba878a77
--- a/var/spack/packages/mesa/package.py
+++ b/var/spack/packages/mesa/package.py
@@ -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,10 +11,9 @@ 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
 
diff --git a/var/spack/packages/metis/package.py b/var/spack/packages/metis/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpc/package.py b/var/spack/packages/mpc/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpe2/mpe2.patch b/var/spack/packages/mpe2/mpe2.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpe2/package.py b/var/spack/packages/mpe2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpfr/package.py b/var/spack/packages/mpfr/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpibash/mpibash-4.3.patch b/var/spack/packages/mpibash/mpibash-4.3.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpibash/package.py b/var/spack/packages/mpibash/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mpich/package.py b/var/spack/packages/mpich/package.py
old mode 100644
new mode 100755
index b6b2dfde21..6aa8f2eca4
--- a/var/spack/packages/mpich/package.py
+++ b/var/spack/packages/mpich/package.py
@@ -38,6 +38,7 @@ class Mpich(Package):
     provides('mpi@:3', when='@3:')
     provides('mpi@:1', when='@1:')
 
+
     def setup_dependent_environment(self, module, spec, dep_spec):
         """For dependencies, make mpicc's use spack wrapper."""
         os.environ['MPICH_CC']  = 'cc'
diff --git a/var/spack/packages/mpileaks/package.py b/var/spack/packages/mpileaks/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mrnet/package.py b/var/spack/packages/mrnet/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/munge/package.py b/var/spack/packages/munge/package.py
deleted file mode 100644
index c737ca0354..0000000000
--- a/var/spack/packages/munge/package.py
+++ /dev/null
@@ -1,20 +0,0 @@
-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")
-
diff --git a/var/spack/packages/muster/package.py b/var/spack/packages/muster/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch b/var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/mvapich2/package.py b/var/spack/packages/mvapich2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/nasm/package.py b/var/spack/packages/nasm/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/ncurses/package.py b/var/spack/packages/ncurses/package.py
old mode 100644
new mode 100755
index 8f5763bfdd..a22e83503f
--- a/var/spack/packages/ncurses/package.py
+++ b/var/spack/packages/ncurses/package.py
@@ -21,11 +21,3 @@ class Ncurses(Package):
         make()
         make("install")
 
-        configure("--prefix=%s" % prefix,
-                  "--with-shared",
-                  "--disable-widec",
-                  "--disable-pc-files",
-                  "--without-ada")
-        make()
-        make("install")
-
diff --git a/var/spack/packages/netcdf/package.py b/var/spack/packages/netcdf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/netgauge/package.py b/var/spack/packages/netgauge/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/netlib-blas/package.py b/var/spack/packages/netlib-blas/package.py
old mode 100644
new mode 100755
index 85e97323d3..0a6cdb0442
--- a/var/spack/packages/netlib-blas/package.py
+++ b/var/spack/packages/netlib-blas/package.py
@@ -9,8 +9,6 @@ class NetlibBlas(Package):
 
     version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
 
-    variant('fpic', default=False, description="Build with -fpic compiler option")
-
     # virtual dependency
     provides('blas')
 
@@ -25,10 +23,6 @@ class NetlibBlas(Package):
         mf.filter('^LOADER.*',  'LOADER = f90')
         mf.filter('^CC =.*',  'CC = cc')
 
-        if '+fpic' in self.spec:
-            mf.filter('^OPTS.*=.*',  'OPTS = -O2 -frecursive -fpic')
-            mf.filter('^CFLAGS =.*',  'CFLAGS = -O3 -fpic')
-
 
     def install(self, spec, prefix):
         make('blaslib')
diff --git a/var/spack/packages/netlib-lapack/package.py b/var/spack/packages/netlib-lapack/package.py
deleted file mode 100644
index fb6b99e27c..0000000000
--- a/var/spack/packages/netlib-lapack/package.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from spack import *
-
-class NetlibLapack(Package):
-    """
-    LAPACK version 3.X is a comprehensive FORTRAN library that does
-    linear algebra operations including matrix inversions, least
-    squared solutions to linear sets of equations, eigenvector
-    analysis, singular value decomposition, etc. It is a very
-    comprehensive and reputable package that has found extensive
-    use in the scientific community.
-    """
-    homepage = "http://www.netlib.org/lapack/"
-    url      = "http://www.netlib.org/lapack/lapack-3.5.0.tgz"
-
-    version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
-    version('3.4.2', '61bf1a8a4469d4bdb7604f5897179478')
-    version('3.4.1', '44c3869c38c8335c2b9c2a8bb276eb55')
-    version('3.4.0', '02d5706ec03ba885fc246e5fa10d8c70')
-    version('3.3.1', 'd0d533ec9a5b74933c2a1e84eedc58b4')
-
-    variant('shared', default=False, description="Build shared library version")
-
-    # virtual dependency
-    provides('lapack')
-
-    # blas is a virtual dependency.
-    depends_on('blas')
-
-    depends_on('cmake')
-
-    # Doesn't always build correctly in parallel
-    parallel = False
-
-    @when('^netlib-blas')
-    def get_blas_libs(self):
-        blas = self.spec['netlib-blas']
-        return [join_path(blas.prefix.lib, 'blas.a')]
-
-
-    @when('^atlas')
-    def get_blas_libs(self):
-        blas = self.spec['atlas']
-        return [join_path(blas.prefix.lib, l)
-                for l in ('libf77blas.a', 'libatlas.a')]
-
-
-    def install(self, spec, prefix):
-        blas_libs = ";".join(self.get_blas_libs())
-        cmake_args = [".", '-DBLAS_LIBRARIES=' + blas_libs]
-
-        if '+shared' in spec:
-            cmake_args.append('-DBUILD_SHARED_LIBS=ON')
-
-        cmake_args += std_cmake_args
-
-        cmake(*cmake_args)
-        make()
-        make("install")
-
diff --git a/var/spack/packages/nettle/package.py b/var/spack/packages/nettle/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/ompss/package.py b/var/spack/packages/ompss/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/opari2/package.py b/var/spack/packages/opari2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch b/var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/openmpi/llnl-platforms.patch b/var/spack/packages/openmpi/llnl-platforms.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/openmpi/package.py b/var/spack/packages/openmpi/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/openssl/package.py b/var/spack/packages/openssl/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/otf/package.py b/var/spack/packages/otf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/otf2/package.py b/var/spack/packages/otf2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/pango/package.py b/var/spack/packages/pango/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/papi/package.py b/var/spack/packages/papi/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/paraver/package.py b/var/spack/packages/paraver/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/parmetis/package.py b/var/spack/packages/parmetis/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/parpack/package.py b/var/spack/packages/parpack/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/pcre/package.py b/var/spack/packages/pcre/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/petsc/package.py b/var/spack/packages/petsc/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/pidx/package.py b/var/spack/packages/pidx/package.py
deleted file mode 100644
index 81aed62fb1..0000000000
--- a/var/spack/packages/pidx/package.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from spack import *
-
-class Pidx(Package):
-    """PIDX Parallel I/O Library.
-
-    PIDX is an efficient parallel I/O library that reads and writes
-    multiresolution IDX data files.
-    """
-
-    homepage = "http://www.cedmav.com/pidx"
-
-    version('1.0', git='https://github.com/sci-visus/PIDX.git',
-            commit='6afa1cf71d1c41263296dc049c8fabaf73c296da')
-
-    depends_on("mpi")
-
-    def install(self, spec, prefix):
-        with working_dir('spack-build', create=True):
-            cmake('..', *std_cmake_args)
-            make()
-            make("install")
diff --git a/var/spack/packages/pixman/package.py b/var/spack/packages/pixman/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/pkg-config/package.py b/var/spack/packages/pkg-config/package.py
deleted file mode 100644
index 9964c6ce34..0000000000
--- a/var/spack/packages/pkg-config/package.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from spack import *
-
-class PkgConfig(Package):
-    """pkg-config is a helper tool used when compiling applications and libraries"""
-    homepage = "http://www.freedesktop.org/wiki/Software/pkg-config/"
-    url      = "http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz"
-
-    version('0.28', 'aa3c86e67551adc3ac865160e34a2a0d')
-
-    parallel = False
-
-    def install(self, spec, prefix):
-        configure("--prefix=%s" %prefix, "--enable-shared")
-
-        make()
-        make("install")
-
diff --git a/var/spack/packages/pmgr_collective/package.py b/var/spack/packages/pmgr_collective/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/postgresql/package.py b/var/spack/packages/postgresql/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/ppl/package.py b/var/spack/packages/ppl/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/protobuf/package.py b/var/spack/packages/protobuf/package.py
deleted file mode 100644
index 34085c7ce9..0000000000
--- a/var/spack/packages/protobuf/package.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import os
-from spack import *
-
-class Protobuf(Package):
-    """Google's data interchange format."""
-
-    homepage = "https://developers.google.com/protocol-buffers"
-    url      = "https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2"
-
-    version('2.5.0', 'a72001a9067a4c2c4e0e836d0f92ece4')
-
-    def install(self, spec, prefix):
-        configure("--prefix=" + prefix)
-        make()
-        make("check")
-        make("install")
diff --git a/var/spack/packages/py-Cython/package.py b/var/spack/packages/py-Cython/package.py
new file mode 100644
index 0000000000..c250139114
--- /dev/null
+++ b/var/spack/packages/py-Cython/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyCython(Package):
+    """The Cython compiler for writing C extensions for the Python language."""
+    homepage = "http://www.cython.org"
+    version("0.21.2", "d21adb870c75680dc857cd05d41046a4",
+            url="https://pypi.python.org/packages/source/C/Cython/Cython-0.21.2.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-Distutils2/package.py b/var/spack/packages/py-Distutils2/package.py
new file mode 100644
index 0000000000..8690f569fe
--- /dev/null
+++ b/var/spack/packages/py-Distutils2/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyDistutils2(Package):
+    """Python Packaging Library."""
+    
+    homepage = "https://hg.python.org/distutils2"
+    url      = "https://pypi.python.org/packages/source/D/Distutils2/Distutils2-1.0a4.tar.gz"
+
+    version('1.0a4', '52bc9dffb394970c27e02853ae3a3241')
+
+    depends_on("python")
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
+
diff --git a/var/spack/packages/py-astroML/package.py b/var/spack/packages/py-astroML/package.py
new file mode 100644
index 0000000000..1583e249d2
--- /dev/null
+++ b/var/spack/packages/py-astroML/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyAstroml(Package):
+    """tools for machine learning and data mining in Astronomy"""
+    homepage = "http://astroML.github.com"
+    version("0.2", "85f558368546660564f20b30efafb024",
+            url="https://pypi.python.org/packages/source/a/astroML/astroML-0.2.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-astropy/package.py b/var/spack/packages/py-astropy/package.py
new file mode 100644
index 0000000000..5d2d0619cc
--- /dev/null
+++ b/var/spack/packages/py-astropy/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyAstropy(Package):
+    """Community-developed python astronomy tools"""
+    homepage = "http://astropy.org"
+    version("0.4.2", "6dc4f643cde37ba0a8b4967dc8becee8",
+            url="https://pypi.python.org/packages/source/a/astropy/astropy-0.4.2.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-autopep8/package.py b/var/spack/packages/py-autopep8/package.py
new file mode 100644
index 0000000000..39a2288ea0
--- /dev/null
+++ b/var/spack/packages/py-autopep8/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyAutopep8(Package):
+    """A tool that automatically formats Python code to conform to the PEP 8 style guide"""
+    homepage = "https://github.com/hhatto/autopep8"
+    version("1.1", "7998358d8f0efd77dcb2cc8e34e3cb5c",
+            url="https://pypi.python.org/packages/source/a/autopep8/autopep8-1.1.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-basemap/package.py b/var/spack/packages/py-basemap/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-biopython/package.py b/var/spack/packages/py-biopython/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-certifi/package.py b/var/spack/packages/py-certifi/package.py
new file mode 100644
index 0000000000..442903e6a0
--- /dev/null
+++ b/var/spack/packages/py-certifi/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyCertifi(Package):
+    """Python package for providing Mozilla's CA Bundle."""
+    homepage = "http://python-requests.org"
+    version("14.05.14", "315ea4e50673a16ab047099f816fd32a",
+            url="https://pypi.python.org/packages/source/c/certifi/certifi-14.05.14.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-cffi/package.py b/var/spack/packages/py-cffi/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-cython/package.py b/var/spack/packages/py-cython/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-dateutil/package.py b/var/spack/packages/py-dateutil/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-decorator/package.py b/var/spack/packages/py-decorator/package.py
new file mode 100644
index 0000000000..00c1c541d4
--- /dev/null
+++ b/var/spack/packages/py-decorator/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyDecorator(Package):
+    """Better living through Python with decorators"""
+    homepage = "https://github.com/micheles/decorator"
+    version("4.0.4", "dd3a0669e1e6f09699eefa2c7fbd9756",
+            url="https://pypi.python.org/packages/source/d/decorator/decorator-4.0.4.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-emcee/package.py b/var/spack/packages/py-emcee/package.py
new file mode 100644
index 0000000000..544066b92d
--- /dev/null
+++ b/var/spack/packages/py-emcee/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyEmcee(Package):
+    """Kick ass affine-invariant ensemble MCMC sampling"""
+    homepage = "http://dan.iel.fm/emcee/"
+    version("2.1.0", "c6b6fad05c824d40671d4a4fc58dfff7",
+            url="https://pypi.python.org/packages/source/e/emcee/emcee-2.1.0.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-epydoc/package.py b/var/spack/packages/py-epydoc/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-fitsio/package.py b/var/spack/packages/py-fitsio/package.py
new file mode 100644
index 0000000000..046bc386d5
--- /dev/null
+++ b/var/spack/packages/py-fitsio/package.py
@@ -0,0 +1,13 @@
+from spack import *
+
+class PyFitsio(Package):
+    """A full featured python library to read from and write to FITS files."""
+    homepage = "https://github.com/esheldon/fitsio"
+    version("0.9.7", "75fa05f999ae8f55c8290bd78ada49e7",
+            url="https://pypi.python.org/packages/source/f/fitsio/fitsio-0.9.7.tar.gz")
+
+    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-genders/package.py b/var/spack/packages/py-genders/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-gnuplot/package.py b/var/spack/packages/py-gnuplot/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-gnureadline/package.py b/var/spack/packages/py-gnureadline/package.py
new file mode 100644
index 0000000000..51d1c6227e
--- /dev/null
+++ b/var/spack/packages/py-gnureadline/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyGnureadline(Package):
+    """The standard Python readline extension statically linked against the GNU readline library."""
+    homepage = "http://github.com/ludwigschwardt/python-gnureadline"
+    version("6.3.3", "c4af83c9a3fbeac8f2da9b5a7c60e51c",
+            url="https://pypi.python.org/packages/source/g/gnureadline/gnureadline-6.3.3.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-h5py/package.py b/var/spack/packages/py-h5py/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-ipython/package.py b/var/spack/packages/py-ipython/package.py
old mode 100644
new mode 100755
index 8d0e64a07f..3b94b71f29
--- a/var/spack/packages/py-ipython/package.py
+++ b/var/spack/packages/py-ipython/package.py
@@ -3,14 +3,29 @@ from spack import *
 class PyIpython(Package):
     """IPython provides a rich toolkit to help you make the most out of using Python interactively."""
     homepage = "https://pypi.python.org/pypi/ipython"
-    url      = "https://pypi.python.org/packages/source/i/ipython/ipython-2.3.1.tar.gz"
 
-    version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf')
+    version('3.0.0','b3f00f3c0be036fafef3b0b9d663f27e',
+           url='https://pypi.python.org/packages/source/i/ipython/ipython-3.0.0.tar.gz')
+    version('4.0.0','c2fecbcf1c0fbdc82625c77a50733dd6',
+           url='https://pypi.python.org/packages/source/i/ipython/ipython-4.0.0.tar.gz')
+    version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf',
+            url="https://pypi.python.org/packages/source/i/ipython/ipython-2.3.1.tar.gz")
     version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f')
+    version('3.2.1', 'f4c93d67ac4b2d4fc69df693b6f3c9e0',
+            url='https://github.com/ipython/ipython/archive/rel-3.2.1.tar.gz')
 
     extends('python')
     depends_on('py-pygments')
-    depends_on('py-setuptools')
+    depends_on('py-setuptools@18.1')
+    depends_on('py-traitlets')
+    depends_on('py-pyzmq')
+    depends_on('py-pexpect')
+    depends_on('py-tornado')
+    depends_on('py-jinja2')
 
     def install(self, spec, prefix):
+        import os
+        # os.system("spack activate py-setuptools@18.1")
+        # os.system("easy_install pip")
+        # os.system("pip install ipython[notebook]")
         python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-ipython/package.py.backup b/var/spack/packages/py-ipython/package.py.backup
new file mode 100755
index 0000000000..1ed8b57e60
--- /dev/null
+++ b/var/spack/packages/py-ipython/package.py.backup
@@ -0,0 +1,27 @@
+from spack import *
+
+class PyIpython(Package):
+    """IPython provides a rich toolkit to help you make the most out of using Python interactively."""
+    homepage = "https://pypi.python.org/pypi/ipython"
+
+    version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf',
+            url="https://pypi.python.org/packages/source/i/ipython/ipython-2.3.1.tar.gz")
+    version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f')
+    version('3.2.1', 'f4c93d67ac4b2d4fc69df693b6f3c9e0',
+            url='https://github.com/ipython/ipython/archive/rel-3.2.1.tar.gz')
+
+    extends('python')
+    depends_on('py-pygments')
+    depends_on('py-setuptools@18.1')
+    depends_on('py-traitlets')
+    depends_on('py-pyzmq')
+    depends_on('py-pexpect')
+    depends_on('py-tornado')
+    depends_on('py-Jinja2')
+
+    def install(self, spec, prefix):
+        import os
+        # os.system("spack activate py-setuptools@18.1")
+        # os.system("easy_install pip")
+        # os.system("pip install ipython[notebook]")
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-ipython_genutils/package.py b/var/spack/packages/py-ipython_genutils/package.py
new file mode 100644
index 0000000000..39b15eec73
--- /dev/null
+++ b/var/spack/packages/py-ipython_genutils/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyIpythonGenutils(Package):
+    """Vestigial utilities from IPython"""
+    homepage = "http://ipython.org"
+    version("0.1.0", "9a8afbe0978adbcbfcb3b35b2d015a56",
+            url="https://pypi.python.org/packages/source/i/ipython_genutils/ipython_genutils-0.1.0.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-joblib/package.py b/var/spack/packages/py-joblib/package.py
new file mode 100644
index 0000000000..10672314de
--- /dev/null
+++ b/var/spack/packages/py-joblib/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyJoblib(Package):
+    """Lightweight pipelining: using Python functions as pipeline jobs."""
+    homepage = "http://packages.python.org/joblib/"
+    version("0.8.4", "90a1c25cc4dc4a8e3536093dbc35cff3",
+            url="https://pypi.python.org/packages/source/j/joblib/joblib-0.8.4.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-jsonschema/package.py b/var/spack/packages/py-jsonschema/package.py
new file mode 100755
index 0000000000..9a7fc21862
--- /dev/null
+++ b/var/spack/packages/py-jsonschema/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyJsonschema(Package):
+    """implementation of JSON Schema validation for Python"""
+    homepage = "https://github.com/Julian/jsonschema"
+    url      = "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-2.5.1.tar.gz"
+
+    version('2.4.0','661f85c3d23094afbb9ac3c0673840bf',
+           url='https://pypi.python.org/packages/source/j/jsonschema/jsonschema-2.4.0.tar.gz')
+    version('2.5.1', '374e848fdb69a3ce8b7e778b47c30640')
+
+    extends("python")
+    depends_on("py-setuptools@18.1")
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-libxml2/package.py b/var/spack/packages/py-libxml2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-lockfile/package.py b/var/spack/packages/py-lockfile/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-mako/package.py b/var/spack/packages/py-mako/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-matplotlib/package.py b/var/spack/packages/py-matplotlib/package.py
old mode 100644
new mode 100755
index e7ce3dfd24..b9244daf56
--- a/var/spack/packages/py-matplotlib/package.py
+++ b/var/spack/packages/py-matplotlib/package.py
@@ -12,7 +12,6 @@ class PyMatplotlib(Package):
     extends('python', ignore=r'bin/nosetests.*$')
 
     depends_on('py-pyside')
-    depends_on('py-ipython')
     depends_on('py-pyparsing')
     depends_on('py-six')
     depends_on('py-dateutil')
diff --git a/var/spack/packages/py-mock/package.py b/var/spack/packages/py-mock/package.py
index 3b08428ba0..c43842c187 100644
--- a/var/spack/packages/py-mock/package.py
+++ b/var/spack/packages/py-mock/package.py
@@ -1,17 +1,12 @@
 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."""
+    """A Python Mocking and Patching Library for Testing"""
+    homepage = "http://www.voidspace.org.uk/python/mock/"
+    version("1.0.1", "c3971991738caa55ec7c356bbc154ee2",
+            url="https://pypi.python.org/packages/source/m/mock/mock-1.0.1.tar.gz")
 
-    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:')
+    extends("python")
 
     def install(self, spec, prefix):
-        python('setup.py', 'install', '--prefix=%s' % prefix)
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-mpi4py/package.py b/var/spack/packages/py-mpi4py/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-mx/package.py b/var/spack/packages/py-mx/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-nose/package.py b/var/spack/packages/py-nose/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-numexpr/package.py b/var/spack/packages/py-numexpr/package.py
new file mode 100644
index 0000000000..283ea18772
--- /dev/null
+++ b/var/spack/packages/py-numexpr/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyNumexpr(Package):
+    """Fast numerical expression evaluator for NumPy"""
+    homepage = "https://github.com/pydata/numexpr"
+    version("2.4", "df7e8d9e9dbb145b56d43c465c2bf854",
+            url="https://pypi.python.org/packages/source/n/numexpr/numexpr-2.4.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-numpy/package.py b/var/spack/packages/py-numpy/package.py
old mode 100644
new mode 100755
index efa109a3e9..6534e063d2
--- a/var/spack/packages/py-numpy/package.py
+++ b/var/spack/packages/py-numpy/package.py
@@ -7,22 +7,9 @@ class PyNumpy(Package):
 
     version('1.9.1', '78842b73560ec378142665e712ae4ad9')
     version('1.9.2', 'a1ed53432dbcd256398898d35bc8e645')
-    
+
     extends('python')
     depends_on('py-nose')
-    depends_on('netlib-blas+fpic')
-    depends_on('netlib-lapack+shared')
-
-    def patch(self):
-        filter_file(
-            "possible_executables = \['(gfortran|g77|ifort|efl)",
-            "possible_executables = ['fc",
-            "numpy/distutils/fcompiler/gnu.py",
-            "numpy/distutils/fcompiler/intel.py")
 
     def install(self, spec, prefix):
-        with open('site.cfg', 'w') as f:
-            f.write('[DEFAULT]\n')
-            f.write('libraries=lapack,blas\n')
-            f.write('library_dirs=%s/lib:%s/lib\n' % (spec['blas'].prefix, spec['lapack'].prefix))
         python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pandas/package.py b/var/spack/packages/py-pandas/package.py
old mode 100644
new mode 100755
index 5b9997faa9..07ee12782f
--- a/var/spack/packages/py-pandas/package.py
+++ b/var/spack/packages/py-pandas/package.py
@@ -6,6 +6,8 @@ class PyPandas(Package):
     homepage = "http://pandas.pydata.org/"
     url      = "https://pypi.python.org/packages/source/p/pandas/pandas-0.16.0.tar.gz#md5=bfe311f05dc0c351f8955fbd1e296e73"
 
+    version('0.15.1','f6fd8d49fc801f6f3fa48f9117a6290b',
+           url='https://pypi.python.org/packages/source/p/pandas/pandas-0.15.1.tar.gz')
     version('0.16.0', 'bfe311f05dc0c351f8955fbd1e296e73')
     version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
 
diff --git a/var/spack/packages/py-pep8/package.py b/var/spack/packages/py-pep8/package.py
new file mode 100644
index 0000000000..0bcf416922
--- /dev/null
+++ b/var/spack/packages/py-pep8/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPep8(Package):
+    """Python style guide checker"""
+    homepage = "http://pep8.readthedocs.org/"
+    version("1.6.1", "76cf60b245f8549cb458ffcd85710738",
+            url="https://pypi.python.org/packages/source/p/pep8/pep8-1.6.1.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-pexpect/package.py b/var/spack/packages/py-pexpect/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pickleshare/package.py b/var/spack/packages/py-pickleshare/package.py
new file mode 100644
index 0000000000..cf9ddb7db8
--- /dev/null
+++ b/var/spack/packages/py-pickleshare/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPickleshare(Package):
+    """Tiny 'shelve'-like database with concurrency support"""
+    homepage = "https://github.com/vivainio/pickleshare"
+    version("0.5", "25337740507cb855ad58bfcf60f7710e",
+            url="https://pypi.python.org/packages/source/p/pickleshare/pickleshare-0.5.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-pil/package.py b/var/spack/packages/py-pil/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pip/package.py b/var/spack/packages/py-pip/package.py
new file mode 100644
index 0000000000..89b8570fe4
--- /dev/null
+++ b/var/spack/packages/py-pip/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPip(Package):
+    """The PyPA recommended tool for installing Python packages."""
+    homepage = "https://pip.pypa.io/"
+    version("7.1.2", "3823d2343d9f3aaab21cf9c917710196",
+            url="https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-pmw/package.py b/var/spack/packages/py-pmw/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-py/package.py b/var/spack/packages/py-py/package.py
new file mode 100644
index 0000000000..0ef0403124
--- /dev/null
+++ b/var/spack/packages/py-py/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPy(Package):
+    """library with cross-python path, ini-parsing, io, code, log facilities"""
+    homepage = "http://pylib.readthedocs.org/"
+    version("1.4.26", "30c3fd92a53f1a5ed6f3591c1fe75c0e",
+            url="https://pypi.python.org/packages/source/p/py/py-1.4.26.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-py4j/package.py b/var/spack/packages/py-py4j/package.py
new file mode 100755
index 0000000000..4c31f57298
--- /dev/null
+++ b/var/spack/packages/py-py4j/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+
+class PyPy4j(Package):
+    """Enables Python programs to dynamically access arbitrary Java objects"""
+    homepage = "https://www.py4j.org/"
+    url      = "https://pypi.python.org/packages/source/p/py4j/py4j-0.9.tar.gz"
+
+    version('0.9', 'b6fed5faef81a5368e3d50a91a5c9a60')
+
+    extends("python")
+    depends_on("py-setuptools@18.1")
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-pychecker/package.py b/var/spack/packages/py-pychecker/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pycparser/package.py b/var/spack/packages/py-pycparser/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pyelftools/package.py b/var/spack/packages/py-pyelftools/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pygments/package.py b/var/spack/packages/py-pygments/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pylint/package.py b/var/spack/packages/py-pylint/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pypar/package.py b/var/spack/packages/py-pypar/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pyparsing/package.py b/var/spack/packages/py-pyparsing/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pyqt/package.py b/var/spack/packages/py-pyqt/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-pyside/package.py b/var/spack/packages/py-pyside/package.py
old mode 100644
new mode 100755
index bb5da44d02..8d093efd2c
--- a/var/spack/packages/py-pyside/package.py
+++ b/var/spack/packages/py-pyside/package.py
@@ -8,12 +8,9 @@ class PyPyside(Package):
 
     version('1.2.2', 'c45bc400c8a86d6b35f34c29e379e44d')
 
-    # TODO: make build dependency
-    # depends_on("cmake")
-
     extends('python')
     depends_on('py-setuptools')
-    depends_on('qt@:4')
+    depends_on('qt@5.4.0')
 
     def patch(self):
         """Undo PySide RPATH handling and add Spack RPATH."""
diff --git a/var/spack/packages/py-pytest/package.py b/var/spack/packages/py-pytest/package.py
new file mode 100644
index 0000000000..3611b68862
--- /dev/null
+++ b/var/spack/packages/py-pytest/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPytest(Package):
+    """pytest: simple powerful testing with Python"""
+    homepage = "http://pytest.org"
+    version("2.6.4", "14341e122f7e9031a0948eb6b01a2640",
+            url="https://pypi.python.org/packages/source/p/pytest/pytest-2.6.4.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-python-daemon/package.py b/var/spack/packages/py-python-daemon/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-python-dateutil/package.py b/var/spack/packages/py-python-dateutil/package.py
new file mode 100644
index 0000000000..8efa114db1
--- /dev/null
+++ b/var/spack/packages/py-python-dateutil/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyPythonDateutil(Package):
+    """Extensions to the standard Python datetime module"""
+    homepage = "http://labix.org/python-dateutil"
+    version("2.2", "c1f654d0ff7e33999380a8ba9783fd5c",
+            url="https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.2.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-pytz/package.py b/var/spack/packages/py-pytz/package.py
old mode 100644
new mode 100755
index da6311a784..f67bb42854
--- a/var/spack/packages/py-pytz/package.py
+++ b/var/spack/packages/py-pytz/package.py
@@ -5,6 +5,8 @@ class PyPytz(Package):
     homepage = "https://pypi.python.org/pypi/pytz"
     url      = "https://pypi.python.org/packages/source/p/pytz/pytz-2014.10.tar.gz"
 
+    version('2014.9','d42bda2f4c1e873e02fbd1e4acfd1b8c',
+           url='https://pypi.python.org/packages/source/p/pytz/pytz-2014.9.tar.gz')
     version('2014.10', 'eb1cb941a20c5b751352c52486aa1dd7')
     version('2015.4', '417a47b1c432d90333e42084a605d3d8')
 
diff --git a/var/spack/packages/py-pyzmq/package.py b/var/spack/packages/py-pyzmq/package.py
new file mode 100755
index 0000000000..f5551182b3
--- /dev/null
+++ b/var/spack/packages/py-pyzmq/package.py
@@ -0,0 +1,16 @@
+from spack import *
+
+class PyPyzmq(Package):
+    """official Python binding for the ZeroMQ Messaging Library"""
+    homepage = "https://github.com/zeromq/pyzmq"
+    url      = "https://pypi.python.org/packages/source/p/pyzmq/pyzmq-14.7.0.tar.gz"
+
+    version('14.4.1','a6a7fb6950b1bf5333c6795f3edf196c',
+           url='https://pypi.python.org/packages/source/p/pyzmq/pyzmq-14.4.1.tar.gz')
+    version('14.7.0', '87e3abb33af5794db5ae85c667bbf324')
+
+    extends('python')
+    depends_on('py-setuptools@18.1')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-rpy2/package.py b/var/spack/packages/py-rpy2/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-scientificpython/package.py b/var/spack/packages/py-scientificpython/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-scikit-learn/package.py b/var/spack/packages/py-scikit-learn/package.py
old mode 100644
new mode 100755
index 5b078ce901..744b37e7e0
--- a/var/spack/packages/py-scikit-learn/package.py
+++ b/var/spack/packages/py-scikit-learn/package.py
@@ -9,6 +9,9 @@ class PyScikitLearn(Package):
     version('0.16.1', '363ddda501e3b6b61726aa40b8dbdb7e')
 
     extends('python')
+    depends_on('python@2.7.10')
+    depends_on('py-numpy@1.9.2')
+    depends_on('py-scipy@0.15.1')
 
     def install(self, spec, prefix):
         python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-scipy/package.py b/var/spack/packages/py-scipy/package.py
old mode 100644
new mode 100755
index 3a1124cc15..bcbdb2100f
--- a/var/spack/packages/py-scipy/package.py
+++ b/var/spack/packages/py-scipy/package.py
@@ -5,14 +5,14 @@ class PyScipy(Package):
     homepage = "https://pypi.python.org/pypi/scipy"
     url      = "https://pypi.python.org/packages/source/s/scipy/scipy-0.15.0.tar.gz"
 
+    version('0.14.0','d7c7f4ccf8b07b08d6fe49d5cd51f85d',
+           url='https://pypi.python.org/packages/source/s/scipy/scipy-0.14.0.tar.gz')
     version('0.15.0', '639112f077f0aeb6d80718dc5019dc7a')
     version('0.15.1', 'be56cd8e60591d6332aac792a5880110')
 
     extends('python')
     depends_on('py-nose')
     depends_on('py-numpy')
-    depends_on('blas')
-    depends_on('lapack')
 
     def install(self, spec, prefix):
         python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-seaborn/package.py b/var/spack/packages/py-seaborn/package.py
new file mode 100644
index 0000000000..1e228b0622
--- /dev/null
+++ b/var/spack/packages/py-seaborn/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PySeaborn(Package):
+    """Seaborn: statistical data visualization"""
+    homepage = "http://stanford.edu/~mwaskom/software/seaborn/"
+    version("0.5.1", "2ce6ea7d3c67858c0b1f5793fa2043b8",
+            url="https://pypi.python.org/packages/source/s/seaborn/seaborn-0.5.1.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-setuptools/package.py b/var/spack/packages/py-setuptools/package.py
old mode 100644
new mode 100755
index 760ad4d6db..053fe1ba80
--- a/var/spack/packages/py-setuptools/package.py
+++ b/var/spack/packages/py-setuptools/package.py
@@ -3,11 +3,12 @@ from spack import *
 class PySetuptools(Package):
     """Easily download, build, install, upgrade, and uninstall Python packages."""
     homepage = "https://pypi.python.org/pypi/setuptools"
-    url      = "https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.tar.gz"
 
-    version('11.3.1', '01f69212e019a2420c1693fb43593930')
-    version('16.0', '0ace0b96233516fc5f7c857d086aa3ad')
-    version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06')
+    version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06',
+            url='https://pypi.python.org/packages/source/s/setuptools/setuptools-18.1.tar.gz')
+    version('11.3.1', '01f69212e019a2420c1693fb43593930',
+            url="https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.tar.gz")
+    version('16.0', '0ace0b96233516fc5f7c857d086aa3ad',)
 
     extends('python')
 
diff --git a/var/spack/packages/py-shiboken/package.py b/var/spack/packages/py-shiboken/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-sip/package.py b/var/spack/packages/py-sip/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-six/package.py b/var/spack/packages/py-six/package.py
old mode 100644
new mode 100755
index 05c5bd00a9..e9946a1e56
--- a/var/spack/packages/py-six/package.py
+++ b/var/spack/packages/py-six/package.py
@@ -5,6 +5,8 @@ class PySix(Package):
     homepage = "https://pypi.python.org/pypi/six"
     url      = "https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz"
 
+    version('1.8.0','1626eb24cc889110c38f7e786ec69885',
+           url='https://pypi.python.org/packages/source/s/six/six-1.8.0.tar.gz')
     version('1.9.0', '476881ef4012262dfc8adc645ee786c4')
 
     extends('python')
diff --git a/var/spack/packages/py-statsmodels/package.py b/var/spack/packages/py-statsmodels/package.py
new file mode 100644
index 0000000000..393c772738
--- /dev/null
+++ b/var/spack/packages/py-statsmodels/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyStatsmodels(Package):
+    """Statistical computations and models for use with SciPy"""
+    homepage = "http://statsmodels.sourceforge.net/"
+    version("0.6.1", "f7580ebf7d2a2c9b87abfad190dcb9a3",
+            url="https://pypi.python.org/packages/source/s/statsmodels/statsmodels-0.6.1.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-sympy/package.py b/var/spack/packages/py-sympy/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-tables/package.py b/var/spack/packages/py-tables/package.py
new file mode 100644
index 0000000000..637ccf34cd
--- /dev/null
+++ b/var/spack/packages/py-tables/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyTables(Package):
+    """Hierarchical datasets for Python"""
+    homepage = "http://www.pytables.org/"
+    version("3.1.1", "38d917f0c6dfb0bc28ce9ea0c3492524",
+            url="https://pypi.python.org/packages/source/t/tables/tables-3.1.1.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-tornado/package.py b/var/spack/packages/py-tornado/package.py
new file mode 100755
index 0000000000..4fc2d42c7b
--- /dev/null
+++ b/var/spack/packages/py-tornado/package.py
@@ -0,0 +1,17 @@
+from spack import *
+
+class PyTornado(Package):
+    """Python web framework and asynchronous networking library"""
+    homepage = "http://www.tornadoweb.org/"
+    url = "https://pypi.python.org/packages/source/t/tornado/tornado-4.2.1.tar.gz"
+
+    version('4.0.2','985c0e704b765c33a6193d49d1935588',
+           url='https://pypi.python.org/packages/source/t/tornado/tornado-4.0.2.tar.gz')
+    version('4.2.1', 'd523204389cfb70121bb69709f551b20')
+
+    extends('python')
+    depends_on('py-certifi')
+    depends_on('py-setuptools@18.1')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-traitlets/package.py b/var/spack/packages/py-traitlets/package.py
new file mode 100755
index 0000000000..7b7f5c64cc
--- /dev/null
+++ b/var/spack/packages/py-traitlets/package.py
@@ -0,0 +1,14 @@
+from spack import *
+
+class PyTraitlets(Package):
+    """A lightweight Traits like module"""
+    homepage = "http://traitlets.readthedocs.org/"
+    url      = "https://github.com/ipython/traitlets/archive/4.0.0.tar.gz"
+
+    version('4.0.0', 'b5b95ea5941fd9619b4704dfd8201568')
+
+    extends('python')
+    depends_on("py-setuptools@18.1")
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-triangle-plot/package.py b/var/spack/packages/py-triangle-plot/package.py
new file mode 100644
index 0000000000..29c5f92857
--- /dev/null
+++ b/var/spack/packages/py-triangle-plot/package.py
@@ -0,0 +1,12 @@
+from spack import *
+
+class PyTrianglePlot(Package):
+    """Make some beautiful corner plots of samples."""
+    homepage = "https://github.com/dfm/triangle.py"
+    version("0.0.6", "970a35a9bde6002d673e3188fe39f0ed",
+            url="https://pypi.python.org/packages/source/t/triangle_plot/triangle_plot-0.0.6.tar.gz")
+
+    extends("python")
+
+    def install(self, spec, prefix):
+        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-virtualenv/package.py b/var/spack/packages/py-virtualenv/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/py-yapf/package.py b/var/spack/packages/py-yapf/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/python/package.py b/var/spack/packages/python/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/qhull/package.py b/var/spack/packages/qhull/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/qt/package.py b/var/spack/packages/qt/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/qthreads/package.py b/var/spack/packages/qthreads/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/ravel/package.py b/var/spack/packages/ravel/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/readline/package.py b/var/spack/packages/readline/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/rose/add_spack_compiler_recognition.patch b/var/spack/packages/rose/add_spack_compiler_recognition.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/rose/package.py b/var/spack/packages/rose/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/ruby/package.py b/var/spack/packages/ruby/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/samtools/package.py b/var/spack/packages/samtools/package.py
deleted file mode 100644
index 72900398d8..0000000000
--- a/var/spack/packages/samtools/package.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from spack import *
-
-class Samtools(Package):
-    """SAM Tools provide various utilities for manipulating alignments in the SAM format, 
-       including sorting, merging, indexing and generating
-       alignments in a per-position format"""
-
-    homepage = "www.htslib.org"
-    version('1.2','988ec4c3058a6ceda36503eebecd4122',url = "https://github.com/samtools/samtools/releases/download/1.2/samtools-1.2.tar.bz2")
-
-    depends_on("zlib")
-    depends_on("mpc")
-    parallel=False
-    patch("samtools1.2.patch",level=0)
-
-    def install(self, spec, prefix):
-        make("prefix=%s" % prefix, "install")
-
diff --git a/var/spack/packages/samtools/samtools1.2.patch b/var/spack/packages/samtools/samtools1.2.patch
deleted file mode 100644
index ead3ab4e2c..0000000000
--- a/var/spack/packages/samtools/samtools1.2.patch
+++ /dev/null
@@ -1,20 +0,0 @@
---- Makefile	2015-02-03 08:27:34.000000000 -0800
-+++ Makefile.new	2015-07-21 10:38:27.881406892 -0700
-@@ -26,7 +26,7 @@
- CFLAGS   = -g -Wall -O2
- LDFLAGS  =
- LDLIBS   =
--DFLAGS=     -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=1
-+DFLAGS=     -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_CURSES_LIB=0
- LOBJS=      bam_aux.o bam.o bam_import.o sam.o \
-             sam_header.o bam_plbuf.o
- AOBJS=      bam_index.o bam_plcmd.o sam_view.o \
-@@ -37,7 +37,7 @@
-             faidx.o stats.o stats_isize.o bam_flags.o bam_split.o \
-             bam_tview.o bam_tview_curses.o bam_tview_html.o bam_lpileup.o
- INCLUDES=   -I. -I$(HTSDIR)
--LIBCURSES=  -lcurses # -lXCurses
-+#LIBCURSES=  -lcurses # -lXCurses
- 
- prefix      = /usr/local
- exec_prefix = $(prefix)
diff --git a/var/spack/packages/scalasca/package.py b/var/spack/packages/scalasca/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/scorep/package.py b/var/spack/packages/scorep/package.py
old mode 100644
new mode 100755
index f013bd1cbb..32a772e3db
--- a/var/spack/packages/scorep/package.py
+++ b/var/spack/packages/scorep/package.py
@@ -1,10 +1,11 @@
 # FIXME: Add copyright statement
 
 from spack import *
+from contextlib import closing
 
 class Scorep(Package):
-    """The Score-P measurement infrastructure is a highly scalable and
-       easy-to-use tool suite for profiling, event tracing, and online
+    """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."""
 
     # FIXME: add a proper url for your package's homepage here.
@@ -19,7 +20,7 @@ class Scorep(Package):
     depends_on("mpi")
     depends_on("papi")
     # depends_on("otf2@1.2:1.2.1") # only Score-P 1.2.x
-    depends_on("otf2")
+    depends_on("otf2") 
     depends_on("opari2")
     depends_on("cube@4.2:4.2.3")
 
@@ -52,12 +53,12 @@ MPI_CXXFLAGS=-fPIC
         # 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 open("platform-backend-user-provided", "w") as backend_file:
+        with closing(open("platform-backend-user-provided", "w")) as backend_file:
             backend_file.write(self.backend_user_provided)
-        with open("platform-frontend-user-provided", "w") as frontend_file:
+        with closing(open("platform-frontend-user-provided", "w")) as frontend_file:
             frontend_file.write(self.frontend_user_provided)
-        with open("platform-mpi-user-provided", "w") as mpi_file:
-            mpi_file.write(self.mpi_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,
                           "--with-custom-compilers",
diff --git a/var/spack/packages/scotch/package.py b/var/spack/packages/scotch/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/scr/package.py b/var/spack/packages/scr/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/silo/package.py b/var/spack/packages/silo/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/snappy/package.py b/var/spack/packages/snappy/package.py
deleted file mode 100644
index c8f9ceef7d..0000000000
--- a/var/spack/packages/snappy/package.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import os
-from spack import *
-
-class Snappy(Package):
-    """A fast compressor/decompressor: https://code.google.com/p/snappy"""
-
-    homepage = "https://code.google.com/p/snappy"
-    url      = "https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz"
-
-    version('1.1.3', '7358c82f133dc77798e4c2062a749b73')
-
-    def install(self, spec, prefix):
-        configure("--prefix=" + prefix)
-        make()
-        make("install")
diff --git a/var/spack/packages/spindle/package.py b/var/spack/packages/spindle/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/sqlite/package.py b/var/spack/packages/sqlite/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/stat/configure_mpicxx.patch b/var/spack/packages/stat/configure_mpicxx.patch
old mode 100644
new mode 100755
diff --git a/var/spack/packages/stat/package.py b/var/spack/packages/stat/package.py
old mode 100644
new mode 100755
index 5d81e62731..c40d65ae78
--- a/var/spack/packages/stat/package.py
+++ b/var/spack/packages/stat/package.py
@@ -9,20 +9,17 @@ class Stat(Package):
     version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
     version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
 
-    variant('dysect', default=False, description="enable DySectAPI")
-
     depends_on('libelf')
     depends_on('libdwarf')
     depends_on('dyninst')
     depends_on('graphlib')
-    depends_on('graphviz')
     depends_on('launchmon')
     depends_on('mrnet')
 
     patch('configure_mpicxx.patch', when='@2.1.0')
 
     def install(self, spec, prefix):
-        configure_args = [
+        configure(
             "--enable-gui",
             "--prefix=%s" % prefix,
             "--disable-examples", # Examples require MPI: avoid this dependency.
@@ -30,11 +27,7 @@ class Stat(Package):
             "--with-mrnet=%s"       % spec['mrnet'].prefix,
             "--with-graphlib=%s"    % spec['graphlib'].prefix,
             "--with-stackwalker=%s" % spec['dyninst'].prefix,
-            "--with-libdwarf=%s"    % spec['libdwarf'].prefix
-            ]
-        if '+dysect' in spec:
-            configure_args.append('--enable-dysectapi')
-        configure(*configure_args)
+            "--with-libdwarf=%s"    % spec['libdwarf'].prefix)
 
         make(parallel=False)
         make("install")
diff --git a/var/spack/packages/sundials/package.py b/var/spack/packages/sundials/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/swig/package.py b/var/spack/packages/swig/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/task/package.py b/var/spack/packages/task/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/taskd/package.py b/var/spack/packages/taskd/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/tau/package.py b/var/spack/packages/tau/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/tcl/package.py b/var/spack/packages/tcl/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/the_silver_searcher/package.py b/var/spack/packages/the_silver_searcher/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/thrift/package.py b/var/spack/packages/thrift/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/tk/package.py b/var/spack/packages/tk/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/tmux/package.py b/var/spack/packages/tmux/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/tmuxinator/package.py b/var/spack/packages/tmuxinator/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/uncrustify/package.py b/var/spack/packages/uncrustify/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/util-linux/package.py b/var/spack/packages/util-linux/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/vim/package.py b/var/spack/packages/vim/package.py
old mode 100644
new mode 100755
index 4099b3257f..d0cf80b898
--- a/var/spack/packages/vim/package.py
+++ b/var/spack/packages/vim/package.py
@@ -35,26 +35,15 @@ 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 %s and %s specified"
-                      % (feature_set, fs))
+            tty.error("Only one feature set allowed, both {} and {} specified".format(
+              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'
 
@@ -71,12 +60,6 @@ class Vim(Package):
       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()
diff --git a/var/spack/packages/vtk/package.py b/var/spack/packages/vtk/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/wget/package.py b/var/spack/packages/wget/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/wx/package.py b/var/spack/packages/wx/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/wxpropgrid/package.py b/var/spack/packages/wxpropgrid/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/xcb-proto/package.py b/var/spack/packages/xcb-proto/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/xz/package.py b/var/spack/packages/xz/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/yasm/package.py b/var/spack/packages/yasm/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/zeromq/package.py b/var/spack/packages/zeromq/package.py
deleted file mode 100644
index b5a1e3d4cd..0000000000
--- a/var/spack/packages/zeromq/package.py
+++ /dev/null
@@ -1,20 +0,0 @@
-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")
diff --git a/var/spack/packages/zlib/package.py b/var/spack/packages/zlib/package.py
old mode 100644
new mode 100755
diff --git a/var/spack/packages/zsh/package.py b/var/spack/packages/zsh/package.py
old mode 100644
new mode 100755
-- 
cgit v1.2.3-70-g09d2


From e9f7d033ff04138905c99cb427e2071cc55cdc16 Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Sat, 3 Oct 2015 19:13:08 -0700
Subject: make sure submodule is added in the correct location

---
 .gitmodules                                 | 6 +++---
 lib/spack/spack/util/python_recipe_parser   | 1 +
 var/spack/packages/py-astropy/package.py    | 1 +
 var/spack/packages/py-jsonschema/package.py | 2 ++
 4 files changed, 7 insertions(+), 3 deletions(-)
 create mode 160000 lib/spack/spack/util/python_recipe_parser

diff --git a/.gitmodules b/.gitmodules
index 1d770f415b..d5995e8e4b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
-[submodule "/lib/spack/spack/util/python_recipe_parser"]
-	path = /lib/spack/spack/util/python_recipe_parser
-	url = https://github.com/karenyyng/spack_python_package_parser
+[submodule "lib/spack/spack/util/python_recipe_parser"]
+	path = lib/spack/spack/util/python_recipe_parser
+	url = git@github.com:karenyyng/spack_python_package_parser.git
diff --git a/lib/spack/spack/util/python_recipe_parser b/lib/spack/spack/util/python_recipe_parser
new file mode 160000
index 0000000000..6777dd98e7
--- /dev/null
+++ b/lib/spack/spack/util/python_recipe_parser
@@ -0,0 +1 @@
+Subproject commit 6777dd98e75229856d94da6671676b2a66e75986
diff --git a/var/spack/packages/py-astropy/package.py b/var/spack/packages/py-astropy/package.py
index 5d2d0619cc..9fda37519e 100644
--- a/var/spack/packages/py-astropy/package.py
+++ b/var/spack/packages/py-astropy/package.py
@@ -7,6 +7,7 @@ class PyAstropy(Package):
             url="https://pypi.python.org/packages/source/a/astropy/astropy-0.4.2.tar.gz")
 
     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-jsonschema/package.py b/var/spack/packages/py-jsonschema/package.py
index 9a7fc21862..fa233635ce 100755
--- a/var/spack/packages/py-jsonschema/package.py
+++ b/var/spack/packages/py-jsonschema/package.py
@@ -11,6 +11,8 @@ class PyJsonschema(Package):
 
     extends("python")
     depends_on("py-setuptools@18.1")
+    depends_on("py-vcversioner")
+    depends_on("py-functools32")
 
     def install(self, spec, prefix):
         python('setup.py', 'install', '--prefix=%s' % prefix)
-- 
cgit v1.2.3-70-g09d2


From f3254ff02d589c9e177aab58276f5c1971866018 Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Sat, 3 Oct 2015 19:22:53 -0700
Subject: removed package for python packages with problematic / duplicate
 names

---
 var/spack/packages/py-Cython/package.py     | 12 ------------
 var/spack/packages/py-Distutils2/package.py | 15 ---------------
 2 files changed, 27 deletions(-)
 delete mode 100644 var/spack/packages/py-Cython/package.py
 delete mode 100644 var/spack/packages/py-Distutils2/package.py

diff --git a/var/spack/packages/py-Cython/package.py b/var/spack/packages/py-Cython/package.py
deleted file mode 100644
index c250139114..0000000000
--- a/var/spack/packages/py-Cython/package.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from spack import *
-
-class PyCython(Package):
-    """The Cython compiler for writing C extensions for the Python language."""
-    homepage = "http://www.cython.org"
-    version("0.21.2", "d21adb870c75680dc857cd05d41046a4",
-            url="https://pypi.python.org/packages/source/C/Cython/Cython-0.21.2.tar.gz")
-
-    extends("python")
-
-    def install(self, spec, prefix):
-        python("setup.py", "install", "--prefix=%s" % prefix)
diff --git a/var/spack/packages/py-Distutils2/package.py b/var/spack/packages/py-Distutils2/package.py
deleted file mode 100644
index 8690f569fe..0000000000
--- a/var/spack/packages/py-Distutils2/package.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from spack import *
-
-class PyDistutils2(Package):
-    """Python Packaging Library."""
-    
-    homepage = "https://hg.python.org/distutils2"
-    url      = "https://pypi.python.org/packages/source/D/Distutils2/Distutils2-1.0a4.tar.gz"
-
-    version('1.0a4', '52bc9dffb394970c27e02853ae3a3241')
-
-    depends_on("python")
-
-    def install(self, spec, prefix):
-        python('setup.py', 'install', '--prefix=%s' % prefix)
-
-- 
cgit v1.2.3-70-g09d2


From c809cc92735c7ff57dab2aca02bc7fa40c901a43 Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Sat, 3 Oct 2015 19:24:15 -0700
Subject: clean up package.py file and remove duplicate file

---
 var/spack/packages/py-ipython/package.py        |  4 ----
 var/spack/packages/py-ipython/package.py.backup | 27 -------------------------
 2 files changed, 31 deletions(-)
 delete mode 100755 var/spack/packages/py-ipython/package.py.backup

diff --git a/var/spack/packages/py-ipython/package.py b/var/spack/packages/py-ipython/package.py
index 3b94b71f29..225366552a 100755
--- a/var/spack/packages/py-ipython/package.py
+++ b/var/spack/packages/py-ipython/package.py
@@ -24,8 +24,4 @@ class PyIpython(Package):
     depends_on('py-jinja2')
 
     def install(self, spec, prefix):
-        import os
-        # os.system("spack activate py-setuptools@18.1")
-        # os.system("easy_install pip")
-        # os.system("pip install ipython[notebook]")
         python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/packages/py-ipython/package.py.backup b/var/spack/packages/py-ipython/package.py.backup
deleted file mode 100755
index 1ed8b57e60..0000000000
--- a/var/spack/packages/py-ipython/package.py.backup
+++ /dev/null
@@ -1,27 +0,0 @@
-from spack import *
-
-class PyIpython(Package):
-    """IPython provides a rich toolkit to help you make the most out of using Python interactively."""
-    homepage = "https://pypi.python.org/pypi/ipython"
-
-    version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf',
-            url="https://pypi.python.org/packages/source/i/ipython/ipython-2.3.1.tar.gz")
-    version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f')
-    version('3.2.1', 'f4c93d67ac4b2d4fc69df693b6f3c9e0',
-            url='https://github.com/ipython/ipython/archive/rel-3.2.1.tar.gz')
-
-    extends('python')
-    depends_on('py-pygments')
-    depends_on('py-setuptools@18.1')
-    depends_on('py-traitlets')
-    depends_on('py-pyzmq')
-    depends_on('py-pexpect')
-    depends_on('py-tornado')
-    depends_on('py-Jinja2')
-
-    def install(self, spec, prefix):
-        import os
-        # os.system("spack activate py-setuptools@18.1")
-        # os.system("easy_install pip")
-        # os.system("pip install ipython[notebook]")
-        python('setup.py', 'install', '--prefix=%s' % prefix)
-- 
cgit v1.2.3-70-g09d2


From f4e72f33c8ba988507aba667e318d1861c7b2b20 Mon Sep 17 00:00:00 2001
From: karenyyng <karen.yyng@gmail.com>
Date: Mon, 5 Oct 2015 08:24:33 -0700
Subject: added dependencies for py-h5py

---
 lib/spack/spack/util/python_recipe_parser | 2 +-
 var/spack/packages/py-h5py/package.py     | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/spack/spack/util/python_recipe_parser b/lib/spack/spack/util/python_recipe_parser
index 6777dd98e7..437a62abb3 160000
--- a/lib/spack/spack/util/python_recipe_parser
+++ b/lib/spack/spack/util/python_recipe_parser
@@ -1 +1 @@
-Subproject commit 6777dd98e75229856d94da6671676b2a66e75986
+Subproject commit 437a62abb3df7212e3ee20269c0089a0a9766fe0
diff --git a/var/spack/packages/py-h5py/package.py b/var/spack/packages/py-h5py/package.py
index 6293da5407..04072ca76b 100755
--- a/var/spack/packages/py-h5py/package.py
+++ b/var/spack/packages/py-h5py/package.py
@@ -13,6 +13,8 @@ class PyH5py(Package):
     depends_on('hdf5')
     depends_on('py-numpy')
     depends_on('py-cython')
+    depends_on('py-six')
+    depends_on('py-pkgconfig')
 
     def install(self, spec, prefix):
         python('setup.py', 'configure', '--hdf5=%s' % spec['hdf5'].prefix)
-- 
cgit v1.2.3-70-g09d2


From b6d2a12ceb090692aa2be363b46d7f25486c0245 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 7 Oct 2015 15:57:29 -0700
Subject: Started changing the find in modules method written by Todd

---
 lib/spack/spack/compiler.py | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/spack/spack/compiler.py b/lib/spack/spack/compiler.py
index e7d450ee8b..cbe6d8cd7d 100644
--- a/lib/spack/spack/compiler.py
+++ b/lib/spack/spack/compiler.py
@@ -272,9 +272,11 @@ class Compiler(object):
         if cls.PrgEnv:
             if not cls.PrgEnv_compiler:
                 tty.die('Must supply PrgEnv_compiler with PrgEnv')
-
-            output = _shell('module avail %s' % cls.PrgEnv_compiler)
-            matches = re.findall(r'(%s)/([^\s(]*)' % cls.PrgEnv_compiler, output)
+            
+            loaded_modules = os.environ["LOADEDMODULES"].split(":")
+            #output = _shell('module avail %s' % cls.PrgEnv_compiler)
+            for module in loaded_modules:
+                match = re.findall(r'(%s)/([^\s(]*)' % cls.PrgEnv_compiler, module)
 
             for name, version in matches:
                 v = version + '-craype'
-- 
cgit v1.2.3-70-g09d2


From 4f21344e87da327b4166fff1fd2ce32afaa07dbc Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 14 Oct 2015 19:41:07 -0700
Subject: Started created the Architecture class for Spack to use

---
 lib/spack/spack/architecture.py | 73 ++++++++++++++++++++++++++++++++---------
 1 file changed, 57 insertions(+), 16 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 0c4b605e91..829aaa4c1c 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -30,7 +30,7 @@ from llnl.util.lang import memoized
 import spack
 import spack.error as serr
 from spack.version import Version
-
+from external import yaml
 
 class InvalidSysTypeError(serr.SpackError):
     def __init__(self, sys_type):
@@ -43,41 +43,81 @@ class NoSysTypeError(serr.SpackError):
         super(NoSysTypeError, self).__init__(
             "Could not determine sys_type for this machine.")
 
+class Architecture(object):
+    def __init__(self, *arch_name):
+        
+        """ Constructor for the architecture class. Should return a dictionary of name (grabbed from uname) and a strategy for 
+            searching for that architecture's compiler. The target passed to it should be a dictionary of names and strategies.
+        """
+        self.arch_dict = {}
+        self.arch_name = arch_name
+
+    def add_arch_strategy(self):
+        """ Create a dictionary using the tuples of arch_names"""
+        for n in self.arch_name:
+            if 'cray' in n.lower():
+                self.arch_dict[n] = "MODULES"
+            if 'linux' in n.lower() or 'x86_64' in n.lower():
+                self.arch_dict[n] = "PATH"
+            else:
+                self.arch_dict[n] = None 
 
 def get_sys_type_from_spack_globals():
-    """Return the SYS_TYPE from spack globals, or None if it isn't set."""
+    """Return the SYS_TYPE from spack globals, or None if it isn't set. Front-end"""
     if not hasattr(spack, "sys_type"):
-        return None
+        return None 
     elif hasattr(spack.sys_type, "__call__"):
-        return spack.sys_type()
+        return Architecture(spack.sys_type())
     else:
-        return spack.sys_type
-
-
-def get_sys_type_from_environment():
-    """Return $SYS_TYPE or None if it's not defined."""
-    return os.environ.get('SYS_TYPE')
+        return Architecture(spack.sys_type)
 
+# This is livermore dependent. Hard coded for livermore
+#def get_sys_type_from_environment():
+#    """Return $SYS_TYPE or None if it's not defined."""
+#    return os.environ.get('SYS_TYPE')
 
 def get_mac_sys_type():
-    """Return a Mac OS SYS_TYPE or None if this isn't a mac."""
+    """Return a Mac OS SYS_TYPE or None if this isn't a mac.
+       Front-end config
+    """
+
     mac_ver = py_platform.mac_ver()[0]
     if not mac_ver:
         return None
 
-    return "macosx_%s_%s" % (
-        Version(mac_ver).up_to(2), py_platform.machine())
-
+    return Architecture("macosx_%s_%s" % (Version(mac_ver).up_to(2), py_platform.machine()))
+
+def get_sys_type_from_uname():
+    """ Returns a sys_type from the uname argument 
+        Front-end config
+    """
+    return Architecture(os.uname()[0] + " " + os.uname()[-1])
+
+def get_sys_type_from_config_file():
+    """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
+        The user can specify that the architecture is a cray-xc40
+    """
+      
+    home_dir = os.environ["HOME"]   
+    yaml_file = os.path.join(home_dir, ".spack/architecture.yaml")
+    if os.path.isfile(yaml_file):
+        with open(yaml_file) as config:
+            config_dict = config['architecture']
+            front_end = config_dict['front']            
+            back_end = config_dict['back']
+    return Architecture(front_end)
 
 @memoized
 def sys_type():
-    """Returns a SysType for the current machine."""
+    """Returns a SysType for the current machine. Should return output to an 
+       Architecture class
+    """
     methods = [get_sys_type_from_spack_globals,
                get_sys_type_from_environment,
                get_mac_sys_type]
 
     # search for a method that doesn't return None
-    sys_type = None
+    sys_type = (None,None)
     for method in methods:
         sys_type = method()
         if sys_type: break
@@ -90,3 +130,4 @@ def sys_type():
         raise InvalidSysTypeError(sys_type)
 
     return sys_type
+
-- 
cgit v1.2.3-70-g09d2


From 29e03ac851f807e9fb5aefb687902e703d208615 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 15 Oct 2015 12:46:44 -0700
Subject: Added __eq__ testing method. Created tests for it in test/ folder

---
 lib/spack/spack/architecture.py | 56 +++++++++++++++++++++++++++++------------
 1 file changed, 40 insertions(+), 16 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 829aaa4c1c..97c2cdbd6d 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -57,10 +57,20 @@ class Architecture(object):
         for n in self.arch_name:
             if 'cray' in n.lower():
                 self.arch_dict[n] = "MODULES"
-            if 'linux' in n.lower() or 'x86_64' in n.lower():
+            elif 'linux' in n.lower() or 'x86_64' in n.lower():
                 self.arch_dict[n] = "PATH"
             else:
                 self.arch_dict[n] = None 
+    
+    def get_arch_dict(self):
+        """ Grab the dictionary from the Architecture class, rather than access the internal Architecture attributes """
+        return self.arch_dict
+    
+    def __eq__(self, other):
+        if self.arch_dict != {} and other.arch_dict != {}:
+            return self.arch_dict == other.arch_dict
+        else:
+            return self.arch_name == self.arch_name
 
 def get_sys_type_from_spack_globals():
     """Return the SYS_TYPE from spack globals, or None if it isn't set. Front-end"""
@@ -95,29 +105,43 @@ def get_sys_type_from_uname():
 
 def get_sys_type_from_config_file():
     """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
-        The user can specify that the architecture is a cray-xc40
+        The user can specify that the architecture is a cray-xc40. A template yaml should be created when spack 
+        is installed. Similar to .spackconfig
     """
       
-    home_dir = os.environ["HOME"]   
-    yaml_file = os.path.join(home_dir, ".spack/architecture.yaml")
-    if os.path.isfile(yaml_file):
-        with open(yaml_file) as config:
-            config_dict = config['architecture']
-            front_end = config_dict['front']            
-            back_end = config_dict['back']
-    return Architecture(front_end)
+    spack_home_dir = os.environ["HOME"] + "/.spack" 
+    yaml_file = os.path.join(spack_home_dir, "architecture.yaml")
+    
+    try:
+        config_dict = yaml.load(open(yaml_file))  # Fix this to have yaml.load()
+        arch = config_dict['architecture']
+        front = arch['front']
+        back = arch['back']
+    
+    except:
+        print "No architecture.yaml config file found"
+    
+    return Architecture(front,back)
 
 @memoized
 def sys_type():
-    """Returns a SysType for the current machine. Should return output to an 
-       Architecture class
+    """Priority of gathering sys-type.
+       1. YAML file that the user specifies the name of the architecture. e.g Cray-XC40 or Cray-XC30
+       2. UNAME
+       3. GLOBALS
+       4. MAC OSX
+       Yaml should be a priority here because we want the user to be able to specify the type of architecture to use.
+       If there is no yaml present then it should move on to the next function and stop immediately once it gets a 
+       arch name
+
     """
-    methods = [get_sys_type_from_spack_globals,
-               get_sys_type_from_environment,
-               get_mac_sys_type]
+    methods = [get_sys_type_from_config_file, 
+              get_sys_type_from_uname, 
+              get_sys_type_from_spack_globals,
+              get_mac_sys_type]
 
     # search for a method that doesn't return None
-    sys_type = (None,None)
+    sys_type = None
     for method in methods:
         sys_type = method()
         if sys_type: break
-- 
cgit v1.2.3-70-g09d2


From d328f4c3b631e59ed14f52cf38f3d05774100c15 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 15 Oct 2015 12:47:26 -0700
Subject: Test suite for architecture class and functions

---
 lib/spack/spack/test/architecture.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 lib/spack/spack/test/architecture.py

diff --git a/lib/spack/spack/test/architecture.py b/lib/spack/spack/test/architecture.py
new file mode 100644
index 0000000000..6ff22aaa59
--- /dev/null
+++ b/lib/spack/spack/test/architecture.py
@@ -0,0 +1,19 @@
+""" Test checks if the architecture class is created correctly and also that
+    the functions are looking for the correct architecture name
+"""
+import unittest
+import spack
+from spack.architecture import *
+
+class ArchitectureTest(unittest.TestCase):
+
+    def test_Architecture_class(self):
+        a = Architecture('Cray-XC40')
+        a.add_arch_strategy()
+        self.assertEquals(a.get_arch_dict(), {'Cray-XC40': 'MODULES'})
+
+    def test_get_sys_type_from_config_file(self):
+        output_arch_class = get_sys_type_from_config_file()
+        my_arch_class = Architecture('Linux x86_64','Cray-xc40')
+
+        self.assertEqual(output_arch_class, my_arch_class)
-- 
cgit v1.2.3-70-g09d2


From ccdf1057592b48e13ba3b98df9972324e91d0be8 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 15 Oct 2015 12:48:12 -0700
Subject: Commented out a long list of tests to just include my arch test

---
 lib/spack/spack/test/__init__.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/spack/spack/test/__init__.py b/lib/spack/spack/test/__init__.py
index 6b3715be6f..ed51fac33a 100644
--- a/lib/spack/spack/test/__init__.py
+++ b/lib/spack/spack/test/__init__.py
@@ -31,7 +31,8 @@ from llnl.util.tty.colify import colify
 import spack
 
 """Names of tests to be included in Spack's test suite"""
-test_names = ['versions',
+"""test_names = ['architecture',
+              'versions',
               'url_parse',
               'url_substitution',
               'packages',
@@ -57,7 +58,8 @@ test_names = ['versions',
               'optional_deps',
               'make_executable',
               'configure_guess']
-
+"""
+test_names = ['architecture']
 
 def list_tests():
     """Return names of all tests that can be run for Spack."""
-- 
cgit v1.2.3-70-g09d2


From fec197ccac94af485745b6b40d8150b4ae030e99 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 15 Oct 2015 15:25:13 -0700
Subject: Fixed the output of sys_type(), might need to add back the error
 handling part

---
 lib/spack/spack/architecture.py | 47 ++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 24 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 97c2cdbd6d..8f74fbc2e1 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -60,7 +60,7 @@ class Architecture(object):
             elif 'linux' in n.lower() or 'x86_64' in n.lower():
                 self.arch_dict[n] = "PATH"
             else:
-                self.arch_dict[n] = None 
+                self.arch_dict[n] = "" 
     
     def get_arch_dict(self):
         """ Grab the dictionary from the Architecture class, rather than access the internal Architecture attributes """
@@ -72,6 +72,7 @@ class Architecture(object):
         else:
             return self.arch_name == self.arch_name
 
+
 def get_sys_type_from_spack_globals():
     """Return the SYS_TYPE from spack globals, or None if it isn't set. Front-end"""
     if not hasattr(spack, "sys_type"):
@@ -86,6 +87,7 @@ def get_sys_type_from_spack_globals():
 #    """Return $SYS_TYPE or None if it's not defined."""
 #    return os.environ.get('SYS_TYPE')
 
+
 def get_mac_sys_type():
     """Return a Mac OS SYS_TYPE or None if this isn't a mac.
        Front-end config
@@ -97,12 +99,14 @@ def get_mac_sys_type():
 
     return Architecture("macosx_%s_%s" % (Version(mac_ver).up_to(2), py_platform.machine()))
 
+
 def get_sys_type_from_uname():
     """ Returns a sys_type from the uname argument 
         Front-end config
     """
     return Architecture(os.uname()[0] + " " + os.uname()[-1])
 
+
 def get_sys_type_from_config_file():
     """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
         The user can specify that the architecture is a cray-xc40. A template yaml should be created when spack 
@@ -110,21 +114,22 @@ def get_sys_type_from_config_file():
     """
       
     spack_home_dir = os.environ["HOME"] + "/.spack" 
-    yaml_file = os.path.join(spack_home_dir, "architecture.yaml")
+    yaml_file = os.path.join(spack_home_dir, 'architecture.yaml')
     
     try:
         config_dict = yaml.load(open(yaml_file))  # Fix this to have yaml.load()
         arch = config_dict['architecture']
         front = arch['front']
         back = arch['back']
+        return Architecture(front,back)
     
     except:
         print "No architecture.yaml config file found"
-    
-    return Architecture(front,back)
+        return None
+
 
 @memoized
-def sys_type():
+def sys_type(): # This function is going to give me issues isn't it??
     """Priority of gathering sys-type.
        1. YAML file that the user specifies the name of the architecture. e.g Cray-XC40 or Cray-XC30
        2. UNAME
@@ -133,25 +138,19 @@ def sys_type():
        Yaml should be a priority here because we want the user to be able to specify the type of architecture to use.
        If there is no yaml present then it should move on to the next function and stop immediately once it gets a 
        arch name
-
     """
-    methods = [get_sys_type_from_config_file, 
-              get_sys_type_from_uname, 
-              get_sys_type_from_spack_globals,
-              get_mac_sys_type]
-
-    # search for a method that doesn't return None
-    sys_type = None
-    for method in methods:
-        sys_type = method()
-        if sys_type: break
-
-    # Couldn't determine the sys_type for this machine.
-    if sys_type is None:
-        return "unknown_arch"
-
-    if not isinstance(sys_type, basestring):
-        raise InvalidSysTypeError(sys_type)
-
+    # Try to create an architecture object using the config file FIRST
+    functions = [get_sys_type_from_config_file,
+                 get_sys_type_from_uname, 
+                 get_sys_type_from_spack_globals,
+                 get_mac_sys_type]
+    
+    # TODO: Test for mac OSX system type but I'm sure it will be okay
+    for func in functions:
+        sys_type = None
+        sys_type = func()
+        if sys_type:
+            break
+    
     return sys_type
 
-- 
cgit v1.2.3-70-g09d2


From 3ba2842b53752e9a3ec8766f3a1350c6cc7577a2 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Tue, 20 Oct 2015 13:33:21 -0700
Subject: Got Architecture class working the way i wanted to. Next to write
 tests

---
 lib/spack/spack/architecture.py | 70 ++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 33 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 8f74fbc2e1..1a9f9de2cb 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -34,47 +34,50 @@ from external import yaml
 
 class InvalidSysTypeError(serr.SpackError):
     def __init__(self, sys_type):
-        super(InvalidSysTypeError, self).__init__(
-            "Invalid sys_type value for Spack: " + sys_type)
+        super(InvalidSysTypeError, self).__init__("Invalid sys_type value for Spack: " + sys_type)
 
 
 class NoSysTypeError(serr.SpackError):
     def __init__(self):
-        super(NoSysTypeError, self).__init__(
-            "Could not determine sys_type for this machine.")
+        super(NoSysTypeError, self).__init__("Could not determine sys_type for this machine.")
+
 
 class Architecture(object):
-    def __init__(self, *arch_name):
+    """ Architecture class that contains a dictionary of architecture name and compiler search strategy methods.
+        The idea is to create an object that Spack can interact with and know how to search for the compiler
+        If it is on a Cray architecture it should look in modules. If it is anything else search $PATH.
+    """
+    
+    def __init__(self, front=None, back=None):
         
-        """ Constructor for the architecture class. Should return a dictionary of name (grabbed from uname) and a strategy for 
-            searching for that architecture's compiler. The target passed to it should be a dictionary of names and strategies.
+        """ Constructor for the architecture class. Should return a dictionary of name (grabbed from uname) 
+            and a strategy for searching for that architecture's compiler. 
+            The target passed to it should be a dictionary of names and strategies.
         """
-        self.arch_dict = {}
-        self.arch_name = arch_name
-
-    def add_arch_strategy(self):
-        """ Create a dictionary using the tuples of arch_names"""
-        for n in self.arch_name:
-            if 'cray' in n.lower():
-                self.arch_dict[n] = "MODULES"
-            elif 'linux' in n.lower() or 'x86_64' in n.lower():
-                self.arch_dict[n] = "PATH"
-            else:
-                self.arch_dict[n] = "" 
-    
-    def get_arch_dict(self):
-        """ Grab the dictionary from the Architecture class, rather than access the internal Architecture attributes """
-        return self.arch_dict
-    
-    def __eq__(self, other):
-        if self.arch_dict != {} and other.arch_dict != {}:
-            return self.arch_dict == other.arch_dict
-        else:
-            return self.arch_name == self.arch_name
-
+        names = []
+        names.append(front)
+        names.append(back)
+
+        def add_compiler_strategy(names):
+            """ Create a dictionary of {'arch-name': 'strategy'}
+                This will tell Spack whether to look in the $PATH
+                or $MODULES location for compilers
+            """
+            d = {}
+            for n in names:
+                if n:
+                    if 'cray' in n.lower():
+                        d[n] = "MODULES"
+                    elif 'linux' in n.lower():
+                        d[n] = "PATH"
+                    else:
+                        d[n] = 'No Strategy'
+            return d
+        
+        self.arch_dict = add_compiler_strategy(names)
 
-def get_sys_type_from_spack_globals():
-    """Return the SYS_TYPE from spack globals, or None if it isn't set. Front-end"""
+def get_sys_type_from_spack_globals(): #TODO: Figure out how this function works
+    """Return the SYS_TYPE from spack globals, or None if it isn't set."""
     if not hasattr(spack, "sys_type"):
         return None 
     elif hasattr(spack.sys_type, "__call__"):
@@ -104,7 +107,7 @@ def get_sys_type_from_uname():
     """ Returns a sys_type from the uname argument 
         Front-end config
     """
-    return Architecture(os.uname()[0] + " " + os.uname()[-1])
+    return Architecture(os.uname()[0])
 
 
 def get_sys_type_from_config_file():
@@ -149,6 +152,7 @@ def sys_type(): # This function is going to give me issues isn't it??
     for func in functions:
         sys_type = None
         sys_type = func()
+        
         if sys_type:
             break
     
-- 
cgit v1.2.3-70-g09d2


From ca3cc5b23e94b8168ba768ad343822b39aac4a25 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Tue, 20 Oct 2015 13:37:06 -0700
Subject: Refactored architecture class. Now it will automagically create a
 dict upon instantiation.

---
 lib/spack/spack/architecture.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 1a9f9de2cb..760c9cddd1 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -49,7 +49,6 @@ class Architecture(object):
     """
     
     def __init__(self, front=None, back=None):
-        
         """ Constructor for the architecture class. Should return a dictionary of name (grabbed from uname) 
             and a strategy for searching for that architecture's compiler. 
             The target passed to it should be a dictionary of names and strategies.
@@ -63,6 +62,7 @@ class Architecture(object):
                 This will tell Spack whether to look in the $PATH
                 or $MODULES location for compilers
             """
+            #TODO: Look for other strategies
             d = {}
             for n in names:
                 if n:
@@ -76,21 +76,20 @@ class Architecture(object):
         
         self.arch_dict = add_compiler_strategy(names)
 
-def get_sys_type_from_spack_globals(): #TODO: Figure out how this function works
+def get_sys_type_from_spack_globals():
     """Return the SYS_TYPE from spack globals, or None if it isn't set."""
     if not hasattr(spack, "sys_type"):
         return None 
     elif hasattr(spack.sys_type, "__call__"):
-        return Architecture(spack.sys_type())
+        return Architecture(spack.sys_type()) #If in __init__.py there is a sys_type() then call that
     else:
-        return Architecture(spack.sys_type)
+        return Architecture(spack.sys_type) # Else use the attributed which defaults to None
 
 # This is livermore dependent. Hard coded for livermore
 #def get_sys_type_from_environment():
 #    """Return $SYS_TYPE or None if it's not defined."""
 #    return os.environ.get('SYS_TYPE')
 
-
 def get_mac_sys_type():
     """Return a Mac OS SYS_TYPE or None if this isn't a mac.
        Front-end config
-- 
cgit v1.2.3-70-g09d2


From c31da9bc8f10c3a74b3bf26c2dbac9a13c073eba Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Tue, 20 Oct 2015 14:10:54 -0700
Subject: Made sure architecture works with yaml file

---
 lib/spack/spack/architecture.py | 46 ++++++++++++++++++++++++-----------------
 1 file changed, 27 insertions(+), 19 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 760c9cddd1..8460b0de1e 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -49,18 +49,24 @@ class Architecture(object):
     """
     
     def __init__(self, front=None, back=None):
-        """ Constructor for the architecture class. Should return a dictionary of name (grabbed from uname) 
-            and a strategy for searching for that architecture's compiler. 
-            The target passed to it should be a dictionary of names and strategies.
+        """ Constructor for the architecture class. It will create a list from the given arguments and iterate
+            through that list. It will then create a dictionary of {arch_name : strategy}
+            Takes in two parameters:
+
+            front = None     defaults to None. Should be the front-end architecture of the machine
+            back = None      defaults to None. Should be the back-end architecture of the machine
+        
+            If no arguments are given it will return an empty dictionary
         """
-        names = []
-        names.append(front)
-        names.append(back)
+        _names = []
+        _names.append(front)
+        _names.append(back)
 
-        def add_compiler_strategy(names):
+        def _add_compiler_strategy(names):
             """ Create a dictionary of {'arch-name': 'strategy'}
                 This will tell Spack whether to look in the $PATH
                 or $MODULES location for compilers
+                Else it will return No Strategy
             """
             #TODO: Look for other strategies
             d = {}
@@ -74,7 +80,7 @@ class Architecture(object):
                         d[n] = 'No Strategy'
             return d
         
-        self.arch_dict = add_compiler_strategy(names)
+        self.arch_dict = _add_compiler_strategy(_names)
 
 def get_sys_type_from_spack_globals():
     """Return the SYS_TYPE from spack globals, or None if it isn't set."""
@@ -85,20 +91,20 @@ def get_sys_type_from_spack_globals():
     else:
         return Architecture(spack.sys_type) # Else use the attributed which defaults to None
 
+
 # This is livermore dependent. Hard coded for livermore
 #def get_sys_type_from_environment():
 #    """Return $SYS_TYPE or None if it's not defined."""
 #    return os.environ.get('SYS_TYPE')
 
+
 def get_mac_sys_type():
     """Return a Mac OS SYS_TYPE or None if this isn't a mac.
        Front-end config
     """
-
     mac_ver = py_platform.mac_ver()[0]
     if not mac_ver:
         return None
-
     return Architecture("macosx_%s_%s" % (Version(mac_ver).up_to(2), py_platform.machine()))
 
 
@@ -113,11 +119,9 @@ def get_sys_type_from_config_file():
     """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
         The user can specify that the architecture is a cray-xc40. A template yaml should be created when spack 
         is installed. Similar to .spackconfig
-    """
-      
+    """ 
     spack_home_dir = os.environ["HOME"] + "/.spack" 
     yaml_file = os.path.join(spack_home_dir, 'architecture.yaml')
-    
     try:
         config_dict = yaml.load(open(yaml_file))  # Fix this to have yaml.load()
         arch = config_dict['architecture']
@@ -131,7 +135,7 @@ def get_sys_type_from_config_file():
 
 
 @memoized
-def sys_type(): # This function is going to give me issues isn't it??
+def sys_type():
     """Priority of gathering sys-type.
        1. YAML file that the user specifies the name of the architecture. e.g Cray-XC40 or Cray-XC30
        2. UNAME
@@ -146,14 +150,18 @@ def sys_type(): # This function is going to give me issues isn't it??
                  get_sys_type_from_uname, 
                  get_sys_type_from_spack_globals,
                  get_mac_sys_type]
-    
-    # TODO: Test for mac OSX system type but I'm sure it will be okay
+   
+    sys_type = None 
     for func in functions:
-        sys_type = None
         sys_type = func()
-        
         if sys_type:
-            break
+            break 
     
+    if sys_type is None:
+        return Architecture("unknown_arch")
+
+    if not isinstance(sys_type, Architecture):
+        raise InvalidSysTypeError(sys_type)
+
     return sys_type
 
-- 
cgit v1.2.3-70-g09d2


From 9b387e7682c22b74661e3363442adcfb569d8680 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 21 Oct 2015 11:09:05 -0700
Subject: Added strategy method in init

---
 lib/spack/spack/architecture.py | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 8460b0de1e..3968b82124 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -57,18 +57,13 @@ class Architecture(object):
             back = None      defaults to None. Should be the back-end architecture of the machine
         
             If no arguments are given it will return an empty dictionary
+            Uses the _add_compiler_strategy(front, back) to create the dictionary
         """
-        _names = []
-        _names.append(front)
-        _names.append(back)
-
-        def _add_compiler_strategy(names):
-            """ Create a dictionary of {'arch-name': 'strategy'}
-                This will tell Spack whether to look in the $PATH
-                or $MODULES location for compilers
-                Else it will return No Strategy
-            """
-            #TODO: Look for other strategies
+        
+        def _add_compiler_strategy(front,back):
+            names = []
+            names.append(front) 
+            names.append(back) 
             d = {}
             for n in names:
                 if n:
@@ -80,7 +75,8 @@ class Architecture(object):
                         d[n] = 'No Strategy'
             return d
         
-        self.arch_dict = _add_compiler_strategy(_names)
+        self.arch_dict = _add_compiler_strategy(front, back)
+
 
 def get_sys_type_from_spack_globals():
     """Return the SYS_TYPE from spack globals, or None if it isn't set."""
-- 
cgit v1.2.3-70-g09d2


From a89abb435f288c2864d9a21089b20f6eaac5d98b Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 21 Oct 2015 11:32:59 -0700
Subject: Changed structure of class, add compiler strategy is a method and can
 create a dict

---
 lib/spack/spack/architecture.py | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 3968b82124..7c1bdfb20f 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -48,6 +48,21 @@ class Architecture(object):
         If it is on a Cray architecture it should look in modules. If it is anything else search $PATH.
     """
     
+    def add_compiler_strategy(self, front,back):
+        names = []
+        names.append(front) 
+        names.append(back) 
+        d = {}
+        for n in names:
+            if n:
+                if 'cray' in n.lower():
+                    d[n] = "MODULES"
+                elif 'linux' in n.lower():
+                    d[n] = "PATH"
+                else:
+                    d[n] = 'No Strategy'
+        return d 
+        
     def __init__(self, front=None, back=None):
         """ Constructor for the architecture class. It will create a list from the given arguments and iterate
             through that list. It will then create a dictionary of {arch_name : strategy}
@@ -59,23 +74,9 @@ class Architecture(object):
             If no arguments are given it will return an empty dictionary
             Uses the _add_compiler_strategy(front, back) to create the dictionary
         """
-        
-        def _add_compiler_strategy(front,back):
-            names = []
-            names.append(front) 
-            names.append(back) 
-            d = {}
-            for n in names:
-                if n:
-                    if 'cray' in n.lower():
-                        d[n] = "MODULES"
-                    elif 'linux' in n.lower():
-                        d[n] = "PATH"
-                    else:
-                        d[n] = 'No Strategy'
-            return d
-        
-        self.arch_dict = _add_compiler_strategy(front, back)
+        self.front = front
+        self.back = back
+        self.arch_dict = self.add_compiler_strategy(front, back) 
 
 
 def get_sys_type_from_spack_globals():
-- 
cgit v1.2.3-70-g09d2


From 38508c5a3f294f730b31e209dfa90545e1920588 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 22 Oct 2015 12:02:26 -0700
Subject: Created a control flow logic that will loop through the strategies
 and find compilers using that. TODO: Need to find a way to locate their
 executables

---
 lib/spack/spack/cmd/compiler.py | 51 +++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py
index 2a64dc914e..cbe3aba864 100644
--- a/lib/spack/spack/cmd/compiler.py
+++ b/lib/spack/spack/cmd/compiler.py
@@ -29,6 +29,8 @@ from llnl.util.tty.color import colorize
 from llnl.util.tty.colify import colify
 from llnl.util.lang import index_by
 
+import spack.architecture
+import spack.compiler
 import spack.compilers
 import spack.spec
 import spack.config
@@ -36,13 +38,12 @@ from spack.util.environment import get_path
 from spack.spec import CompilerSpec
 
 description = "Manage compilers"
+ARCHITECTURE = spack.architecture.sys_type()
 
 def setup_parser(subparser):
-    sp = subparser.add_subparsers(
-        metavar='SUBCOMMAND', dest='compiler_command')
+    sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='compiler_command')
 
-    update_parser = sp.add_parser(
-        'add', help='Add compilers to the Spack configuration.')
+    update_parser = sp.add_parser('add', help='Add compilers to the Spack configuration.')
     update_parser.add_argument('add_paths', nargs=argparse.REMAINDER)
 
     remove_parser = sp.add_parser('remove', help='remove compiler')
@@ -55,23 +56,33 @@ def setup_parser(subparser):
 
 
 def compiler_add(args):
-    """Search either $PATH or a list of paths for compilers and add them
+    """Search either $PATH or a list of paths OR MODULES for compilers and add them
        to Spack's configuration."""
-    paths = args.add_paths
-    if not paths:
-        paths = get_path('PATH')
-
-    compilers = [c for c in spack.compilers.find_compilers(*args.add_paths)
-                 if c.spec not in spack.compilers.all_compilers()]
-
-    if compilers:
-        spack.compilers.add_compilers_to_config('user', *compilers)
-        n = len(compilers)
-        tty.msg("Added %d new compiler%s to %s" % (
-            n, 's' if n > 1 else '', spack.config.get_config_scope_filename('user', 'compilers')))
-        colify(reversed(sorted(c.spec for c in compilers)), indent=4)
-    else:
-        tty.msg("Found no new compilers")
+
+    strategies = ARCHITECTURE.strategy()
+    
+    for strategy in strategies:
+        if strategy == 'PATH':
+            paths = args.add_paths # This might be a parser method. Parsing method to add_paths 
+            if not paths:
+                paths = get_path('PATH')
+            
+            compilers = [c for c in spack.compilers.find_compilers(*args.add_paths)
+                        if c.spec not in spack.compilers.all_compilers()]
+        
+        elif strategy == "MODULES":
+            from spack.compilers.cray import Cray
+            compilers = Cray.find_in_modules()  
+            #TODO: Find a way to locate the executables
+
+        if compilers:
+            spack.compilers.add_compilers_to_config('user', *compilers)
+            n = len(compilers)
+            tty.msg("Added %d new compiler%s to %s" % (
+                n, 's' if n > 1 else '', spack.config.get_config_scope_filename('user', 'compilers')))
+            colify(reversed(sorted(c.spec for c in compilers)), indent=4)
+        else:
+            tty.msg("Found no new compilers")
 
 
 def compiler_remove(args):
-- 
cgit v1.2.3-70-g09d2


From 09597fe8dccbd7d49acf1b3198f24ab928874cdb Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Fri, 30 Oct 2015 09:44:28 -0700
Subject: updated the executible to return stderr when specified. Added
 load_module to build_environment.py, loads target

---
 lib/spack/spack/build_environment.py | 36 +++++++++++++++++++++++++++++-------
 lib/spack/spack/util/executable.py   | 21 ++++++++++++++++-----
 2 files changed, 45 insertions(+), 12 deletions(-)

diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index 68388958f5..191e858735 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -86,6 +86,28 @@ class MakeExecutable(Executable):
         return super(MakeExecutable, self).__call__(*args, **kwargs)
 
 
+def load_module(mod):
+    """Takes a module name and removes modules until it is possible to
+    load that module. It then loads the provided module. Depends on the 
+    modulecmd implementation of modules used in cray and lmod.
+    """
+    #Create an executable of the module command that will output python code
+    modulecmd = which('modulecmd')
+    modulecmd.add_default_arg('python')
+    
+    # Read the module and remove any conflicting modules
+    # We do this without checking that they are already installed
+    # for ease of programming because unloading a module that is not
+    # loaded does nothing.
+    text = modulecmd('show', mod, return_oe=True).split()
+    for i, word in enumerate(text):
+        if word == 'conflict':
+            exec(compile(modulecmd('unload', text[i+1], return_oe=True), '<string>', 'exec'))    
+    # Load the module now that there are no conflicts
+    load = modulecmd('load', mod, return_oe=True)
+    exec(compile(load, '<string>', 'exec'))
+
+
 def set_compiler_environment_variables(pkg):
     assert(pkg.spec.concrete)
     compiler = pkg.compiler
@@ -108,11 +130,9 @@ def set_compiler_environment_variables(pkg):
 
     os.environ['SPACK_COMPILER_SPEC']  = str(pkg.spec.compiler)
 
-    if compiler.PrgEnv:
-        os.environ['SPACK_CRAYPE']       = compiler.PrgEnv
-        os.environ['SPACK_COMP_MODULE']  = compiler.module
-
-
+    if compiler.modules:
+        for mod in compiler.modules:
+            load_module(mod)
 
 
 def set_build_environment_variables(pkg):
@@ -163,8 +183,10 @@ def set_build_environment_variables(pkg):
             pcdir = join_path(p, libdir, 'pkgconfig')
             if os.path.isdir(pcdir):
                 pkg_config_dirs.append(pcdir)
-    path_set("PKG_CONFIG_PATH", pkg_config_dirs)
+    path_put_first("PKG_CONFIG_PATH", pkg_config_dirs)
 
+    if pkg.spec.architecture.compiler_strategy.lower() == 'module':
+        load_module(pkg.spec.architecture.module_name)
 
 def set_module_variables_for_package(pkg):
     """Populate the module scope of install() with some useful functions.
@@ -239,8 +261,8 @@ def get_rpaths(pkg):
 
 def setup_package(pkg):
     """Execute all environment setup routines."""
-    set_compiler_environment_variables(pkg)
     set_build_environment_variables(pkg)
+    set_compiler_environment_variables(pkg)
     set_module_variables_for_package(pkg)
 
     # Allow dependencies to set up environment as well.
diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py
index d1dfb62ffb..15354089ac 100644
--- a/lib/spack/spack/util/executable.py
+++ b/lib/spack/spack/util/executable.py
@@ -56,7 +56,11 @@ class Executable(object):
 
     def __call__(self, *args, **kwargs):
         """Run the executable with subprocess.check_output, return output."""
-        return_output = kwargs.get("return_output", False)
+        # Return oe returns a combined stream, setting both output and error 
+        # without setting return oe returns them concatenated by a double line break
+        return_oe    = kwargs.get("return_oe", False)
+        return_output = True if return_oe else kwargs.get("return_output", False)
+        return_error  = True if return_oe else kwargs.get("return_error", False)
         fail_on_error = kwargs.get("fail_on_error", True)
         ignore_errors = kwargs.get("ignore_errors", ())
 
@@ -95,8 +99,8 @@ class Executable(object):
             proc = subprocess.Popen(
                 cmd,
                 stdin=input,
-                stderr=error,
-                stdout=subprocess.PIPE if return_output else output)
+                stdout=subprocess.PIPE if return_output else output,
+                stderr=subprocess.STDOUT if return_oe else (subprocess.PIPE if return_error else error))
             out, err = proc.communicate()
             self.returncode = proc.returncode
 
@@ -104,8 +108,15 @@ class Executable(object):
             if fail_on_error and rc != 0 and (rc not in ignore_errors):
                 raise ProcessError("Command exited with status %d:"
                                    % proc.returncode, cmd_line)
-            if return_output:
-                return out
+            # Return out or error if specified. Return combined stream if requested,
+            # otherwise return them concatenated by double line break if both requested.
+            if return_output or return_error:
+                if return_oe or not return_error:
+                    return out
+                elif return_output:
+                    return out+'\n\n'+err
+                else:
+                    return err
 
         except OSError, e:
             raise ProcessError(
-- 
cgit v1.2.3-70-g09d2


From 382d8478bf325099582b4814e0d71ff8522696aa Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Fri, 30 Oct 2015 10:23:33 -0700
Subject: prototype of new architecture concretization saved as
 new_concretize_architecture in concretize.py

---
 lib/spack/spack/concretize.py | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py
index 66002492cb..c5041d67be 100644
--- a/lib/spack/spack/concretize.py
+++ b/lib/spack/spack/concretize.py
@@ -122,6 +122,34 @@ class DefaultConcretizer(object):
         return True   # changed
 
 
+    def new_concretize_architecture(self, spec):
+        """If the spec already has an architecture and it is a an architecture type,
+        return. Otherwise, if it has an architecture that is a string type, generate an
+        architecture based on that type. If it has no architecture and the root of the
+        DAG has an architecture, then use that. Otherwise, take the system's default
+        architecture.
+        """
+        if spec.architecture is not None:
+            if isinstance(spec.architecture,spack.architecture.Target):
+                return False
+            else:
+                arch = spack.architecture.sys_type()
+                spec.architecture = arch.target(spec.architecture)
+                return True #changed
+
+        if spec.root.architecture:
+            if isinstance(spec.root.architecture,spack.architecture.Target):
+                spec.architecture = spec.root.architecture
+            else:
+                arch = spack.architecture.sys_type()
+                spec.architecture = arch.target(spec.root.architecture)
+        else:
+            arch = spack.architecture.sys_type()
+            spec.architecture = arch.target('default')
+        
+        return True #changed
+
+
     def concretize_variants(self, spec):
         """If the spec already has variants filled in, return.  Otherwise, add
            the default variants from the package specification.
-- 
cgit v1.2.3-70-g09d2


From 7ab921ff02a7d0a05287e4a49738ec9c51361ef0 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Fri, 30 Oct 2015 14:46:26 -0700
Subject: Changed architecture class and added class Target

---
 lib/spack/spack/architecture.py | 137 ++++++++++++++++++++++++----------------
 1 file changed, 83 insertions(+), 54 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 7c1bdfb20f..ea1f98e06e 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -23,11 +23,16 @@
 # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 ##############################################################################
 import os
+import imp
 import platform as py_platform
+import inspect
 
-from llnl.util.lang import memoized
+from llnl.util.lang import memoized, list_modules
+from llnl.util.filesystem import join_path
+import llnl.util.tty as tty
 
 import spack
+from spack.util.naming import mod_to_class
 import spack.error as serr
 from spack.version import Version
 from external import yaml
@@ -42,41 +47,55 @@ class NoSysTypeError(serr.SpackError):
         super(NoSysTypeError, self).__init__("Could not determine sys_type for this machine.")
 
 
+class Target(object):
+    """ This is the processor type e.g. cray-ivybridge """
+    # Front end or back end target. Target needs to know which one this is
+    # Should autodetect from the machine
+    # features of a target
+    # - a module name
+    # -a compiler finding strategy
+    # -a name
+    # architecture classes handling the aliasing for front-end, back-end and default
+
+    def __init__(self,name, module_name=None):
+        self.name = name # case of cray "ivybridge but if it's x86_64
+        self.module_name = module_name # craype-ivybridge
+
+    def compiler_strategy(self):
+        if self.module_name: # If there is a module_name given then use MODULES
+            return "MODULES"
+        else:
+            return "PATH"
+    
 class Architecture(object):
-    """ Architecture class that contains a dictionary of architecture name and compiler search strategy methods.
-        The idea is to create an object that Spack can interact with and know how to search for the compiler
-        If it is on a Cray architecture it should look in modules. If it is anything else search $PATH.
+    """ Abstract class that each type of Architecture will subclass. Will return a instance of it once it 
+        is returned
     """
-    
-    def add_compiler_strategy(self, front,back):
-        names = []
-        names.append(front) 
-        names.append(back) 
-        d = {}
-        for n in names:
-            if n:
-                if 'cray' in n.lower():
-                    d[n] = "MODULES"
-                elif 'linux' in n.lower():
-                    d[n] = "PATH"
-                else:
-                    d[n] = 'No Strategy'
-        return d 
-        
-    def __init__(self, front=None, back=None):
-        """ Constructor for the architecture class. It will create a list from the given arguments and iterate
-            through that list. It will then create a dictionary of {arch_name : strategy}
-            Takes in two parameters:
 
-            front = None     defaults to None. Should be the front-end architecture of the machine
-            back = None      defaults to None. Should be the back-end architecture of the machine
+    priority        = None # Subclass needs to set this number. This controls order in which arch is detected.
+    front           = None
+    back            = None
+    default_front   = None # The default front end target. On cray sandybridge
+    default_back    = None # The default back end target. On cray ivybridge
+
+    def __init__(self, name):
+        self.targets = {}
+        self.name = name
+
+    def add_target(self, name, target):
+        self.targets[name] = target  
         
-            If no arguments are given it will return an empty dictionary
-            Uses the _add_compiler_strategy(front, back) to create the dictionary
+    
+    @classmethod
+    def detect(self):
+        """ Subclass is responsible for implementing this method. 
+            Returns True if the architecture detects if it is the current architecture
+            and False if it's not.
         """
-        self.front = front
-        self.back = back
-        self.arch_dict = self.add_compiler_strategy(front, back) 
+        raise NotImplementedError()
+    
+    def __str__(self):
+        return self.name
 
 
 def get_sys_type_from_spack_globals():
@@ -84,9 +103,9 @@ def get_sys_type_from_spack_globals():
     if not hasattr(spack, "sys_type"):
         return None 
     elif hasattr(spack.sys_type, "__call__"):
-        return Architecture(spack.sys_type()) #If in __init__.py there is a sys_type() then call that
+        return spack.sys_type() #If in __init__.py there is a sys_type() then call that
     else:
-        return Architecture(spack.sys_type) # Else use the attributed which defaults to None
+        return spack.sys_type # Else use the attributed which defaults to None
 
 
 # This is livermore dependent. Hard coded for livermore
@@ -102,15 +121,19 @@ def get_mac_sys_type():
     mac_ver = py_platform.mac_ver()[0]
     if not mac_ver:
         return None
-    return Architecture("macosx_%s_%s" % (Version(mac_ver).up_to(2), py_platform.machine()))
+    return "macosx_%s_%s" % (Version(mac_ver).up_to(2), py_platform.machine())
 
 
 def get_sys_type_from_uname():
     """ Returns a sys_type from the uname argument 
         Front-end config
     """
-    return Architecture(os.uname()[0])
-
+    try:
+        arch_proc = subprocess.Popen(['uname', '-i'], stdout = subprocess.PIPE)
+        arch, _ = arch_proc.communicate()
+        return arch.strip()
+    except:
+        return None
 
 def get_sys_type_from_config_file():
     """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
@@ -131,34 +154,40 @@ def get_sys_type_from_config_file():
         return None
 
 
+@memoized
+def all_architectures():
+    modules = []
+    for name in list_modules(spack.arch_path):
+        mod_name = 'spack.architectures.' + name
+        path = join_path(spack.arch_path, name) + ".py"
+        mod = imp.load_source(mod_name, path)
+        class_name = mod_to_class(name)
+        if not hasattr(mod, class_name):
+            tty.die('No class %s defined in %s' % (class_name, mod_name)) 
+        cls = getattr(mod, class_name)
+        if not inspect.isclass(cls):
+            tty.die('%s.%s is not a class' % (mod_name, class_name))
+
+        modules.append(cls)
+
+    return modules
+
 @memoized
 def sys_type():
     """Priority of gathering sys-type.
        1. YAML file that the user specifies the name of the architecture. e.g Cray-XC40 or Cray-XC30
        2. UNAME
        3. GLOBALS
-       4. MAC OSX
+       4. MAC OSX 
        Yaml should be a priority here because we want the user to be able to specify the type of architecture to use.
        If there is no yaml present then it should move on to the next function and stop immediately once it gets a 
        arch name
     """
     # Try to create an architecture object using the config file FIRST
-    functions = [get_sys_type_from_config_file,
-                 get_sys_type_from_uname, 
-                 get_sys_type_from_spack_globals,
-                 get_mac_sys_type]
-   
-    sys_type = None 
-    for func in functions:
-        sys_type = func()
-        if sys_type:
-            break 
+    architecture_list = all_architectures() 
+    architecture_list.sort(key = lambda a: a.priority) 
     
-    if sys_type is None:
-        return Architecture("unknown_arch")
-
-    if not isinstance(sys_type, Architecture):
-        raise InvalidSysTypeError(sys_type)
-
-    return sys_type
+    for arch in architecture_list:
+        if arch.detect():
+            return arch()
 
-- 
cgit v1.2.3-70-g09d2


From d177184777591d21cc6a59771ed6f817960394f5 Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Fri, 30 Oct 2015 15:12:29 -0700
Subject: added target method to architecture.py and minor cleanup

---
 lib/spack/spack/architecture.py | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index ea1f98e06e..f04fda2ee9 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -58,9 +58,10 @@ class Target(object):
     # architecture classes handling the aliasing for front-end, back-end and default
 
     def __init__(self,name, module_name=None):
-        self.name = name # case of cray "ivybridge but if it's x86_64
+        self.name = name # case of cray "ivybridge" but if it's x86_64
         self.module_name = module_name # craype-ivybridge
 
+    @property
     def compiler_strategy(self):
         if self.module_name: # If there is a module_name given then use MODULES
             return "MODULES"
@@ -73,10 +74,9 @@ class Architecture(object):
     """
 
     priority        = None # Subclass needs to set this number. This controls order in which arch is detected.
-    front           = None
-    back            = None
-    default_front   = None # The default front end target. On cray sandybridge
-    default_back    = None # The default back end target. On cray ivybridge
+    front-end       = None
+    back-end        = None
+    default         = None # The default back end target. On cray ivybridge
 
     def __init__(self, name):
         self.targets = {}
@@ -85,7 +85,19 @@ class Architecture(object):
     def add_target(self, name, target):
         self.targets[name] = target  
         
-    
+    def target(self, name):
+        """This is a getter method for the target dictionary that handles defaulting based
+        on the values provided by default, front-end, and back-end. This can be overwritten
+        by a subclass for which we want to provide further aliasing options.
+        """
+        if name == 'default':
+            name = default
+        elif name == 'front_end':
+            name = front-end
+        elif name == 'back_end':
+            name = back-end
+        return self.targets[name]
+
     @classmethod
     def detect(self):
         """ Subclass is responsible for implementing this method. 
-- 
cgit v1.2.3-70-g09d2


From 6e560703862794632176733a1d063550215dc573 Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Fri, 30 Oct 2015 15:15:36 -0700
Subject: improved aliasing in target method in architecture.py

---
 lib/spack/spack/architecture.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index f04fda2ee9..3f38540c0e 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -92,9 +92,9 @@ class Architecture(object):
         """
         if name == 'default':
             name = default
-        elif name == 'front_end':
+        elif name == 'front_end' or name == 'fe':
             name = front-end
-        elif name == 'back_end':
+        elif name == 'back_end' or name == 'be':
             name = back-end
         return self.targets[name]
 
-- 
cgit v1.2.3-70-g09d2


From db0695e46a6c6fd4d2ac10dba04f7feb18c25a39 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Fri, 30 Oct 2015 15:57:00 -0700
Subject: architectures folder where the Architecture subclasses reside

---
 lib/spack/spack/architectures/__init__.py |  0
 lib/spack/spack/architectures/cray.py     | 17 +++++++++++++++++
 2 files changed, 17 insertions(+)
 create mode 100644 lib/spack/spack/architectures/__init__.py
 create mode 100644 lib/spack/spack/architectures/cray.py

diff --git a/lib/spack/spack/architectures/__init__.py b/lib/spack/spack/architectures/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/lib/spack/spack/architectures/cray.py b/lib/spack/spack/architectures/cray.py
new file mode 100644
index 0000000000..e6d6d84922
--- /dev/null
+++ b/lib/spack/spack/architectures/cray.py
@@ -0,0 +1,17 @@
+import os
+
+from spack.architecture import Architecture
+
+class Cray(Architecture):
+    priority    = 20
+    front_end   = None
+    back_end    = None
+    default     = None
+
+    def __init__(self):
+        super(Cray, self).__init__('cray')
+
+    @classmethod
+    def detect(self):
+        return os.path.exists('/opt/cray/craype')
+    
-- 
cgit v1.2.3-70-g09d2


From 2d87bb92edb95cf1c9ec7d58f5d8a34e44bd11a4 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Fri, 30 Oct 2015 15:58:20 -0700
Subject: Changed front-end and back-end to front_end and back_end to avoid
 error

---
 lib/spack/spack/architecture.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 3f38540c0e..f488b65cc6 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -74,8 +74,8 @@ class Architecture(object):
     """
 
     priority        = None # Subclass needs to set this number. This controls order in which arch is detected.
-    front-end       = None
-    back-end        = None
+    front_end       = None
+    back_end        = None
     default         = None # The default back end target. On cray ivybridge
 
     def __init__(self, name):
-- 
cgit v1.2.3-70-g09d2


From e39586c81da152e8d02fd26bf48c66e00e26519a Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Fri, 30 Oct 2015 15:58:49 -0700
Subject: Reverted back all architecture way of finding modules

---
 lib/spack/spack/cmd/compiler.py | 40 ++++++++++++++++------------------------
 1 file changed, 16 insertions(+), 24 deletions(-)

diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py
index cbe3aba864..3e86928977 100644
--- a/lib/spack/spack/cmd/compiler.py
+++ b/lib/spack/spack/cmd/compiler.py
@@ -38,7 +38,6 @@ from spack.util.environment import get_path
 from spack.spec import CompilerSpec
 
 description = "Manage compilers"
-ARCHITECTURE = spack.architecture.sys_type()
 
 def setup_parser(subparser):
     sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='compiler_command')
@@ -59,30 +58,23 @@ def compiler_add(args):
     """Search either $PATH or a list of paths OR MODULES for compilers and add them
        to Spack's configuration."""
 
-    strategies = ARCHITECTURE.strategy()
     
-    for strategy in strategies:
-        if strategy == 'PATH':
-            paths = args.add_paths # This might be a parser method. Parsing method to add_paths 
-            if not paths:
-                paths = get_path('PATH')
-            
-            compilers = [c for c in spack.compilers.find_compilers(*args.add_paths)
-                        if c.spec not in spack.compilers.all_compilers()]
-        
-        elif strategy == "MODULES":
-            from spack.compilers.cray import Cray
-            compilers = Cray.find_in_modules()  
-            #TODO: Find a way to locate the executables
-
-        if compilers:
-            spack.compilers.add_compilers_to_config('user', *compilers)
-            n = len(compilers)
-            tty.msg("Added %d new compiler%s to %s" % (
-                n, 's' if n > 1 else '', spack.config.get_config_scope_filename('user', 'compilers')))
-            colify(reversed(sorted(c.spec for c in compilers)), indent=4)
-        else:
-            tty.msg("Found no new compilers")
+    paths = args.add_paths # This might be a parser method. Parsing method to add_paths 
+    if not paths:
+        paths = get_path('PATH')
+    
+    compilers = [c for c in spack.compilers.find_compilers(*args.add_paths)
+                if c.spec not in spack.compilers.all_compilers()]
+
+
+    if compilers:
+        spack.compilers.add_compilers_to_config('user', *compilers)
+        n = len(compilers)
+        tty.msg("Added %d new compiler%s to %s" % (
+            n, 's' if n > 1 else '', spack.config.get_config_scope_filename('user', 'compilers')))
+        colify(reversed(sorted(c.spec for c in compilers)), indent=4)
+    else:
+        tty.msg("Found no new compilers")
 
 
 def compiler_remove(args):
-- 
cgit v1.2.3-70-g09d2


From 9a91da9ccd8044e147a416fcfa9b16405ef22b3d Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Fri, 30 Oct 2015 15:59:28 -0700
Subject: Added arch_path to list of modules path

---
 lib/spack/spack/__init__.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py
index caa09eb6e0..0f23f61614 100644
--- a/lib/spack/spack/__init__.py
+++ b/lib/spack/spack/__init__.py
@@ -37,6 +37,7 @@ etc_path       = join_path(prefix, "etc")
 lib_path       = join_path(prefix, "lib", "spack")
 build_env_path = join_path(lib_path, "env")
 module_path    = join_path(lib_path, "spack")
+arch_path      = join_path(module_path, 'architectures')
 compilers_path = join_path(module_path, "compilers")
 test_path      = join_path(module_path, "test")
 hooks_path     = join_path(module_path, "hooks")
-- 
cgit v1.2.3-70-g09d2


From eb2cf1698fa8cd606a8b80bcb39de2ee0b724c69 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Mon, 2 Nov 2015 11:08:08 -0800
Subject: Fixed some issues with naming

---
 lib/spack/spack/architecture.py | 23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index f488b65cc6..442180242b 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -49,13 +49,6 @@ class NoSysTypeError(serr.SpackError):
 
 class Target(object):
     """ This is the processor type e.g. cray-ivybridge """
-    # Front end or back end target. Target needs to know which one this is
-    # Should autodetect from the machine
-    # features of a target
-    # - a module name
-    # -a compiler finding strategy
-    # -a name
-    # architecture classes handling the aliasing for front-end, back-end and default
 
     def __init__(self,name, module_name=None):
         self.name = name # case of cray "ivybridge" but if it's x86_64
@@ -67,7 +60,8 @@ class Target(object):
             return "MODULES"
         else:
             return "PATH"
-    
+
+
 class Architecture(object):
     """ Abstract class that each type of Architecture will subclass. Will return a instance of it once it 
         is returned
@@ -85,17 +79,19 @@ class Architecture(object):
     def add_target(self, name, target):
         self.targets[name] = target  
         
+    
     def target(self, name):
         """This is a getter method for the target dictionary that handles defaulting based
         on the values provided by default, front-end, and back-end. This can be overwritten
         by a subclass for which we want to provide further aliasing options.
         """
         if name == 'default':
-            name = default
+            name = self.default
         elif name == 'front_end' or name == 'fe':
-            name = front-end
+            name = self.front_end
         elif name == 'back_end' or name == 'be':
-            name = back-end
+            name = self.back_end
+
         return self.targets[name]
 
     @classmethod
@@ -148,10 +144,7 @@ def get_sys_type_from_uname():
         return None
 
 def get_sys_type_from_config_file():
-    """ Should read in a sys_type from the config yaml file. This should be the first thing looked at since
-        The user can specify that the architecture is a cray-xc40. A template yaml should be created when spack 
-        is installed. Similar to .spackconfig
-    """ 
+     
     spack_home_dir = os.environ["HOME"] + "/.spack" 
     yaml_file = os.path.join(spack_home_dir, 'architecture.yaml')
     try:
-- 
cgit v1.2.3-70-g09d2


From 058e72d29c3cd934f91ba626392b25ebaa50e2cc Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Mon, 2 Nov 2015 11:08:55 -0800
Subject: Added default target and also front end and back end targets

---
 lib/spack/spack/architectures/cray.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lib/spack/spack/architectures/cray.py b/lib/spack/spack/architectures/cray.py
index e6d6d84922..a79c916684 100644
--- a/lib/spack/spack/architectures/cray.py
+++ b/lib/spack/spack/architectures/cray.py
@@ -4,9 +4,9 @@ from spack.architecture import Architecture
 
 class Cray(Architecture):
     priority    = 20
-    front_end   = None
-    back_end    = None
-    default     = None
+    front_end   = 'sandybridge' 
+    back_end    = 'ivybridge'
+    default     = os.environ["CRAY_CPU_TARGET"] 
 
     def __init__(self):
         super(Cray, self).__init__('cray')
-- 
cgit v1.2.3-70-g09d2


From 5ac974c9b2072631eab490cce8f2922420eef9e4 Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Wed, 4 Nov 2015 12:50:22 -0800
Subject: Enforced that the architecture subclass cannot add a target that
 shares a name with a target alias

---
 lib/spack/spack/architecture.py | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 442180242b..890df9b1e5 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -77,9 +77,14 @@ class Architecture(object):
         self.name = name
 
     def add_target(self, name, target):
-        self.targets[name] = target  
-        
-    
+        """Used by the architecture specific subclass to list available targets. Raises an error
+        if the architecture specifies a name that is reserved by spack as an alias.
+        """
+        if name in ['front_end', 'fe', 'back_end', 'be', 'default']:
+            raise ValueError("%s is a spack reserved alias and cannot be the name of a target" % name)
+        self.targets[name] = target
+
+
     def target(self, name):
         """This is a getter method for the target dictionary that handles defaulting based
         on the values provided by default, front-end, and back-end. This can be overwritten
-- 
cgit v1.2.3-70-g09d2


From 37260962e545366d0d882b205be807562c36f3b7 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 4 Nov 2015 12:57:29 -0800
Subject: changed some potential syntax errors and added a way for target to
 recognize class

---
 lib/spack/spack/architecture.py | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index 442180242b..b251b82dcc 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -48,20 +48,29 @@ class NoSysTypeError(serr.SpackError):
 
 
 class Target(object):
-    """ This is the processor type e.g. cray-ivybridge """
+    """ Target is the processor of the host machine. The host machine may have different front-end
+        and back-end targets, especially if it is a Cray machine. The target will have a name and
+        also the module_name (e.g craype-compiler). Targets will also recognize which architecture
+        they came from using the set_architecture method. Targets will have compiler finding strategies
+        """
+    default_strategy = None # Can probably add a compiler path here
 
     def __init__(self,name, module_name=None):
         self.name = name # case of cray "ivybridge" but if it's x86_64
         self.module_name = module_name # craype-ivybridge
 
+    def set_architecture(self, architecture): # Target should get the architecture class.
+        self.architecture = architecture
+        
     @property
     def compiler_strategy(self):
-        if self.module_name: # If there is a module_name given then use MODULES
+        if default_strategy:
+            return default_strategy
+        elif self.module_name: # If there is a module_name given then use MODULES
             return "MODULES"
         else:
             return "PATH"
 
-
 class Architecture(object):
     """ Abstract class that each type of Architecture will subclass. Will return a instance of it once it 
         is returned
@@ -77,8 +86,8 @@ class Architecture(object):
         self.name = name
 
     def add_target(self, name, target):
-        self.targets[name] = target  
-        
+        target.set_architecture(self)
+        self.targets[name] = target          
     
     def target(self, name):
         """This is a getter method for the target dictionary that handles defaulting based
@@ -163,7 +172,7 @@ def get_sys_type_from_config_file():
 def all_architectures():
     modules = []
     for name in list_modules(spack.arch_path):
-        mod_name = 'spack.architectures.' + name
+        mod_name = 'spack.architectures' + name
         path = join_path(spack.arch_path, name) + ".py"
         mod = imp.load_source(mod_name, path)
         class_name = mod_to_class(name)
-- 
cgit v1.2.3-70-g09d2


From 35532d6b0aaa428e1d8234513e9e887d08c3914c Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Wed, 4 Nov 2015 13:00:35 -0800
Subject: Changed cray architecture subclass to add proper targets for front at
 back end nodes

---
 lib/spack/spack/architectures/cray.py | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/spack/spack/architectures/cray.py b/lib/spack/spack/architectures/cray.py
index a79c916684..420b7c589e 100644
--- a/lib/spack/spack/architectures/cray.py
+++ b/lib/spack/spack/architectures/cray.py
@@ -10,6 +10,11 @@ class Cray(Architecture):
 
     def __init__(self):
         super(Cray, self).__init__('cray')
+        # Back End compiler needs the proper target module loaded.
+        self.add_target('ivybridge','craype-ivybridge')
+        # Could switch to use modules and fe targets for front end
+        # Currently using compilers by path for front end.
+        self.add_target('sandybridge')
 
     @classmethod
     def detect(self):
-- 
cgit v1.2.3-70-g09d2


From 9bf8e8573cff42581074ed9e492ab0e0bc6c7253 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 4 Nov 2015 13:08:48 -0800
Subject: generic linux architecture subclass

---
 lib/spack/spack/architectures/linux.py | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
 create mode 100644 lib/spack/spack/architectures/linux.py

diff --git a/lib/spack/spack/architectures/linux.py b/lib/spack/spack/architectures/linux.py
new file mode 100644
index 0000000000..7238575660
--- /dev/null
+++ b/lib/spack/spack/architectures/linux.py
@@ -0,0 +1,17 @@
+import subprocess 
+from spack.architecture import Architecture
+
+class Linux(Architecture):
+    priority    = 60 
+    front_end   = "x86_64"
+    back_end    = "x86_64"
+    default     = "x86_64"
+
+    def __init__(self):
+        super(Linux, self).__init__('linux')
+
+    @classmethod
+    def detect(self):
+        arch = subprocess.Popen(['uname', '-i'], stdout = subprocess.PIPE)
+        arch, _ = arch.communicate()
+        return 'x86_64' in arch.strip()
-- 
cgit v1.2.3-70-g09d2


From 3a73ae1683c4e83791f273d2034a99824e81aeca Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Wed, 4 Nov 2015 13:12:11 -0800
Subject: Fixed the previous commit

---
 lib/spack/spack/architectures/cray.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/lib/spack/spack/architectures/cray.py b/lib/spack/spack/architectures/cray.py
index 420b7c589e..640a3933e0 100644
--- a/lib/spack/spack/architectures/cray.py
+++ b/lib/spack/spack/architectures/cray.py
@@ -1,20 +1,20 @@
 import os
 
-from spack.architecture import Architecture
+from spack.architecture import Architecture, Target
 
 class Cray(Architecture):
     priority    = 20
     front_end   = 'sandybridge' 
     back_end    = 'ivybridge'
-    default     = os.environ["CRAY_CPU_TARGET"] 
+    default     = 'ivybridge'
 
     def __init__(self):
         super(Cray, self).__init__('cray')
         # Back End compiler needs the proper target module loaded.
-        self.add_target('ivybridge','craype-ivybridge')
+        self.add_target('ivybridge', Target('ivybridge','craype-ivybridge'))
         # Could switch to use modules and fe targets for front end
         # Currently using compilers by path for front end.
-        self.add_target('sandybridge')
+        self.add_target('sandybridge', Target('sandybridge'))
 
     @classmethod
     def detect(self):
-- 
cgit v1.2.3-70-g09d2


From b61d554dc818c2514384b017c74dfa61c04a8c3a Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Wed, 4 Nov 2015 13:28:12 -0800
Subject: Fixed architecture.py file so it doesn't have the weird merge changes
 i.e <<<HEAD etc. Also added target method of recognizing it's own
 architecture

---
 lib/spack/spack/architecture.py | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index f56e4a3fbb..64416e8b4c 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -86,20 +86,14 @@ class Architecture(object):
         self.name = name
 
     def add_target(self, name, target):
-<<<<<<< HEAD
-        target.set_architecture(self)
-        self.targets[name] = target          
-    
-=======
         """Used by the architecture specific subclass to list available targets. Raises an error
         if the architecture specifies a name that is reserved by spack as an alias.
         """
         if name in ['front_end', 'fe', 'back_end', 'be', 'default']:
             raise ValueError("%s is a spack reserved alias and cannot be the name of a target" % name)
+        target.set_architecture(self)
         self.targets[name] = target
 
-
->>>>>>> 8b3f2ec1d117e1a8b206927f51db8684396c231b
     def target(self, name):
         """This is a getter method for the target dictionary that handles defaulting based
         on the values provided by default, front-end, and back-end. This can be overwritten
-- 
cgit v1.2.3-70-g09d2


From 08729315c617b42e6fd1eaa1af4919aa52f96a0f Mon Sep 17 00:00:00 2001
From: Gregory Becker <becker33@llnl.gov>
Date: Thu, 5 Nov 2015 09:21:56 -0800
Subject: Added bgq architecture subclass: may require additional functionality
 to support

---
 lib/spack/spack/architectures/bgq.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
 create mode 100644 lib/spack/spack/architectures/bgq.py

diff --git a/lib/spack/spack/architectures/bgq.py b/lib/spack/spack/architectures/bgq.py
new file mode 100644
index 0000000000..d3d4446e09
--- /dev/null
+++ b/lib/spack/spack/architectures/bgq.py
@@ -0,0 +1,19 @@
+import os
+
+from spack.architecture import Architecture, Target
+
+class Bgq(Architecture):
+    priority    = 30
+    front_end   = 'power7'
+    back_end    = 'powerpc'
+    default     = 'powerpc'
+
+    def __init__(self):
+        super(Bgq, self).__init__('cray')
+        self.add_target('power7', Target('power7'))
+        self.add_target('powerpc', Target('powerpc'))
+
+    @classmethod
+    def detect(self):
+        return os.path.exists('/bgsys')
+    
-- 
cgit v1.2.3-70-g09d2


From 0fcb368f478621b3eb8faf2b812018d43c46ffef Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 5 Nov 2015 13:42:50 -0800
Subject: Adding adios package to spack's package list

---
 var/spack/packages/adios/package.py | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 var/spack/packages/adios/package.py

diff --git a/var/spack/packages/adios/package.py b/var/spack/packages/adios/package.py
new file mode 100644
index 0000000000..5f298fc6b5
--- /dev/null
+++ b/var/spack/packages/adios/package.py
@@ -0,0 +1,28 @@
+from spack import *
+
+class Adios(Package):
+    """The Adaptable IO System (ADIOS) provides a simple, 
+        flexible way for scientists to describe the data in their code that may need to be written, 
+        read, or processed outside of the running simulation
+    """
+    
+    homepage = "http://www.olcf.ornl.gov/center-projects/adios/"
+    url      = "http://users.nccs.gov/~pnorbert/adios-1.9.0.tar.gz"
+
+    version('1.9.0', 'dbf5cb10e32add2f04c9b4052b7ffa76')
+
+    # Lots of setting up here for this package
+    # module swap PrgEnv-intel PrgEnv-$COMP
+    # module load cray-netcdf/4.3.3.1
+    # module load cray-hdf5/1.8.14
+    # module load python/2.7.10
+    depends_on('mxml')
+
+    def install(self, spec, prefix):
+        configure_args = ["--prefix=%s" % prefix, "--with-mxml=%s" % spec['mxml'].prefix, 
+                          "--with-hdf5=%s" % spec['hdf5'].prefix, "--with-netcdf=%s" % os.environ['NETCDF_DIR'], 
+                          "--with-infiniband=no"]
+         
+        configure(*configure_args)
+        make()
+        make("install")
-- 
cgit v1.2.3-70-g09d2


From e0498ce54ad15787db3c4f187902b424c33013d7 Mon Sep 17 00:00:00 2001
From: Mario Melara <maamelara@gmail.com>
Date: Thu, 5 Nov 2015 13:43:11 -0800
Subject: mxml is adios's package dependency

---
 var/spack/packages/mxml/package.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
 create mode 100644 var/spack/packages/mxml/package.py

diff --git a/var/spack/packages/mxml/package.py b/var/spack/packages/mxml/package.py
new file mode 100644
index 0000000000..fc32b56323
--- /dev/null
+++ b/var/spack/packages/mxml/package.py
@@ -0,0 +1,24 @@
+from spack import *
+
+class Mxml(Package):
+    """Mini-XML is a small XML library that you can use to read and write XML 
+       and XML-like data files in your application without requiring large 
+       non-standard libraries"""
+
+    homepage = "http://www.msweet.org"
+    url      = "http://www.msweet.org/files/project3/mxml-2.9.tar.gz"
+
+    version('2.9', 'e21cad0f7aacd18f942aa0568a8dee19')
+    version('2.8', 'd85ee6d30de053581242c4a86e79a5d2')
+    version('2.7', '76f2ae49bf0f5745d5cb5d9507774dc9')
+    version('2.6', '68977789ae64985dddbd1a1a1652642e')
+    version('2.5', 'f706377fba630b39fa02fd63642b17e5')
+
+    # module swap PrgEnv-intel PrgEnv-$COMP (Can use whatever compiler you want to use) 
+    # Case statement to change CC and CXX flags
+
+    def install(self, spec, prefix):
+        configure('--prefix=%s' % prefix, "--disable-shared")
+        make()
+        make("install")
+
-- 
cgit v1.2.3-70-g09d2