diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .mailmap | 2 | ||||
-rwxr-xr-x | bin/spack | 4 | ||||
-rw-r--r-- | etc/spack/repos.yaml | 8 | ||||
-rw-r--r-- | lib/spack/llnl/util/lang.py | 33 | ||||
-rw-r--r-- | lib/spack/llnl/util/tty/colify.py | 7 | ||||
-rw-r--r-- | lib/spack/spack/__init__.py | 25 | ||||
-rw-r--r-- | lib/spack/spack/build_environment.py | 25 | ||||
-rw-r--r-- | lib/spack/spack/cmd/checksum.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/clean.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/compiler.py | 7 | ||||
-rw-r--r-- | lib/spack/spack/cmd/config.py | 12 | ||||
-rw-r--r-- | lib/spack/spack/cmd/create.py | 14 | ||||
-rw-r--r-- | lib/spack/spack/cmd/diy.py | 4 | ||||
-rw-r--r-- | lib/spack/spack/cmd/edit.py | 37 | ||||
-rw-r--r-- | lib/spack/spack/cmd/extensions.py | 3 | ||||
-rw-r--r-- | lib/spack/spack/cmd/fetch.py | 4 | ||||
-rw-r--r-- | lib/spack/spack/cmd/find.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/info.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/install.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/list.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/location.py | 6 | ||||
-rw-r--r-- | lib/spack/spack/cmd/mirror.py | 6 | ||||
-rw-r--r-- | lib/spack/spack/cmd/package-list.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/patch.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/pkg.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/providers.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/repo.py | 135 | ||||
-rw-r--r-- | lib/spack/spack/cmd/restage.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/stage.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/test-install.py | 8 | ||||
-rw-r--r-- | lib/spack/spack/cmd/uninstall.py | 9 | ||||
-rw-r--r-- | lib/spack/spack/cmd/urls.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/cmd/versions.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/compilers/__init__.py | 76 | ||||
-rw-r--r-- | lib/spack/spack/config.py | 567 | ||||
-rw-r--r-- | lib/spack/spack/database.py | 5 | ||||
-rw-r--r-- | lib/spack/spack/directives.py | 3 | ||||
-rw-r--r-- | lib/spack/spack/directory_layout.py | 1 | ||||
-rw-r--r-- | lib/spack/spack/graph.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/package.py | 10 | ||||
-rw-r--r-- | lib/spack/spack/packages.py | 210 | ||||
-rw-r--r-- | lib/spack/spack/patch.py | 6 | ||||
-rw-r--r-- | lib/spack/spack/repository.py | 665 | ||||
-rw-r--r-- | lib/spack/spack/resource.py | 8 | ||||
-rw-r--r-- | lib/spack/spack/spec.py | 83 | ||||
-rw-r--r-- | lib/spack/spack/stage.py | 5 | ||||
-rw-r--r-- | lib/spack/spack/test/__init__.py | 3 | ||||
-rw-r--r-- | lib/spack/spack/test/concretize.py | 12 | ||||
-rw-r--r-- | lib/spack/spack/test/config.py | 92 | ||||
-rw-r--r-- | lib/spack/spack/test/database.py | 3 | ||||
-rw-r--r-- | lib/spack/spack/test/directory_layout.py | 17 | ||||
-rw-r--r-- | lib/spack/spack/test/git_fetch.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/hg_fetch.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/install.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/mirror.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/mock_packages_test.py | 51 | ||||
-rw-r--r-- | lib/spack/spack/test/multimethod.py | 48 | ||||
-rw-r--r-- | lib/spack/spack/test/namespace_trie.py | 114 | ||||
-rw-r--r-- | lib/spack/spack/test/package_sanity.py | 19 | ||||
-rw-r--r-- | lib/spack/spack/test/packages.py | 56 | ||||
-rw-r--r-- | lib/spack/spack/test/python_version.py | 4 | ||||
-rw-r--r-- | lib/spack/spack/test/spec_dag.py | 12 | ||||
-rw-r--r-- | lib/spack/spack/test/spec_semantics.py | 32 | ||||
-rw-r--r-- | lib/spack/spack/test/svn_fetch.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/unit_install.py | 41 | ||||
-rw-r--r-- | lib/spack/spack/test/url_substitution.py | 1 | ||||
-rw-r--r-- | lib/spack/spack/util/naming.py | 126 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/a/package.py (renamed from var/spack/mock_packages/a/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/b/package.py (renamed from var/spack/mock_packages/b/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/c/package.py (renamed from var/spack/mock_packages/c/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/callpath/package.py (renamed from var/spack/mock_packages/callpath/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/direct_mpich/package.py (renamed from var/spack/mock_packages/direct_mpich/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/dyninst/package.py (renamed from var/spack/mock_packages/dyninst/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/e/package.py (renamed from var/spack/mock_packages/e/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/fake/package.py (renamed from var/spack/mock_packages/fake/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/git-test/package.py (renamed from var/spack/mock_packages/git-test/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/hg-test/package.py (renamed from var/spack/mock_packages/hg-test/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/indirect_mpich/package.py (renamed from var/spack/mock_packages/indirect_mpich/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/libdwarf/package.py (renamed from var/spack/mock_packages/libdwarf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/libelf/package.py (renamed from var/spack/mock_packages/libelf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/mpich/package.py (renamed from var/spack/mock_packages/mpich/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/mpich2/package.py (renamed from var/spack/mock_packages/mpich2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/mpileaks/package.py (renamed from var/spack/mock_packages/mpileaks/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/multimethod/package.py (renamed from var/spack/mock_packages/multimethod/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/netlib-blas/package.py (renamed from var/spack/mock_packages/netlib-blas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/netlib-lapack/package.py (renamed from var/spack/mock_packages/netlib-lapack/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/openblas/package.py (renamed from var/spack/mock_packages/openblas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py (renamed from var/spack/mock_packages/optional-dep-test-2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py (renamed from var/spack/mock_packages/optional-dep-test-3/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/optional-dep-test/package.py (renamed from var/spack/mock_packages/optional-dep-test/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/svn-test/package.py (renamed from var/spack/mock_packages/svn-test/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/trivial_install_test_package/package.py (renamed from var/spack/mock_packages/trivial_install_test_package/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/packages/zmpi/package.py (renamed from var/spack/mock_packages/zmpi/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin.mock/repo.yaml | 2 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ImageMagick/package.py (renamed from var/spack/packages/ImageMagick/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/Mitos/package.py (renamed from var/spack/packages/Mitos/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/R/package.py (renamed from var/spack/packages/R/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/SAMRAI/no-tool-build.patch (renamed from var/spack/packages/SAMRAI/no-tool-build.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/SAMRAI/package.py (renamed from var/spack/packages/SAMRAI/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/activeharmony/package.py (renamed from var/spack/packages/activeharmony/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/adept-utils/package.py (renamed from var/spack/packages/adept-utils/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/apex/package.py (renamed from var/spack/packages/apex/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/arpack/package.py (renamed from var/spack/packages/arpack/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/asciidoc/package.py (renamed from var/spack/packages/asciidoc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/atk/package.py (renamed from var/spack/packages/atk/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/atlas/package.py (renamed from var/spack/packages/atlas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/autoconf/package.py (renamed from var/spack/packages/autoconf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/automaded/package.py (renamed from var/spack/packages/automaded/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/automake/package.py (renamed from var/spack/packages/automake/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bear/package.py (renamed from var/spack/packages/bear/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bib2xhtml/package.py (renamed from var/spack/packages/bib2xhtml/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch (renamed from var/spack/packages/binutils/binutilskrell-2.24.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/binutils/package.py (renamed from var/spack/packages/binutils/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bison/package.py (renamed from var/spack/packages/bison/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/boost/package.py (renamed from var/spack/packages/boost/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch (renamed from var/spack/packages/bowtie2/bowtie2-2.5.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bowtie2/package.py (renamed from var/spack/packages/bowtie2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/boxlib/package.py (renamed from var/spack/packages/boxlib/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/bzip2/package.py (renamed from var/spack/packages/bzip2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cairo/package.py (renamed from var/spack/packages/cairo/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/callpath/package.py (renamed from var/spack/packages/callpath/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cblas/package.py (renamed from var/spack/packages/cblas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cbtf-argonavis/package.py (renamed from var/spack/packages/cbtf-argonavis/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cbtf-krell/package.py (renamed from var/spack/packages/cbtf-krell/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cbtf-lanl/package.py (renamed from var/spack/packages/cbtf-lanl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cbtf/package.py (renamed from var/spack/packages/cbtf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cfitsio/package.py (renamed from var/spack/packages/cfitsio/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cgm/package.py (renamed from var/spack/packages/cgm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cityhash/package.py (renamed from var/spack/packages/cityhash/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/clang/package.py (renamed from var/spack/packages/clang/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cleverleaf/package.py (renamed from var/spack/packages/cleverleaf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cloog/package.py (renamed from var/spack/packages/cloog/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cmake/package.py (renamed from var/spack/packages/cmake/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/coreutils/package.py (renamed from var/spack/packages/coreutils/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cppcheck/package.py (renamed from var/spack/packages/cppcheck/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cram/package.py (renamed from var/spack/packages/cram/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cscope/package.py (renamed from var/spack/packages/cscope/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/cube/package.py (renamed from var/spack/packages/cube/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/curl/package.py (renamed from var/spack/packages/curl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/czmq/package.py (renamed from var/spack/packages/czmq/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/damselfly/package.py (renamed from var/spack/packages/damselfly/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/dbus/package.py (renamed from var/spack/packages/dbus/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/docbook-xml/package.py (renamed from var/spack/packages/docbook-xml/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/doxygen/package.py (renamed from var/spack/packages/doxygen/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/dri2proto/package.py (renamed from var/spack/packages/dri2proto/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/dtcmp/package.py (renamed from var/spack/packages/dtcmp/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/dyninst/package.py (renamed from var/spack/packages/dyninst/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/elfutils/package.py (renamed from var/spack/packages/elfutils/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/expat/package.py (renamed from var/spack/packages/expat/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/extrae/package.py (renamed from var/spack/packages/extrae/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/exuberant-ctags/package.py (renamed from var/spack/packages/exuberant-ctags/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/fftw/package.py (renamed from var/spack/packages/fftw/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/fish/package.py (renamed from var/spack/packages/fish/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/flex/package.py (renamed from var/spack/packages/flex/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/flux/package.py (renamed from var/spack/packages/flux/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/fontconfig/package.py (renamed from var/spack/packages/fontconfig/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/freetype/package.py (renamed from var/spack/packages/freetype/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gasnet/package.py (renamed from var/spack/packages/gasnet/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gcc/package.py (renamed from var/spack/packages/gcc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gdb/package.py (renamed from var/spack/packages/gdb/package.py) | 2 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gdk-pixbuf/package.py (renamed from var/spack/packages/gdk-pixbuf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/geos/package.py (renamed from var/spack/packages/geos/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gflags/package.py (renamed from var/spack/packages/gflags/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ghostscript/package.py (renamed from var/spack/packages/ghostscript/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/git/package.py (renamed from var/spack/packages/git/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/glib/package.py (renamed from var/spack/packages/glib/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/glm/package.py (renamed from var/spack/packages/glm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/global/package.py (renamed from var/spack/packages/global/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/glog/package.py (renamed from var/spack/packages/glog/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gmp/package.py (renamed from var/spack/packages/gmp/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gnuplot/package.py (renamed from var/spack/packages/gnuplot/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gnutls/package.py (renamed from var/spack/packages/gnutls/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gperf/package.py (renamed from var/spack/packages/gperf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gperftools/package.py (renamed from var/spack/packages/gperftools/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/graphlib/package.py (renamed from var/spack/packages/graphlib/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/graphviz/package.py (renamed from var/spack/packages/graphviz/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gsl/package.py (renamed from var/spack/packages/gsl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/gtkplus/package.py (renamed from var/spack/packages/gtkplus/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/harfbuzz/package.py (renamed from var/spack/packages/harfbuzz/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/hdf5/package.py (renamed from var/spack/packages/hdf5/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/hwloc/package.py (renamed from var/spack/packages/hwloc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/hypre/package.py (renamed from var/spack/packages/hypre/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/icu/package.py (renamed from var/spack/packages/icu/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/icu4c/package.py (renamed from var/spack/packages/icu4c/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/isl/package.py (renamed from var/spack/packages/isl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/jdk/package.py (renamed from var/spack/packages/jdk/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/jemalloc/package.py (renamed from var/spack/packages/jemalloc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/jpeg/package.py (renamed from var/spack/packages/jpeg/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/judy/package.py (renamed from var/spack/packages/judy/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/launchmon/package.py (renamed from var/spack/packages/launchmon/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/launchmon/patch.lmon_install_dir (renamed from var/spack/packages/launchmon/patch.lmon_install_dir) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lcms/package.py (renamed from var/spack/packages/lcms/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/leveldb/package.py (renamed from var/spack/packages/leveldb/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libNBC/package.py (renamed from var/spack/packages/libNBC/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libarchive/package.py (renamed from var/spack/packages/libarchive/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libcerf/package.py (renamed from var/spack/packages/libcerf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libcircle/package.py (renamed from var/spack/packages/libcircle/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libdrm/package.py (renamed from var/spack/packages/libdrm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libdwarf/package.py (renamed from var/spack/packages/libdwarf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libelf/package.py (renamed from var/spack/packages/libelf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libevent/package.py (renamed from var/spack/packages/libevent/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libffi/package.py (renamed from var/spack/packages/libffi/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libgcrypt/package.py (renamed from var/spack/packages/libgcrypt/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libgd/package.py (renamed from var/spack/packages/libgd/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libgpg-error/package.py (renamed from var/spack/packages/libgpg-error/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libjpeg-turbo/package.py (renamed from var/spack/packages/libjpeg-turbo/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libjson-c/package.py (renamed from var/spack/packages/libjson-c/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libmng/package.py (renamed from var/spack/packages/libmng/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0000.patch (renamed from var/spack/packages/libmonitor/libmonitorkrell-0000.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0001.patch (renamed from var/spack/packages/libmonitor/libmonitorkrell-0001.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0002.patch (renamed from var/spack/packages/libmonitor/libmonitorkrell-0002.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libmonitor/package.py (renamed from var/spack/packages/libmonitor/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libpciaccess/package.py (renamed from var/spack/packages/libpciaccess/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libpng/package.py (renamed from var/spack/packages/libpng/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libsodium/package.py (renamed from var/spack/packages/libsodium/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libtiff/package.py (renamed from var/spack/packages/libtiff/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libtool/package.py (renamed from var/spack/packages/libtool/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libunwind/package.py (renamed from var/spack/packages/libunwind/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libuuid/package.py (renamed from var/spack/packages/libuuid/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libxcb/package.py (renamed from var/spack/packages/libxcb/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libxml2/package.py (renamed from var/spack/packages/libxml2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libxshmfence/package.py (renamed from var/spack/packages/libxshmfence/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/libxslt/package.py (renamed from var/spack/packages/libxslt/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/llvm-lld/package.py (renamed from var/spack/packages/llvm-lld/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/llvm/package.py (renamed from var/spack/packages/llvm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lmdb/package.py (renamed from var/spack/packages/lmdb/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lmod/package.py (renamed from var/spack/packages/lmod/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lua/package.py (renamed from var/spack/packages/lua/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lwgrp/package.py (renamed from var/spack/packages/lwgrp/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/lwm2/package.py (renamed from var/spack/packages/lwm2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/matio/package.py (renamed from var/spack/packages/matio/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/memaxes/package.py (renamed from var/spack/packages/memaxes/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mesa/package.py (renamed from var/spack/packages/mesa/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/metis/package.py (renamed from var/spack/packages/metis/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpc/package.py (renamed from var/spack/packages/mpc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpe2/mpe2.patch (renamed from var/spack/packages/mpe2/mpe2.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpe2/package.py (renamed from var/spack/packages/mpe2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpfr/package.py (renamed from var/spack/packages/mpfr/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpibash/mpibash-4.3.patch (renamed from var/spack/packages/mpibash/mpibash-4.3.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpibash/package.py (renamed from var/spack/packages/mpibash/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpich/package.py (renamed from var/spack/packages/mpich/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mpileaks/package.py (renamed from var/spack/packages/mpileaks/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mrnet/package.py (renamed from var/spack/packages/mrnet/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/munge/package.py (renamed from var/spack/packages/munge/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/muster/package.py (renamed from var/spack/packages/muster/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mvapich2/ad_lustre_rwcontig_open_source.patch (renamed from var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/mvapich2/package.py (renamed from var/spack/packages/mvapich2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/nasm/package.py (renamed from var/spack/packages/nasm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ncdu/package.py (renamed from var/spack/packages/ncdu/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ncurses/package.py (renamed from var/spack/packages/ncurses/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ncurses/patch_gcc_5.txt (renamed from var/spack/packages/ncurses/patch_gcc_5.txt) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netcdf/netcdf-4.3.3-mpi.patch (renamed from var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netcdf/package.py (renamed from var/spack/packages/netcdf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netgauge/package.py (renamed from var/spack/packages/netgauge/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netlib-blas/package.py (renamed from var/spack/packages/netlib-blas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/netlib-lapack/package.py (renamed from var/spack/packages/netlib-lapack/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/nettle/package.py (renamed from var/spack/packages/nettle/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ompss/package.py (renamed from var/spack/packages/ompss/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ompt-openmp/package.py (renamed from var/spack/packages/ompt-openmp/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/opari2/package.py (renamed from var/spack/packages/opari2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openblas/package.py (renamed from var/spack/packages/openblas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openmpi/ad_lustre_rwcontig_open_source.patch (renamed from var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openmpi/configure.patch (renamed from var/spack/packages/openmpi/configure.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openmpi/llnl-platforms.patch (renamed from var/spack/packages/openmpi/llnl-platforms.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openmpi/package.py (renamed from var/spack/packages/openmpi/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openspeedshop/package.py (renamed from var/spack/packages/openspeedshop/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/openssl/package.py (renamed from var/spack/packages/openssl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/otf/package.py (renamed from var/spack/packages/otf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/otf2/package.py (renamed from var/spack/packages/otf2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pango/package.py (renamed from var/spack/packages/pango/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/papi/package.py (renamed from var/spack/packages/papi/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/paraver/package.py (renamed from var/spack/packages/paraver/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/paraview/package.py (renamed from var/spack/packages/paraview/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/parmetis/package.py (renamed from var/spack/packages/parmetis/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/parpack/package.py (renamed from var/spack/packages/parpack/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pcre/package.py (renamed from var/spack/packages/pcre/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pdt/package.py (renamed from var/spack/packages/pdt/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/petsc/package.py (renamed from var/spack/packages/petsc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pidx/package.py (renamed from var/spack/packages/pidx/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pixman/package.py (renamed from var/spack/packages/pixman/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pkg-config/package.py (renamed from var/spack/packages/pkg-config/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/pmgr_collective/package.py (renamed from var/spack/packages/pmgr_collective/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/postgresql/package.py (renamed from var/spack/packages/postgresql/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ppl/package.py (renamed from var/spack/packages/ppl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/protobuf/package.py (renamed from var/spack/packages/protobuf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-basemap/package.py (renamed from var/spack/packages/py-basemap/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-biopython/package.py (renamed from var/spack/packages/py-biopython/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-cffi/package.py (renamed from var/spack/packages/py-cffi/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-cython/package.py (renamed from var/spack/packages/py-cython/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-dateutil/package.py (renamed from var/spack/packages/py-dateutil/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-epydoc/package.py (renamed from var/spack/packages/py-epydoc/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-genders/package.py (renamed from var/spack/packages/py-genders/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-gnuplot/package.py (renamed from var/spack/packages/py-gnuplot/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-h5py/package.py (renamed from var/spack/packages/py-h5py/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-ipython/package.py (renamed from var/spack/packages/py-ipython/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-libxml2/package.py (renamed from var/spack/packages/py-libxml2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-lockfile/package.py (renamed from var/spack/packages/py-lockfile/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-mako/package.py (renamed from var/spack/packages/py-mako/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-matplotlib/package.py (renamed from var/spack/packages/py-matplotlib/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-mock/package.py (renamed from var/spack/packages/py-mock/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-mpi4py/package.py (renamed from var/spack/packages/py-mpi4py/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-mx/package.py (renamed from var/spack/packages/py-mx/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-nose/package.py (renamed from var/spack/packages/py-nose/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-numpy/package.py (renamed from var/spack/packages/py-numpy/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pandas/package.py (renamed from var/spack/packages/py-pandas/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pexpect/package.py (renamed from var/spack/packages/py-pexpect/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pil/package.py (renamed from var/spack/packages/py-pil/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pillow/package.py (renamed from var/spack/packages/py-pillow/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pmw/package.py (renamed from var/spack/packages/py-pmw/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pychecker/package.py (renamed from var/spack/packages/py-pychecker/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pycparser/package.py (renamed from var/spack/packages/py-pycparser/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pyelftools/package.py (renamed from var/spack/packages/py-pyelftools/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pygments/package.py (renamed from var/spack/packages/py-pygments/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pylint/package.py (renamed from var/spack/packages/py-pylint/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pypar/package.py (renamed from var/spack/packages/py-pypar/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pyparsing/package.py (renamed from var/spack/packages/py-pyparsing/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pyqt/package.py (renamed from var/spack/packages/py-pyqt/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pyside/package.py (renamed from var/spack/packages/py-pyside/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-python-daemon/package.py (renamed from var/spack/packages/py-python-daemon/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-pytz/package.py (renamed from var/spack/packages/py-pytz/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-rpy2/package.py (renamed from var/spack/packages/py-rpy2/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-scientificpython/package.py (renamed from var/spack/packages/py-scientificpython/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-scikit-learn/package.py (renamed from var/spack/packages/py-scikit-learn/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-scipy/package.py (renamed from var/spack/packages/py-scipy/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-setuptools/package.py (renamed from var/spack/packages/py-setuptools/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-shiboken/package.py (renamed from var/spack/packages/py-shiboken/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-sip/package.py (renamed from var/spack/packages/py-sip/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-six/package.py (renamed from var/spack/packages/py-six/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-sphinx/package.py (renamed from var/spack/packages/py-sphinx/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-sympy/package.py (renamed from var/spack/packages/py-sympy/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-twisted/package.py (renamed from var/spack/packages/py-twisted/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-virtualenv/package.py (renamed from var/spack/packages/py-virtualenv/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/py-yapf/package.py (renamed from var/spack/packages/py-yapf/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/python/package.py (renamed from var/spack/packages/python/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/qhull/package.py (renamed from var/spack/packages/qhull/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/qt/package.py (renamed from var/spack/packages/qt/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/qt/qt3krell.patch (renamed from var/spack/packages/qt/qt3krell.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/qthreads/package.py (renamed from var/spack/packages/qthreads/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ravel/package.py (renamed from var/spack/packages/ravel/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/readline/package.py (renamed from var/spack/packages/readline/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/rose/add_spack_compiler_recognition.patch (renamed from var/spack/packages/rose/add_spack_compiler_recognition.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/rose/package.py (renamed from var/spack/packages/rose/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/rsync/package.py (renamed from var/spack/packages/rsync/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/ruby/package.py (renamed from var/spack/packages/ruby/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/samtools/package.py (renamed from var/spack/packages/samtools/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/samtools/samtools1.2.patch (renamed from var/spack/packages/samtools/samtools1.2.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/scalasca/package.py (renamed from var/spack/packages/scalasca/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/scorep/package.py (renamed from var/spack/packages/scorep/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/scotch/package.py (renamed from var/spack/packages/scotch/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/scr/package.py (renamed from var/spack/packages/scr/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/silo/package.py (renamed from var/spack/packages/silo/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/snappy/package.py (renamed from var/spack/packages/snappy/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/sparsehash/package.py (renamed from var/spack/packages/sparsehash/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/spindle/package.py (renamed from var/spack/packages/spindle/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/spot/package.py (renamed from var/spack/packages/spot/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/sqlite/package.py (renamed from var/spack/packages/sqlite/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/stat/configure_mpicxx.patch (renamed from var/spack/packages/stat/configure_mpicxx.patch) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/stat/package.py (renamed from var/spack/packages/stat/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/sundials/package.py (renamed from var/spack/packages/sundials/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/swig/package.py (renamed from var/spack/packages/swig/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/task/package.py (renamed from var/spack/packages/task/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/taskd/package.py (renamed from var/spack/packages/taskd/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/tau/package.py (renamed from var/spack/packages/tau/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/tcl/package.py (renamed from var/spack/packages/tcl/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/texinfo/package.py (renamed from var/spack/packages/texinfo/package.py) | 2 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/the_silver_searcher/package.py (renamed from var/spack/packages/the_silver_searcher/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/thrift/package.py (renamed from var/spack/packages/thrift/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/tk/package.py (renamed from var/spack/packages/tk/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/tmux/package.py (renamed from var/spack/packages/tmux/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/tmuxinator/package.py (renamed from var/spack/packages/tmuxinator/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/trilinos/package.py (renamed from var/spack/packages/trilinos/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/uncrustify/package.py (renamed from var/spack/packages/uncrustify/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/util-linux/package.py (renamed from var/spack/packages/util-linux/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/valgrind/package.py (renamed from var/spack/packages/valgrind/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/vim/package.py (renamed from var/spack/packages/vim/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/vtk/package.py (renamed from var/spack/packages/vtk/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/wget/package.py (renamed from var/spack/packages/wget/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/wx/package.py (renamed from var/spack/packages/wx/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/wxpropgrid/package.py (renamed from var/spack/packages/wxpropgrid/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/xcb-proto/package.py (renamed from var/spack/packages/xcb-proto/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/xerces-c/package.py (renamed from var/spack/packages/xerces-c/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/xz/package.py (renamed from var/spack/packages/xz/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/yasm/package.py (renamed from var/spack/packages/yasm/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/zeromq/package.py (renamed from var/spack/packages/zeromq/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/zlib/package.py (renamed from var/spack/packages/zlib/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/zsh/package.py (renamed from var/spack/packages/zsh/package.py) | 0 | ||||
-rw-r--r-- | var/spack/repos/builtin/repo.yaml | 2 |
388 files changed, 1923 insertions, 745 deletions
diff --git a/.gitignore b/.gitignore index 1c6ca4c99e..4b97de5d50 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /etc/spackconfig /share/spack/dotkit /share/spack/modules +/TAGS @@ -9,3 +9,5 @@ Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@su Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov> Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com> Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de> +Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@surface86.llnl.gov> +Gregory L. Lee <lee218@llnl.gov> Gregory Lee <lee218@llnl.gov> @@ -132,8 +132,8 @@ def main(): spack.spack_working_dir = working_dir if args.mock: - from spack.packages import PackageDB - spack.db = PackageDB(spack.mock_packages_path) + from spack.repository import RepoPath + spack.repo.swap(RepoPath(spack.mock_packages_path)) # If the user asked for it, don't check ssl certs. if args.insecure: diff --git a/etc/spack/repos.yaml b/etc/spack/repos.yaml new file mode 100644 index 0000000000..2d4ff54ce6 --- /dev/null +++ b/etc/spack/repos.yaml @@ -0,0 +1,8 @@ +# ------------------------------------------------------------------------- +# This is the default spack repository configuration. +# +# Changes to this file will affect all users of this spack install, +# although users can override these settings in their ~/.spack/repos.yaml. +# ------------------------------------------------------------------------- +repos: + - $spack/var/spack/repos/builtin diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py index c84828951d..1c4d1ed623 100644 --- a/lib/spack/llnl/util/lang.py +++ b/lib/spack/llnl/util/lang.py @@ -26,6 +26,7 @@ import os import re import sys import functools +import collections import inspect # Ignore emacs backups when listing modules @@ -167,16 +168,32 @@ def has_method(cls, name): return False -def memoized(obj): +class memoized(object): """Decorator that caches the results of a function, storing them in an attribute of that function.""" - cache = obj.cache = {} - @functools.wraps(obj) - def memoizer(*args, **kwargs): - if args not in cache: - cache[args] = obj(*args, **kwargs) - return cache[args] - return memoizer + def __init__(self, func): + self.func = func + self.cache = {} + + + def __call__(self, *args): + if not isinstance(args, collections.Hashable): + # Not hashable, so just call the function. + return self.func(*args) + + if args not in self.cache: + self.cache[args] = self.func(*args) + return self.cache[args] + + + def __get__(self, obj, objtype): + """Support instance methods.""" + return functools.partial(self.__call__, obj) + + + def clear(self): + """Expunge cache so that self.func will be called again.""" + self.cache.clear() def list_modules(directory, **kwargs): diff --git a/lib/spack/llnl/util/tty/colify.py b/lib/spack/llnl/util/tty/colify.py index 5545cf0311..47c3cc4f8f 100644 --- a/lib/spack/llnl/util/tty/colify.py +++ b/lib/spack/llnl/util/tty/colify.py @@ -210,6 +210,13 @@ def colify(elts, **options): def colify_table(table, **options): + """Version of colify() for data expressed in rows, (list of lists). + + Same as regular colify but takes a list of lists, where each + sub-list must be the same length, and each is interpreted as a + row in a table. Regular colify displays a sequential list of + values in columns. + """ if table is None: raise TypeError("Can't call colify_table on NoneType") elif not table or not table[0]: diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py index 92cb417a85..de1a98d092 100644 --- a/lib/spack/spack/__init__.py +++ b/lib/spack/spack/__init__.py @@ -23,9 +23,11 @@ # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## import os +import sys import tempfile import getpass from llnl.util.filesystem import * +import llnl.util.tty as tty # This lives in $prefix/lib/spack/spack/__file__ spack_root = ancestor(__file__, 4) @@ -42,6 +44,7 @@ test_path = join_path(module_path, "test") hooks_path = join_path(module_path, "hooks") var_path = join_path(spack_root, "var", "spack") stage_path = join_path(var_path, "stage") +repos_path = join_path(var_path, "repos") share_path = join_path(spack_root, "share", "spack") prefix = spack_root @@ -50,11 +53,18 @@ install_path = join_path(opt_path, "spack") etc_path = join_path(prefix, "etc") # -# Set up the packages database. +# Set up the default packages database. # -from spack.packages import PackageDB -packages_path = join_path(var_path, "packages") -db = PackageDB(packages_path) +import spack.repository +_repo_paths = spack.config.get_repos_config() +if not _repo_paths: + tty.die("Spack configuration contains no package repositories.") + +try: + repo = spack.repository.RepoPath(*_repo_paths) + sys.meta_path.append(repo) +except spack.repository.BadRepoError, e: + tty.die('Bad repository. %s' % e.message) # # Set up the installed packages database @@ -63,9 +73,10 @@ from spack.database import Database installed_db = Database(install_path) # -# Paths to mock files for testing. +# Paths to built-in Spack repositories. # -mock_packages_path = join_path(var_path, "mock_packages") +packages_path = join_path(repos_path, "builtin") +mock_packages_path = join_path(repos_path, "builtin.mock") mock_config_path = join_path(var_path, "mock_configs") mock_site_config = join_path(mock_config_path, "site_spackconfig") @@ -149,7 +160,7 @@ sys_type = None # When packages call 'from spack import *', this extra stuff is brought in. # # Spack internal code should call 'import spack' and accesses other -# variables (spack.db, paths, etc.) directly. +# variables (spack.repo, paths, etc.) directly. # # TODO: maybe this should be separated out and should go in build_environment.py? # TODO: it's not clear where all the stuff that needs to be included in packages diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py index 84c2f6015b..b2db83acb7 100644 --- a/lib/spack/spack/build_environment.py +++ b/lib/spack/spack/build_environment.py @@ -173,7 +173,7 @@ def set_build_environment_variables(pkg): path_set("PKG_CONFIG_PATH", pkg_config_dirs) -def set_module_variables_for_package(pkg): +def set_module_variables_for_package(pkg, m): """Populate the module scope of install() with some useful functions. This makes things easier for package writers. """ @@ -244,11 +244,32 @@ def get_rpaths(pkg): return rpaths +def parent_class_modules(cls): + """Get list of super class modules that are all descend from spack.Package""" + if not issubclass(cls, spack.Package) or issubclass(spack.Package, cls): + return [] + result = [] + module = sys.modules.get(cls.__module__) + if module: + result = [ module ] + for c in cls.__bases__: + result.extend(parent_class_modules(c)) + return result + + def setup_package(pkg): """Execute all environment setup routines.""" set_compiler_environment_variables(pkg) set_build_environment_variables(pkg) - set_module_variables_for_package(pkg) + + # If a user makes their own package repo, e.g. + # spack.repos.mystuff.libelf.Libelf, and they inherit from + # an existing class like spack.repos.original.libelf.Libelf, + # then set the module variables for both classes so the + # parent class can still use them if it gets called. + modules = parent_class_modules(pkg.__class__) + for mod in modules: + set_module_variables_for_package(pkg, mod) # Allow dependencies to set up environment as well. for dep_spec in pkg.spec.traverse(root=False): diff --git a/lib/spack/spack/cmd/checksum.py b/lib/spack/spack/cmd/checksum.py index 6b7022a7a1..b1ad89dbb8 100644 --- a/lib/spack/spack/cmd/checksum.py +++ b/lib/spack/spack/cmd/checksum.py @@ -81,7 +81,7 @@ def get_checksums(versions, urls, **kwargs): def checksum(parser, args): # get the package we're going to generate checksums for - pkg = spack.db.get(args.package) + pkg = spack.repo.get(args.package) # If the user asked for specific versions, use those. if args.versions: diff --git a/lib/spack/spack/cmd/clean.py b/lib/spack/spack/cmd/clean.py index c3409887fb..6e7179122c 100644 --- a/lib/spack/spack/cmd/clean.py +++ b/lib/spack/spack/cmd/clean.py @@ -42,5 +42,5 @@ def clean(parser, args): specs = spack.cmd.parse_specs(args.packages, concretize=True) for spec in specs: - package = spack.db.get(spec) + package = spack.repo.get(spec) package.do_clean() diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py index 589ca87fb5..af1a22c9dd 100644 --- a/lib/spack/spack/cmd/compiler.py +++ b/lib/spack/spack/cmd/compiler.py @@ -65,10 +65,11 @@ def compiler_add(args): if c.spec not in spack.compilers.all_compilers()] if compilers: - spack.compilers.add_compilers_to_config('user', *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'))) + s = 's' if n > 1 else '' + filename = spack.config.get_config_filename('user', 'compilers') + tty.msg("Added %d new compiler%s to %s" % (n, s, filename)) colify(reversed(sorted(c.spec for c in compilers)), indent=4) else: tty.msg("Found no new compilers") diff --git a/lib/spack/spack/cmd/config.py b/lib/spack/spack/cmd/config.py index a6e914131e..5e6d4e4d7d 100644 --- a/lib/spack/spack/cmd/config.py +++ b/lib/spack/spack/cmd/config.py @@ -44,22 +44,22 @@ def setup_parser(subparser): sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='config_command') get_parser = sp.add_parser('get', help='Print configuration values.') - get_parser.add_argument('category', help="Configuration category to print.") + get_parser.add_argument('section', help="Configuration section to print.") edit_parser = sp.add_parser('edit', help='Edit configuration file.') - edit_parser.add_argument('category', help="Configuration category to edit") + edit_parser.add_argument('section', help="Configuration section to edit") def config_get(args): - spack.config.print_category(args.category) + spack.config.print_section(args.section) def config_edit(args): if not args.scope: args.scope = 'user' - if not args.category: - args.category = None - config_file = spack.config.get_config_scope_filename(args.scope, args.category) + if not args.section: + args.section = None + config_file = spack.config.get_config_filename(args.scope, args.section) spack.editor(config_file) diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py index 9ecb709110..1a60875de8 100644 --- a/lib/spack/spack/cmd/create.py +++ b/lib/spack/spack/cmd/create.py @@ -94,6 +94,9 @@ def setup_parser(subparser): '-n', '--name', dest='alternate_name', default=None, help="Override the autodetected name for the created package.") subparser.add_argument( + '-p', '--package-repo', dest='package_repo', default=None, + help="Create the package in the specified packagerepo.") + subparser.add_argument( '-f', '--force', action='store_true', dest='force', help="Overwrite any existing package file with the same name.") @@ -160,12 +163,21 @@ def create(parser, args): tty.die("Couldn't guess a name for this package. Try running:", "", "spack create --name <name> <url>") + package_repo = args.package_repo + if not valid_module_name(name): tty.die("Package name can only contain A-Z, a-z, 0-9, '_' and '-'") tty.msg("This looks like a URL for %s version %s." % (name, version)) tty.msg("Creating template for package %s" % name) + # Create a directory for the new package. + pkg_path = spack.repo.filename_for_package_name(name, package_repo) + if os.path.exists(pkg_path) and not args.force: + tty.die("%s already exists." % pkg_path) + else: + mkdirp(os.path.dirname(pkg_path)) + versions = spack.util.web.find_versions_of_archive(url) rkeys = sorted(versions.keys(), reverse=True) versions = OrderedDict(zip(rkeys, (versions[v] for v in rkeys))) @@ -202,7 +214,7 @@ def create(parser, args): name = 'py-%s' % name # Create a directory for the new package. - pkg_path = spack.db.filename_for_package_name(name) + pkg_path = spack.repo.filename_for_package_name(name) if os.path.exists(pkg_path) and not args.force: tty.die("%s already exists." % pkg_path) else: diff --git a/lib/spack/spack/cmd/diy.py b/lib/spack/spack/cmd/diy.py index ebe8424f09..1acbebbc15 100644 --- a/lib/spack/spack/cmd/diy.py +++ b/lib/spack/spack/cmd/diy.py @@ -61,7 +61,7 @@ def diy(self, args): # Take a write lock before checking for existence. with spack.installed_db.write_transaction(): spec = specs[0] - if not spack.db.exists(spec.name): + if not spack.repo.exists(spec.name): tty.warn("No such package: %s" % spec.name) create = tty.get_yes_or_no("Create this package?", default=False) if not create: @@ -76,7 +76,7 @@ def diy(self, args): tty.die("spack diy spec must have a single, concrete version.") spec.concretize() - package = spack.db.get(spec) + package = spack.repo.get(spec) if package.installed: tty.error("Already installed in %s" % package.prefix) diff --git a/lib/spack/spack/cmd/edit.py b/lib/spack/spack/cmd/edit.py index b168d967b9..e0688dc96b 100644 --- a/lib/spack/spack/cmd/edit.py +++ b/lib/spack/spack/cmd/edit.py @@ -54,7 +54,7 @@ class ${class_name}(Package): def edit_package(name, force=False): - path = spack.db.filename_for_package_name(name) + path = spack.repo.filename_for_package_name(name) if os.path.exists(path): if not os.path.isfile(path): @@ -78,9 +78,18 @@ def setup_parser(subparser): subparser.add_argument( '-f', '--force', dest='force', action='store_true', help="Open a new file in $EDITOR even if package doesn't exist.") - subparser.add_argument( - '-c', '--command', dest='edit_command', action='store_true', - help="Edit the command with the supplied name instead of a package.") + + filetypes = subparser.add_mutually_exclusive_group() + filetypes.add_argument( + '-c', '--command', dest='path', action='store_const', + const=spack.cmd.command_path, help="Edit the command with the supplied name.") + filetypes.add_argument( + '-t', '--test', dest='path', action='store_const', + const=spack.test_path, help="Edit the test with the supplied name.") + filetypes.add_argument( + '-m', '--module', dest='path', action='store_const', + const=spack.module_path, help="Edit the main spack module with the supplied name.") + subparser.add_argument( 'name', nargs='?', default=None, help="name of package to edit") @@ -88,19 +97,17 @@ def setup_parser(subparser): def edit(parser, args): name = args.name - if args.edit_command: - if not name: - path = spack.cmd.command_path - else: - path = join_path(spack.cmd.command_path, name + ".py") - if not os.path.exists(path): + path = spack.packages_path + if args.path: + path = args.path + if name: + path = join_path(path, name + ".py") + if not args.force and not os.path.exists(path): tty.die("No command named '%s'." % name) spack.editor(path) + elif name: + edit_package(name, args.force) else: # By default open the directory where packages or commands live. - if not name: - path = spack.packages_path - spack.editor(path) - else: - edit_package(name, args.force) + spack.editor(path) diff --git a/lib/spack/spack/cmd/extensions.py b/lib/spack/spack/cmd/extensions.py index 2ce6f406ca..ccb0fe4e1f 100644 --- a/lib/spack/spack/cmd/extensions.py +++ b/lib/spack/spack/cmd/extensions.py @@ -74,8 +74,7 @@ def extensions(parser, args): # # List package names of extensions - # - extensions = spack.db.extensions_for(spec) + extensions = spack.repo.extensions_for(spec) if not extensions: tty.msg("%s has no extensions." % spec.cshort_spec) return diff --git a/lib/spack/spack/cmd/fetch.py b/lib/spack/spack/cmd/fetch.py index 57d6f6b63b..adad545cae 100644 --- a/lib/spack/spack/cmd/fetch.py +++ b/lib/spack/spack/cmd/fetch.py @@ -52,10 +52,10 @@ def fetch(parser, args): if args.missing or args.dependencies: to_fetch = set() for s in spec.traverse(): - package = spack.db.get(s) + package = spack.repo.get(s) if args.missing and package.installed: continue package.do_fetch() - package = spack.db.get(spec) + package = spack.repo.get(spec) package.do_fetch() diff --git a/lib/spack/spack/cmd/find.py b/lib/spack/spack/cmd/find.py index c7a376fd8d..d951c37fe0 100644 --- a/lib/spack/spack/cmd/find.py +++ b/lib/spack/spack/cmd/find.py @@ -137,7 +137,7 @@ def find(parser, args): # Filter out specs that don't exist. query_specs = spack.cmd.parse_specs(args.query_specs) query_specs, nonexisting = partition_list( - query_specs, lambda s: spack.db.exists(s.name)) + query_specs, lambda s: spack.repo.exists(s.name)) if nonexisting: msg = "No such package%s: " % ('s' if len(nonexisting) > 1 else '') diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py index 8040e23936..e7abe7f4a5 100644 --- a/lib/spack/spack/cmd/info.py +++ b/lib/spack/spack/cmd/info.py @@ -105,5 +105,5 @@ def print_text_info(pkg): def info(parser, args): - pkg = spack.db.get(args.name) + pkg = spack.repo.get(args.name) print_text_info(pkg) diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py index 5ee7bc01b7..1fef750c80 100644 --- a/lib/spack/spack/cmd/install.py +++ b/lib/spack/spack/cmd/install.py @@ -70,7 +70,7 @@ def install(parser, args): specs = spack.cmd.parse_specs(args.packages, concretize=True) for spec in specs: - package = spack.db.get(spec) + package = spack.repo.get(spec) with spack.installed_db.write_transaction(): package.do_install( keep_prefix=args.keep_prefix, diff --git a/lib/spack/spack/cmd/list.py b/lib/spack/spack/cmd/list.py index b51d5b429a..7c50ccb9cd 100644 --- a/lib/spack/spack/cmd/list.py +++ b/lib/spack/spack/cmd/list.py @@ -43,7 +43,7 @@ def setup_parser(subparser): def list(parser, args): # Start with all package names. - pkgs = spack.db.all_package_names() + pkgs = spack.repo.all_package_names() # filter if a filter arg was provided if args.filter: diff --git a/lib/spack/spack/cmd/location.py b/lib/spack/spack/cmd/location.py index e805cc4012..39c225e9b2 100644 --- a/lib/spack/spack/cmd/location.py +++ b/lib/spack/spack/cmd/location.py @@ -72,7 +72,7 @@ def location(parser, args): print spack.prefix elif args.packages: - print spack.db.root + print spack.repo.root elif args.stages: print spack.stage_path @@ -94,12 +94,12 @@ def location(parser, args): if args.package_dir: # This one just needs the spec name. - print join_path(spack.db.root, spec.name) + print join_path(spack.repo.root, spec.name) else: # These versions need concretized specs. spec.concretize() - pkg = spack.db.get(spec) + pkg = spack.repo.get(spec) if args.stage_dir: print pkg.stage.path diff --git a/lib/spack/spack/cmd/mirror.py b/lib/spack/spack/cmd/mirror.py index 89d51bbe04..a2d2e80f5e 100644 --- a/lib/spack/spack/cmd/mirror.py +++ b/lib/spack/spack/cmd/mirror.py @@ -78,7 +78,7 @@ def mirror_add(args): url = 'file://' + url mirror_dict = { args.name : url } - spack.config.add_to_mirror_config({ args.name : url }) + spack.config.update_config('mirrors', { args.name : url }, 'user') def mirror_remove(args): @@ -92,7 +92,7 @@ def mirror_remove(args): def mirror_list(args): """Print out available mirrors to the console.""" - sec_names = spack.config.get_mirror_config() + sec_names = spack.config.get_config('mirrors') if not sec_names: tty.msg("No mirrors configured.") return @@ -130,7 +130,7 @@ def mirror_create(args): # If nothing is passed, use all packages. if not specs: - specs = [Spec(n) for n in spack.db.all_package_names()] + specs = [Spec(n) for n in spack.repo.all_package_names()] specs.sort(key=lambda s: s.format("$_$@").lower()) if args.dependencies: diff --git a/lib/spack/spack/cmd/package-list.py b/lib/spack/spack/cmd/package-list.py index eca9f918f1..5e37d5c16b 100644 --- a/lib/spack/spack/cmd/package-list.py +++ b/lib/spack/spack/cmd/package-list.py @@ -48,7 +48,7 @@ def rst_table(elts): def print_rst_package_list(): """Print out information on all packages in restructured text.""" - pkgs = sorted(spack.db.all_packages(), key=lambda s:s.name.lower()) + pkgs = sorted(spack.repo.all_packages(), key=lambda s:s.name.lower()) print ".. _package-list:" print diff --git a/lib/spack/spack/cmd/patch.py b/lib/spack/spack/cmd/patch.py index 8fc6f1383e..44fc8696db 100644 --- a/lib/spack/spack/cmd/patch.py +++ b/lib/spack/spack/cmd/patch.py @@ -47,5 +47,5 @@ def patch(parser, args): specs = spack.cmd.parse_specs(args.packages, concretize=True) for spec in specs: - package = spack.db.get(spec) + package = spack.repo.get(spec) package.do_patch() diff --git a/lib/spack/spack/cmd/pkg.py b/lib/spack/spack/cmd/pkg.py index 1ebc5ce3ee..448f762841 100644 --- a/lib/spack/spack/cmd/pkg.py +++ b/lib/spack/spack/cmd/pkg.py @@ -85,7 +85,7 @@ def list_packages(rev): def pkg_add(args): for pkg_name in args.packages: - filename = spack.db.filename_for_package_name(pkg_name) + filename = spack.repo.filename_for_package_name(pkg_name) if not os.path.isfile(filename): tty.die("No such package: %s. Path does not exist:" % pkg_name, filename) diff --git a/lib/spack/spack/cmd/providers.py b/lib/spack/spack/cmd/providers.py index 0472f9bbe4..49d6ac192a 100644 --- a/lib/spack/spack/cmd/providers.py +++ b/lib/spack/spack/cmd/providers.py @@ -39,4 +39,4 @@ def setup_parser(subparser): def providers(parser, args): for spec in spack.cmd.parse_specs(args.vpkg_spec): - colify(sorted(spack.db.providers_for(spec)), indent=4) + colify(sorted(spack.repo.providers_for(spec)), indent=4) diff --git a/lib/spack/spack/cmd/repo.py b/lib/spack/spack/cmd/repo.py new file mode 100644 index 0000000000..991d306c04 --- /dev/null +++ b/lib/spack/spack/cmd/repo.py @@ -0,0 +1,135 @@ +############################################################################## +# Copyright (c) 2013, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://llnl.github.io/spack +# Please also see the LICENSE file for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License (as published by +# the Free Software Foundation) version 2.1 dated February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +import os +import re +import shutil + +from external import argparse +import llnl.util.tty as tty +from llnl.util.filesystem import join_path, mkdirp + +import spack.spec +import spack.config +from spack.util.environment import get_path +from spack.repository import packages_dir_name, repo_config_name, Repo + +description = "Manage package source repositories." + +def setup_parser(subparser): + sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='repo_command') + + # Create + create_parser = sp.add_parser('create', help=repo_create.__doc__) + create_parser.add_argument( + 'namespace', help="Namespace to identify packages in the repository.") + create_parser.add_argument( + 'directory', help="Directory to create the repo in. Defaults to same as namespace.", nargs='?') + + # List + list_parser = sp.add_parser('list', help=repo_list.__doc__) + + +def repo_create(args): + """Create a new package repo for a particular namespace.""" + namespace = args.namespace + if not re.match(r'\w[\.\w-]*', namespace): + tty.die("Invalid namespace: '%s'" % namespace) + + root = args.directory + if not root: + root = namespace + + existed = False + if os.path.exists(root): + if os.path.isfile(root): + tty.die('File %s already exists and is not a directory' % root) + elif os.path.isdir(root): + if not os.access(root, os.R_OK | os.W_OK): + tty.die('Cannot create new repo in %s: cannot access directory.' % root) + if os.listdir(root): + tty.die('Cannot create new repo in %s: directory is not empty.' % root) + existed = True + + full_path = os.path.realpath(root) + parent = os.path.dirname(full_path) + if not os.access(parent, os.R_OK | os.W_OK): + tty.die("Cannot create repository in %s: can't access parent!" % root) + + try: + config_path = os.path.join(root, repo_config_name) + packages_path = os.path.join(root, packages_dir_name) + + mkdirp(packages_path) + with open(config_path, 'w') as config: + config.write("repo:\n") + config.write(" namespace: '%s'\n" % namespace) + + except (IOError, OSError) as e: + tty.die('Failed to create new repository in %s.' % root, + "Caused by %s: %s" % (type(e), e)) + + # try to clean up. + if existed: + shutil.rmtree(config_path, ignore_errors=True) + shutil.rmtree(packages_path, ignore_errors=True) + else: + shutil.rmtree(root, ignore_errors=True) + + tty.msg("Created repo with namespace '%s'." % namespace) + tty.msg("To register it with Spack, add a line like this to ~/.spack/repos.yaml:", + 'repos:', + ' - ' + full_path) + + +def repo_add(args): + """Remove a package source from the Spack configuration""" + # FIXME: how to deal with this with the current config architecture? + # FIXME: Repos do not have mnemonics, which I assumed would be simpler... should they have them after all? + + +def repo_remove(args): + """Remove a package source from the Spack configuration""" + # FIXME: see above. + + +def repo_list(args): + """List package sources and their mnemoics""" + roots = spack.config.get_repos_config() + repos = [Repo(r) for r in roots] + + msg = "%d package repositor" % len(repos) + msg += "y." if len(repos) == 1 else "ies." + tty.msg(msg) + + max_ns_len = max(len(r.namespace) for r in repos) + for repo in repos: + fmt = "%%-%ds%%s" % (max_ns_len + 4) + print fmt % (repo.namespace, repo.root) + + +def repo(parser, args): + action = { 'create' : repo_create, + 'list' : repo_list } + action[args.repo_command](args) diff --git a/lib/spack/spack/cmd/restage.py b/lib/spack/spack/cmd/restage.py index 703ae30a04..540c2ef2a5 100644 --- a/lib/spack/spack/cmd/restage.py +++ b/lib/spack/spack/cmd/restage.py @@ -42,5 +42,5 @@ def restage(parser, args): specs = spack.cmd.parse_specs(args.packages, concretize=True) for spec in specs: - package = spack.db.get(spec) + package = spack.repo.get(spec) package.do_restage() diff --git a/lib/spack/spack/cmd/stage.py b/lib/spack/spack/cmd/stage.py index 7638cf31c4..5786780efb 100644 --- a/lib/spack/spack/cmd/stage.py +++ b/lib/spack/spack/cmd/stage.py @@ -49,5 +49,5 @@ def stage(parser, args): specs = spack.cmd.parse_specs(args.specs, concretize=True) for spec in specs: - package = spack.db.get(spec) + package = spack.repo.get(spec) package.do_stage() diff --git a/lib/spack/spack/cmd/test-install.py b/lib/spack/spack/cmd/test-install.py index e37554155f..74017f59fb 100644 --- a/lib/spack/spack/cmd/test-install.py +++ b/lib/spack/spack/cmd/test-install.py @@ -115,7 +115,7 @@ def fetch_log(path): def failed_dependencies(spec): return set(childSpec for childSpec in spec.dependencies.itervalues() if not - spack.db.get(childSpec).installed) + spack.repo.get(childSpec).installed) def create_test_output(topSpec, newInstalls, output, getLogFunc=fetch_log): @@ -126,7 +126,7 @@ def create_test_output(topSpec, newInstalls, output, getLogFunc=fetch_log): continue failedDeps = failed_dependencies(spec) - package = spack.db.get(spec) + package = spack.repo.get(spec) if failedDeps: result = TestResult.SKIPPED dep = iter(failedDeps).next() @@ -171,7 +171,7 @@ def test_install(parser, args): newInstalls = set() for spec in topSpec.traverse(): - package = spack.db.get(spec) + package = spack.repo.get(spec) if not package.installed: newInstalls.add(spec) @@ -188,7 +188,7 @@ def test_install(parser, args): # Calling do_install for the top-level package would be sufficient but # this attempts to keep going if any package fails (other packages which # are not dependents may succeed) - package = spack.db.get(spec) + package = spack.repo.get(spec) if (not failed_dependencies(spec)) and (not package.installed): try: package.do_install( diff --git a/lib/spack/spack/cmd/uninstall.py b/lib/spack/spack/cmd/uninstall.py index 03873bb5f8..d01aa2136b 100644 --- a/lib/spack/spack/cmd/uninstall.py +++ b/lib/spack/spack/cmd/uninstall.py @@ -30,7 +30,7 @@ from llnl.util.tty.colify import colify import spack import spack.cmd -import spack.packages +import spack.repository from spack.cmd.find import display_specs from spack.package import PackageStillNeededError @@ -79,10 +79,9 @@ def uninstall(parser, args): try: # should work if package is known to spack pkgs.append(s.package) - - except spack.packages.UnknownPackageError, e: - # The package.py file has gone away -- but still want to - # uninstall. + except spack.repository.UnknownPackageError, e: + # The package.py file has gone away -- but still + # want to uninstall. spack.Package(s).do_uninstall(force=True) # Sort packages to be uninstalled by the number of installed dependents diff --git a/lib/spack/spack/cmd/urls.py b/lib/spack/spack/cmd/urls.py index a544b6153b..ebab65f7d1 100644 --- a/lib/spack/spack/cmd/urls.py +++ b/lib/spack/spack/cmd/urls.py @@ -41,7 +41,7 @@ def setup_parser(subparser): def urls(parser, args): urls = set() - for pkg in spack.db.all_packages(): + for pkg in spack.repo.all_packages(): url = getattr(pkg.__class__, 'url', None) if url: urls.add(url) diff --git a/lib/spack/spack/cmd/versions.py b/lib/spack/spack/cmd/versions.py index 494f13d36d..bba75dae96 100644 --- a/lib/spack/spack/cmd/versions.py +++ b/lib/spack/spack/cmd/versions.py @@ -34,7 +34,7 @@ def setup_parser(subparser): def versions(parser, args): - pkg = spack.db.get(args.package) + pkg = spack.repo.get(args.package) safe_versions = pkg.versions fetched_versions = pkg.fetch_remote_versions() diff --git a/lib/spack/spack/compilers/__init__.py b/lib/spack/spack/compilers/__init__.py index 66e608cf79..321452fddb 100644 --- a/lib/spack/spack/compilers/__init__.py +++ b/lib/spack/spack/compilers/__init__.py @@ -35,6 +35,7 @@ import spack import spack.error import spack.spec import spack.config +import spack.architecture from spack.util.multiproc import parmap from spack.compiler import Compiler @@ -55,23 +56,48 @@ def _auto_compiler_spec(function): return converter -def _get_config(): - """Get a Spack config, but make sure it has compiler configuration - first.""" +def _to_dict(compiler): + """Return a dict version of compiler suitable to insert in YAML.""" + return { + str(compiler.spec) : dict( + (attr, getattr(compiler, attr, None)) + for attr in _required_instance_vars) + } + + +def get_compiler_config(arch=None): + """Return the compiler configuration for the specified architecture. + + If the compiler configuration designates some compilers for + 'all' architectures, those are merged into the result, as well. + + """ # If any configuration file has compilers, just stick with the # ones already configured. - config = spack.config.get_compilers_config() - existing = [spack.spec.CompilerSpec(s) - for s in config] - if existing: - return config + config = spack.config.get_config('compilers') + + if arch is None: + arch = spack.architecture.sys_type() - compilers = find_compilers(*get_path('PATH')) - add_compilers_to_config('user', *compilers) + if arch not in config: + config[arch] = {} + compilers = find_compilers(*get_path('PATH')) + for compiler in compilers: + config[arch].update(_to_dict(compiler)) + spack.config.update_config('compilers', config, 'user') - # After writing compilers to the user config, return a full config - # from all files. - return spack.config.get_compilers_config() + # Merge 'all' compilers with arch-specific ones. + merged_config = config.get('all', {}) + merged_config = spack.config._merge_yaml(merged_config, config[arch]) + + return merged_config + + +def all_compilers(arch=None): + """Return a set of specs for all the compiler versions currently + available to build with. These are instances of CompilerSpec. + """ + return [spack.spec.CompilerSpec(s) for s in get_compiler_config(arch)] _cached_default_compiler = None @@ -123,20 +149,6 @@ def find_compilers(*path): return clist -def add_compilers_to_config(scope, *compilers): - compiler_config_tree = {} - for compiler in compilers: - compiler_entry = {} - for c in _required_instance_vars: - val = getattr(compiler, c) - if not val: - val = "None" - compiler_entry[c] = val - compiler_config_tree[str(compiler.spec)] = compiler_entry - spack.config.add_to_compiler_config(compiler_config_tree, scope) - - - def supported_compilers(): """Return a set of names of compilers supported by Spack. @@ -152,14 +164,6 @@ def supported(compiler_spec): return compiler_spec.name in supported_compilers() -def all_compilers(): - """Return a set of specs for all the compiler versions currently - available to build with. These are instances of CompilerSpec. - """ - configuration = _get_config() - return [spack.spec.CompilerSpec(s) for s in configuration] - - @_auto_compiler_spec def find(compiler_spec): """Return specs of available compilers that match the supplied @@ -172,7 +176,7 @@ def compilers_for_spec(compiler_spec): """This gets all compilers that satisfy the supplied CompilerSpec. Returns an empty list if none are found. """ - config = _get_config() + config = get_compiler_config() def get_compiler(cspec): items = config[str(cspec)] diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py index c127f6a28f..b401f59d7f 100644 --- a/lib/spack/spack/config.py +++ b/lib/spack/spack/config.py @@ -45,11 +45,11 @@ several configuration files, such as compilers.yaml or mirrors.yaml. Configuration file format =============================== -Configuration files are formatted using YAML syntax. -This format is implemented by Python's -yaml class, and it's easy to read and versatile. +Configuration files are formatted using YAML syntax. This format is +implemented by libyaml (included with Spack as an external module), +and it's easy to read and versatile. -The config files are structured as trees, like this ``compiler`` section:: +Config files are structured as trees, like this ``compiler`` section:: compilers: chaos_5_x86_64_ib: @@ -67,274 +67,339 @@ In this example, entries like ''compilers'' and ''xlc@12.1'' are used to categorize entries beneath them in the tree. At the root of the tree, entries like ''cc'' and ''cxx'' are specified as name/value pairs. -Spack returns these trees as nested dicts. The dict for the above example -would looks like: - - { 'compilers' : - { 'chaos_5_x86_64_ib' : - { 'gcc@4.4.7' : - { 'cc' : '/usr/bin/gcc', - 'cxx' : '/usr/bin/g++' - 'f77' : '/usr/bin/gfortran' - 'fc' : '/usr/bin/gfortran' } - } - { 'bgqos_0' : - { 'cc' : '/usr/local/bin/mpixlc' } - } - } - -Some routines, like get_mirrors_config and get_compilers_config may strip -off the top-levels of the tree and return subtrees. +``config.get_config()`` returns these trees as nested dicts, but it +strips the first level off. So, ``config.get_config('compilers')`` +would return something like this for the above example: + + { 'chaos_5_x86_64_ib' : + { 'gcc@4.4.7' : + { 'cc' : '/usr/bin/gcc', + 'cxx' : '/usr/bin/g++' + 'f77' : '/usr/bin/gfortran' + 'fc' : '/usr/bin/gfortran' } + } + { 'bgqos_0' : + { 'cc' : '/usr/local/bin/mpixlc' } } + +Likewise, the ``mirrors.yaml`` file's first line must be ``mirrors:``, +but ``get_config()`` strips that off too. + +Precedence +=============================== + +``config.py`` routines attempt to recursively merge configuration +across scopes. So if there are ``compilers.py`` files in both the +site scope and the user scope, ``get_config('compilers')`` will return +merged dictionaries of *all* the compilers available. If a user +compiler conflicts with a site compiler, Spack will overwrite the site +configuration wtih the user configuration. If both the user and site +``mirrors.yaml`` files contain lists of mirrors, then ``get_config()`` +will return a concatenated list of mirrors, with the user config items +first. + +Sometimes, it is useful to *completely* override a site setting with a +user one. To accomplish this, you can use *two* colons at the end of +a key in a configuration file. For example, this: + + compilers:: + chaos_5_x86_64_ib: + gcc@4.4.7: + cc: /usr/bin/gcc + cxx: /usr/bin/g++ + f77: /usr/bin/gfortran + fc: /usr/bin/gfortran + bgqos_0: + xlc@12.1: + cc: /usr/local/bin/mpixlc + ... + +Will make Spack take compilers *only* from the user configuration, and +the site configuration will be ignored. + """ import os -import exceptions import sys - -from ordereddict_backport import OrderedDict -from llnl.util.lang import memoized -import spack.error - +import copy import yaml from yaml.error import MarkedYAMLError + import llnl.util.tty as tty from llnl.util.filesystem import mkdirp -_config_sections = {} -class _ConfigCategory: - name = None - filename = None - merge = True - def __init__(self, n, f, m): - self.name = n - self.filename = f - self.merge = m - self.files_read_from = [] - self.result_dict = {} - _config_sections[n] = self - -_ConfigCategory('compilers', 'compilers.yaml', True) -_ConfigCategory('mirrors', 'mirrors.yaml', True) -_ConfigCategory('view', 'views.yaml', True) -_ConfigCategory('order', 'orders.yaml', True) - -"""Names of scopes and their corresponding configuration files.""" -config_scopes = [('site', os.path.join(spack.etc_path, 'spack')), - ('user', os.path.expanduser('~/.spack'))] - -_compiler_by_arch = {} -_read_config_file_result = {} +import spack +from spack.error import SpackError + +"""List of valid config sections.""" +valid_sections = ('compilers', 'mirrors', 'repos') + + +def check_section(section): + """Raise a ValueError if the section is not a valid section.""" + if section not in valid_sections: + raise ValueError("Invalid config section: '%s'. Options are %s." + % (section, valid_sections)) + + +class ConfigScope(object): + """This class represents a configuration scope. + + A scope is one directory containing named configuration files. + Each file is a config "section" (e.g., mirrors, compilers, etc). + """ + def __init__(self, name, path): + self.name = name # scope name. + self.path = path # path to directory containing configs. + self.sections = {} # sections read from config files. + + + def get_section_filename(self, section): + check_section(section) + return os.path.join(self.path, "%s.yaml" % section) + + + def get_section(self, section): + if not section in self.sections: + path = self.get_section_filename(section) + data = _read_config_file(path) + self.sections[section] = {} if data is None else data + return self.sections[section] + + + def write_section(self, section): + filename = self.get_section_filename(section) + data = self.get_section(section) + try: + mkdirp(self.path) + with open(filename, 'w') as f: + yaml.dump(data, stream=f, default_flow_style=False) + except (yaml.YAMLError, IOError) as e: + raise ConfigFileError("Error writing to config file: '%s'" % str(e)) + + + def clear(self): + """Empty cached config information.""" + self.sections = {} + + +"""List of config scopes by name. + Later scopes in the list will override earlier scopes. +""" +config_scopes = [ + ConfigScope('site', os.path.join(spack.etc_path, 'spack')), + ConfigScope('user', os.path.expanduser('~/.spack'))] + +"""List of valid scopes, for convenience.""" +valid_scopes = (s.name for s in config_scopes) + + +def check_scope(scope): + if scope is None: + return 'user' + elif scope not in valid_scopes: + raise ValueError("Invalid config scope: '%s'. Must be one of %s." + % (scope, valid_scopes)) + return scope + + +def get_scope(scope): + scope = check_scope(scope) + return next(s for s in config_scopes if s.name == scope) + + def _read_config_file(filename): - """Read a given YAML configuration file""" - global _read_config_file_result - if filename in _read_config_file_result: - return _read_config_file_result[filename] + """Read a YAML configuration file.""" + # Ignore nonexisting files. + if not os.path.exists(filename): + return None + + elif not os.path.isfile(filename): + raise ConfigFileError( + "Invlaid configuration. %s exists but is not a file." % filename) + + elif not os.access(filename, os.R_OK): + raise ConfigFileError("Config file is not readable: %s." % filename) try: with open(filename) as f: - ydict = yaml.load(f) + return yaml.load(f) + except MarkedYAMLError, e: - tty.die("Error parsing yaml%s: %s" % (str(e.context_mark), e.problem)) - except exceptions.IOError, e: - _read_config_file_result[filename] = None - return None - _read_config_file_result[filename] = ydict - return ydict + raise ConfigFileError( + "Error parsing yaml%s: %s" % (str(e.context_mark), e.problem)) + + except IOError, e: + raise ConfigFileError( + "Error reading configuration file %s: %s" % (filename, str(e))) def clear_config_caches(): """Clears the caches for configuration files, which will cause them to be re-read upon the next request""" - for key,s in _config_sections.iteritems(): - s.files_read_from = [] - s.result_dict = {} - spack.config._read_config_file_result = {} - spack.config._compiler_by_arch = {} - spack.compilers._cached_default_compiler = None - - -def _merge_dicts(d1, d2): - """Recursively merges two configuration trees, with entries - in d2 taking precedence over d1""" - if not d1: - return d2.copy() - if not d2: - return d1 - - for key2, val2 in d2.iteritems(): - if not key2 in d1: - d1[key2] = val2 - continue - val1 = d1[key2] - if isinstance(val1, dict) and isinstance(val2, dict): - d1[key2] = _merge_dicts(val1, val2) - continue - if isinstance(val1, list) and isinstance(val2, list): - val1.extend(val2) - seen = set() - d1[key2] = [ x for x in val1 if not (x in seen or seen.add(x)) ] - continue - d1[key2] = val2 - return d1 - - -def get_config(category_name): - """Get the confguration tree for the names category. Strips off the - top-level category entry from the dict""" - global config_scopes - category = _config_sections[category_name] - if category.result_dict: - return category.result_dict - - category.result_dict = {} - for scope, scope_path in config_scopes: - path = os.path.join(scope_path, category.filename) - result = _read_config_file(path) - if not result: - continue - if not category_name in result: - continue - category.files_read_from.insert(0, path) - result = result[category_name] - if category.merge: - category.result_dict = _merge_dicts(category.result_dict, result) - else: - category.result_dict = result - return category.result_dict - - -def get_compilers_config(arch=None): - """Get the compiler configuration from config files for the given - architecture. Strips off the architecture component of the - configuration""" - global _compiler_by_arch - if not arch: - arch = spack.architecture.sys_type() - if arch in _compiler_by_arch: - return _compiler_by_arch[arch] - - cc_config = get_config('compilers') - if arch in cc_config and 'all' in cc_config: - arch_compiler = dict(cc_config[arch]) - _compiler_by_arch[arch] = _merge_dict(arch_compiler, cc_config['all']) - elif arch in cc_config: - _compiler_by_arch[arch] = cc_config[arch] - elif 'all' in cc_config: - _compiler_by_arch[arch] = cc_config['all'] - else: - _compiler_by_arch[arch] = {} - return _compiler_by_arch[arch] - - -def get_mirror_config(): - """Get the mirror configuration from config files""" - return get_config('mirrors') - - -def get_config_scope_dirname(scope): - """For a scope return the config directory""" - global config_scopes - for s,p in config_scopes: - if s == scope: - return p - tty.die("Unknown scope %s. Valid options are %s" % - (scope, ", ".join([s for s,p in config_scopes]))) - - -def get_config_scope_filename(scope, category_name): - """For some scope and category, get the name of the configuration file""" - if not category_name in _config_sections: - tty.die("Unknown config category %s. Valid options are: %s" % - (category_name, ", ".join([s for s in _config_sections]))) - return os.path.join(get_config_scope_dirname(scope), _config_sections[category_name].filename) - - -def add_to_config(category_name, addition_dict, scope=None): - """Merge a new dict into a configuration tree and write the new - configuration to disk""" - global _read_config_file_result - get_config(category_name) - category = _config_sections[category_name] - - #If scope is specified, use it. Otherwise use the last config scope that - #we successfully parsed data from. - file = None - path = None - if not scope and not category.files_read_from: - scope = 'user' - if scope: - try: - dir = get_config_scope_dirname(scope) - if not os.path.exists(dir): - mkdirp(dir) - path = os.path.join(dir, category.filename) - file = open(path, 'w') - except exceptions.IOError, e: - pass + for scope in config_scopes: + scope.clear() + + +def _merge_yaml(dest, source): + """Merges source into dest; entries in source take precedence over dest. + + This routine may modify dest and should be assigned to dest, in + case dest was None to begin with, e.g.: + + dest = _merge_yaml(dest, source) + + Config file authors can optionally end any attribute in a dict + with `::` instead of `:`, and the key will override that of the + parent instead of merging. + + """ + def they_are(t): + return isinstance(dest, t) and isinstance(source, t) + + # If both are None, handle specially and return None. + if source is None and dest is None: + return None + + # If source is None, overwrite with source. + elif source is None: + return None + + # Source list is prepended (for precedence) + if they_are(list): + seen = set(source) + dest[:] = source + [x for x in dest if x not in seen] + return dest + + # Source dict is merged into dest. Extra ':' means overwrite. + elif they_are(dict): + for sk, sv in source.iteritems(): + # allow total override with, e.g., repos:: + override = sk.endswith(':') + if override: + sk = sk.rstrip(':') + + if override or not sk in dest: + dest[sk] = copy.copy(sv) + else: + dest[sk] = _merge_yaml(dest[sk], source[sk]) + return dest + + # In any other case, overwrite with a copy of the source value. else: - for p in category.files_read_from: - try: - file = open(p, 'w') - except exceptions.IOError, e: - pass - if file: - path = p - break; - if not file: - tty.die('Unable to write to config file %s' % path) - - #Merge the new information into the existing file info, then write to disk - new_dict = _read_config_file_result[path] - if new_dict and category_name in new_dict: - new_dict = new_dict[category_name] - new_dict = _merge_dicts(new_dict, addition_dict) - new_dict = { category_name : new_dict } - _read_config_file_result[path] = new_dict - yaml.dump(new_dict, stream=file, default_flow_style=False) - file.close() - - #Merge the new information into the cached results - category.result_dict = _merge_dicts(category.result_dict, addition_dict) - - -def add_to_mirror_config(addition_dict, scope=None): - """Add mirrors to the configuration files""" - add_to_config('mirrors', addition_dict, scope) - - -def add_to_compiler_config(addition_dict, scope=None, arch=None): - """Add compilerss to the configuration files""" - if not arch: - arch = spack.architecture.sys_type() - add_to_config('compilers', { arch : addition_dict }, scope) - clear_config_caches() - - -def remove_from_config(category_name, key_to_rm, scope=None): - """Remove a configuration key and write a new configuration to disk""" - global config_scopes - get_config(category_name) - scopes_to_rm_from = [scope] if scope else [s for s,p in config_scopes] - category = _config_sections[category_name] - - rmd_something = False - for s in scopes_to_rm_from: - path = get_config_scope_filename(scope, category_name) - result = _read_config_file(path) - if not result: + return copy.copy(source) + + +def substitute_spack_prefix(path): + """Replaces instances of $spack with Spack's prefix.""" + return path.replace('$spack', spack.prefix) + + +def get_config(section): + """Get configuration settings for a section. + + Strips off the top-level section name from the YAML dict. + """ + check_section(section) + merged_section = {} + + for scope in config_scopes: + # read potentially cached data from the scope. + data = scope.get_section(section) + if not data or not section in data: continue - if not key_to_rm in result[category_name]: + + # extract data under the section name header + data = data[section] + + # ignore empty sections for easy commenting of single-line configs. + if not data: continue - with open(path, 'w') as f: - result[category_name].pop(key_to_rm, None) - yaml.dump(result, stream=f, default_flow_style=False) - category.result_dict.pop(key_to_rm, None) - rmd_something = True - return rmd_something + + # merge config data from scopes. + merged_section = _merge_yaml(merged_section, data) + + return merged_section + + +def get_repos_config(): + repo_list = get_config('repos') + if repo_list is None: + return [] + + if not isinstance(repo_list, list): + tty.die("Bad repository configuration. 'repos' element does not contain a list.") + + def expand_repo_path(path): + path = substitute_spack_prefix(path) + path = os.path.expanduser(path) + return path + return [expand_repo_path(repo) for repo in repo_list] + + +def get_config_filename(scope, section): + """For some scope and section, get the name of the configuration file""" + scope = get_scope(scope) + return scope.get_section_filename(section) + + +def update_config(section, update_data, scope=None): + """Update the configuration file for a particular scope. + + Merges contents of update_data into the scope's data for the + specified section, then writes out the config file. + + update_data shoudl contain only the section's data, with the + top-level name stripped off. This can be a list, dict, or any + other yaml-ish structure. + + """ + # read in the config to ensure we've got current data + get_config(section) + + check_section(section) # validate section name + scope = get_scope(scope) # get ConfigScope object from string. + + # read only the requested section's data. + data = scope.get_section(section) + data = _merge_yaml(data, { section : update_data }) + scope.write_section(section) + + +def remove_from_config(section, key_to_rm, scope=None): + """Remove a configuration key and write updated configuration to disk. + + Return True if something was removed, False otherwise. + + """ + # ensure configs are current by reading in. + get_config(section) + + # check args and get the objects we need. + scope = get_scope(scope) + data = scope.get_section(section) + filename = scope.get_section_filename(section) + + # do some checks + if not data: + return False + + if not section in data: + raise ConfigFileError("Invalid configuration file: '%s'" % filename) + + if key_to_rm not in section[section]: + return False + + # remove the key from the section's configuration + del data[section][key_to_rm] + scope.write_section(section) """Print a configuration to stdout""" -def print_category(category_name): - if not category_name in _config_sections: - tty.die("Unknown config category %s. Valid options are: %s" % - (category_name, ", ".join([s for s in _config_sections]))) - yaml.dump(get_config(category_name), stream=sys.stdout, default_flow_style=False) +def print_section(section): + try: + yaml.dump(get_config(section), stream=sys.stdout, default_flow_style=False) + except (yaml.YAMLError, IOError) as e: + raise ConfigError("Error reading configuration: %s" % section) + + +class ConfigError(SpackError): pass +class ConfigFileError(ConfigError): pass diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py index a6f1cc5077..0fa18db34b 100644 --- a/lib/spack/spack/database.py +++ b/lib/spack/spack/database.py @@ -54,7 +54,7 @@ import spack.spec from spack.version import Version from spack.spec import Spec from spack.error import SpackError -from spack.packages import UnknownPackageError +from spack.repository import UnknownPackageError # DB goes in this directory underneath the root _db_dirname = '.spack-db' @@ -215,7 +215,6 @@ class Database(object): # Specs from the database need to be marked concrete because # they represent actual installations. spec._mark_concrete() - return spec @@ -554,7 +553,7 @@ class Database(object): for key, rec in self._data.items(): if installed is not any and rec.installed != installed: continue - if known is not any and spack.db.exists(rec.spec.name) != known: + if known is not any and spack.repo.exists(rec.spec.name) != known: continue if query_spec is any or rec.spec.satisfies(query_spec): results.append(rec.spec) diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py index aa9fbd8d33..0b98211cb9 100644 --- a/lib/spack/spack/directives.py +++ b/lib/spack/spack/directives.py @@ -244,11 +244,10 @@ def patch(pkg, url_or_filename, level=1, when=None): if when is None: when = pkg.name when_spec = parse_anonymous_spec(when, pkg.name) - cur_patches = pkg.patches.setdefault(when_spec, []) # if this spec is identical to some other, then append this # patch to the existing list. - cur_patches.append(Patch(pkg.name, url_or_filename, level)) + cur_patches.append(Patch(pkg, url_or_filename, level)) @directive('variants') diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py index d91fbe9f4e..3e416a6a1f 100644 --- a/lib/spack/spack/directory_layout.py +++ b/lib/spack/spack/directory_layout.py @@ -213,7 +213,6 @@ class YamlDirectoryLayout(DirectoryLayout): # Specs read from actual installations are always concrete spec._mark_concrete() - return spec diff --git a/lib/spack/spack/graph.py b/lib/spack/spack/graph.py index e8c5cfb080..f3732dfbff 100644 --- a/lib/spack/spack/graph.py +++ b/lib/spack/spack/graph.py @@ -523,7 +523,7 @@ def graph_dot(*specs, **kwargs): return '"%s"' % string if not specs: - specs = [p.name for p in spack.db.all_packages()] + specs = [p.name for p in spack.repo.all_packages()] else: roots = specs specs = set() diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index b44554e418..5db83064b5 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -372,7 +372,7 @@ class Package(object): self._total_time = 0.0 if self.is_extension: - spack.db.get(self.extendee_spec)._check_extendable() + spack.repo.get(self.extendee_spec)._check_extendable() @property @@ -564,7 +564,7 @@ class Package(object): yield spec continue - for pkg in spack.db.get(name).preorder_traversal(visited, **kwargs): + for pkg in spack.repo.get(name).preorder_traversal(visited, **kwargs): yield pkg @@ -774,6 +774,12 @@ class Package(object): tty.msg("Patched %s" % self.name) + @property + def namespace(self): + namespace, dot, module = self.__module__.rpartition('.') + return namespace + + def do_fake_install(self): """Make a fake install directory contaiing a 'fake' file in bin.""" mkdirp(self.prefix.bin) diff --git a/lib/spack/spack/packages.py b/lib/spack/spack/packages.py deleted file mode 100644 index 080644fb90..0000000000 --- a/lib/spack/spack/packages.py +++ /dev/null @@ -1,210 +0,0 @@ -############################################################################## -# Copyright (c) 2013, Lawrence Livermore National Security, LLC. -# Produced at the Lawrence Livermore National Laboratory. -# -# This file is part of Spack. -# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. -# LLNL-CODE-647188 -# -# For details, see https://github.com/llnl/spack -# Please also see the LICENSE file for our notice and the LGPL. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License (as published by -# the Free Software Foundation) version 2.1 dated February 1999. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and -# conditions of the GNU General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -############################################################################## -import os -import sys -import inspect -import glob -import imp - -import llnl.util.tty as tty -from llnl.util.filesystem import join_path -from llnl.util.lang import * - -import spack.error -import spack.spec -from spack.virtual import ProviderIndex -from spack.util.naming import mod_to_class, validate_module_name - -# Name of module under which packages are imported -_imported_packages_module = 'spack.packages' - -# Name of the package file inside a package directory -_package_file_name = 'package.py' - - -def _autospec(function): - """Decorator that automatically converts the argument of a single-arg - function to a Spec.""" - def converter(self, spec_like, **kwargs): - if not isinstance(spec_like, spack.spec.Spec): - spec_like = spack.spec.Spec(spec_like) - return function(self, spec_like, **kwargs) - return converter - - -class PackageDB(object): - def __init__(self, root): - """Construct a new package database from a root directory.""" - self.root = root - self.instances = {} - self.provider_index = None - - - @_autospec - def get(self, spec, **kwargs): - if spec.virtual: - raise UnknownPackageError(spec.name) - - key = hash(spec) - if kwargs.get('new', False): - if key in self.instances: - del self.instances[key] - - if not key in self.instances: - package_class = self.get_class_for_package_name(spec.name) - try: - copy = spec.copy() # defensive copy. Package owns its spec. - self.instances[key] = package_class(copy) - except Exception, e: - if spack.debug: - sys.excepthook(*sys.exc_info()) - raise FailedConstructorError(spec.name, e) - - return self.instances[key] - - - @_autospec - def delete(self, spec): - """Force a package to be recreated.""" - del self.instances[spec.dag_hash()] - - - def purge(self): - """Clear entire package instance cache.""" - self.instances.clear() - - - @_autospec - def providers_for(self, vpkg_spec): - if self.provider_index is None: - self.provider_index = ProviderIndex(self.all_package_names()) - - providers = self.provider_index.providers_for(vpkg_spec) - if not providers: - raise UnknownPackageError(vpkg_spec.name) - return providers - - - @_autospec - def extensions_for(self, extendee_spec): - return [p for p in self.all_packages() if p.extends(extendee_spec)] - - - def dirname_for_package_name(self, pkg_name): - """Get the directory name for a particular package. This is the - directory that contains its package.py file.""" - return join_path(self.root, pkg_name) - - - def filename_for_package_name(self, pkg_name): - """Get the filename for the module we should load for a particular - package. Packages for a pacakge DB live in - ``$root/<package_name>/package.py`` - - This will return a proper package.py path even if the - package doesn't exist yet, so callers will need to ensure - the package exists before importing. - """ - validate_module_name(pkg_name) - pkg_dir = self.dirname_for_package_name(pkg_name) - return join_path(pkg_dir, _package_file_name) - - - @memoized - def all_package_names(self): - """Generator function for all packages. This looks for - ``<pkg_name>/package.py`` files within the root direcotry""" - all_package_names = [] - for pkg_name in os.listdir(self.root): - pkg_dir = join_path(self.root, pkg_name) - pkg_file = join_path(pkg_dir, _package_file_name) - if os.path.isfile(pkg_file): - all_package_names.append(pkg_name) - all_package_names.sort() - return all_package_names - - - def all_packages(self): - for name in self.all_package_names(): - yield self.get(name) - - - @memoized - def exists(self, pkg_name): - """Whether a package with the supplied name exists .""" - return os.path.exists(self.filename_for_package_name(pkg_name)) - - - @memoized - def get_class_for_package_name(self, pkg_name): - """Get an instance of the class for a particular package. - - This method uses Python's ``imp`` package to load python - source from a Spack package's ``package.py`` file. A - normal python import would only load each package once, but - because we do this dynamically, the method needs to be - memoized to ensure there is only ONE package class - instance, per package, per database. - """ - file_path = self.filename_for_package_name(pkg_name) - - if os.path.exists(file_path): - if not os.path.isfile(file_path): - tty.die("Something's wrong. '%s' is not a file!" % file_path) - if not os.access(file_path, os.R_OK): - tty.die("Cannot read '%s'!" % file_path) - else: - raise UnknownPackageError(pkg_name) - - class_name = mod_to_class(pkg_name) - try: - module_name = _imported_packages_module + '.' + pkg_name - module = imp.load_source(module_name, file_path) - - except ImportError, e: - tty.die("Error while importing %s from %s:\n%s" % ( - pkg_name, file_path, e.message)) - - cls = getattr(module, class_name) - if not inspect.isclass(cls): - tty.die("%s.%s is not a class" % (pkg_name, class_name)) - - return cls - - -class UnknownPackageError(spack.error.SpackError): - """Raised when we encounter a package spack doesn't have.""" - def __init__(self, name): - super(UnknownPackageError, self).__init__("Package '%s' not found." % name) - self.name = name - - -class FailedConstructorError(spack.error.SpackError): - """Raised when a package's class constructor fails.""" - def __init__(self, name, reason): - super(FailedConstructorError, self).__init__( - "Class constructor failed for package '%s'." % name, - str(reason)) - self.name = name diff --git a/lib/spack/spack/patch.py b/lib/spack/spack/patch.py index 42f2105f52..b82a047753 100644 --- a/lib/spack/spack/patch.py +++ b/lib/spack/spack/patch.py @@ -41,8 +41,8 @@ class Patch(object): """This class describes a patch to be applied to some expanded source code.""" - def __init__(self, pkg_name, path_or_url, level): - self.pkg_name = pkg_name + def __init__(self, pkg, path_or_url, level): + self.pkg_name = pkg.name self.path_or_url = path_or_url self.path = None self.url = None @@ -54,7 +54,7 @@ class Patch(object): if '://' in path_or_url: self.url = path_or_url else: - pkg_dir = spack.db.dirname_for_package_name(pkg_name) + pkg_dir = spack.repo.dirname_for_package_name(self.pkg_name) self.path = join_path(pkg_dir, path_or_url) if not os.path.isfile(self.path): raise NoSuchPatchFileError(pkg_name, self.path) diff --git a/lib/spack/spack/repository.py b/lib/spack/spack/repository.py new file mode 100644 index 0000000000..4e91855db0 --- /dev/null +++ b/lib/spack/spack/repository.py @@ -0,0 +1,665 @@ +############################################################################## +# Copyright (c) 2013, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://llnl.github.io/spack +# Please also see the LICENSE file for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License (as published by +# the Free Software Foundation) version 2.1 dated February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +import os +import exceptions +import sys +import inspect +import imp +import re +import traceback +from bisect import bisect_left +from external import yaml + +import llnl.util.tty as tty +from llnl.util.filesystem import join_path + +import spack.error +import spack.spec +from spack.virtual import ProviderIndex +from spack.util.naming import * + +# +# Super-namespace for all packages. +# Package modules are imported as spack.pkg.<namespace>.<pkg-name>. +# +repo_namespace = 'spack.pkg' + +# +# These names describe how repos should be laid out in the filesystem. +# +repo_config_name = 'repo.yaml' # Top-level filename for repo config. +packages_dir_name = 'packages' # Top-level repo directory containing pkgs. +package_file_name = 'package.py' # Filename for packages in a repository. + +def _autospec(function): + """Decorator that automatically converts the argument of a single-arg + function to a Spec.""" + def converter(self, spec_like, *args, **kwargs): + if not isinstance(spec_like, spack.spec.Spec): + spec_like = spack.spec.Spec(spec_like) + return function(self, spec_like, *args, **kwargs) + return converter + + +def _make_namespace_module(ns): + module = imp.new_module(ns) + module.__file__ = "(spack namespace)" + module.__path__ = [] + module.__package__ = ns + return module + + +class RepoPath(object): + """A RepoPath is a list of repos that function as one. + + It functions exactly like a Repo, but it operates on the + combined results of the Repos in its list instead of on a + single package repository. + """ + def __init__(self, *repo_dirs, **kwargs): + # super-namespace for all packages in the RepoPath + self.super_namespace = kwargs.get('namespace', repo_namespace) + + self.repos = [] + self.by_namespace = NamespaceTrie() + self.by_path = {} + + self._all_package_names = [] + self._provider_index = None + + # Add each repo to this path. + for root in repo_dirs: + repo = Repo(root, self.super_namespace) + self.put_last(repo) + + + def swap(self, other): + """Convenience function to make swapping repostiories easier. + + This is currently used by mock tests. + TODO: Maybe there is a cleaner way. + + """ + attrs = ['repos', + 'by_namespace', + 'by_path', + '_all_package_names', + '_provider_index'] + for attr in attrs: + tmp = getattr(self, attr) + setattr(self, attr, getattr(other, attr)) + setattr(other, attr, tmp) + + + def _add(self, repo): + """Add a repository to the namespace and path indexes. + + Checks for duplicates -- two repos can't have the same root + directory, and they provide have the same namespace. + + """ + if repo.root in self.by_path: + raise DuplicateRepoError("Package repos are the same", + repo, self.by_path[repo.root]) + + if repo.namespace in self.by_namespace: + raise DuplicateRepoError("Package repos cannot provide the same namespace", + repo, self.by_namespace[repo.namespace]) + + # Add repo to the pkg indexes + self.by_namespace[repo.full_namespace] = repo + self.by_path[repo.root] = repo + + # add names to the cached name list + new_pkgs = set(repo.all_package_names()) + new_pkgs.update(set(self._all_package_names)) + self._all_package_names = sorted(new_pkgs, key=lambda n:n.lower()) + + + def put_first(self, repo): + """Add repo first in the search path.""" + self._add(repo) + self.repos.insert(0, repo) + + + def put_last(self, repo): + """Add repo last in the search path.""" + self._add(repo) + self.repos.append(repo) + + + def remove(self, repo): + """Remove a repo from the search path.""" + if repo in self.repos: + self.repos.remove(repo) + + + def all_package_names(self): + """Return all unique package names in all repositories.""" + return self._all_package_names + + + def all_packages(self): + for name in self.all_package_names(): + yield self.get(name) + + + @_autospec + def providers_for(self, vpkg_spec): + if self._provider_index is None: + self._provider_index = ProviderIndex(self.all_package_names()) + + providers = self._provider_index.providers_for(vpkg_spec) + if not providers: + raise UnknownPackageError(vpkg_spec.name) + return providers + + + def find_module(self, fullname, path=None): + """Implements precedence for overlaid namespaces. + + Loop checks each namespace in self.repos for packages, and + also handles loading empty containing namespaces. + + """ + # namespaces are added to repo, and package modules are leaves. + namespace, dot, module_name = fullname.rpartition('.') + + # If it's a module in some repo, or if it is the repo's + # namespace, let the repo handle it. + for repo in self.repos: + if namespace == repo.full_namespace: + if repo.real_name(module_name): + return repo + elif fullname == repo.full_namespace: + return repo + + # No repo provides the namespace, but it is a valid prefix of + # something in the RepoPath. + if self.by_namespace.is_prefix(fullname): + return self + + return None + + + def load_module(self, fullname): + """Handles loading container namespaces when necessary. + + See ``Repo`` for how actual package modules are loaded. + """ + if fullname in sys.modules: + return sys.modules[fullname] + + + # partition fullname into prefix and module name. + namespace, dot, module_name = fullname.rpartition('.') + + if not self.by_namespace.is_prefix(fullname): + raise ImportError("No such Spack repo: %s" % fullname) + + module = _make_namespace_module(namespace) + module.__loader__ = self + sys.modules[fullname] = module + return module + + + def repo_for_pkg(self, pkg_name): + for repo in self.repos: + if pkg_name in repo: + return repo + raise UnknownPackageError(pkg_name) + + + @_autospec + def get(self, spec, new=False): + """Find a repo that contains the supplied spec's package. + + Raises UnknownPackageError if not found. + """ + # if the spec has a fully qualified namespace, we grab it + # directly and ignore overlay precedence. + if spec.namespace: + fullspace = '%s.%s' % (self.super_namespace, spec.namespace) + if not fullspace in self.by_namespace: + raise UnknownPackageError( + "No configured repository contains package %s." % spec.fullname) + return self.by_namespace[fullspace].get(spec) + else: + return self.repo_for_pkg(spec.name).get(spec) + + + def dirname_for_package_name(self, pkg_name): + return self.repo_for_pkg(pkg_name).dirname_for_package_name(pkg_name) + + + def filename_for_package_name(self, pkg_name): + return self.repo_for_pkg(pkg_name).filename_for_package_name(pkg_name) + + + def exists(self, pkg_name): + return any(repo.exists(pkg_name) for repo in self.repos) + + + def __contains__(self, pkg_name): + return self.exists(pkg_name) + + + +class Repo(object): + """Class representing a package repository in the filesystem. + + Each package repository must have a top-level configuration file + called `repo.yaml`. + + Currently, `repo.yaml` this must define: + + `namespace`: + A Python namespace where the repository's packages should live. + + """ + def __init__(self, root, namespace=repo_namespace): + """Instantiate a package repository from a filesystem path. + + Arguments: + root The root directory of the repository. + + namespace A super-namespace that will contain the repo-defined + namespace (this is generally jsut `spack.pkg`). The + super-namespace is Spack's way of separating repositories + from other python namespaces. + + """ + # Root directory, containing _repo.yaml and package dirs + self.root = root + + # super-namespace for all packages in the Repo + self.super_namespace = namespace + + # check and raise BadRepoError on fail. + def check(condition, msg): + if not condition: raise BadRepoError(msg) + + # Validate repository layout. + self.config_file = join_path(self.root, repo_config_name) + check(os.path.isfile(self.config_file), + "No %s found in '%s'" % (repo_config_name, root)) + self.packages_path = join_path(self.root, packages_dir_name) + check(os.path.isdir(self.packages_path), + "No directory '%s' found in '%s'" % (repo_config_name, root)) + + # Read configuration and validate namespace + config = self._read_config() + check('namespace' in config, '%s must define a namespace.' + % join_path(self.root, repo_config_name)) + + self.namespace = config['namespace'] + check(re.match(r'[a-zA-Z][a-zA-Z0-9_.]+', self.namespace), + ("Invalid namespace '%s' in repo '%s'. " % (self.namespace, self.root)) + + "Namespaces must be valid python identifiers separated by '.'") + + # Set up 'full_namespace' to include the super-namespace + if self.super_namespace: + self.full_namespace = "%s.%s" % (self.super_namespace, self.namespace) + else: + self.full_namespace = self.namespace + + # Keep name components around for checking prefixes. + self._names = self.full_namespace.split('.') + + # These are internal cache variables. + self._modules = {} + self._classes = {} + self._instances = {} + self._provider_index = None + self._all_package_names = None + + # make sure the namespace for packages in this repo exists. + self._create_namespace() + + + def _create_namespace(self): + """Create this repo's namespace module and insert it into sys.modules. + + Ensures that modules loaded via the repo have a home, and that + we don't get runtime warnings from Python's module system. + + """ + parent = None + for l in range(1, len(self._names)+1): + ns = '.'.join(self._names[:l]) + if not ns in sys.modules: + module = _make_namespace_module(ns) + module.__loader__ = self + sys.modules[ns] = module + + # Ensure the namespace is an atrribute of its parent, + # if it has not been set by something else already. + # + # This ensures that we can do things like: + # import spack.pkg.builtin.mpich as mpich + if parent: + modname = self._names[l-1] + if not hasattr(parent, modname): + setattr(parent, modname, module) + else: + # no need to set up a module, but keep track of the parent. + module = sys.modules[ns] + parent = module + + + def real_name(self, import_name): + """Allow users to import Spack packages using Python identifiers. + + A python identifier might map to many different Spack package + names due to hyphen/underscore ambiguity. + + Easy example: + num3proxy -> 3proxy + + Ambiguous: + foo_bar -> foo_bar, foo-bar + + More ambiguous: + foo_bar_baz -> foo_bar_baz, foo-bar-baz, foo_bar-baz, foo-bar_baz + """ + if import_name in self: + return import_name + + options = possible_spack_module_names(import_name) + options.remove(import_name) + for name in options: + if name in self: + return name + return None + + + def is_prefix(self, fullname): + """True if fullname is a prefix of this Repo's namespace.""" + parts = fullname.split('.') + return self._names[:len(parts)] == parts + + + def find_module(self, fullname, path=None): + """Python find_module import hook. + + Returns this Repo if it can load the module; None if not. + """ + if self.is_prefix(fullname): + return self + + namespace, dot, module_name = fullname.rpartition('.') + if namespace == self.full_namespace: + if self.real_name(module_name): + return self + + return None + + + def load_module(self, fullname): + """Python importer load hook. + + Tries to load the module; raises an ImportError if it can't. + """ + if fullname in sys.modules: + return sys.modules[fullname] + + namespace, dot, module_name = fullname.rpartition('.') + + if self.is_prefix(fullname): + module = _make_namespace_module(fullname) + + elif namespace == self.full_namespace: + real_name = self.real_name(module_name) + if not real_name: + raise ImportError("No module %s in %s" % (module_name, self)) + module = self._get_pkg_module(real_name) + + else: + raise ImportError("No module %s in %s" % (fullname, self)) + + module.__loader__ = self + sys.modules[fullname] = module + return module + + + def _read_config(self): + """Check for a YAML config file in this db's root directory.""" + try: + with open(self.config_file) as reponame_file: + yaml_data = yaml.load(reponame_file) + + if (not yaml_data or 'repo' not in yaml_data or + not isinstance(yaml_data['repo'], dict)): + tty.die("Invalid %s in repository %s" + % (repo_config_name, self.root)) + + return yaml_data['repo'] + + except exceptions.IOError, e: + tty.die("Error reading %s when opening %s" + % (self.config_file, self.root)) + + + @_autospec + def get(self, spec, new=False): + if spec.virtual: + raise UnknownPackageError(spec.name) + + if spec.namespace and spec.namespace != self.namespace: + raise UnknownPackageError("Repository %s does not contain package %s." + % (self.namespace, spec.fullname)) + + key = hash(spec) + if new or key not in self._instances: + package_class = self._get_pkg_class(spec.name) + try: + copy = spec.copy() # defensive copy. Package owns its spec. + self._instances[key] = package_class(copy) + except Exception, e: + if spack.debug: + sys.excepthook(*sys.exc_info()) + raise FailedConstructorError(spec.fullname, *sys.exc_info()) + + return self._instances[key] + + + def purge(self): + """Clear entire package instance cache.""" + self._instances.clear() + + + @_autospec + def providers_for(self, vpkg_spec): + if self._provider_index is None: + self._provider_index = ProviderIndex(self.all_package_names()) + + providers = self._provider_index.providers_for(vpkg_spec) + if not providers: + raise UnknownPackageError(vpkg_spec.name) + return providers + + + @_autospec + def extensions_for(self, extendee_spec): + return [p for p in self.all_packages() if p.extends(extendee_spec)] + + + def dirname_for_package_name(self, pkg_name): + """Get the directory name for a particular package. This is the + directory that contains its package.py file.""" + return join_path(self.packages_path, pkg_name) + + + def filename_for_package_name(self, pkg_name): + """Get the filename for the module we should load for a particular + package. Packages for a Repo live in + ``$root/<package_name>/package.py`` + + This will return a proper package.py path even if the + package doesn't exist yet, so callers will need to ensure + the package exists before importing. + """ + validate_module_name(pkg_name) + pkg_dir = self.dirname_for_package_name(pkg_name) + return join_path(pkg_dir, package_file_name) + + + def all_package_names(self): + """Returns a sorted list of all package names in the Repo.""" + if self._all_package_names is None: + self._all_package_names = [] + + for pkg_name in os.listdir(self.packages_path): + # Skip non-directories in the package root. + pkg_dir = join_path(self.packages_path, pkg_name) + if not os.path.isdir(pkg_dir): + continue + + # Skip directories without a package.py in them. + pkg_file = join_path(self.packages_path, pkg_name, package_file_name) + if not os.path.isfile(pkg_file): + continue + + # Warn about invalid names that look like packages. + if not valid_module_name(pkg_name): + tty.warn("Skipping package at %s. '%s' is not a valid Spack module name." + % (pkg_dir, pkg_name)) + continue + + # All checks passed. Add it to the list. + self._all_package_names.append(pkg_name) + self._all_package_names.sort() + + return self._all_package_names + + + def all_packages(self): + for name in self.all_package_names(): + yield self.get(name) + + + def exists(self, pkg_name): + """Whether a package with the supplied name exists.""" + # This does a binary search in the sorted list. + idx = bisect_left(self.all_package_names(), pkg_name) + return (idx < len(self._all_package_names) and + self._all_package_names[idx] == pkg_name) + + + def _get_pkg_module(self, pkg_name): + """Create a module for a particular package. + + This caches the module within this Repo *instance*. It does + *not* add it to ``sys.modules``. So, you can construct + multiple Repos for testing and ensure that the module will be + loaded once per repo. + + """ + if pkg_name not in self._modules: + file_path = self.filename_for_package_name(pkg_name) + + if not os.path.exists(file_path): + raise UnknownPackageError(pkg_name, self) + + if not os.path.isfile(file_path): + tty.die("Something's wrong. '%s' is not a file!" % file_path) + + if not os.access(file_path, os.R_OK): + tty.die("Cannot read '%s'!" % file_path) + + # e.g., spack.pkg.builtin.mpich + fullname = "%s.%s" % (self.full_namespace, pkg_name) + + module = imp.load_source(fullname, file_path) + module.__package__ = self.full_namespace + module.__loader__ = self + self._modules[pkg_name] = module + + return self._modules[pkg_name] + + + def _get_pkg_class(self, pkg_name): + """Get the class for the package out of its module. + + First loads (or fetches from cache) a module for the + package. Then extracts the package class from the module + according to Spack's naming convention. + """ + class_name = mod_to_class(pkg_name) + module = self._get_pkg_module(pkg_name) + + cls = getattr(module, class_name) + if not inspect.isclass(cls): + tty.die("%s.%s is not a class" % (pkg_name, class_name)) + + return cls + + + def __str__(self): + return "[Repo '%s' at '%s']" % (self.namespace, self.root) + + + def __repr__(self): + return self.__str__() + + + def __contains__(self, pkg_name): + return self.exists(pkg_name) + + +class BadRepoError(spack.error.SpackError): + """Raised when repo layout is invalid.""" + def __init__(self, msg): + super(BadRepoError, self).__init__(msg) + + +class UnknownPackageError(spack.error.SpackError): + """Raised when we encounter a package spack doesn't have.""" + def __init__(self, name, repo=None): + msg = None + if repo: + msg = "Package %s not found in repository %s." % (name, repo) + else: + msg = "Package %s not found." % name + super(UnknownPackageError, self).__init__(msg) + self.name = name + + +class DuplicateRepoError(spack.error.SpackError): + """Raised when duplicate repos are added to a RepoPath.""" + def __init__(self, msg, repo1, repo2): + super(UnknownPackageError, self).__init__( + "%s: %s, %s" % (msg, repo1, repo2)) + + +class FailedConstructorError(spack.error.SpackError): + """Raised when a package's class constructor fails.""" + def __init__(self, name, exc_type, exc_obj, exc_tb): + super(FailedConstructorError, self).__init__( + "Class constructor failed for package '%s'." % name, + '\nCaused by:\n' + + ('%s: %s\n' % (exc_type.__name__, exc_obj)) + + ''.join(traceback.format_tb(exc_tb))) + self.name = name diff --git a/lib/spack/spack/resource.py b/lib/spack/spack/resource.py index 8d081b45c9..2bf92947fd 100644 --- a/lib/spack/spack/resource.py +++ b/lib/spack/spack/resource.py @@ -6,7 +6,7 @@ # Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. # LLNL-CODE-647188 # -# For details, see https://scalability-llnl.github.io/spack +# For details, see https://llnl.github.io/spack # Please also see the LICENSE file for our notice and the LGPL. # # This program is free software; you can redistribute it and/or modify @@ -22,9 +22,11 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## -""" -Describes an optional resource needed for a build. Typically a bunch of sources that can be built in-tree within another +"""Describes an optional resource needed for a build. + +Typically a bunch of sources that can be built in-tree within another package to enable optional features. + """ diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 037ec97a5e..10e246bf2e 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -412,6 +412,7 @@ class Spec(object): self.dependencies = other.dependencies self.variants = other.variants self.variants.spec = self + self.namespace = other.namespace # Specs are by default not assumed to be normal, but in some # cases we've read them from a file want to assume normal. @@ -464,6 +465,13 @@ class Spec(object): self.dependencies[spec.name] = spec spec.dependents[self.name] = self + # + # Public interface + # + @property + def fullname(self): + return '%s.%s' % (self.namespace, self.name) if self.namespace else self.name + @property def root(self): @@ -486,7 +494,7 @@ class Spec(object): @property def package(self): - return spack.db.get(self) + return spack.repo.get(self) @property @@ -504,7 +512,7 @@ class Spec(object): @staticmethod def is_virtual(name): """Test if a name is virtual without requiring a Spec.""" - return not spack.db.exists(name) + return not spack.repo.exists(name) @property @@ -517,11 +525,13 @@ class Spec(object): return True self._concrete = bool(not self.virtual + and self.namespace is not None and self.versions.concrete and self.variants.concrete and self.architecture and self.compiler and self.compiler.concrete and self.dependencies.concrete) + return self._concrete @@ -657,6 +667,12 @@ class Spec(object): 'dependencies' : dict((d, self.dependencies[d].dag_hash()) for d in sorted(self.dependencies)) } + + # Older concrete specs do not have a namespace. Omit for + # consistent hashing. + if not self.concrete or self.namespace: + d['namespace'] = self.namespace + if self.compiler: d.update(self.compiler.to_dict()) else: @@ -681,6 +697,7 @@ class Spec(object): node = node[name] spec = Spec(name) + spec.namespace = node.get('namespace', None) spec.versions = VersionList.from_dict(node) spec.architecture = node['arch'] @@ -797,7 +814,7 @@ class Spec(object): return changed for spec in virtuals: - providers = spack.db.providers_for(spec) + providers = spack.repo.providers_for(spec) concrete = spack.concretizer.choose_provider(spec, providers) concrete = concrete.copy() spec._replace_with(concrete) @@ -833,6 +850,19 @@ class Spec(object): changed = any(changes) force=True + for s in self.traverse(): + # After concretizing, assign namespaces to anything left. + # Note that this doesn't count as a "change". The repository + # configuration is constant throughout a spack run, and + # normalize and concretize evaluate Packages using Repo.get(), + # which respects precedence. So, a namespace assignment isn't + # changing how a package name would have been interpreted and + # we can do it as late as possible to allow as much + # compatibility across repositories as possible. + if s.namespace is None: + s.namespace = spack.repo.repo_for_pkg(s.name).namespace + + # Mark everything in the spec as concrete, as well. self._mark_concrete() @@ -919,7 +949,7 @@ class Spec(object): the dependency. If no conditions are True (and we don't depend on it), return None. """ - pkg = spack.db.get(self.name) + pkg = spack.repo.get(self.fullname) conditions = pkg.dependencies[name] # evaluate when specs to figure out constraints on the dependency. @@ -1047,7 +1077,7 @@ class Spec(object): any_change = False changed = True - pkg = spack.db.get(self.name) + pkg = spack.repo.get(self.fullname) while changed: changed = False for dep_name in pkg.dependencies: @@ -1068,18 +1098,17 @@ class Spec(object): the root, and ONLY the ones that were explicitly provided are there. Normalization turns a partial flat spec into a DAG, where: - 1. ALL dependencies of the root package are in the DAG. - 2. Each node's dependencies dict only contains its direct deps. + 1. Known dependencies of the root package are in the DAG. + 2. Each node's dependencies dict only contains its known direct deps. 3. There is only ONE unique spec for each package in the DAG. * This includes virtual packages. If there a non-virtual package that provides a virtual package that is in the spec, then we replace the virtual package with the non-virtual one. - 4. The spec DAG matches package DAG, including default variant values. - TODO: normalize should probably implement some form of cycle detection, to ensure that the spec is actually a DAG. + """ if self._normal and not force: return False @@ -1125,7 +1154,7 @@ class Spec(object): for spec in self.traverse(): # Don't get a package for a virtual name. if not spec.virtual: - spack.db.get(spec.name) + spack.repo.get(spec.fullname) # validate compiler in addition to the package name. if spec.compiler: @@ -1148,6 +1177,10 @@ class Spec(object): if not self.name == other.name: raise UnsatisfiableSpecNameError(self.name, other.name) + if other.namespace is not None: + if self.namespace is not None and other.namespace != self.namespace: + raise UnsatisfiableSpecNameError(self.fullname, other.fullname) + if not self.versions.overlaps(other.versions): raise UnsatisfiableVersionSpecError(self.versions, other.versions) @@ -1191,7 +1224,7 @@ class Spec(object): # TODO: might want more detail than this, e.g. specific deps # in violation. if this becomes a priority get rid of this - # check and be more specici about what's wrong. + # check and be more specific about what's wrong. if not other.satisfies_dependencies(self): raise UnsatisfiableDependencySpecError(other, self) @@ -1264,7 +1297,7 @@ class Spec(object): # A concrete provider can satisfy a virtual dependency. if not self.virtual and other.virtual: - pkg = spack.db.get(self.name) + pkg = spack.repo.get(self.fullname) if pkg.provides(other.name): for provided, when_spec in pkg.provided.items(): if self.satisfies(when_spec, deps=False, strict=strict): @@ -1276,6 +1309,11 @@ class Spec(object): if self.name != other.name: return False + # namespaces either match, or other doesn't require one. + if other.namespace is not None: + if self.namespace is not None and self.namespace != other.namespace: + return False + if self.versions and other.versions: if not self.versions.satisfies(other.versions, strict=strict): return False @@ -1375,6 +1413,7 @@ class Spec(object): self.dependencies = DependencyMap() self.variants = other.variants.copy() self.variants.spec = self + self.namespace = other.namespace # If we copy dependencies, preserve DAG structure in the new spec if kwargs.get('deps', True): @@ -1493,6 +1532,7 @@ class Spec(object): def _cmp_node(self): """Comparison key for just *this node* and not its deps.""" return (self.name, + self.namespace, self.versions, self.variants, self.architecture, @@ -1530,6 +1570,7 @@ class Spec(object): in the format string. The format strings you can provide are:: $_ Package name + $. Full package name (with namespace) $@ Version $% Compiler $%@ Compiler & compiler version @@ -1577,6 +1618,8 @@ class Spec(object): if c == '_': out.write(fmt % self.name) + elif c == '.': + out.write(fmt % self.fullname) elif c == '@': if self.versions and self.versions != _any_version: write(fmt % (c + str(self.versions)), c) @@ -1725,17 +1768,23 @@ class SpecParser(spack.parse.Parser): def spec(self): """Parse a spec out of the input. If a spec is supplied, then initialize and return it instead of creating a new one.""" - self.check_identifier() + + spec_namespace, dot, spec_name = self.token.value.rpartition('.') + if not spec_namespace: + spec_namespace = None + + self.check_identifier(spec_name) # This will init the spec without calling __init__. spec = Spec.__new__(Spec) - spec.name = self.token.value + spec.name = spec_name spec.versions = VersionList() spec.variants = VariantMap(spec) spec.architecture = None spec.compiler = None spec.dependents = DependencyMap() spec.dependencies = DependencyMap() + spec.namespace = spec_namespace spec._normal = False spec._concrete = False @@ -1829,12 +1878,14 @@ class SpecParser(spack.parse.Parser): return compiler - def check_identifier(self): + def check_identifier(self, id=None): """The only identifiers that can contain '.' are versions, but version ids are context-sensitive so we have to check on a case-by-case basis. Call this if we detect a version id where it shouldn't be. """ - if '.' in self.token.value: + if not id: + id = self.token.value + if '.' in id: self.last_token_error("Identifier cannot contain '.'") diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py index 754344fc01..543a3a6223 100644 --- a/lib/spack/spack/stage.py +++ b/lib/spack/spack/stage.py @@ -242,7 +242,8 @@ class Stage(object): # TODO: move mirror logic out of here and clean it up! if self.mirror_path: - urls = ["%s/%s" % (m, self.mirror_path) for m in _get_mirrors()] + urls = ["%s/%s" % (u, self.mirror_path) + for name, u in spack.config.get_config('mirrors')] digest = None if isinstance(self.fetcher, fs.URLFetchStrategy): @@ -345,7 +346,7 @@ class DIYStage(object): def _get_mirrors(): """Get mirrors from spack configuration.""" - config = spack.config.get_mirror_config() + config = spack.config.get_config('mirrors') return [val for name, val in config.iteritems()] diff --git a/lib/spack/spack/test/__init__.py b/lib/spack/spack/test/__init__.py index 13cb1d2b78..081e6c7b06 100644 --- a/lib/spack/spack/test/__init__.py +++ b/lib/spack/spack/test/__init__.py @@ -59,7 +59,8 @@ test_names = ['versions', 'configure_guess', 'unit_install', 'lock', - 'database'] + 'database', + 'namespace_trie'] def list_tests(): diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py index 2f8e0c7ec0..7f2938aec5 100644 --- a/lib/spack/spack/test/concretize.py +++ b/lib/spack/spack/test/concretize.py @@ -125,22 +125,22 @@ class ConcretizeTest(MockPackagesTest): we ask for some advanced version. """ self.assertTrue(not any(spec.satisfies('mpich2@:1.0') - for spec in spack.db.providers_for('mpi@2.1'))) + for spec in spack.repo.providers_for('mpi@2.1'))) self.assertTrue(not any(spec.satisfies('mpich2@:1.1') - for spec in spack.db.providers_for('mpi@2.2'))) + for spec in spack.repo.providers_for('mpi@2.2'))) self.assertTrue(not any(spec.satisfies('mpich2@:1.1') - for spec in spack.db.providers_for('mpi@2.2'))) + for spec in spack.repo.providers_for('mpi@2.2'))) self.assertTrue(not any(spec.satisfies('mpich@:1') - for spec in spack.db.providers_for('mpi@2'))) + for spec in spack.repo.providers_for('mpi@2'))) self.assertTrue(not any(spec.satisfies('mpich@:1') - for spec in spack.db.providers_for('mpi@3'))) + for spec in spack.repo.providers_for('mpi@3'))) self.assertTrue(not any(spec.satisfies('mpich2') - for spec in spack.db.providers_for('mpi@3'))) + for spec in spack.repo.providers_for('mpi@3'))) def test_virtual_is_fully_expanded_for_callpath(self): diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py index ed11e34c69..f56287aa98 100644 --- a/lib/spack/spack/test/config.py +++ b/lib/spack/spack/test/config.py @@ -27,48 +27,90 @@ import shutil import os from tempfile import mkdtemp import spack -from spack.packages import PackageDB +import spack.config from spack.test.mock_packages_test import * +# Some sample compiler config data +a_comps = { + "gcc@4.7.3" : { + "cc" : "/gcc473", + "cxx" : "/g++473", + "f77" : None, + "f90" : None }, + "gcc@4.5.0" : { + "cc" : "/gcc450", + "cxx" : "/g++450", + "f77" : "/gfortran", + "f90" : "/gfortran" }, + "clang@3.3" : { + "cc" : "<overwritten>", + "cxx" : "<overwritten>", + "f77" : "<overwritten>", + "f90" : "<overwritten>" } +} + +b_comps = { + "icc@10.0" : { + "cc" : "/icc100", + "cxx" : "/icc100", + "f77" : None, + "f90" : None }, + "icc@11.1" : { + "cc" : "/icc111", + "cxx" : "/icp111", + "f77" : "/ifort", + "f90" : "/ifort" }, + "clang@3.3" : { + "cc" : "/clang", + "cxx" : "/clang++", + "f77" : None, + "f90" : None} +} + class ConfigTest(MockPackagesTest): def setUp(self): - self.initmock() + super(ConfigTest, self).setUp() self.tmp_dir = mkdtemp('.tmp', 'spack-config-test-') - spack.config.config_scopes = [('test_low_priority', os.path.join(self.tmp_dir, 'low')), - ('test_high_priority', os.path.join(self.tmp_dir, 'high'))] + spack.config.config_scopes = [ + spack.config.ConfigScope('test_low_priority', os.path.join(self.tmp_dir, 'low')), + spack.config.ConfigScope('test_high_priority', os.path.join(self.tmp_dir, 'high'))] + spack.config.valid_scopes = ('test_low_priority', 'test_high_priority') def tearDown(self): - self.cleanmock() + super(ConfigTest, self).tearDown() shutil.rmtree(self.tmp_dir, True) - def check_config(self, comps): - config = spack.config.get_compilers_config() + + def check_config(self, comps, *compiler_names): + """Check that named compilers in comps match Spack's config.""" + config = spack.config.get_config('compilers') compiler_list = ['cc', 'cxx', 'f77', 'f90'] - for key in comps: + for key in compiler_names: for c in compiler_list: - if comps[key][c] == '/bad': - continue - self.assertEqual(comps[key][c], config[key][c]) + expected = comps[key][c] + actual = config[key][c] + self.assertEqual(expected, actual) - def test_write_key(self): - a_comps = {"gcc@4.7.3" : { "cc" : "/gcc473", "cxx" : "/g++473", "f77" : None, "f90" : None }, - "gcc@4.5.0" : { "cc" : "/gcc450", "cxx" : "/g++450", "f77" : "/gfortran", "f90" : "/gfortran" }, - "clang@3.3" : { "cc" : "/bad", "cxx" : "/bad", "f77" : "/bad", "f90" : "/bad" }} + def test_write_key_in_memory(self): + # Write b_comps "on top of" a_comps. + spack.config.update_config('compilers', a_comps, 'test_low_priority') + spack.config.update_config('compilers', b_comps, 'test_high_priority') - b_comps = {"icc@10.0" : { "cc" : "/icc100", "cxx" : "/icc100", "f77" : None, "f90" : None }, - "icc@11.1" : { "cc" : "/icc111", "cxx" : "/icp111", "f77" : "/ifort", "f90" : "/ifort" }, - "clang@3.3" : { "cc" : "/clang", "cxx" : "/clang++", "f77" : None, "f90" : None}} + # Make sure the config looks how we expect. + self.check_config(a_comps, 'gcc@4.7.3', 'gcc@4.5.0') + self.check_config(b_comps, 'icc@10.0', 'icc@11.1', 'clang@3.3') - spack.config.add_to_compiler_config(a_comps, 'test_low_priority') - spack.config.add_to_compiler_config(b_comps, 'test_high_priority') - self.check_config(a_comps) - self.check_config(b_comps) + def test_write_key_to_disk(self): + # Write b_comps "on top of" a_comps. + spack.config.update_config('compilers', a_comps, 'test_low_priority') + spack.config.update_config('compilers', b_comps, 'test_high_priority') + # Clear caches so we're forced to read from disk. spack.config.clear_config_caches() - self.check_config(a_comps) - self.check_config(b_comps) - + # Same check again, to ensure consistency. + self.check_config(a_comps, 'gcc@4.7.3', 'gcc@4.5.0') + self.check_config(b_comps, 'icc@10.0', 'icc@11.1', 'clang@3.3') diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py index c07d32686e..0205f4b8ce 100644 --- a/lib/spack/spack/test/database.py +++ b/lib/spack/spack/test/database.py @@ -79,7 +79,8 @@ class DatabaseTest(MockPackagesTest): def _mock_install(self, spec): s = Spec(spec) - pkg = spack.db.get(s.concretized()) + s.concretize() + pkg = spack.repo.get(s) pkg.do_install(fake=True) diff --git a/lib/spack/spack/test/directory_layout.py b/lib/spack/spack/test/directory_layout.py index 703ac1b867..107a7a6412 100644 --- a/lib/spack/spack/test/directory_layout.py +++ b/lib/spack/spack/test/directory_layout.py @@ -34,7 +34,7 @@ from llnl.util.filesystem import * import spack from spack.spec import Spec -from spack.packages import PackageDB +from spack.repository import RepoPath from spack.directory_layout import YamlDirectoryLayout # number of packages to test (to reduce test time) @@ -62,7 +62,7 @@ class DirectoryLayoutTest(unittest.TestCase): finally that the directory can be removed by the directory layout. """ - packages = list(spack.db.all_packages())[:max_packages] + packages = list(spack.repo.all_packages())[:max_packages] for pkg in packages: spec = pkg.spec @@ -123,17 +123,17 @@ class DirectoryLayoutTest(unittest.TestCase): information about installed packages' specs to uninstall or query them again if the package goes away. """ - mock_db = PackageDB(spack.mock_packages_path) + mock_db = RepoPath(spack.mock_packages_path) not_in_mock = set.difference( - set(spack.db.all_package_names()), + set(spack.repo.all_package_names()), set(mock_db.all_package_names())) packages = list(not_in_mock)[:max_packages] # Create all the packages that are not in mock. installed_specs = {} for pkg_name in packages: - spec = spack.db.get(pkg_name).spec + spec = spack.repo.get(pkg_name).spec # If a spec fails to concretize, just skip it. If it is a # real error, it will be caught by concretization tests. @@ -145,8 +145,7 @@ class DirectoryLayoutTest(unittest.TestCase): self.layout.create_install_directory(spec) installed_specs[spec] = self.layout.path_for_spec(spec) - tmp = spack.db - spack.db = mock_db + spack.repo.swap(mock_db) # Now check that even without the package files, we know # enough to read a spec from the spec file. @@ -161,12 +160,12 @@ class DirectoryLayoutTest(unittest.TestCase): self.assertTrue(spec.eq_dag(spec_from_file)) self.assertEqual(spec.dag_hash(), spec_from_file.dag_hash()) - spack.db = tmp + spack.repo.swap(mock_db) def test_find(self): """Test that finding specs within an install layout works.""" - packages = list(spack.db.all_packages())[:max_packages] + packages = list(spack.repo.all_packages())[:max_packages] # Create install prefixes for all packages in the list installed_specs = {} diff --git a/lib/spack/spack/test/git_fetch.py b/lib/spack/spack/test/git_fetch.py index 244680b5d0..3813079065 100644 --- a/lib/spack/spack/test/git_fetch.py +++ b/lib/spack/spack/test/git_fetch.py @@ -50,7 +50,7 @@ class GitFetchTest(MockPackagesTest): spec = Spec('git-test') spec.concretize() - self.pkg = spack.db.get(spec, new=True) + self.pkg = spack.repo.get(spec, new=True) def tearDown(self): diff --git a/lib/spack/spack/test/hg_fetch.py b/lib/spack/spack/test/hg_fetch.py index f8c6571bda..ee8327aec8 100644 --- a/lib/spack/spack/test/hg_fetch.py +++ b/lib/spack/spack/test/hg_fetch.py @@ -47,7 +47,7 @@ class HgFetchTest(MockPackagesTest): spec = Spec('hg-test') spec.concretize() - self.pkg = spack.db.get(spec, new=True) + self.pkg = spack.repo.get(spec, new=True) def tearDown(self): diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py index 1ef4171fb2..628329a423 100644 --- a/lib/spack/spack/test/install.py +++ b/lib/spack/spack/test/install.py @@ -78,7 +78,7 @@ class InstallTest(MockPackagesTest): self.assertTrue(spec.concrete) # Get the package - pkg = spack.db.get(spec) + pkg = spack.repo.get(spec) # Fake the URL for the package so it downloads from a file. pkg.fetcher = URLFetchStrategy(self.repo.url) diff --git a/lib/spack/spack/test/mirror.py b/lib/spack/spack/test/mirror.py index 189a85fb1a..04e9e3db2e 100644 --- a/lib/spack/spack/test/mirror.py +++ b/lib/spack/spack/test/mirror.py @@ -55,7 +55,7 @@ class MirrorTest(MockPackagesTest): spec.concretize() # Get the package and fix its fetch args to point to a mock repo - pkg = spack.db.get(spec) + pkg = spack.repo.get(spec) repo = MockRepoClass() self.repos[name] = repo diff --git a/lib/spack/spack/test/mock_packages_test.py b/lib/spack/spack/test/mock_packages_test.py index e4e1b21b53..d000271960 100644 --- a/lib/spack/spack/test/mock_packages_test.py +++ b/lib/spack/spack/test/mock_packages_test.py @@ -22,43 +22,64 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## +import sys import unittest import spack import spack.config -from spack.packages import PackageDB +from spack.repository import RepoPath from spack.spec import Spec -def set_pkg_dep(pkg, spec): - """Alters dependence information for a package. - Use this to mock up constraints. - """ - spec = Spec(spec) - spack.db.get(pkg).dependencies[spec.name] = { Spec(pkg) : spec } - - class MockPackagesTest(unittest.TestCase): def initmock(self): # Use the mock packages database for these tests. This allows # us to set up contrived packages that don't interfere with # real ones. - self.real_db = spack.db - spack.db = PackageDB(spack.mock_packages_path) + self.db = RepoPath(spack.mock_packages_path) + spack.repo.swap(self.db) spack.config.clear_config_caches() self.real_scopes = spack.config.config_scopes + self.real_valid_scopes = spack.config.valid_scopes spack.config.config_scopes = [ - ('site', spack.mock_site_config), - ('user', spack.mock_user_config)] + spack.config.ConfigScope('site', spack.mock_site_config), + spack.config.ConfigScope('user', spack.mock_user_config)] + + # Store changes to the package's dependencies so we can + # restore later. + self.saved_deps = {} + + + def set_pkg_dep(self, pkg_name, spec): + """Alters dependence information for a package. + + Adds a dependency on <spec> to pkg. + Use this to mock up constraints. + """ + spec = Spec(spec) + + # Save original dependencies before making any changes. + pkg = spack.repo.get(pkg_name) + if pkg_name not in self.saved_deps: + self.saved_deps[pkg_name] = (pkg, pkg.dependencies.copy()) + + # Change dep spec + pkg.dependencies[spec.name] = { Spec(pkg_name) : spec } def cleanmock(self): """Restore the real packages path after any test.""" - spack.db = self.real_db + spack.repo.swap(self.db) spack.config.config_scopes = self.real_scopes + spack.config.valid_scopes = self.real_valid_scopes spack.config.clear_config_caches() + # Restore dependency changes that happened during the test + for pkg_name, (pkg, deps) in self.saved_deps.items(): + pkg.dependencies.clear() + pkg.dependencies.update(deps) + def setUp(self): self.initmock() @@ -66,5 +87,3 @@ class MockPackagesTest(unittest.TestCase): def tearDown(self): self.cleanmock() - - diff --git a/lib/spack/spack/test/multimethod.py b/lib/spack/spack/test/multimethod.py index d8d61d14c8..7bf4ff0a0a 100644 --- a/lib/spack/spack/test/multimethod.py +++ b/lib/spack/spack/test/multimethod.py @@ -38,92 +38,92 @@ from spack.test.mock_packages_test import * class MultiMethodTest(MockPackagesTest): def test_no_version_match(self): - pkg = spack.db.get('multimethod@2.0') + pkg = spack.repo.get('multimethod@2.0') self.assertRaises(NoSuchMethodError, pkg.no_version_2) def test_one_version_match(self): - pkg = spack.db.get('multimethod@1.0') + pkg = spack.repo.get('multimethod@1.0') self.assertEqual(pkg.no_version_2(), 1) - pkg = spack.db.get('multimethod@3.0') + pkg = spack.repo.get('multimethod@3.0') self.assertEqual(pkg.no_version_2(), 3) - pkg = spack.db.get('multimethod@4.0') + pkg = spack.repo.get('multimethod@4.0') self.assertEqual(pkg.no_version_2(), 4) def test_version_overlap(self): - pkg = spack.db.get('multimethod@2.0') + pkg = spack.repo.get('multimethod@2.0') self.assertEqual(pkg.version_overlap(), 1) - pkg = spack.db.get('multimethod@5.0') + pkg = spack.repo.get('multimethod@5.0') self.assertEqual(pkg.version_overlap(), 2) def test_mpi_version(self): - pkg = spack.db.get('multimethod^mpich@3.0.4') + pkg = spack.repo.get('multimethod^mpich@3.0.4') self.assertEqual(pkg.mpi_version(), 3) - pkg = spack.db.get('multimethod^mpich2@1.2') + pkg = spack.repo.get('multimethod^mpich2@1.2') self.assertEqual(pkg.mpi_version(), 2) - pkg = spack.db.get('multimethod^mpich@1.0') + pkg = spack.repo.get('multimethod^mpich@1.0') self.assertEqual(pkg.mpi_version(), 1) def test_undefined_mpi_version(self): - pkg = spack.db.get('multimethod^mpich@0.4') + pkg = spack.repo.get('multimethod^mpich@0.4') self.assertEqual(pkg.mpi_version(), 1) - pkg = spack.db.get('multimethod^mpich@1.4') + pkg = spack.repo.get('multimethod^mpich@1.4') self.assertEqual(pkg.mpi_version(), 1) def test_default_works(self): - pkg = spack.db.get('multimethod%gcc') + pkg = spack.repo.get('multimethod%gcc') self.assertEqual(pkg.has_a_default(), 'gcc') - pkg = spack.db.get('multimethod%intel') + pkg = spack.repo.get('multimethod%intel') self.assertEqual(pkg.has_a_default(), 'intel') - pkg = spack.db.get('multimethod%pgi') + pkg = spack.repo.get('multimethod%pgi') self.assertEqual(pkg.has_a_default(), 'default') def test_architecture_match(self): - pkg = spack.db.get('multimethod=x86_64') + pkg = spack.repo.get('multimethod=x86_64') self.assertEqual(pkg.different_by_architecture(), 'x86_64') - pkg = spack.db.get('multimethod=ppc64') + pkg = spack.repo.get('multimethod=ppc64') self.assertEqual(pkg.different_by_architecture(), 'ppc64') - pkg = spack.db.get('multimethod=ppc32') + pkg = spack.repo.get('multimethod=ppc32') self.assertEqual(pkg.different_by_architecture(), 'ppc32') - pkg = spack.db.get('multimethod=arm64') + pkg = spack.repo.get('multimethod=arm64') self.assertEqual(pkg.different_by_architecture(), 'arm64') - pkg = spack.db.get('multimethod=macos') + pkg = spack.repo.get('multimethod=macos') self.assertRaises(NoSuchMethodError, pkg.different_by_architecture) def test_dependency_match(self): - pkg = spack.db.get('multimethod^zmpi') + pkg = spack.repo.get('multimethod^zmpi') self.assertEqual(pkg.different_by_dep(), 'zmpi') - pkg = spack.db.get('multimethod^mpich') + pkg = spack.repo.get('multimethod^mpich') self.assertEqual(pkg.different_by_dep(), 'mpich') # If we try to switch on some entirely different dep, it's ambiguous, # but should take the first option - pkg = spack.db.get('multimethod^foobar') + pkg = spack.repo.get('multimethod^foobar') self.assertEqual(pkg.different_by_dep(), 'mpich') def test_virtual_dep_match(self): - pkg = spack.db.get('multimethod^mpich2') + pkg = spack.repo.get('multimethod^mpich2') self.assertEqual(pkg.different_by_virtual_dep(), 2) - pkg = spack.db.get('multimethod^mpich@1.0') + pkg = spack.repo.get('multimethod^mpich@1.0') self.assertEqual(pkg.different_by_virtual_dep(), 1) diff --git a/lib/spack/spack/test/namespace_trie.py b/lib/spack/spack/test/namespace_trie.py new file mode 100644 index 0000000000..d0d809004d --- /dev/null +++ b/lib/spack/spack/test/namespace_trie.py @@ -0,0 +1,114 @@ +############################################################################## +# Copyright (c) 2013, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://llnl.github.io/spack +# Please also see the LICENSE file for our notice and the LGPL. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License (as published by +# the Free Software Foundation) version 2.1 dated February 1999. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and +# conditions of the GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +############################################################################## +import unittest +from spack.util.naming import NamespaceTrie + + +class NamespaceTrieTest(unittest.TestCase): + + def setUp(self): + self.trie = NamespaceTrie() + + + def test_add_single(self): + self.trie['foo'] = 'bar' + + self.assertTrue(self.trie.is_prefix('foo')) + self.assertTrue(self.trie.has_value('foo')) + self.assertEqual(self.trie['foo'], 'bar') + + + def test_add_multiple(self): + self.trie['foo.bar'] = 'baz' + + self.assertFalse(self.trie.has_value('foo')) + self.assertTrue(self.trie.is_prefix('foo')) + + self.assertTrue(self.trie.is_prefix('foo.bar')) + self.assertTrue(self.trie.has_value('foo.bar')) + self.assertEqual(self.trie['foo.bar'], 'baz') + + self.assertFalse(self.trie.is_prefix('foo.bar.baz')) + self.assertFalse(self.trie.has_value('foo.bar.baz')) + + + def test_add_three(self): + # add a three-level namespace + self.trie['foo.bar.baz'] = 'quux' + + self.assertTrue(self.trie.is_prefix('foo')) + self.assertFalse(self.trie.has_value('foo')) + + self.assertTrue(self.trie.is_prefix('foo.bar')) + self.assertFalse(self.trie.has_value('foo.bar')) + + self.assertTrue(self.trie.is_prefix('foo.bar.baz')) + self.assertTrue(self.trie.has_value('foo.bar.baz')) + self.assertEqual(self.trie['foo.bar.baz'], 'quux') + + self.assertFalse(self.trie.is_prefix('foo.bar.baz.quux')) + self.assertFalse(self.trie.has_value('foo.bar.baz.quux')) + + # Try to add a second element in a prefix namespace + self.trie['foo.bar'] = 'blah' + + self.assertTrue(self.trie.is_prefix('foo')) + self.assertFalse(self.trie.has_value('foo')) + + self.assertTrue(self.trie.is_prefix('foo.bar')) + self.assertTrue(self.trie.has_value('foo.bar')) + self.assertEqual(self.trie['foo.bar'], 'blah') + + self.assertTrue(self.trie.is_prefix('foo.bar.baz')) + self.assertTrue(self.trie.has_value('foo.bar.baz')) + self.assertEqual(self.trie['foo.bar.baz'], 'quux') + + self.assertFalse(self.trie.is_prefix('foo.bar.baz.quux')) + self.assertFalse(self.trie.has_value('foo.bar.baz.quux')) + + + def test_add_none_single(self): + self.trie['foo'] = None + self.assertTrue(self.trie.is_prefix('foo')) + self.assertTrue(self.trie.has_value('foo')) + self.assertEqual(self.trie['foo'], None) + + self.assertFalse(self.trie.is_prefix('foo.bar')) + self.assertFalse(self.trie.has_value('foo.bar')) + + + + def test_add_none_multiple(self): + self.trie['foo.bar'] = None + + self.assertTrue(self.trie.is_prefix('foo')) + self.assertFalse(self.trie.has_value('foo')) + + self.assertTrue(self.trie.is_prefix('foo.bar')) + self.assertTrue(self.trie.has_value('foo.bar')) + self.assertEqual(self.trie['foo.bar'], None) + + self.assertFalse(self.trie.is_prefix('foo.bar.baz')) + self.assertFalse(self.trie.has_value('foo.bar.baz')) diff --git a/lib/spack/spack/test/package_sanity.py b/lib/spack/spack/test/package_sanity.py index 370cf676ef..0b075d135d 100644 --- a/lib/spack/spack/test/package_sanity.py +++ b/lib/spack/spack/test/package_sanity.py @@ -28,16 +28,15 @@ This test does sanity checks on Spack's builtin package database. import unittest import spack -import spack.url as url -from spack.packages import PackageDB +from spack.repository import RepoPath class PackageSanityTest(unittest.TestCase): def check_db(self): """Get all packages in a DB to make sure they work.""" - for name in spack.db.all_package_names(): - spack.db.get(name) + for name in spack.repo.all_package_names(): + spack.repo.get(name) def test_get_all_packages(self): @@ -45,17 +44,17 @@ class PackageSanityTest(unittest.TestCase): self.check_db() - def test_get_all_mock_packages(self): + def ztest_get_all_mock_packages(self): """Get the mock packages once each too.""" - tmp = spack.db - spack.db = PackageDB(spack.mock_packages_path) + db = RepoPath(spack.mock_packages_path) + spack.repo.swap(db) self.check_db() - spack.db = tmp + spack.repo.swap(db) - def test_url_versions(self): + def ztest_url_versions(self): """Check URLs for regular packages, if they are explicitly defined.""" - for pkg in spack.db.all_packages(): + for pkg in spack.repo.all_packages(): for v, vattrs in pkg.versions.items(): if 'url' in vattrs: # If there is a url for the version check it. diff --git a/lib/spack/spack/test/packages.py b/lib/spack/spack/test/packages.py index b2daea7b7b..83984dc5f6 100644 --- a/lib/spack/spack/test/packages.py +++ b/lib/spack/spack/test/packages.py @@ -27,7 +27,7 @@ import unittest from llnl.util.filesystem import join_path import spack -import spack.packages as packages +from spack.repository import Repo from spack.util.naming import mod_to_class from spack.test.mock_packages_test import * @@ -35,27 +35,32 @@ from spack.test.mock_packages_test import * class PackagesTest(MockPackagesTest): def test_load_package(self): - pkg = spack.db.get('mpich') + pkg = spack.repo.get('mpich') def test_package_name(self): - pkg = spack.db.get('mpich') + pkg = spack.repo.get('mpich') self.assertEqual(pkg.name, 'mpich') def test_package_filename(self): - filename = spack.db.filename_for_package_name('mpich') - self.assertEqual(filename, join_path(spack.mock_packages_path, 'mpich', 'package.py')) + repo = Repo(spack.mock_packages_path) + filename = repo.filename_for_package_name('mpich') + self.assertEqual(filename, + join_path(spack.mock_packages_path, 'packages', 'mpich', 'package.py')) def test_package_name(self): - pkg = spack.db.get('mpich') + pkg = spack.repo.get('mpich') self.assertEqual(pkg.name, 'mpich') def test_nonexisting_package_filename(self): - filename = spack.db.filename_for_package_name('some-nonexisting-package') - self.assertEqual(filename, join_path(spack.mock_packages_path, 'some-nonexisting-package', 'package.py')) + repo = Repo(spack.mock_packages_path) + filename = repo.filename_for_package_name('some-nonexisting-package') + self.assertEqual( + filename, + join_path(spack.mock_packages_path, 'packages', 'some-nonexisting-package', 'package.py')) def test_package_class_names(self): @@ -64,3 +69,38 @@ class PackagesTest(MockPackagesTest): self.assertEqual('PmgrCollective', mod_to_class('pmgr-collective')) self.assertEqual('Pmgrcollective', mod_to_class('PmgrCollective')) self.assertEqual('_3db', mod_to_class('3db')) + + + # + # Below tests target direct imports of spack packages from the + # spack.pkg namespace + # + + def test_import_package(self): + import spack.pkg.builtin.mock.mpich + + + def test_import_package_as(self): + import spack.pkg.builtin.mock.mpich as mp + + + def test_import_class_from_package(self): + from spack.pkg.builtin.mock.mpich import Mpich + + + def test_import_module_from_package(self): + from spack.pkg.builtin.mock import mpich + + + def test_import_namespace_container_modules(self): + import spack.pkg + import spack.pkg as p + from spack import pkg + + import spack.pkg.builtin + import spack.pkg.builtin as b + from spack.pkg import builtin + + import spack.pkg.builtin.mock + import spack.pkg.builtin.mock as m + from spack.pkg.builtin import mock diff --git a/lib/spack/spack/test/python_version.py b/lib/spack/spack/test/python_version.py index 2ea5febb11..d74d3b9b7d 100644 --- a/lib/spack/spack/test/python_version.py +++ b/lib/spack/spack/test/python_version.py @@ -54,8 +54,8 @@ class PythonVersionTest(unittest.TestCase): def package_py_files(self): - for name in spack.db.all_package_names(): - yield spack.db.filename_for_package_name(name) + for name in spack.repo.all_package_names(): + yield spack.repo.filename_for_package_name(name) def check_python_versions(self, *files): diff --git a/lib/spack/spack/test/spec_dag.py b/lib/spack/spack/test/spec_dag.py index d3a4d77b32..632f777cde 100644 --- a/lib/spack/spack/test/spec_dag.py +++ b/lib/spack/spack/test/spec_dag.py @@ -40,8 +40,8 @@ from spack.test.mock_packages_test import * class SpecDagTest(MockPackagesTest): def test_conflicting_package_constraints(self): - set_pkg_dep('mpileaks', 'mpich@1.0') - set_pkg_dep('callpath', 'mpich@2.0') + self.set_pkg_dep('mpileaks', 'mpich@1.0') + self.set_pkg_dep('callpath', 'mpich@2.0') spec = Spec('mpileaks ^mpich ^callpath ^dyninst ^libelf ^libdwarf') @@ -223,25 +223,25 @@ class SpecDagTest(MockPackagesTest): def test_unsatisfiable_version(self): - set_pkg_dep('mpileaks', 'mpich@1.0') + self.set_pkg_dep('mpileaks', 'mpich@1.0') spec = Spec('mpileaks ^mpich@2.0 ^callpath ^dyninst ^libelf ^libdwarf') self.assertRaises(spack.spec.UnsatisfiableVersionSpecError, spec.normalize) def test_unsatisfiable_compiler(self): - set_pkg_dep('mpileaks', 'mpich%gcc') + self.set_pkg_dep('mpileaks', 'mpich%gcc') spec = Spec('mpileaks ^mpich%intel ^callpath ^dyninst ^libelf ^libdwarf') self.assertRaises(spack.spec.UnsatisfiableCompilerSpecError, spec.normalize) def test_unsatisfiable_compiler_version(self): - set_pkg_dep('mpileaks', 'mpich%gcc@4.6') + self.set_pkg_dep('mpileaks', 'mpich%gcc@4.6') spec = Spec('mpileaks ^mpich%gcc@4.5 ^callpath ^dyninst ^libelf ^libdwarf') self.assertRaises(spack.spec.UnsatisfiableCompilerSpecError, spec.normalize) def test_unsatisfiable_architecture(self): - set_pkg_dep('mpileaks', 'mpich=bgqos_0') + self.set_pkg_dep('mpileaks', 'mpich=bgqos_0') spec = Spec('mpileaks ^mpich=sles_10_ppc64 ^callpath ^dyninst ^libelf ^libdwarf') self.assertRaises(spack.spec.UnsatisfiableArchitectureSpecError, spec.normalize) diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py index 1381556aad..44a09cbd7f 100644 --- a/lib/spack/spack/test/spec_semantics.py +++ b/lib/spack/spack/test/spec_semantics.py @@ -35,7 +35,10 @@ class SpecSematicsTest(MockPackagesTest): # ================================================================================ def check_satisfies(self, spec, anon_spec, concrete=False): left = Spec(spec, concrete=concrete) - right = parse_anonymous_spec(anon_spec, left.name) + try: + right = Spec(anon_spec) # if it's not anonymous, allow it. + except: + right = parse_anonymous_spec(anon_spec, left.name) # Satisfies is one-directional. self.assertTrue(left.satisfies(right)) @@ -48,7 +51,10 @@ class SpecSematicsTest(MockPackagesTest): def check_unsatisfiable(self, spec, anon_spec, concrete=False): left = Spec(spec, concrete=concrete) - right = parse_anonymous_spec(anon_spec, left.name) + try: + right = Spec(anon_spec) # if it's not anonymous, allow it. + except: + right = parse_anonymous_spec(anon_spec, left.name) self.assertFalse(left.satisfies(right)) self.assertFalse(left.satisfies(anon_spec)) @@ -88,6 +94,28 @@ class SpecSematicsTest(MockPackagesTest): self.check_satisfies('libdwarf^libelf@0.8.13', '^libelf@0:1') + def test_satisfies_namespace(self): + self.check_satisfies('builtin.mpich', 'mpich') + self.check_satisfies('builtin.mock.mpich', 'mpich') + + # TODO: only works for deps now, but shouldn't we allow this for root spec? + # self.check_satisfies('builtin.mock.mpich', 'mpi') + + self.check_satisfies('builtin.mock.mpich', 'builtin.mock.mpich') + + self.check_unsatisfiable('builtin.mock.mpich', 'builtin.mpich') + + + def test_satisfies_namespaced_dep(self): + """Ensure spec from same or unspecified namespace satisfies namespace constraint.""" + self.check_satisfies('mpileaks ^builtin.mock.mpich', '^mpich') + + self.check_satisfies('mpileaks ^builtin.mock.mpich', '^mpi') + self.check_satisfies('mpileaks ^builtin.mock.mpich', '^builtin.mock.mpich') + + self.check_unsatisfiable('mpileaks ^builtin.mock.mpich', '^builtin.mpich') + + def test_satisfies_compiler(self): self.check_satisfies('foo%gcc', '%gcc') self.check_satisfies('foo%intel', '%intel') diff --git a/lib/spack/spack/test/svn_fetch.py b/lib/spack/spack/test/svn_fetch.py index 9229af76d4..2ee4748fdb 100644 --- a/lib/spack/spack/test/svn_fetch.py +++ b/lib/spack/spack/test/svn_fetch.py @@ -49,7 +49,7 @@ class SvnFetchTest(MockPackagesTest): spec = Spec('svn-test') spec.concretize() - self.pkg = spack.db.get(spec, new=True) + self.pkg = spack.repo.get(spec, new=True) def tearDown(self): diff --git a/lib/spack/spack/test/unit_install.py b/lib/spack/spack/test/unit_install.py index 41c76a6dfa..24ffc7bb8f 100644 --- a/lib/spack/spack/test/unit_install.py +++ b/lib/spack/spack/test/unit_install.py @@ -26,16 +26,16 @@ import unittest import itertools import spack -test_install = __import__("spack.cmd.test-install", +test_install = __import__("spack.cmd.test-install", fromlist=["BuildId", "create_test_output", "TestResult"]) class MockOutput(object): def __init__(self): self.results = {} - + def add_test(self, buildId, passed=True, buildInfo=None): self.results[buildId] = passed - + def write_to(self, stream): pass @@ -45,14 +45,14 @@ class MockSpec(object): self.name = name self.version = version self.hash = hashStr if hashStr else hash((name, version)) - + def traverse(self, order=None): - allDeps = itertools.chain.from_iterable(i.traverse() for i in + allDeps = itertools.chain.from_iterable(i.traverse() for i in self.dependencies.itervalues()) return set(itertools.chain([self], allDeps)) - + def dag_hash(self): - return self.hash + return self.hash def to_yaml(self): return "<<<MOCK YAML {0}>>>".format(test_install.BuildId(self).stringId()) @@ -75,47 +75,52 @@ class UnitInstallTest(unittest.TestCase): def setUp(self): super(UnitInstallTest, self).setUp() - + pkgX.installed = False pkgY.installed = False + self.saved_db = spack.repo pkgDb = MockPackageDb({specX:pkgX, specY:pkgY}) - spack.db = pkgDb + spack.repo = pkgDb + def tearDown(self): super(UnitInstallTest, self).tearDown() - + + spack.repo = self.saved_db + def test_installing_both(self): mo = MockOutput() - + pkgX.installed = True pkgY.installed = True test_install.create_test_output(specX, [specX, specY], mo, getLogFunc=test_fetch_log) - - self.assertEqual(mo.results, - {bIdX:test_install.TestResult.PASSED, + + self.assertEqual(mo.results, + {bIdX:test_install.TestResult.PASSED, bIdY:test_install.TestResult.PASSED}) + def test_dependency_already_installed(self): mo = MockOutput() - + pkgX.installed = True pkgY.installed = True test_install.create_test_output(specX, [specX], mo, getLogFunc=test_fetch_log) - + self.assertEqual(mo.results, {bIdX:test_install.TestResult.PASSED}) #TODO: add test(s) where Y fails to install + class MockPackageDb(object): def __init__(self, init=None): self.specToPkg = {} if init: self.specToPkg.update(init) - + def get(self, spec): return self.specToPkg[spec] def test_fetch_log(path): return [] - diff --git a/lib/spack/spack/test/url_substitution.py b/lib/spack/spack/test/url_substitution.py index 8b90ee086a..aec8baf4ea 100644 --- a/lib/spack/spack/test/url_substitution.py +++ b/lib/spack/spack/test/url_substitution.py @@ -29,7 +29,6 @@ import unittest import spack import spack.url as url -from spack.packages import PackageDB class PackageSanityTest(unittest.TestCase): diff --git a/lib/spack/spack/util/naming.py b/lib/spack/spack/util/naming.py index 782afbd4bb..26ca86c77f 100644 --- a/lib/spack/spack/util/naming.py +++ b/lib/spack/spack/util/naming.py @@ -1,10 +1,15 @@ # Need this because of spack.util.string from __future__ import absolute_import import string +import itertools import re +from StringIO import StringIO import spack +__all__ = ['mod_to_class', 'spack_module_to_python_module', 'valid_module_name', + 'validate_module_name', 'possible_spack_module_names', 'NamespaceTrie'] + # Valid module names can contain '-' but can't start with it. _valid_module_re = r'^\w[\w-]*$' @@ -42,6 +47,33 @@ def mod_to_class(mod_name): return class_name +def spack_module_to_python_module(mod_name): + """Given a Spack module name, returns the name by which it can be + imported in Python. + """ + if re.match(r'[0-9]', mod_name): + mod_name = 'num' + mod_name + + return mod_name.replace('-', '_') + + +def possible_spack_module_names(python_mod_name): + """Given a Python module name, return a list of all possible spack module + names that could correspond to it.""" + mod_name = re.sub(r'^num(\d)', r'\1', python_mod_name) + + parts = re.split(r'(_)', mod_name) + options = [['_', '-']] * mod_name.count('_') + + results = [] + for subs in itertools.product(*options): + s = list(parts) + s[1::2] = subs + results.append(''.join(s)) + + return results + + def valid_module_name(mod_name): """Return whether the mod_name is valid for use in Spack.""" return bool(re.match(_valid_module_re, mod_name)) @@ -59,3 +91,97 @@ class InvalidModuleNameError(spack.error.SpackError): super(InvalidModuleNameError, self).__init__( "Invalid module name: " + name) self.name = name + + +class NamespaceTrie(object): + class Element(object): + def __init__(self, value): + self.value = value + + + def __init__(self, separator='.'): + self._subspaces = {} + self._value = None + self._sep = separator + + + def __setitem__(self, namespace, value): + first, sep, rest = namespace.partition(self._sep) + + if not first: + self._value = NamespaceTrie.Element(value) + return + + if first not in self._subspaces: + self._subspaces[first] = NamespaceTrie() + + self._subspaces[first][rest] = value + + + def _get_helper(self, namespace, full_name): + first, sep, rest = namespace.partition(self._sep) + if not first: + if not self._value: + raise KeyError("Can't find namespace '%s' in trie" % full_name) + return self._value.value + elif first not in self._subspaces: + raise KeyError("Can't find namespace '%s' in trie" % full_name) + else: + return self._subspaces[first]._get_helper(rest, full_name) + + + def __getitem__(self, namespace): + return self._get_helper(namespace, namespace) + + + def is_prefix(self, namespace): + """True if the namespace has a value, or if it's the prefix of one that does.""" + first, sep, rest = namespace.partition(self._sep) + if not first: + return True + elif first not in self._subspaces: + return False + else: + return self._subspaces[first].is_prefix(rest) + + + def is_leaf(self, namespace): + """True if this namespace has no children in the trie.""" + first, sep, rest = namespace.partition(self._sep) + if not first: + return bool(self._subspaces) + elif first not in self._subspaces: + return False + else: + return self._subspaces[first].is_leaf(rest) + + + def has_value(self, namespace): + """True if there is a value set for the given namespace.""" + first, sep, rest = namespace.partition(self._sep) + if not first: + return self._value is not None + elif first not in self._subspaces: + return False + else: + return self._subspaces[first].has_value(rest) + + + def __contains__(self, namespace): + """Returns whether a value has been set for the namespace.""" + return self.has_value(namespace) + + + def _str_helper(self, stream, level=0): + indent = (level * ' ') + for name in sorted(self._subspaces): + stream.write(indent + name + '\n') + if self._value: + stream.write(indent + ' ' + repr(self._value.value)) + stream.write(self._subspaces[name]._str_helper(stream, level+1)) + + + def __str__(self): + stream = StringIO() + self._str_helper(stream) + return stream.getvalue() diff --git a/var/spack/mock_packages/a/package.py b/var/spack/repos/builtin.mock/packages/a/package.py index fa63c08df0..fa63c08df0 100644 --- a/var/spack/mock_packages/a/package.py +++ b/var/spack/repos/builtin.mock/packages/a/package.py diff --git a/var/spack/mock_packages/b/package.py b/var/spack/repos/builtin.mock/packages/b/package.py index cb88aa2157..cb88aa2157 100644 --- a/var/spack/mock_packages/b/package.py +++ b/var/spack/repos/builtin.mock/packages/b/package.py diff --git a/var/spack/mock_packages/c/package.py b/var/spack/repos/builtin.mock/packages/c/package.py index f51b913fa9..f51b913fa9 100644 --- a/var/spack/mock_packages/c/package.py +++ b/var/spack/repos/builtin.mock/packages/c/package.py diff --git a/var/spack/mock_packages/callpath/package.py b/var/spack/repos/builtin.mock/packages/callpath/package.py index abc576f78f..abc576f78f 100644 --- a/var/spack/mock_packages/callpath/package.py +++ b/var/spack/repos/builtin.mock/packages/callpath/package.py diff --git a/var/spack/mock_packages/direct_mpich/package.py b/var/spack/repos/builtin.mock/packages/direct_mpich/package.py index efe7fc2afc..efe7fc2afc 100644 --- a/var/spack/mock_packages/direct_mpich/package.py +++ b/var/spack/repos/builtin.mock/packages/direct_mpich/package.py diff --git a/var/spack/mock_packages/dyninst/package.py b/var/spack/repos/builtin.mock/packages/dyninst/package.py index ea57950865..ea57950865 100644 --- a/var/spack/mock_packages/dyninst/package.py +++ b/var/spack/repos/builtin.mock/packages/dyninst/package.py diff --git a/var/spack/mock_packages/e/package.py b/var/spack/repos/builtin.mock/packages/e/package.py index 76c6b64c7f..76c6b64c7f 100644 --- a/var/spack/mock_packages/e/package.py +++ b/var/spack/repos/builtin.mock/packages/e/package.py diff --git a/var/spack/mock_packages/fake/package.py b/var/spack/repos/builtin.mock/packages/fake/package.py index 5f81ef20fc..5f81ef20fc 100644 --- a/var/spack/mock_packages/fake/package.py +++ b/var/spack/repos/builtin.mock/packages/fake/package.py diff --git a/var/spack/mock_packages/git-test/package.py b/var/spack/repos/builtin.mock/packages/git-test/package.py index 689185463c..689185463c 100644 --- a/var/spack/mock_packages/git-test/package.py +++ b/var/spack/repos/builtin.mock/packages/git-test/package.py diff --git a/var/spack/mock_packages/hg-test/package.py b/var/spack/repos/builtin.mock/packages/hg-test/package.py index 462f1e4c3a..462f1e4c3a 100644 --- a/var/spack/mock_packages/hg-test/package.py +++ b/var/spack/repos/builtin.mock/packages/hg-test/package.py diff --git a/var/spack/mock_packages/indirect_mpich/package.py b/var/spack/repos/builtin.mock/packages/indirect_mpich/package.py index 0b1773a27b..0b1773a27b 100644 --- a/var/spack/mock_packages/indirect_mpich/package.py +++ b/var/spack/repos/builtin.mock/packages/indirect_mpich/package.py diff --git a/var/spack/mock_packages/libdwarf/package.py b/var/spack/repos/builtin.mock/packages/libdwarf/package.py index e486a5de03..e486a5de03 100644 --- a/var/spack/mock_packages/libdwarf/package.py +++ b/var/spack/repos/builtin.mock/packages/libdwarf/package.py diff --git a/var/spack/mock_packages/libelf/package.py b/var/spack/repos/builtin.mock/packages/libelf/package.py index 5e5b0b7143..5e5b0b7143 100644 --- a/var/spack/mock_packages/libelf/package.py +++ b/var/spack/repos/builtin.mock/packages/libelf/package.py diff --git a/var/spack/mock_packages/mpich/package.py b/var/spack/repos/builtin.mock/packages/mpich/package.py index 55bf97f2cf..55bf97f2cf 100644 --- a/var/spack/mock_packages/mpich/package.py +++ b/var/spack/repos/builtin.mock/packages/mpich/package.py diff --git a/var/spack/mock_packages/mpich2/package.py b/var/spack/repos/builtin.mock/packages/mpich2/package.py index 90f969b898..90f969b898 100644 --- a/var/spack/mock_packages/mpich2/package.py +++ b/var/spack/repos/builtin.mock/packages/mpich2/package.py diff --git a/var/spack/mock_packages/mpileaks/package.py b/var/spack/repos/builtin.mock/packages/mpileaks/package.py index 9a18c5e1f2..9a18c5e1f2 100644 --- a/var/spack/mock_packages/mpileaks/package.py +++ b/var/spack/repos/builtin.mock/packages/mpileaks/package.py diff --git a/var/spack/mock_packages/multimethod/package.py b/var/spack/repos/builtin.mock/packages/multimethod/package.py index ea103fe175..ea103fe175 100644 --- a/var/spack/mock_packages/multimethod/package.py +++ b/var/spack/repos/builtin.mock/packages/multimethod/package.py diff --git a/var/spack/mock_packages/netlib-blas/package.py b/var/spack/repos/builtin.mock/packages/netlib-blas/package.py index 39f2c92ae5..39f2c92ae5 100644 --- a/var/spack/mock_packages/netlib-blas/package.py +++ b/var/spack/repos/builtin.mock/packages/netlib-blas/package.py diff --git a/var/spack/mock_packages/netlib-lapack/package.py b/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py index 331844e544..331844e544 100644 --- a/var/spack/mock_packages/netlib-lapack/package.py +++ b/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py diff --git a/var/spack/mock_packages/openblas/package.py b/var/spack/repos/builtin.mock/packages/openblas/package.py index c7771b92a3..c7771b92a3 100644 --- a/var/spack/mock_packages/openblas/package.py +++ b/var/spack/repos/builtin.mock/packages/openblas/package.py diff --git a/var/spack/mock_packages/optional-dep-test-2/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py index ef0587588e..ef0587588e 100644 --- a/var/spack/mock_packages/optional-dep-test-2/package.py +++ b/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py diff --git a/var/spack/mock_packages/optional-dep-test-3/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py index e6cb3bd6e7..e6cb3bd6e7 100644 --- a/var/spack/mock_packages/optional-dep-test-3/package.py +++ b/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py diff --git a/var/spack/mock_packages/optional-dep-test/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py index bb57576ca9..bb57576ca9 100644 --- a/var/spack/mock_packages/optional-dep-test/package.py +++ b/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py diff --git a/var/spack/mock_packages/svn-test/package.py b/var/spack/repos/builtin.mock/packages/svn-test/package.py index ba4d5522b4..ba4d5522b4 100644 --- a/var/spack/mock_packages/svn-test/package.py +++ b/var/spack/repos/builtin.mock/packages/svn-test/package.py diff --git a/var/spack/mock_packages/trivial_install_test_package/package.py b/var/spack/repos/builtin.mock/packages/trivial_install_test_package/package.py index fec5849e67..fec5849e67 100644 --- a/var/spack/mock_packages/trivial_install_test_package/package.py +++ b/var/spack/repos/builtin.mock/packages/trivial_install_test_package/package.py diff --git a/var/spack/mock_packages/zmpi/package.py b/var/spack/repos/builtin.mock/packages/zmpi/package.py index 201fac2fbf..201fac2fbf 100644 --- a/var/spack/mock_packages/zmpi/package.py +++ b/var/spack/repos/builtin.mock/packages/zmpi/package.py diff --git a/var/spack/repos/builtin.mock/repo.yaml b/var/spack/repos/builtin.mock/repo.yaml new file mode 100644 index 0000000000..30b068da13 --- /dev/null +++ b/var/spack/repos/builtin.mock/repo.yaml @@ -0,0 +1,2 @@ +repo: + namespace: builtin.mock diff --git a/var/spack/packages/ImageMagick/package.py b/var/spack/repos/builtin/packages/ImageMagick/package.py index 753ea80ca6..753ea80ca6 100644 --- a/var/spack/packages/ImageMagick/package.py +++ b/var/spack/repos/builtin/packages/ImageMagick/package.py diff --git a/var/spack/packages/Mitos/package.py b/var/spack/repos/builtin/packages/Mitos/package.py index ea131872dd..ea131872dd 100644 --- a/var/spack/packages/Mitos/package.py +++ b/var/spack/repos/builtin/packages/Mitos/package.py diff --git a/var/spack/packages/R/package.py b/var/spack/repos/builtin/packages/R/package.py index 2e6f65a742..2e6f65a742 100644 --- a/var/spack/packages/R/package.py +++ b/var/spack/repos/builtin/packages/R/package.py diff --git a/var/spack/packages/SAMRAI/no-tool-build.patch b/var/spack/repos/builtin/packages/SAMRAI/no-tool-build.patch index 1adf0cf721..1adf0cf721 100644 --- a/var/spack/packages/SAMRAI/no-tool-build.patch +++ b/var/spack/repos/builtin/packages/SAMRAI/no-tool-build.patch diff --git a/var/spack/packages/SAMRAI/package.py b/var/spack/repos/builtin/packages/SAMRAI/package.py index 2c3b9180af..2c3b9180af 100644 --- a/var/spack/packages/SAMRAI/package.py +++ b/var/spack/repos/builtin/packages/SAMRAI/package.py diff --git a/var/spack/packages/activeharmony/package.py b/var/spack/repos/builtin/packages/activeharmony/package.py index 45dcc7c0e8..45dcc7c0e8 100644 --- a/var/spack/packages/activeharmony/package.py +++ b/var/spack/repos/builtin/packages/activeharmony/package.py diff --git a/var/spack/packages/adept-utils/package.py b/var/spack/repos/builtin/packages/adept-utils/package.py index fb59576c21..fb59576c21 100644 --- a/var/spack/packages/adept-utils/package.py +++ b/var/spack/repos/builtin/packages/adept-utils/package.py diff --git a/var/spack/packages/apex/package.py b/var/spack/repos/builtin/packages/apex/package.py index 8769d97056..8769d97056 100644 --- a/var/spack/packages/apex/package.py +++ b/var/spack/repos/builtin/packages/apex/package.py diff --git a/var/spack/packages/arpack/package.py b/var/spack/repos/builtin/packages/arpack/package.py index 8c67c536f3..8c67c536f3 100644 --- a/var/spack/packages/arpack/package.py +++ b/var/spack/repos/builtin/packages/arpack/package.py diff --git a/var/spack/packages/asciidoc/package.py b/var/spack/repos/builtin/packages/asciidoc/package.py index 828f3b3f4f..828f3b3f4f 100644 --- a/var/spack/packages/asciidoc/package.py +++ b/var/spack/repos/builtin/packages/asciidoc/package.py diff --git a/var/spack/packages/atk/package.py b/var/spack/repos/builtin/packages/atk/package.py index 769805b227..769805b227 100644 --- a/var/spack/packages/atk/package.py +++ b/var/spack/repos/builtin/packages/atk/package.py diff --git a/var/spack/packages/atlas/package.py b/var/spack/repos/builtin/packages/atlas/package.py index fc683363a7..fc683363a7 100644 --- a/var/spack/packages/atlas/package.py +++ b/var/spack/repos/builtin/packages/atlas/package.py diff --git a/var/spack/packages/autoconf/package.py b/var/spack/repos/builtin/packages/autoconf/package.py index 5189faf054..5189faf054 100644 --- a/var/spack/packages/autoconf/package.py +++ b/var/spack/repos/builtin/packages/autoconf/package.py diff --git a/var/spack/packages/automaded/package.py b/var/spack/repos/builtin/packages/automaded/package.py index e0bc7efb8b..e0bc7efb8b 100644 --- a/var/spack/packages/automaded/package.py +++ b/var/spack/repos/builtin/packages/automaded/package.py diff --git a/var/spack/packages/automake/package.py b/var/spack/repos/builtin/packages/automake/package.py index 9115822730..9115822730 100644 --- a/var/spack/packages/automake/package.py +++ b/var/spack/repos/builtin/packages/automake/package.py diff --git a/var/spack/packages/bear/package.py b/var/spack/repos/builtin/packages/bear/package.py index 0d4436fccc..0d4436fccc 100644 --- a/var/spack/packages/bear/package.py +++ b/var/spack/repos/builtin/packages/bear/package.py diff --git a/var/spack/packages/bib2xhtml/package.py b/var/spack/repos/builtin/packages/bib2xhtml/package.py index 7f8e0cfe5a..7f8e0cfe5a 100644 --- a/var/spack/packages/bib2xhtml/package.py +++ b/var/spack/repos/builtin/packages/bib2xhtml/package.py diff --git a/var/spack/packages/binutils/binutilskrell-2.24.patch b/var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch index f48291a6c9..f48291a6c9 100644 --- a/var/spack/packages/binutils/binutilskrell-2.24.patch +++ b/var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch diff --git a/var/spack/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py index 123f4598f6..123f4598f6 100644 --- a/var/spack/packages/binutils/package.py +++ b/var/spack/repos/builtin/packages/binutils/package.py diff --git a/var/spack/packages/bison/package.py b/var/spack/repos/builtin/packages/bison/package.py index 7c526fb958..7c526fb958 100644 --- a/var/spack/packages/bison/package.py +++ b/var/spack/repos/builtin/packages/bison/package.py diff --git a/var/spack/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py index 81dadbbf61..81dadbbf61 100644 --- a/var/spack/packages/boost/package.py +++ b/var/spack/repos/builtin/packages/boost/package.py diff --git a/var/spack/packages/bowtie2/bowtie2-2.5.patch b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch index 290be39c73..290be39c73 100644 --- a/var/spack/packages/bowtie2/bowtie2-2.5.patch +++ b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch diff --git a/var/spack/packages/bowtie2/package.py b/var/spack/repos/builtin/packages/bowtie2/package.py index 339aab6598..339aab6598 100644 --- a/var/spack/packages/bowtie2/package.py +++ b/var/spack/repos/builtin/packages/bowtie2/package.py diff --git a/var/spack/packages/boxlib/package.py b/var/spack/repos/builtin/packages/boxlib/package.py index 4f1b71132f..4f1b71132f 100644 --- a/var/spack/packages/boxlib/package.py +++ b/var/spack/repos/builtin/packages/boxlib/package.py diff --git a/var/spack/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py index 638ba1fa4d..638ba1fa4d 100644 --- a/var/spack/packages/bzip2/package.py +++ b/var/spack/repos/builtin/packages/bzip2/package.py diff --git a/var/spack/packages/cairo/package.py b/var/spack/repos/builtin/packages/cairo/package.py index e1ac8aaa7d..e1ac8aaa7d 100644 --- a/var/spack/packages/cairo/package.py +++ b/var/spack/repos/builtin/packages/cairo/package.py diff --git a/var/spack/packages/callpath/package.py b/var/spack/repos/builtin/packages/callpath/package.py index 3d2d96249e..3d2d96249e 100644 --- a/var/spack/packages/callpath/package.py +++ b/var/spack/repos/builtin/packages/callpath/package.py diff --git a/var/spack/packages/cblas/package.py b/var/spack/repos/builtin/packages/cblas/package.py index 3cfe5ee588..3cfe5ee588 100644 --- a/var/spack/packages/cblas/package.py +++ b/var/spack/repos/builtin/packages/cblas/package.py diff --git a/var/spack/packages/cbtf-argonavis/package.py b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py index 7b07933911..7b07933911 100644 --- a/var/spack/packages/cbtf-argonavis/package.py +++ b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py diff --git a/var/spack/packages/cbtf-krell/package.py b/var/spack/repos/builtin/packages/cbtf-krell/package.py index 9458ac113c..9458ac113c 100644 --- a/var/spack/packages/cbtf-krell/package.py +++ b/var/spack/repos/builtin/packages/cbtf-krell/package.py diff --git a/var/spack/packages/cbtf-lanl/package.py b/var/spack/repos/builtin/packages/cbtf-lanl/package.py index 2da9e8a1f7..2da9e8a1f7 100644 --- a/var/spack/packages/cbtf-lanl/package.py +++ b/var/spack/repos/builtin/packages/cbtf-lanl/package.py diff --git a/var/spack/packages/cbtf/package.py b/var/spack/repos/builtin/packages/cbtf/package.py index 52e6a07020..52e6a07020 100644 --- a/var/spack/packages/cbtf/package.py +++ b/var/spack/repos/builtin/packages/cbtf/package.py diff --git a/var/spack/packages/cfitsio/package.py b/var/spack/repos/builtin/packages/cfitsio/package.py index ff450cb5f3..ff450cb5f3 100644 --- a/var/spack/packages/cfitsio/package.py +++ b/var/spack/repos/builtin/packages/cfitsio/package.py diff --git a/var/spack/packages/cgm/package.py b/var/spack/repos/builtin/packages/cgm/package.py index 05d6395c5a..05d6395c5a 100644 --- a/var/spack/packages/cgm/package.py +++ b/var/spack/repos/builtin/packages/cgm/package.py diff --git a/var/spack/packages/cityhash/package.py b/var/spack/repos/builtin/packages/cityhash/package.py index 1643cc3b42..1643cc3b42 100644 --- a/var/spack/packages/cityhash/package.py +++ b/var/spack/repos/builtin/packages/cityhash/package.py diff --git a/var/spack/packages/clang/package.py b/var/spack/repos/builtin/packages/clang/package.py index e46e08d5f1..e46e08d5f1 100644 --- a/var/spack/packages/clang/package.py +++ b/var/spack/repos/builtin/packages/clang/package.py diff --git a/var/spack/packages/cleverleaf/package.py b/var/spack/repos/builtin/packages/cleverleaf/package.py index fb400b25c3..fb400b25c3 100644 --- a/var/spack/packages/cleverleaf/package.py +++ b/var/spack/repos/builtin/packages/cleverleaf/package.py diff --git a/var/spack/packages/cloog/package.py b/var/spack/repos/builtin/packages/cloog/package.py index 814a33c76c..814a33c76c 100644 --- a/var/spack/packages/cloog/package.py +++ b/var/spack/repos/builtin/packages/cloog/package.py diff --git a/var/spack/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py index cb54c92d69..cb54c92d69 100644 --- a/var/spack/packages/cmake/package.py +++ b/var/spack/repos/builtin/packages/cmake/package.py diff --git a/var/spack/packages/coreutils/package.py b/var/spack/repos/builtin/packages/coreutils/package.py index 78c608d8eb..78c608d8eb 100644 --- a/var/spack/packages/coreutils/package.py +++ b/var/spack/repos/builtin/packages/coreutils/package.py diff --git a/var/spack/packages/cppcheck/package.py b/var/spack/repos/builtin/packages/cppcheck/package.py index 8e98f457ee..8e98f457ee 100644 --- a/var/spack/packages/cppcheck/package.py +++ b/var/spack/repos/builtin/packages/cppcheck/package.py diff --git a/var/spack/packages/cram/package.py b/var/spack/repos/builtin/packages/cram/package.py index b19422b8a8..b19422b8a8 100644 --- a/var/spack/packages/cram/package.py +++ b/var/spack/repos/builtin/packages/cram/package.py diff --git a/var/spack/packages/cscope/package.py b/var/spack/repos/builtin/packages/cscope/package.py index 9aac0f7304..9aac0f7304 100644 --- a/var/spack/packages/cscope/package.py +++ b/var/spack/repos/builtin/packages/cscope/package.py diff --git a/var/spack/packages/cube/package.py b/var/spack/repos/builtin/packages/cube/package.py index cc1c684594..cc1c684594 100644 --- a/var/spack/packages/cube/package.py +++ b/var/spack/repos/builtin/packages/cube/package.py diff --git a/var/spack/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py index 9e684445c7..9e684445c7 100644 --- a/var/spack/packages/curl/package.py +++ b/var/spack/repos/builtin/packages/curl/package.py diff --git a/var/spack/packages/czmq/package.py b/var/spack/repos/builtin/packages/czmq/package.py index 0665332179..0665332179 100644 --- a/var/spack/packages/czmq/package.py +++ b/var/spack/repos/builtin/packages/czmq/package.py diff --git a/var/spack/packages/damselfly/package.py b/var/spack/repos/builtin/packages/damselfly/package.py index 96666d1abe..96666d1abe 100644 --- a/var/spack/packages/damselfly/package.py +++ b/var/spack/repos/builtin/packages/damselfly/package.py diff --git a/var/spack/packages/dbus/package.py b/var/spack/repos/builtin/packages/dbus/package.py index 294b0de54e..294b0de54e 100644 --- a/var/spack/packages/dbus/package.py +++ b/var/spack/repos/builtin/packages/dbus/package.py diff --git a/var/spack/packages/docbook-xml/package.py b/var/spack/repos/builtin/packages/docbook-xml/package.py index fce1de7deb..fce1de7deb 100644 --- a/var/spack/packages/docbook-xml/package.py +++ b/var/spack/repos/builtin/packages/docbook-xml/package.py diff --git a/var/spack/packages/doxygen/package.py b/var/spack/repos/builtin/packages/doxygen/package.py index 3d4a4e47a7..3d4a4e47a7 100644 --- a/var/spack/packages/doxygen/package.py +++ b/var/spack/repos/builtin/packages/doxygen/package.py diff --git a/var/spack/packages/dri2proto/package.py b/var/spack/repos/builtin/packages/dri2proto/package.py index 11dfa568e2..11dfa568e2 100644 --- a/var/spack/packages/dri2proto/package.py +++ b/var/spack/repos/builtin/packages/dri2proto/package.py diff --git a/var/spack/packages/dtcmp/package.py b/var/spack/repos/builtin/packages/dtcmp/package.py index 9d940583c1..9d940583c1 100644 --- a/var/spack/packages/dtcmp/package.py +++ b/var/spack/repos/builtin/packages/dtcmp/package.py diff --git a/var/spack/packages/dyninst/package.py b/var/spack/repos/builtin/packages/dyninst/package.py index 0111dcbe08..0111dcbe08 100644 --- a/var/spack/packages/dyninst/package.py +++ b/var/spack/repos/builtin/packages/dyninst/package.py diff --git a/var/spack/packages/elfutils/package.py b/var/spack/repos/builtin/packages/elfutils/package.py index 926d234584..926d234584 100644 --- a/var/spack/packages/elfutils/package.py +++ b/var/spack/repos/builtin/packages/elfutils/package.py diff --git a/var/spack/packages/expat/package.py b/var/spack/repos/builtin/packages/expat/package.py index 082da5bf0b..082da5bf0b 100644 --- a/var/spack/packages/expat/package.py +++ b/var/spack/repos/builtin/packages/expat/package.py diff --git a/var/spack/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py index 3ad4cbaf86..3ad4cbaf86 100644 --- a/var/spack/packages/extrae/package.py +++ b/var/spack/repos/builtin/packages/extrae/package.py diff --git a/var/spack/packages/exuberant-ctags/package.py b/var/spack/repos/builtin/packages/exuberant-ctags/package.py index efd2b541b2..efd2b541b2 100644 --- a/var/spack/packages/exuberant-ctags/package.py +++ b/var/spack/repos/builtin/packages/exuberant-ctags/package.py diff --git a/var/spack/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py index 5f71762c4f..5f71762c4f 100644 --- a/var/spack/packages/fftw/package.py +++ b/var/spack/repos/builtin/packages/fftw/package.py diff --git a/var/spack/packages/fish/package.py b/var/spack/repos/builtin/packages/fish/package.py index 1225558705..1225558705 100644 --- a/var/spack/packages/fish/package.py +++ b/var/spack/repos/builtin/packages/fish/package.py diff --git a/var/spack/packages/flex/package.py b/var/spack/repos/builtin/packages/flex/package.py index b065904912..b065904912 100644 --- a/var/spack/packages/flex/package.py +++ b/var/spack/repos/builtin/packages/flex/package.py diff --git a/var/spack/packages/flux/package.py b/var/spack/repos/builtin/packages/flux/package.py index dc4e0594c5..dc4e0594c5 100644 --- a/var/spack/packages/flux/package.py +++ b/var/spack/repos/builtin/packages/flux/package.py diff --git a/var/spack/packages/fontconfig/package.py b/var/spack/repos/builtin/packages/fontconfig/package.py index 517c9d1813..517c9d1813 100644 --- a/var/spack/packages/fontconfig/package.py +++ b/var/spack/repos/builtin/packages/fontconfig/package.py diff --git a/var/spack/packages/freetype/package.py b/var/spack/repos/builtin/packages/freetype/package.py index 0309b858a1..0309b858a1 100644 --- a/var/spack/packages/freetype/package.py +++ b/var/spack/repos/builtin/packages/freetype/package.py diff --git a/var/spack/packages/gasnet/package.py b/var/spack/repos/builtin/packages/gasnet/package.py index 705961d1de..705961d1de 100644 --- a/var/spack/packages/gasnet/package.py +++ b/var/spack/repos/builtin/packages/gasnet/package.py diff --git a/var/spack/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py index 7ec160d595..7ec160d595 100644 --- a/var/spack/packages/gcc/package.py +++ b/var/spack/repos/builtin/packages/gcc/package.py diff --git a/var/spack/packages/gdb/package.py b/var/spack/repos/builtin/packages/gdb/package.py index fd567f346b..e5378cfa29 100644 --- a/var/spack/packages/gdb/package.py +++ b/var/spack/repos/builtin/packages/gdb/package.py @@ -6,7 +6,7 @@ # Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. # LLNL-CODE-647188 # -# For details, see https://scalability-llnl.github.io/spack +# For details, see https://llnl.github.io/spack # Please also see the LICENSE file for our notice and the LGPL. # # This program is free software; you can redistribute it and/or modify diff --git a/var/spack/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py index 14a5569984..14a5569984 100644 --- a/var/spack/packages/gdk-pixbuf/package.py +++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py diff --git a/var/spack/packages/geos/package.py b/var/spack/repos/builtin/packages/geos/package.py index 4a2657e32f..4a2657e32f 100644 --- a/var/spack/packages/geos/package.py +++ b/var/spack/repos/builtin/packages/geos/package.py diff --git a/var/spack/packages/gflags/package.py b/var/spack/repos/builtin/packages/gflags/package.py index 62dd80a094..62dd80a094 100644 --- a/var/spack/packages/gflags/package.py +++ b/var/spack/repos/builtin/packages/gflags/package.py diff --git a/var/spack/packages/ghostscript/package.py b/var/spack/repos/builtin/packages/ghostscript/package.py index 0ab49d425f..0ab49d425f 100644 --- a/var/spack/packages/ghostscript/package.py +++ b/var/spack/repos/builtin/packages/ghostscript/package.py diff --git a/var/spack/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py index 28c7aa8161..28c7aa8161 100644 --- a/var/spack/packages/git/package.py +++ b/var/spack/repos/builtin/packages/git/package.py diff --git a/var/spack/packages/glib/package.py b/var/spack/repos/builtin/packages/glib/package.py index baca1a5a45..baca1a5a45 100644 --- a/var/spack/packages/glib/package.py +++ b/var/spack/repos/builtin/packages/glib/package.py diff --git a/var/spack/packages/glm/package.py b/var/spack/repos/builtin/packages/glm/package.py index d00c301b4c..d00c301b4c 100644 --- a/var/spack/packages/glm/package.py +++ b/var/spack/repos/builtin/packages/glm/package.py diff --git a/var/spack/packages/global/package.py b/var/spack/repos/builtin/packages/global/package.py index e8f06516d9..e8f06516d9 100644 --- a/var/spack/packages/global/package.py +++ b/var/spack/repos/builtin/packages/global/package.py diff --git a/var/spack/packages/glog/package.py b/var/spack/repos/builtin/packages/glog/package.py index d73386b394..d73386b394 100644 --- a/var/spack/packages/glog/package.py +++ b/var/spack/repos/builtin/packages/glog/package.py diff --git a/var/spack/packages/gmp/package.py b/var/spack/repos/builtin/packages/gmp/package.py index fe13de3b95..fe13de3b95 100644 --- a/var/spack/packages/gmp/package.py +++ b/var/spack/repos/builtin/packages/gmp/package.py diff --git a/var/spack/packages/gnuplot/package.py b/var/spack/repos/builtin/packages/gnuplot/package.py index 71c09bd43d..71c09bd43d 100644 --- a/var/spack/packages/gnuplot/package.py +++ b/var/spack/repos/builtin/packages/gnuplot/package.py diff --git a/var/spack/packages/gnutls/package.py b/var/spack/repos/builtin/packages/gnutls/package.py index cf57a24a6d..cf57a24a6d 100644 --- a/var/spack/packages/gnutls/package.py +++ b/var/spack/repos/builtin/packages/gnutls/package.py diff --git a/var/spack/packages/gperf/package.py b/var/spack/repos/builtin/packages/gperf/package.py index 32551b67b4..32551b67b4 100644 --- a/var/spack/packages/gperf/package.py +++ b/var/spack/repos/builtin/packages/gperf/package.py diff --git a/var/spack/packages/gperftools/package.py b/var/spack/repos/builtin/packages/gperftools/package.py index 0ba44c9329..0ba44c9329 100644 --- a/var/spack/packages/gperftools/package.py +++ b/var/spack/repos/builtin/packages/gperftools/package.py diff --git a/var/spack/packages/graphlib/package.py b/var/spack/repos/builtin/packages/graphlib/package.py index ddac0b2b66..ddac0b2b66 100644 --- a/var/spack/packages/graphlib/package.py +++ b/var/spack/repos/builtin/packages/graphlib/package.py diff --git a/var/spack/packages/graphviz/package.py b/var/spack/repos/builtin/packages/graphviz/package.py index 7af7da1881..7af7da1881 100644 --- a/var/spack/packages/graphviz/package.py +++ b/var/spack/repos/builtin/packages/graphviz/package.py diff --git a/var/spack/packages/gsl/package.py b/var/spack/repos/builtin/packages/gsl/package.py index 789eb49d85..789eb49d85 100644 --- a/var/spack/packages/gsl/package.py +++ b/var/spack/repos/builtin/packages/gsl/package.py diff --git a/var/spack/packages/gtkplus/package.py b/var/spack/repos/builtin/packages/gtkplus/package.py index 0ebc7100de..0ebc7100de 100644 --- a/var/spack/packages/gtkplus/package.py +++ b/var/spack/repos/builtin/packages/gtkplus/package.py diff --git a/var/spack/packages/harfbuzz/package.py b/var/spack/repos/builtin/packages/harfbuzz/package.py index ed7c42a909..ed7c42a909 100644 --- a/var/spack/packages/harfbuzz/package.py +++ b/var/spack/repos/builtin/packages/harfbuzz/package.py diff --git a/var/spack/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py index adac79d9bb..adac79d9bb 100644 --- a/var/spack/packages/hdf5/package.py +++ b/var/spack/repos/builtin/packages/hdf5/package.py diff --git a/var/spack/packages/hwloc/package.py b/var/spack/repos/builtin/packages/hwloc/package.py index 7ebede76a3..7ebede76a3 100644 --- a/var/spack/packages/hwloc/package.py +++ b/var/spack/repos/builtin/packages/hwloc/package.py diff --git a/var/spack/packages/hypre/package.py b/var/spack/repos/builtin/packages/hypre/package.py index 0f7f14dd89..0f7f14dd89 100644 --- a/var/spack/packages/hypre/package.py +++ b/var/spack/repos/builtin/packages/hypre/package.py diff --git a/var/spack/packages/icu/package.py b/var/spack/repos/builtin/packages/icu/package.py index f256ec5712..f256ec5712 100644 --- a/var/spack/packages/icu/package.py +++ b/var/spack/repos/builtin/packages/icu/package.py diff --git a/var/spack/packages/icu4c/package.py b/var/spack/repos/builtin/packages/icu4c/package.py index 55b44463b2..55b44463b2 100644 --- a/var/spack/packages/icu4c/package.py +++ b/var/spack/repos/builtin/packages/icu4c/package.py diff --git a/var/spack/packages/isl/package.py b/var/spack/repos/builtin/packages/isl/package.py index 836ef3ea40..836ef3ea40 100644 --- a/var/spack/packages/isl/package.py +++ b/var/spack/repos/builtin/packages/isl/package.py diff --git a/var/spack/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py index f8f5fc21bd..f8f5fc21bd 100644 --- a/var/spack/packages/jdk/package.py +++ b/var/spack/repos/builtin/packages/jdk/package.py diff --git a/var/spack/packages/jemalloc/package.py b/var/spack/repos/builtin/packages/jemalloc/package.py index 8cec9ea75b..8cec9ea75b 100644 --- a/var/spack/packages/jemalloc/package.py +++ b/var/spack/repos/builtin/packages/jemalloc/package.py diff --git a/var/spack/packages/jpeg/package.py b/var/spack/repos/builtin/packages/jpeg/package.py index 87820467db..87820467db 100644 --- a/var/spack/packages/jpeg/package.py +++ b/var/spack/repos/builtin/packages/jpeg/package.py diff --git a/var/spack/packages/judy/package.py b/var/spack/repos/builtin/packages/judy/package.py index b8d8701383..b8d8701383 100644 --- a/var/spack/packages/judy/package.py +++ b/var/spack/repos/builtin/packages/judy/package.py diff --git a/var/spack/packages/launchmon/package.py b/var/spack/repos/builtin/packages/launchmon/package.py index f97384a249..f97384a249 100644 --- a/var/spack/packages/launchmon/package.py +++ b/var/spack/repos/builtin/packages/launchmon/package.py diff --git a/var/spack/packages/launchmon/patch.lmon_install_dir b/var/spack/repos/builtin/packages/launchmon/patch.lmon_install_dir index 8a1d93fdc9..8a1d93fdc9 100644 --- a/var/spack/packages/launchmon/patch.lmon_install_dir +++ b/var/spack/repos/builtin/packages/launchmon/patch.lmon_install_dir diff --git a/var/spack/packages/lcms/package.py b/var/spack/repos/builtin/packages/lcms/package.py index a53c2f997a..a53c2f997a 100644 --- a/var/spack/packages/lcms/package.py +++ b/var/spack/repos/builtin/packages/lcms/package.py diff --git a/var/spack/packages/leveldb/package.py b/var/spack/repos/builtin/packages/leveldb/package.py index da68a9cbcb..da68a9cbcb 100644 --- a/var/spack/packages/leveldb/package.py +++ b/var/spack/repos/builtin/packages/leveldb/package.py diff --git a/var/spack/packages/libNBC/package.py b/var/spack/repos/builtin/packages/libNBC/package.py index 550568e97d..550568e97d 100644 --- a/var/spack/packages/libNBC/package.py +++ b/var/spack/repos/builtin/packages/libNBC/package.py diff --git a/var/spack/packages/libarchive/package.py b/var/spack/repos/builtin/packages/libarchive/package.py index cbd4b89cd0..cbd4b89cd0 100644 --- a/var/spack/packages/libarchive/package.py +++ b/var/spack/repos/builtin/packages/libarchive/package.py diff --git a/var/spack/packages/libcerf/package.py b/var/spack/repos/builtin/packages/libcerf/package.py index 15e87ce4fe..15e87ce4fe 100644 --- a/var/spack/packages/libcerf/package.py +++ b/var/spack/repos/builtin/packages/libcerf/package.py diff --git a/var/spack/packages/libcircle/package.py b/var/spack/repos/builtin/packages/libcircle/package.py index 3f7c996fb0..3f7c996fb0 100644 --- a/var/spack/packages/libcircle/package.py +++ b/var/spack/repos/builtin/packages/libcircle/package.py diff --git a/var/spack/packages/libdrm/package.py b/var/spack/repos/builtin/packages/libdrm/package.py index 00736b7811..00736b7811 100644 --- a/var/spack/packages/libdrm/package.py +++ b/var/spack/repos/builtin/packages/libdrm/package.py diff --git a/var/spack/packages/libdwarf/package.py b/var/spack/repos/builtin/packages/libdwarf/package.py index addb557519..addb557519 100644 --- a/var/spack/packages/libdwarf/package.py +++ b/var/spack/repos/builtin/packages/libdwarf/package.py diff --git a/var/spack/packages/libelf/package.py b/var/spack/repos/builtin/packages/libelf/package.py index 29bc21b65c..29bc21b65c 100644 --- a/var/spack/packages/libelf/package.py +++ b/var/spack/repos/builtin/packages/libelf/package.py diff --git a/var/spack/packages/libevent/package.py b/var/spack/repos/builtin/packages/libevent/package.py index 11b1083d67..11b1083d67 100644 --- a/var/spack/packages/libevent/package.py +++ b/var/spack/repos/builtin/packages/libevent/package.py diff --git a/var/spack/packages/libffi/package.py b/var/spack/repos/builtin/packages/libffi/package.py index acec031717..acec031717 100644 --- a/var/spack/packages/libffi/package.py +++ b/var/spack/repos/builtin/packages/libffi/package.py diff --git a/var/spack/packages/libgcrypt/package.py b/var/spack/repos/builtin/packages/libgcrypt/package.py index 1d0a57f317..1d0a57f317 100644 --- a/var/spack/packages/libgcrypt/package.py +++ b/var/spack/repos/builtin/packages/libgcrypt/package.py diff --git a/var/spack/packages/libgd/package.py b/var/spack/repos/builtin/packages/libgd/package.py index d920957ef1..d920957ef1 100644 --- a/var/spack/packages/libgd/package.py +++ b/var/spack/repos/builtin/packages/libgd/package.py diff --git a/var/spack/packages/libgpg-error/package.py b/var/spack/repos/builtin/packages/libgpg-error/package.py index 6c1d1a10a7..6c1d1a10a7 100644 --- a/var/spack/packages/libgpg-error/package.py +++ b/var/spack/repos/builtin/packages/libgpg-error/package.py diff --git a/var/spack/packages/libjpeg-turbo/package.py b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py index 07ee183947..07ee183947 100644 --- a/var/spack/packages/libjpeg-turbo/package.py +++ b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py diff --git a/var/spack/packages/libjson-c/package.py b/var/spack/repos/builtin/packages/libjson-c/package.py index c0801cce9c..c0801cce9c 100644 --- a/var/spack/packages/libjson-c/package.py +++ b/var/spack/repos/builtin/packages/libjson-c/package.py diff --git a/var/spack/packages/libmng/package.py b/var/spack/repos/builtin/packages/libmng/package.py index e5336ea2c2..e5336ea2c2 100644 --- a/var/spack/packages/libmng/package.py +++ b/var/spack/repos/builtin/packages/libmng/package.py diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0000.patch b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0000.patch index 3a90106850..3a90106850 100644 --- a/var/spack/packages/libmonitor/libmonitorkrell-0000.patch +++ b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0000.patch diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0001.patch b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0001.patch index 85d69595c0..85d69595c0 100644 --- a/var/spack/packages/libmonitor/libmonitorkrell-0001.patch +++ b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0001.patch diff --git a/var/spack/packages/libmonitor/libmonitorkrell-0002.patch b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0002.patch index 514dfdf13e..514dfdf13e 100644 --- a/var/spack/packages/libmonitor/libmonitorkrell-0002.patch +++ b/var/spack/repos/builtin/packages/libmonitor/libmonitorkrell-0002.patch diff --git a/var/spack/packages/libmonitor/package.py b/var/spack/repos/builtin/packages/libmonitor/package.py index eecf1963e3..eecf1963e3 100644 --- a/var/spack/packages/libmonitor/package.py +++ b/var/spack/repos/builtin/packages/libmonitor/package.py diff --git a/var/spack/packages/libpciaccess/package.py b/var/spack/repos/builtin/packages/libpciaccess/package.py index 403bafbbd2..403bafbbd2 100644 --- a/var/spack/packages/libpciaccess/package.py +++ b/var/spack/repos/builtin/packages/libpciaccess/package.py diff --git a/var/spack/packages/libpng/package.py b/var/spack/repos/builtin/packages/libpng/package.py index e02b08663e..e02b08663e 100644 --- a/var/spack/packages/libpng/package.py +++ b/var/spack/repos/builtin/packages/libpng/package.py diff --git a/var/spack/packages/libsodium/package.py b/var/spack/repos/builtin/packages/libsodium/package.py index 1c8a16d998..1c8a16d998 100644 --- a/var/spack/packages/libsodium/package.py +++ b/var/spack/repos/builtin/packages/libsodium/package.py diff --git a/var/spack/packages/libtiff/package.py b/var/spack/repos/builtin/packages/libtiff/package.py index 63c6704cb8..63c6704cb8 100644 --- a/var/spack/packages/libtiff/package.py +++ b/var/spack/repos/builtin/packages/libtiff/package.py diff --git a/var/spack/packages/libtool/package.py b/var/spack/repos/builtin/packages/libtool/package.py index a07daf9781..a07daf9781 100644 --- a/var/spack/packages/libtool/package.py +++ b/var/spack/repos/builtin/packages/libtool/package.py diff --git a/var/spack/packages/libunwind/package.py b/var/spack/repos/builtin/packages/libunwind/package.py index 6f162f7b08..6f162f7b08 100644 --- a/var/spack/packages/libunwind/package.py +++ b/var/spack/repos/builtin/packages/libunwind/package.py diff --git a/var/spack/packages/libuuid/package.py b/var/spack/repos/builtin/packages/libuuid/package.py index 373c5bfcac..373c5bfcac 100644 --- a/var/spack/packages/libuuid/package.py +++ b/var/spack/repos/builtin/packages/libuuid/package.py diff --git a/var/spack/packages/libxcb/package.py b/var/spack/repos/builtin/packages/libxcb/package.py index 16a5525c0d..16a5525c0d 100644 --- a/var/spack/packages/libxcb/package.py +++ b/var/spack/repos/builtin/packages/libxcb/package.py diff --git a/var/spack/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py index 134e596963..134e596963 100644 --- a/var/spack/packages/libxml2/package.py +++ b/var/spack/repos/builtin/packages/libxml2/package.py diff --git a/var/spack/packages/libxshmfence/package.py b/var/spack/repos/builtin/packages/libxshmfence/package.py index 3aa2448b46..3aa2448b46 100644 --- a/var/spack/packages/libxshmfence/package.py +++ b/var/spack/repos/builtin/packages/libxshmfence/package.py diff --git a/var/spack/packages/libxslt/package.py b/var/spack/repos/builtin/packages/libxslt/package.py index f97332d020..f97332d020 100644 --- a/var/spack/packages/libxslt/package.py +++ b/var/spack/repos/builtin/packages/libxslt/package.py diff --git a/var/spack/packages/llvm-lld/package.py b/var/spack/repos/builtin/packages/llvm-lld/package.py index cb91aa22a5..cb91aa22a5 100644 --- a/var/spack/packages/llvm-lld/package.py +++ b/var/spack/repos/builtin/packages/llvm-lld/package.py diff --git a/var/spack/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py index a3307584e0..a3307584e0 100644 --- a/var/spack/packages/llvm/package.py +++ b/var/spack/repos/builtin/packages/llvm/package.py diff --git a/var/spack/packages/lmdb/package.py b/var/spack/repos/builtin/packages/lmdb/package.py index 875b8100c5..875b8100c5 100644 --- a/var/spack/packages/lmdb/package.py +++ b/var/spack/repos/builtin/packages/lmdb/package.py diff --git a/var/spack/packages/lmod/package.py b/var/spack/repos/builtin/packages/lmod/package.py index d642594f92..d642594f92 100644 --- a/var/spack/packages/lmod/package.py +++ b/var/spack/repos/builtin/packages/lmod/package.py diff --git a/var/spack/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py index 6d8f7806d9..6d8f7806d9 100644 --- a/var/spack/packages/lua/package.py +++ b/var/spack/repos/builtin/packages/lua/package.py diff --git a/var/spack/packages/lwgrp/package.py b/var/spack/repos/builtin/packages/lwgrp/package.py index 5963382b92..5963382b92 100644 --- a/var/spack/packages/lwgrp/package.py +++ b/var/spack/repos/builtin/packages/lwgrp/package.py diff --git a/var/spack/packages/lwm2/package.py b/var/spack/repos/builtin/packages/lwm2/package.py index 31afff8816..31afff8816 100644 --- a/var/spack/packages/lwm2/package.py +++ b/var/spack/repos/builtin/packages/lwm2/package.py diff --git a/var/spack/packages/matio/package.py b/var/spack/repos/builtin/packages/matio/package.py index 12cfb80926..12cfb80926 100644 --- a/var/spack/packages/matio/package.py +++ b/var/spack/repos/builtin/packages/matio/package.py diff --git a/var/spack/packages/memaxes/package.py b/var/spack/repos/builtin/packages/memaxes/package.py index 4b1da558a2..4b1da558a2 100644 --- a/var/spack/packages/memaxes/package.py +++ b/var/spack/repos/builtin/packages/memaxes/package.py diff --git a/var/spack/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py index 62da8c993b..62da8c993b 100644 --- a/var/spack/packages/mesa/package.py +++ b/var/spack/repos/builtin/packages/mesa/package.py diff --git a/var/spack/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py index 7ce5ae1925..7ce5ae1925 100644 --- a/var/spack/packages/metis/package.py +++ b/var/spack/repos/builtin/packages/metis/package.py diff --git a/var/spack/packages/mpc/package.py b/var/spack/repos/builtin/packages/mpc/package.py index 50477a0ccb..50477a0ccb 100644 --- a/var/spack/packages/mpc/package.py +++ b/var/spack/repos/builtin/packages/mpc/package.py diff --git a/var/spack/packages/mpe2/mpe2.patch b/var/spack/repos/builtin/packages/mpe2/mpe2.patch index 3ade1f04f4..3ade1f04f4 100644 --- a/var/spack/packages/mpe2/mpe2.patch +++ b/var/spack/repos/builtin/packages/mpe2/mpe2.patch diff --git a/var/spack/packages/mpe2/package.py b/var/spack/repos/builtin/packages/mpe2/package.py index 27295172cc..27295172cc 100644 --- a/var/spack/packages/mpe2/package.py +++ b/var/spack/repos/builtin/packages/mpe2/package.py diff --git a/var/spack/packages/mpfr/package.py b/var/spack/repos/builtin/packages/mpfr/package.py index 0f2baac004..0f2baac004 100644 --- a/var/spack/packages/mpfr/package.py +++ b/var/spack/repos/builtin/packages/mpfr/package.py diff --git a/var/spack/packages/mpibash/mpibash-4.3.patch b/var/spack/repos/builtin/packages/mpibash/mpibash-4.3.patch index 17e285b0bf..17e285b0bf 100644 --- a/var/spack/packages/mpibash/mpibash-4.3.patch +++ b/var/spack/repos/builtin/packages/mpibash/mpibash-4.3.patch diff --git a/var/spack/packages/mpibash/package.py b/var/spack/repos/builtin/packages/mpibash/package.py index d0f6dafed6..d0f6dafed6 100644 --- a/var/spack/packages/mpibash/package.py +++ b/var/spack/repos/builtin/packages/mpibash/package.py diff --git a/var/spack/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py index 7cfa0a3b61..7cfa0a3b61 100644 --- a/var/spack/packages/mpich/package.py +++ b/var/spack/repos/builtin/packages/mpich/package.py diff --git a/var/spack/packages/mpileaks/package.py b/var/spack/repos/builtin/packages/mpileaks/package.py index 661d9d66bf..661d9d66bf 100644 --- a/var/spack/packages/mpileaks/package.py +++ b/var/spack/repos/builtin/packages/mpileaks/package.py diff --git a/var/spack/packages/mrnet/package.py b/var/spack/repos/builtin/packages/mrnet/package.py index fed944e45f..fed944e45f 100644 --- a/var/spack/packages/mrnet/package.py +++ b/var/spack/repos/builtin/packages/mrnet/package.py diff --git a/var/spack/packages/munge/package.py b/var/spack/repos/builtin/packages/munge/package.py index c737ca0354..c737ca0354 100644 --- a/var/spack/packages/munge/package.py +++ b/var/spack/repos/builtin/packages/munge/package.py diff --git a/var/spack/packages/muster/package.py b/var/spack/repos/builtin/packages/muster/package.py index 0dc2e5e086..0dc2e5e086 100644 --- a/var/spack/packages/muster/package.py +++ b/var/spack/repos/builtin/packages/muster/package.py diff --git a/var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch b/var/spack/repos/builtin/packages/mvapich2/ad_lustre_rwcontig_open_source.patch index ff85845cf8..ff85845cf8 100644 --- a/var/spack/packages/mvapich2/ad_lustre_rwcontig_open_source.patch +++ b/var/spack/repos/builtin/packages/mvapich2/ad_lustre_rwcontig_open_source.patch diff --git a/var/spack/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py index 23a11b3171..23a11b3171 100644 --- a/var/spack/packages/mvapich2/package.py +++ b/var/spack/repos/builtin/packages/mvapich2/package.py diff --git a/var/spack/packages/nasm/package.py b/var/spack/repos/builtin/packages/nasm/package.py index 933b6a62c5..933b6a62c5 100644 --- a/var/spack/packages/nasm/package.py +++ b/var/spack/repos/builtin/packages/nasm/package.py diff --git a/var/spack/packages/ncdu/package.py b/var/spack/repos/builtin/packages/ncdu/package.py index 234f9730d6..234f9730d6 100644 --- a/var/spack/packages/ncdu/package.py +++ b/var/spack/repos/builtin/packages/ncdu/package.py diff --git a/var/spack/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py index 31f53b6c43..31f53b6c43 100644 --- a/var/spack/packages/ncurses/package.py +++ b/var/spack/repos/builtin/packages/ncurses/package.py diff --git a/var/spack/packages/ncurses/patch_gcc_5.txt b/var/spack/repos/builtin/packages/ncurses/patch_gcc_5.txt index f85e07cb8d..f85e07cb8d 100644 --- a/var/spack/packages/ncurses/patch_gcc_5.txt +++ b/var/spack/repos/builtin/packages/ncurses/patch_gcc_5.txt diff --git a/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch b/var/spack/repos/builtin/packages/netcdf/netcdf-4.3.3-mpi.patch index 46dda5fc9d..46dda5fc9d 100644 --- a/var/spack/packages/netcdf/netcdf-4.3.3-mpi.patch +++ b/var/spack/repos/builtin/packages/netcdf/netcdf-4.3.3-mpi.patch diff --git a/var/spack/packages/netcdf/package.py b/var/spack/repos/builtin/packages/netcdf/package.py index e1e0d836c6..e1e0d836c6 100644 --- a/var/spack/packages/netcdf/package.py +++ b/var/spack/repos/builtin/packages/netcdf/package.py diff --git a/var/spack/packages/netgauge/package.py b/var/spack/repos/builtin/packages/netgauge/package.py index 0ea42175c6..0ea42175c6 100644 --- a/var/spack/packages/netgauge/package.py +++ b/var/spack/repos/builtin/packages/netgauge/package.py diff --git a/var/spack/packages/netlib-blas/package.py b/var/spack/repos/builtin/packages/netlib-blas/package.py index 85e97323d3..85e97323d3 100644 --- a/var/spack/packages/netlib-blas/package.py +++ b/var/spack/repos/builtin/packages/netlib-blas/package.py diff --git a/var/spack/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py index fb6b99e27c..fb6b99e27c 100644 --- a/var/spack/packages/netlib-lapack/package.py +++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py diff --git a/var/spack/packages/nettle/package.py b/var/spack/repos/builtin/packages/nettle/package.py index cd600b0b87..cd600b0b87 100644 --- a/var/spack/packages/nettle/package.py +++ b/var/spack/repos/builtin/packages/nettle/package.py diff --git a/var/spack/packages/ompss/package.py b/var/spack/repos/builtin/packages/ompss/package.py index e09e0a624f..e09e0a624f 100644 --- a/var/spack/packages/ompss/package.py +++ b/var/spack/repos/builtin/packages/ompss/package.py diff --git a/var/spack/packages/ompt-openmp/package.py b/var/spack/repos/builtin/packages/ompt-openmp/package.py index e5bcfb51f0..e5bcfb51f0 100644 --- a/var/spack/packages/ompt-openmp/package.py +++ b/var/spack/repos/builtin/packages/ompt-openmp/package.py diff --git a/var/spack/packages/opari2/package.py b/var/spack/repos/builtin/packages/opari2/package.py index 3f8c65377d..3f8c65377d 100644 --- a/var/spack/packages/opari2/package.py +++ b/var/spack/repos/builtin/packages/opari2/package.py diff --git a/var/spack/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py index e01467c05a..e01467c05a 100644 --- a/var/spack/packages/openblas/package.py +++ b/var/spack/repos/builtin/packages/openblas/package.py diff --git a/var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch b/var/spack/repos/builtin/packages/openmpi/ad_lustre_rwcontig_open_source.patch index daa825ccbe..daa825ccbe 100644 --- a/var/spack/packages/openmpi/ad_lustre_rwcontig_open_source.patch +++ b/var/spack/repos/builtin/packages/openmpi/ad_lustre_rwcontig_open_source.patch diff --git a/var/spack/packages/openmpi/configure.patch b/var/spack/repos/builtin/packages/openmpi/configure.patch index 18fb42c1d1..18fb42c1d1 100644 --- a/var/spack/packages/openmpi/configure.patch +++ b/var/spack/repos/builtin/packages/openmpi/configure.patch diff --git a/var/spack/packages/openmpi/llnl-platforms.patch b/var/spack/repos/builtin/packages/openmpi/llnl-platforms.patch index f515743c4d..f515743c4d 100644 --- a/var/spack/packages/openmpi/llnl-platforms.patch +++ b/var/spack/repos/builtin/packages/openmpi/llnl-platforms.patch diff --git a/var/spack/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py index be2202fbbd..be2202fbbd 100644 --- a/var/spack/packages/openmpi/package.py +++ b/var/spack/repos/builtin/packages/openmpi/package.py diff --git a/var/spack/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py index 8c71bcb7c3..8c71bcb7c3 100644 --- a/var/spack/packages/openspeedshop/package.py +++ b/var/spack/repos/builtin/packages/openspeedshop/package.py diff --git a/var/spack/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py index 40648fca49..40648fca49 100644 --- a/var/spack/packages/openssl/package.py +++ b/var/spack/repos/builtin/packages/openssl/package.py diff --git a/var/spack/packages/otf/package.py b/var/spack/repos/builtin/packages/otf/package.py index 52893dd265..52893dd265 100644 --- a/var/spack/packages/otf/package.py +++ b/var/spack/repos/builtin/packages/otf/package.py diff --git a/var/spack/packages/otf2/package.py b/var/spack/repos/builtin/packages/otf2/package.py index b3d3a5b663..b3d3a5b663 100644 --- a/var/spack/packages/otf2/package.py +++ b/var/spack/repos/builtin/packages/otf2/package.py diff --git a/var/spack/packages/pango/package.py b/var/spack/repos/builtin/packages/pango/package.py index df43625bf5..df43625bf5 100644 --- a/var/spack/packages/pango/package.py +++ b/var/spack/repos/builtin/packages/pango/package.py diff --git a/var/spack/packages/papi/package.py b/var/spack/repos/builtin/packages/papi/package.py index 910e0aa9f9..910e0aa9f9 100644 --- a/var/spack/packages/papi/package.py +++ b/var/spack/repos/builtin/packages/papi/package.py diff --git a/var/spack/packages/paraver/package.py b/var/spack/repos/builtin/packages/paraver/package.py index 5f8a153d4c..5f8a153d4c 100644 --- a/var/spack/packages/paraver/package.py +++ b/var/spack/repos/builtin/packages/paraver/package.py diff --git a/var/spack/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py index 1d99b34899..1d99b34899 100644 --- a/var/spack/packages/paraview/package.py +++ b/var/spack/repos/builtin/packages/paraview/package.py diff --git a/var/spack/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py index d8cd337304..d8cd337304 100644 --- a/var/spack/packages/parmetis/package.py +++ b/var/spack/repos/builtin/packages/parmetis/package.py diff --git a/var/spack/packages/parpack/package.py b/var/spack/repos/builtin/packages/parpack/package.py index 622aceca04..622aceca04 100644 --- a/var/spack/packages/parpack/package.py +++ b/var/spack/repos/builtin/packages/parpack/package.py diff --git a/var/spack/packages/pcre/package.py b/var/spack/repos/builtin/packages/pcre/package.py index e38d337e3d..e38d337e3d 100644 --- a/var/spack/packages/pcre/package.py +++ b/var/spack/repos/builtin/packages/pcre/package.py diff --git a/var/spack/packages/pdt/package.py b/var/spack/repos/builtin/packages/pdt/package.py index ce3b793e30..ce3b793e30 100644 --- a/var/spack/packages/pdt/package.py +++ b/var/spack/repos/builtin/packages/pdt/package.py diff --git a/var/spack/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py index f3ed3d72ec..f3ed3d72ec 100644 --- a/var/spack/packages/petsc/package.py +++ b/var/spack/repos/builtin/packages/petsc/package.py diff --git a/var/spack/packages/pidx/package.py b/var/spack/repos/builtin/packages/pidx/package.py index 81aed62fb1..81aed62fb1 100644 --- a/var/spack/packages/pidx/package.py +++ b/var/spack/repos/builtin/packages/pidx/package.py diff --git a/var/spack/packages/pixman/package.py b/var/spack/repos/builtin/packages/pixman/package.py index 895cbdbca5..895cbdbca5 100644 --- a/var/spack/packages/pixman/package.py +++ b/var/spack/repos/builtin/packages/pixman/package.py diff --git a/var/spack/packages/pkg-config/package.py b/var/spack/repos/builtin/packages/pkg-config/package.py index 9964c6ce34..9964c6ce34 100644 --- a/var/spack/packages/pkg-config/package.py +++ b/var/spack/repos/builtin/packages/pkg-config/package.py diff --git a/var/spack/packages/pmgr_collective/package.py b/var/spack/repos/builtin/packages/pmgr_collective/package.py index 1fc47c658f..1fc47c658f 100644 --- a/var/spack/packages/pmgr_collective/package.py +++ b/var/spack/repos/builtin/packages/pmgr_collective/package.py diff --git a/var/spack/packages/postgresql/package.py b/var/spack/repos/builtin/packages/postgresql/package.py index 46922b7b71..46922b7b71 100644 --- a/var/spack/packages/postgresql/package.py +++ b/var/spack/repos/builtin/packages/postgresql/package.py diff --git a/var/spack/packages/ppl/package.py b/var/spack/repos/builtin/packages/ppl/package.py index 018d5c523d..018d5c523d 100644 --- a/var/spack/packages/ppl/package.py +++ b/var/spack/repos/builtin/packages/ppl/package.py diff --git a/var/spack/packages/protobuf/package.py b/var/spack/repos/builtin/packages/protobuf/package.py index 34085c7ce9..34085c7ce9 100644 --- a/var/spack/packages/protobuf/package.py +++ b/var/spack/repos/builtin/packages/protobuf/package.py diff --git a/var/spack/packages/py-basemap/package.py b/var/spack/repos/builtin/packages/py-basemap/package.py index 8dfc99b28d..8dfc99b28d 100644 --- a/var/spack/packages/py-basemap/package.py +++ b/var/spack/repos/builtin/packages/py-basemap/package.py diff --git a/var/spack/packages/py-biopython/package.py b/var/spack/repos/builtin/packages/py-biopython/package.py index 8ecaf48626..8ecaf48626 100644 --- a/var/spack/packages/py-biopython/package.py +++ b/var/spack/repos/builtin/packages/py-biopython/package.py diff --git a/var/spack/packages/py-cffi/package.py b/var/spack/repos/builtin/packages/py-cffi/package.py index 909049a67c..909049a67c 100644 --- a/var/spack/packages/py-cffi/package.py +++ b/var/spack/repos/builtin/packages/py-cffi/package.py diff --git a/var/spack/packages/py-cython/package.py b/var/spack/repos/builtin/packages/py-cython/package.py index 68eb735ad9..68eb735ad9 100644 --- a/var/spack/packages/py-cython/package.py +++ b/var/spack/repos/builtin/packages/py-cython/package.py diff --git a/var/spack/packages/py-dateutil/package.py b/var/spack/repos/builtin/packages/py-dateutil/package.py index 0a17f2f2d2..0a17f2f2d2 100644 --- a/var/spack/packages/py-dateutil/package.py +++ b/var/spack/repos/builtin/packages/py-dateutil/package.py diff --git a/var/spack/packages/py-epydoc/package.py b/var/spack/repos/builtin/packages/py-epydoc/package.py index af05510504..af05510504 100644 --- a/var/spack/packages/py-epydoc/package.py +++ b/var/spack/repos/builtin/packages/py-epydoc/package.py diff --git a/var/spack/packages/py-genders/package.py b/var/spack/repos/builtin/packages/py-genders/package.py index c49c8fd5b2..c49c8fd5b2 100644 --- a/var/spack/packages/py-genders/package.py +++ b/var/spack/repos/builtin/packages/py-genders/package.py diff --git a/var/spack/packages/py-gnuplot/package.py b/var/spack/repos/builtin/packages/py-gnuplot/package.py index ede4472c03..ede4472c03 100644 --- a/var/spack/packages/py-gnuplot/package.py +++ b/var/spack/repos/builtin/packages/py-gnuplot/package.py diff --git a/var/spack/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py index 6293da5407..6293da5407 100644 --- a/var/spack/packages/py-h5py/package.py +++ b/var/spack/repos/builtin/packages/py-h5py/package.py diff --git a/var/spack/packages/py-ipython/package.py b/var/spack/repos/builtin/packages/py-ipython/package.py index 8d0e64a07f..8d0e64a07f 100644 --- a/var/spack/packages/py-ipython/package.py +++ b/var/spack/repos/builtin/packages/py-ipython/package.py diff --git a/var/spack/packages/py-libxml2/package.py b/var/spack/repos/builtin/packages/py-libxml2/package.py index 59005428e4..59005428e4 100644 --- a/var/spack/packages/py-libxml2/package.py +++ b/var/spack/repos/builtin/packages/py-libxml2/package.py diff --git a/var/spack/packages/py-lockfile/package.py b/var/spack/repos/builtin/packages/py-lockfile/package.py index 8722914d94..8722914d94 100644 --- a/var/spack/packages/py-lockfile/package.py +++ b/var/spack/repos/builtin/packages/py-lockfile/package.py diff --git a/var/spack/packages/py-mako/package.py b/var/spack/repos/builtin/packages/py-mako/package.py index 3e91ffd8e5..3e91ffd8e5 100644 --- a/var/spack/packages/py-mako/package.py +++ b/var/spack/repos/builtin/packages/py-mako/package.py diff --git a/var/spack/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py index a5fee39d42..a5fee39d42 100644 --- a/var/spack/packages/py-matplotlib/package.py +++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py diff --git a/var/spack/packages/py-mock/package.py b/var/spack/repos/builtin/packages/py-mock/package.py index 3b08428ba0..3b08428ba0 100644 --- a/var/spack/packages/py-mock/package.py +++ b/var/spack/repos/builtin/packages/py-mock/package.py diff --git a/var/spack/packages/py-mpi4py/package.py b/var/spack/repos/builtin/packages/py-mpi4py/package.py index 8001689a18..8001689a18 100644 --- a/var/spack/packages/py-mpi4py/package.py +++ b/var/spack/repos/builtin/packages/py-mpi4py/package.py diff --git a/var/spack/packages/py-mx/package.py b/var/spack/repos/builtin/packages/py-mx/package.py index 717ee0562b..717ee0562b 100644 --- a/var/spack/packages/py-mx/package.py +++ b/var/spack/repos/builtin/packages/py-mx/package.py diff --git a/var/spack/packages/py-nose/package.py b/var/spack/repos/builtin/packages/py-nose/package.py index e7c6cf0264..e7c6cf0264 100644 --- a/var/spack/packages/py-nose/package.py +++ b/var/spack/repos/builtin/packages/py-nose/package.py diff --git a/var/spack/packages/py-numpy/package.py b/var/spack/repos/builtin/packages/py-numpy/package.py index 4c085fba6e..4c085fba6e 100644 --- a/var/spack/packages/py-numpy/package.py +++ b/var/spack/repos/builtin/packages/py-numpy/package.py diff --git a/var/spack/packages/py-pandas/package.py b/var/spack/repos/builtin/packages/py-pandas/package.py index 5b9997faa9..5b9997faa9 100644 --- a/var/spack/packages/py-pandas/package.py +++ b/var/spack/repos/builtin/packages/py-pandas/package.py diff --git a/var/spack/packages/py-pexpect/package.py b/var/spack/repos/builtin/packages/py-pexpect/package.py index ff5fac84e0..ff5fac84e0 100644 --- a/var/spack/packages/py-pexpect/package.py +++ b/var/spack/repos/builtin/packages/py-pexpect/package.py diff --git a/var/spack/packages/py-pil/package.py b/var/spack/repos/builtin/packages/py-pil/package.py index 743b761981..743b761981 100644 --- a/var/spack/packages/py-pil/package.py +++ b/var/spack/repos/builtin/packages/py-pil/package.py diff --git a/var/spack/packages/py-pillow/package.py b/var/spack/repos/builtin/packages/py-pillow/package.py index adc8507bd5..adc8507bd5 100644 --- a/var/spack/packages/py-pillow/package.py +++ b/var/spack/repos/builtin/packages/py-pillow/package.py diff --git a/var/spack/packages/py-pmw/package.py b/var/spack/repos/builtin/packages/py-pmw/package.py index 56131811e9..56131811e9 100644 --- a/var/spack/packages/py-pmw/package.py +++ b/var/spack/repos/builtin/packages/py-pmw/package.py diff --git a/var/spack/packages/py-pychecker/package.py b/var/spack/repos/builtin/packages/py-pychecker/package.py index bda5a746aa..bda5a746aa 100644 --- a/var/spack/packages/py-pychecker/package.py +++ b/var/spack/repos/builtin/packages/py-pychecker/package.py diff --git a/var/spack/packages/py-pycparser/package.py b/var/spack/repos/builtin/packages/py-pycparser/package.py index f2bb679d25..f2bb679d25 100644 --- a/var/spack/packages/py-pycparser/package.py +++ b/var/spack/repos/builtin/packages/py-pycparser/package.py diff --git a/var/spack/packages/py-pyelftools/package.py b/var/spack/repos/builtin/packages/py-pyelftools/package.py index d5ad32e624..d5ad32e624 100644 --- a/var/spack/packages/py-pyelftools/package.py +++ b/var/spack/repos/builtin/packages/py-pyelftools/package.py diff --git a/var/spack/packages/py-pygments/package.py b/var/spack/repos/builtin/packages/py-pygments/package.py index 7e07bf6869..7e07bf6869 100644 --- a/var/spack/packages/py-pygments/package.py +++ b/var/spack/repos/builtin/packages/py-pygments/package.py diff --git a/var/spack/packages/py-pylint/package.py b/var/spack/repos/builtin/packages/py-pylint/package.py index 9579708c29..9579708c29 100644 --- a/var/spack/packages/py-pylint/package.py +++ b/var/spack/repos/builtin/packages/py-pylint/package.py diff --git a/var/spack/packages/py-pypar/package.py b/var/spack/repos/builtin/packages/py-pypar/package.py index af9c76ccd8..af9c76ccd8 100644 --- a/var/spack/packages/py-pypar/package.py +++ b/var/spack/repos/builtin/packages/py-pypar/package.py diff --git a/var/spack/packages/py-pyparsing/package.py b/var/spack/repos/builtin/packages/py-pyparsing/package.py index a6e50ad139..a6e50ad139 100644 --- a/var/spack/packages/py-pyparsing/package.py +++ b/var/spack/repos/builtin/packages/py-pyparsing/package.py diff --git a/var/spack/packages/py-pyqt/package.py b/var/spack/repos/builtin/packages/py-pyqt/package.py index 8edca105bb..8edca105bb 100644 --- a/var/spack/packages/py-pyqt/package.py +++ b/var/spack/repos/builtin/packages/py-pyqt/package.py diff --git a/var/spack/packages/py-pyside/package.py b/var/spack/repos/builtin/packages/py-pyside/package.py index ffa433e18e..ffa433e18e 100644 --- a/var/spack/packages/py-pyside/package.py +++ b/var/spack/repos/builtin/packages/py-pyside/package.py diff --git a/var/spack/packages/py-python-daemon/package.py b/var/spack/repos/builtin/packages/py-python-daemon/package.py index 12cbe9101c..12cbe9101c 100644 --- a/var/spack/packages/py-python-daemon/package.py +++ b/var/spack/repos/builtin/packages/py-python-daemon/package.py diff --git a/var/spack/packages/py-pytz/package.py b/var/spack/repos/builtin/packages/py-pytz/package.py index da6311a784..da6311a784 100644 --- a/var/spack/packages/py-pytz/package.py +++ b/var/spack/repos/builtin/packages/py-pytz/package.py diff --git a/var/spack/packages/py-rpy2/package.py b/var/spack/repos/builtin/packages/py-rpy2/package.py index a0b03d03e3..a0b03d03e3 100644 --- a/var/spack/packages/py-rpy2/package.py +++ b/var/spack/repos/builtin/packages/py-rpy2/package.py diff --git a/var/spack/packages/py-scientificpython/package.py b/var/spack/repos/builtin/packages/py-scientificpython/package.py index df2c86caac..df2c86caac 100644 --- a/var/spack/packages/py-scientificpython/package.py +++ b/var/spack/repos/builtin/packages/py-scientificpython/package.py diff --git a/var/spack/packages/py-scikit-learn/package.py b/var/spack/repos/builtin/packages/py-scikit-learn/package.py index 5b078ce901..5b078ce901 100644 --- a/var/spack/packages/py-scikit-learn/package.py +++ b/var/spack/repos/builtin/packages/py-scikit-learn/package.py diff --git a/var/spack/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py index 3a1124cc15..3a1124cc15 100644 --- a/var/spack/packages/py-scipy/package.py +++ b/var/spack/repos/builtin/packages/py-scipy/package.py diff --git a/var/spack/packages/py-setuptools/package.py b/var/spack/repos/builtin/packages/py-setuptools/package.py index 760ad4d6db..760ad4d6db 100644 --- a/var/spack/packages/py-setuptools/package.py +++ b/var/spack/repos/builtin/packages/py-setuptools/package.py diff --git a/var/spack/packages/py-shiboken/package.py b/var/spack/repos/builtin/packages/py-shiboken/package.py index e4bf4ce07e..e4bf4ce07e 100644 --- a/var/spack/packages/py-shiboken/package.py +++ b/var/spack/repos/builtin/packages/py-shiboken/package.py diff --git a/var/spack/packages/py-sip/package.py b/var/spack/repos/builtin/packages/py-sip/package.py index e4a6fb6961..e4a6fb6961 100644 --- a/var/spack/packages/py-sip/package.py +++ b/var/spack/repos/builtin/packages/py-sip/package.py diff --git a/var/spack/packages/py-six/package.py b/var/spack/repos/builtin/packages/py-six/package.py index 05c5bd00a9..05c5bd00a9 100644 --- a/var/spack/packages/py-six/package.py +++ b/var/spack/repos/builtin/packages/py-six/package.py diff --git a/var/spack/packages/py-sphinx/package.py b/var/spack/repos/builtin/packages/py-sphinx/package.py index ec2e89a098..ec2e89a098 100644 --- a/var/spack/packages/py-sphinx/package.py +++ b/var/spack/repos/builtin/packages/py-sphinx/package.py diff --git a/var/spack/packages/py-sympy/package.py b/var/spack/repos/builtin/packages/py-sympy/package.py index c17e35b95f..c17e35b95f 100644 --- a/var/spack/packages/py-sympy/package.py +++ b/var/spack/repos/builtin/packages/py-sympy/package.py diff --git a/var/spack/packages/py-twisted/package.py b/var/spack/repos/builtin/packages/py-twisted/package.py index 2fdebb6cb9..2fdebb6cb9 100644 --- a/var/spack/packages/py-twisted/package.py +++ b/var/spack/repos/builtin/packages/py-twisted/package.py diff --git a/var/spack/packages/py-virtualenv/package.py b/var/spack/repos/builtin/packages/py-virtualenv/package.py index 037a6fc59f..037a6fc59f 100644 --- a/var/spack/packages/py-virtualenv/package.py +++ b/var/spack/repos/builtin/packages/py-virtualenv/package.py diff --git a/var/spack/packages/py-yapf/package.py b/var/spack/repos/builtin/packages/py-yapf/package.py index 12ef191515..12ef191515 100644 --- a/var/spack/packages/py-yapf/package.py +++ b/var/spack/repos/builtin/packages/py-yapf/package.py diff --git a/var/spack/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index eae2566b57..eae2566b57 100644 --- a/var/spack/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py diff --git a/var/spack/packages/qhull/package.py b/var/spack/repos/builtin/packages/qhull/package.py index 9da4078a70..9da4078a70 100644 --- a/var/spack/packages/qhull/package.py +++ b/var/spack/repos/builtin/packages/qhull/package.py diff --git a/var/spack/packages/qt/package.py b/var/spack/repos/builtin/packages/qt/package.py index e8d843519d..e8d843519d 100644 --- a/var/spack/packages/qt/package.py +++ b/var/spack/repos/builtin/packages/qt/package.py diff --git a/var/spack/packages/qt/qt3krell.patch b/var/spack/repos/builtin/packages/qt/qt3krell.patch index 3333eeacd4..3333eeacd4 100644 --- a/var/spack/packages/qt/qt3krell.patch +++ b/var/spack/repos/builtin/packages/qt/qt3krell.patch diff --git a/var/spack/packages/qthreads/package.py b/var/spack/repos/builtin/packages/qthreads/package.py index dacdb71524..dacdb71524 100644 --- a/var/spack/packages/qthreads/package.py +++ b/var/spack/repos/builtin/packages/qthreads/package.py diff --git a/var/spack/packages/ravel/package.py b/var/spack/repos/builtin/packages/ravel/package.py index d774a0ab86..d774a0ab86 100644 --- a/var/spack/packages/ravel/package.py +++ b/var/spack/repos/builtin/packages/ravel/package.py diff --git a/var/spack/packages/readline/package.py b/var/spack/repos/builtin/packages/readline/package.py index 1b870e0e7f..1b870e0e7f 100644 --- a/var/spack/packages/readline/package.py +++ b/var/spack/repos/builtin/packages/readline/package.py diff --git a/var/spack/packages/rose/add_spack_compiler_recognition.patch b/var/spack/repos/builtin/packages/rose/add_spack_compiler_recognition.patch index ce61ae4e4c..ce61ae4e4c 100644 --- a/var/spack/packages/rose/add_spack_compiler_recognition.patch +++ b/var/spack/repos/builtin/packages/rose/add_spack_compiler_recognition.patch diff --git a/var/spack/packages/rose/package.py b/var/spack/repos/builtin/packages/rose/package.py index 1d7294acab..1d7294acab 100644 --- a/var/spack/packages/rose/package.py +++ b/var/spack/repos/builtin/packages/rose/package.py diff --git a/var/spack/packages/rsync/package.py b/var/spack/repos/builtin/packages/rsync/package.py index 76aec3096d..76aec3096d 100644 --- a/var/spack/packages/rsync/package.py +++ b/var/spack/repos/builtin/packages/rsync/package.py diff --git a/var/spack/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py index 6b6242362c..6b6242362c 100644 --- a/var/spack/packages/ruby/package.py +++ b/var/spack/repos/builtin/packages/ruby/package.py diff --git a/var/spack/packages/samtools/package.py b/var/spack/repos/builtin/packages/samtools/package.py index 72900398d8..72900398d8 100644 --- a/var/spack/packages/samtools/package.py +++ b/var/spack/repos/builtin/packages/samtools/package.py diff --git a/var/spack/packages/samtools/samtools1.2.patch b/var/spack/repos/builtin/packages/samtools/samtools1.2.patch index ead3ab4e2c..ead3ab4e2c 100644 --- a/var/spack/packages/samtools/samtools1.2.patch +++ b/var/spack/repos/builtin/packages/samtools/samtools1.2.patch diff --git a/var/spack/packages/scalasca/package.py b/var/spack/repos/builtin/packages/scalasca/package.py index cf7a40c1f5..cf7a40c1f5 100644 --- a/var/spack/packages/scalasca/package.py +++ b/var/spack/repos/builtin/packages/scalasca/package.py diff --git a/var/spack/packages/scorep/package.py b/var/spack/repos/builtin/packages/scorep/package.py index 0820f2d8ac..0820f2d8ac 100644 --- a/var/spack/packages/scorep/package.py +++ b/var/spack/repos/builtin/packages/scorep/package.py diff --git a/var/spack/packages/scotch/package.py b/var/spack/repos/builtin/packages/scotch/package.py index 8229ed8686..8229ed8686 100644 --- a/var/spack/packages/scotch/package.py +++ b/var/spack/repos/builtin/packages/scotch/package.py diff --git a/var/spack/packages/scr/package.py b/var/spack/repos/builtin/packages/scr/package.py index 1408dce678..1408dce678 100644 --- a/var/spack/packages/scr/package.py +++ b/var/spack/repos/builtin/packages/scr/package.py diff --git a/var/spack/packages/silo/package.py b/var/spack/repos/builtin/packages/silo/package.py index 9eda11df15..9eda11df15 100644 --- a/var/spack/packages/silo/package.py +++ b/var/spack/repos/builtin/packages/silo/package.py diff --git a/var/spack/packages/snappy/package.py b/var/spack/repos/builtin/packages/snappy/package.py index c8f9ceef7d..c8f9ceef7d 100644 --- a/var/spack/packages/snappy/package.py +++ b/var/spack/repos/builtin/packages/snappy/package.py diff --git a/var/spack/packages/sparsehash/package.py b/var/spack/repos/builtin/packages/sparsehash/package.py index 7decaeb89b..7decaeb89b 100644 --- a/var/spack/packages/sparsehash/package.py +++ b/var/spack/repos/builtin/packages/sparsehash/package.py diff --git a/var/spack/packages/spindle/package.py b/var/spack/repos/builtin/packages/spindle/package.py index a20753458a..a20753458a 100644 --- a/var/spack/packages/spindle/package.py +++ b/var/spack/repos/builtin/packages/spindle/package.py diff --git a/var/spack/packages/spot/package.py b/var/spack/repos/builtin/packages/spot/package.py index 9e539277ae..9e539277ae 100644 --- a/var/spack/packages/spot/package.py +++ b/var/spack/repos/builtin/packages/spot/package.py diff --git a/var/spack/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py index 1cf2d30239..1cf2d30239 100644 --- a/var/spack/packages/sqlite/package.py +++ b/var/spack/repos/builtin/packages/sqlite/package.py diff --git a/var/spack/packages/stat/configure_mpicxx.patch b/var/spack/repos/builtin/packages/stat/configure_mpicxx.patch index e09056d95c..e09056d95c 100644 --- a/var/spack/packages/stat/configure_mpicxx.patch +++ b/var/spack/repos/builtin/packages/stat/configure_mpicxx.patch diff --git a/var/spack/packages/stat/package.py b/var/spack/repos/builtin/packages/stat/package.py index 5d81e62731..5d81e62731 100644 --- a/var/spack/packages/stat/package.py +++ b/var/spack/repos/builtin/packages/stat/package.py diff --git a/var/spack/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py index 7e025a8244..7e025a8244 100644 --- a/var/spack/packages/sundials/package.py +++ b/var/spack/repos/builtin/packages/sundials/package.py diff --git a/var/spack/packages/swig/package.py b/var/spack/repos/builtin/packages/swig/package.py index 8d46c4fe46..8d46c4fe46 100644 --- a/var/spack/packages/swig/package.py +++ b/var/spack/repos/builtin/packages/swig/package.py diff --git a/var/spack/packages/task/package.py b/var/spack/repos/builtin/packages/task/package.py index 07f44cc45b..07f44cc45b 100644 --- a/var/spack/packages/task/package.py +++ b/var/spack/repos/builtin/packages/task/package.py diff --git a/var/spack/packages/taskd/package.py b/var/spack/repos/builtin/packages/taskd/package.py index 66bc0cb484..66bc0cb484 100644 --- a/var/spack/packages/taskd/package.py +++ b/var/spack/repos/builtin/packages/taskd/package.py diff --git a/var/spack/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py index 31492397d8..31492397d8 100644 --- a/var/spack/packages/tau/package.py +++ b/var/spack/repos/builtin/packages/tau/package.py diff --git a/var/spack/packages/tcl/package.py b/var/spack/repos/builtin/packages/tcl/package.py index 529adf7788..529adf7788 100644 --- a/var/spack/packages/tcl/package.py +++ b/var/spack/repos/builtin/packages/tcl/package.py diff --git a/var/spack/packages/texinfo/package.py b/var/spack/repos/builtin/packages/texinfo/package.py index 460db65b3e..4b6210130b 100644 --- a/var/spack/packages/texinfo/package.py +++ b/var/spack/repos/builtin/packages/texinfo/package.py @@ -6,7 +6,7 @@ # Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. # LLNL-CODE-647188 # -# For details, see https://scalability-llnl.github.io/spack +# For details, see https://llnl.github.io/spack # Please also see the LICENSE file for our notice and the LGPL. # # This program is free software; you can redistribute it and/or modify diff --git a/var/spack/packages/the_silver_searcher/package.py b/var/spack/repos/builtin/packages/the_silver_searcher/package.py index e4020b6766..e4020b6766 100644 --- a/var/spack/packages/the_silver_searcher/package.py +++ b/var/spack/repos/builtin/packages/the_silver_searcher/package.py diff --git a/var/spack/packages/thrift/package.py b/var/spack/repos/builtin/packages/thrift/package.py index 0e15052f64..0e15052f64 100644 --- a/var/spack/packages/thrift/package.py +++ b/var/spack/repos/builtin/packages/thrift/package.py diff --git a/var/spack/packages/tk/package.py b/var/spack/repos/builtin/packages/tk/package.py index 96736f6f95..96736f6f95 100644 --- a/var/spack/packages/tk/package.py +++ b/var/spack/repos/builtin/packages/tk/package.py diff --git a/var/spack/packages/tmux/package.py b/var/spack/repos/builtin/packages/tmux/package.py index 23d36db427..23d36db427 100644 --- a/var/spack/packages/tmux/package.py +++ b/var/spack/repos/builtin/packages/tmux/package.py diff --git a/var/spack/packages/tmuxinator/package.py b/var/spack/repos/builtin/packages/tmuxinator/package.py index 77ae063e5d..77ae063e5d 100644 --- a/var/spack/packages/tmuxinator/package.py +++ b/var/spack/repos/builtin/packages/tmuxinator/package.py diff --git a/var/spack/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index 7c43f796a4..7c43f796a4 100644 --- a/var/spack/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py diff --git a/var/spack/packages/uncrustify/package.py b/var/spack/repos/builtin/packages/uncrustify/package.py index d3f2d1b473..d3f2d1b473 100644 --- a/var/spack/packages/uncrustify/package.py +++ b/var/spack/repos/builtin/packages/uncrustify/package.py diff --git a/var/spack/packages/util-linux/package.py b/var/spack/repos/builtin/packages/util-linux/package.py index cb7ceabf57..cb7ceabf57 100644 --- a/var/spack/packages/util-linux/package.py +++ b/var/spack/repos/builtin/packages/util-linux/package.py diff --git a/var/spack/packages/valgrind/package.py b/var/spack/repos/builtin/packages/valgrind/package.py index 0b030d73e9..0b030d73e9 100644 --- a/var/spack/packages/valgrind/package.py +++ b/var/spack/repos/builtin/packages/valgrind/package.py diff --git a/var/spack/packages/vim/package.py b/var/spack/repos/builtin/packages/vim/package.py index 4099b3257f..4099b3257f 100644 --- a/var/spack/packages/vim/package.py +++ b/var/spack/repos/builtin/packages/vim/package.py diff --git a/var/spack/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py index 4a27a8fedb..4a27a8fedb 100644 --- a/var/spack/packages/vtk/package.py +++ b/var/spack/repos/builtin/packages/vtk/package.py diff --git a/var/spack/packages/wget/package.py b/var/spack/repos/builtin/packages/wget/package.py index c8fd025122..c8fd025122 100644 --- a/var/spack/packages/wget/package.py +++ b/var/spack/repos/builtin/packages/wget/package.py diff --git a/var/spack/packages/wx/package.py b/var/spack/repos/builtin/packages/wx/package.py index 206fde7775..206fde7775 100644 --- a/var/spack/packages/wx/package.py +++ b/var/spack/repos/builtin/packages/wx/package.py diff --git a/var/spack/packages/wxpropgrid/package.py b/var/spack/repos/builtin/packages/wxpropgrid/package.py index 790cead517..790cead517 100644 --- a/var/spack/packages/wxpropgrid/package.py +++ b/var/spack/repos/builtin/packages/wxpropgrid/package.py diff --git a/var/spack/packages/xcb-proto/package.py b/var/spack/repos/builtin/packages/xcb-proto/package.py index 17a94bd892..17a94bd892 100644 --- a/var/spack/packages/xcb-proto/package.py +++ b/var/spack/repos/builtin/packages/xcb-proto/package.py diff --git a/var/spack/packages/xerces-c/package.py b/var/spack/repos/builtin/packages/xerces-c/package.py index b59ab178ae..b59ab178ae 100644 --- a/var/spack/packages/xerces-c/package.py +++ b/var/spack/repos/builtin/packages/xerces-c/package.py diff --git a/var/spack/packages/xz/package.py b/var/spack/repos/builtin/packages/xz/package.py index ba6c9733a7..ba6c9733a7 100644 --- a/var/spack/packages/xz/package.py +++ b/var/spack/repos/builtin/packages/xz/package.py diff --git a/var/spack/packages/yasm/package.py b/var/spack/repos/builtin/packages/yasm/package.py index d3a695b16d..d3a695b16d 100644 --- a/var/spack/packages/yasm/package.py +++ b/var/spack/repos/builtin/packages/yasm/package.py diff --git a/var/spack/packages/zeromq/package.py b/var/spack/repos/builtin/packages/zeromq/package.py index b5a1e3d4cd..b5a1e3d4cd 100644 --- a/var/spack/packages/zeromq/package.py +++ b/var/spack/repos/builtin/packages/zeromq/package.py diff --git a/var/spack/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py index 2770f781ac..2770f781ac 100644 --- a/var/spack/packages/zlib/package.py +++ b/var/spack/repos/builtin/packages/zlib/package.py diff --git a/var/spack/packages/zsh/package.py b/var/spack/repos/builtin/packages/zsh/package.py index 06665f0c83..06665f0c83 100644 --- a/var/spack/packages/zsh/package.py +++ b/var/spack/repos/builtin/packages/zsh/package.py diff --git a/var/spack/repos/builtin/repo.yaml b/var/spack/repos/builtin/repo.yaml new file mode 100644 index 0000000000..54b282db6b --- /dev/null +++ b/var/spack/repos/builtin/repo.yaml @@ -0,0 +1,2 @@ +repo: + namespace: builtin |