Spack

本サイトではSpackに関連する文書を公開しています。Sphere packing(球充填)については pyspack をご参照ください。

Spackは様々なプラットフォームやシステム環境にインストールされているソフトウェアの複数のバージョン、設定などを管理するために設計されています。Spackは、スーパーコンピュータシステムを運用するセンターなどでの利用を想定して設計しています。大規模なセンターなどでは、多くのユーザやチームがシステムにインストールされているソフトウェアを利用したり、ソフトウェアを共有したりしていますが、それらは、様々のクラスタ上で標準的なABI(Application Binary Interface)を持たないライブラリを利用しています。Spackを利用することで、新しいバージョンのソフトウェアをインストールしても既存の環境を破壊することなく、同じシステム上に多数の構成を共存させることができます。

Spackがシンプルであることは、最も重要な点です。Spackユーザは、シンプルな文法で利用したいソフトウェアのバージョン、設定、オプション等を指定できます。また、Spackは、パッケージングを行うユーザにとってもシンプルです。パッケージファイルは純粋なPythonで記述されていて、多種多様なビルド方法を記載する場合でも、更新するのは単一のファイルです。

使用例とハイライトについては、 機能概要 をご参照ください。

以下の方法でSpackを github <https://github.com/spack/spack> から入手し、最初のパッケージをインストールしてみてください。

$ git clone https://github.com/spack/spack.git
$ cd spack/bin
$ ./spack install libelf

Spackを利用するのが初めての場合は、 はじめに をご参照ください。もしくは、下記のマニュアルをご参照ください。

機能概要

This is a high-level overview of features that make Spack different from other package managers and port systems.

Simple package installation

Installing the default version of a package is simple. This will install the latest version of the mpileaks package and all of its dependencies:

$ spack install mpileaks

バージョンとコンフィギュレーションのカスタマイズ

Spack allows installation to be customized. Users can specify the version, build compiler, compile-time options, and cross-compile platform, all on the command line.

# Install a particular version by appending @
$ spack install mpileaks@1.1.2

# Specify a compiler (and its version), with %
$ spack install mpileaks@1.1.2 %gcc@4.7.3

# Add special compile-time options by name
$ spack install mpileaks@1.1.2 %gcc@4.7.3 debug=True

# Add special boolean compile-time options with +
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug

# Add compiler flags using the conventional names
$ spack install mpileaks@1.1.2 %gcc@4.7.3 cppflags="-O3 -floop-block"

# Cross-compile for a different architecture with arch=
$ spack install mpileaks@1.1.2 arch=bgqos_0

Users can specify as many or few options as they care about. Spack will fill in the unspecified values with sensible defaults. The two listed syntaxes for variants are identical when the value is boolean.

Customize dependencies

Spack allows dependencies of a particular installation to be customized extensively. Suppose that mpileaks depends indirectly on libelf and libdwarf. Using ^, users can add custom configurations for the dependencies:

# Install mpileaks and link it with specific versions of libelf and libdwarf
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug ^libelf@0.8.12 ^libdwarf@20130729+debug

Non-destructive installs

Spack installs every unique package/dependency configuration into its own prefix, so new installs will not break existing ones.

Packages can peacefully coexist

Spack avoids library misconfiguration by using RPATH to link dependencies. When a user links a library or runs a program, it is tied to the dependencies it was built with, so there is no need to manipulate LD_LIBRARY_PATH at runtime.

Creating packages is easy

To create a new packages, all Spack needs is a URL for the source archive. The spack create command will create a boilerplate package file, and the package authors can fill in specific build steps in pure Python.

For example, this command:

$ spack create http://www.mr511.de/software/libelf-0.8.13.tar.gz

creates a simple python file:

from spack import *


class Libelf(Package):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"

    version('0.8.13', '4136d7b4c04df68b686570afa26988ac')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def install(self, spec, prefix):
        # FIXME: Modify the configure line to suit your build system here.
        configure('--prefix={0}'.format(prefix))

        # FIXME: Add logic to build and install here.
        make()
        make('install')

It doesn't take much python coding to get from there to a working package:

from spack import *


class Libelf(AutotoolsPackage):
    """libelf lets you read, modify or create ELF object files in an
       architecture-independent way. The library takes care of size
       and endian issues, e.g. you can process a file for SPARC
       processors on an Intel-based system. Note: libelf is no longer
       maintained and packages that depend on libelf should migrate to
       elfutils."""

    # The original homepage no longer exists, but the tar file is
    # archived at fossies.org.
    # homepage = "http://www.mr511.de/software/english.html"

    homepage = "https://directory.fsf.org/wiki/Libelf"
    url      = "https://fossies.org/linux/misc/old/libelf-0.8.13.tar.gz"

    version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
    # version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')

    provides('elf@0')

    def configure_args(self):
        args = ["--enable-shared",
                "--disable-dependency-tracking",
                "--disable-debug"]
        return args

    def install(self, spec, prefix):
        make('install', parallel=False)

Spack also provides wrapper functions around common commands like configure, make, and cmake to make writing packages simple.

はじめに

Prerequisites

Spack has the following minimum requirements, which must be installed before Spack is run:

  1. Python 2 (2.6 or 2.7) or 3 (3.4 - 3.7) to run Spack

  2. A C/C++ compiler for building

  3. The make executable for building

  4. The git and curl commands for fetching

  5. If using the gpg subcommand, gnupg2 is required

These requirements can be easily installed on most modern Linux systems; on Macintosh, XCode is required. Spack is designed to run on HPC platforms like Cray and BlueGene/Q. Not all packages should be expected to work on all platforms. A build matrix showing which packages are working on which systems is planned but not yet available.

Installation

Getting Spack is easy. You can clone it from the github repository using this command:

$ git clone https://github.com/spack/spack.git

This will create a directory called spack.

Add Spack to the Shell

We'll assume that the full path to your downloaded Spack directory is in the SPACK_ROOT environment variable. Add $SPACK_ROOT/bin to your path and you're ready to go:

$ export PATH=$SPACK_ROOT/bin:$PATH
$ spack install libelf

For a richer experience, use Spack's shell support:

# For bash/zsh users
$ export SPACK_ROOT=/path/to/spack
$ . $SPACK_ROOT/share/spack/setup-env.sh

# For tcsh or csh users (note you must set SPACK_ROOT)
$ setenv SPACK_ROOT /path/to/spack
$ source $SPACK_ROOT/share/spack/setup-env.csh

This automatically adds Spack to your PATH and allows the spack command to be used to execute spack commands and useful packaging commands.

If environment-modules or dotkit is installed and available, the spack command can also load and unload modules.

Clean Environment

Many packages' installs can be broken by changing environment variables. For example, a package might pick up the wrong build-time dependencies (most of them not specified) depending on the setting of PATH. GCC seems to be particularly vulnerable to these issues.

Therefore, it is recommended that Spack users run with a clean environment, especially for PATH. Only software that comes with the system, or that you know you wish to use with Spack, should be included. This procedure will avoid many strange build errors.

Check Installation

With Spack installed, you should be able to run some basic Spack commands. For example:

$ spack spec netcdf
Input spec
--------------------------------
netcdf

Concretized
--------------------------------
netcdf@4.7.0%gcc@7.5.0~dap~hdf4 maxdims=1024 maxvars=8192 +mpi~parallel-netcdf patches=10a1c3f7fa05e2c82457482e272bbe04d66d0047b237ad0a73e87d63d848b16c +pic+shared arch=linux-ubuntu18.04-x86_64
    ^autoconf@2.69%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
        ^m4@1.4.18%gcc@7.5.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu18.04-x86_64
            ^libsigsegv@2.11%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
        ^perl@5.26.2%gcc@7.5.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu18.04-x86_64
            ^gdbm@1.18.1%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                ^readline@7.0%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^ncurses@6.1%gcc@7.5.0~symlinks~termlib arch=linux-ubuntu18.04-x86_64
                        ^pkgconf@1.6.0%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
    ^automake@1.16.1%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
    ^hdf5@1.10.5%gcc@7.5.0~cxx~debug~fortran+hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu18.04-x86_64
        ^openmpi@3.1.4%gcc@7.5.0~cuda+cxx_exceptions fabrics=none ~java~legacylaunchers~memchecker~pmi schedulers=none ~sqlite3~thread_multiple+vt arch=linux-ubuntu18.04-x86_64
            ^hwloc@1.11.11%gcc@7.5.0~cairo~cuda~gl+libxml2~nvml+pci+shared arch=linux-ubuntu18.04-x86_64
                ^libpciaccess@0.13.5%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^libtool@2.4.6%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^util-macros@1.19.1%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                ^libxml2@2.9.9%gcc@7.5.0~python arch=linux-ubuntu18.04-x86_64
                    ^libiconv@1.15%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^xz@5.2.4%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^zlib@1.2.11%gcc@7.5.0+optimize+pic+shared arch=linux-ubuntu18.04-x86_64
                ^numactl@2.0.12%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64

Optional: Alternate Prefix

You may want to run Spack out of a prefix other than the git repository you cloned. The spack clone command provides this functionality. To install spack in a new directory, simply type:

$ spack clone /my/favorite/prefix

This will install a new spack script in /my/favorite/prefix/bin, which you can use just like you would the regular spack script. Each copy of spack installs packages into its own $PREFIX/opt directory.

Next Steps

In theory, Spack doesn't need any additional installation; just download and run! But in real life, additional steps are usually required before Spack can work in a practical sense. Read on...

Compiler configuration

Spack has the ability to build packages with multiple compilers and compiler versions. Spack searches for compilers on your machine automatically the first time it is run. It does this by inspecting your PATH.

spack compilers

You can see which compilers spack has found by running spack compilers or spack compiler list:

$ spack compilers
==> Available compilers
-- gcc ---------------------------------------------------------
    gcc@4.9.0  gcc@4.8.0  gcc@4.7.0  gcc@4.6.2  gcc@4.4.7
    gcc@4.8.2  gcc@4.7.1  gcc@4.6.3  gcc@4.6.1  gcc@4.1.2
-- intel -------------------------------------------------------
    intel@15.0.0  intel@14.0.0  intel@13.0.0  intel@12.1.0  intel@10.0
    intel@14.0.3  intel@13.1.1  intel@12.1.5  intel@12.0.4  intel@9.1
    intel@14.0.2  intel@13.1.0  intel@12.1.3  intel@11.1
    intel@14.0.1  intel@13.0.1  intel@12.1.2  intel@10.1
-- clang -------------------------------------------------------
    clang@3.4  clang@3.3  clang@3.2  clang@3.1
-- pgi ---------------------------------------------------------
    pgi@14.3-0   pgi@13.2-0  pgi@12.1-0   pgi@10.9-0  pgi@8.0-1
    pgi@13.10-0  pgi@13.1-1  pgi@11.10-0  pgi@10.2-0  pgi@7.1-3
    pgi@13.6-0   pgi@12.8-0  pgi@11.1-0   pgi@9.0-4   pgi@7.0-6

Any of these compilers can be used to build Spack packages. More on how this is done is in Specs & dependencies.

spack compiler add

An alias for spack compiler find.

spack compiler find

If you do not see a compiler in this list, but you want to use it with Spack, you can simply run spack compiler find with the path to where the compiler is installed. For example:

$ spack compiler find /usr/local/tools/ic-13.0.079
==> Added 1 new compiler to ~/.spack/compilers.yaml
    intel@13.0.079

Or you can run spack compiler find with no arguments to force auto-detection. This is useful if you do not know where compilers are installed, but you know that new compilers have been added to your PATH. For example, you might load a module, like this:

$ module load gcc-4.9.0
$ spack compiler find
==> Added 1 new compiler to ~/.spack/compilers.yaml
    gcc@4.9.0

This loads the environment module for gcc-4.9.0 to add it to PATH, and then it adds the compiler to Spack.

注釈

By default, spack does not fill in the modules: field in the compilers.yaml file. If you are using a compiler from a module, then you should add this field manually. See the section on Compilers Requiring Modules.

spack compiler info

If you want to see specifics on a particular compiler, you can run spack compiler info on it:

$ spack compiler info intel@15
intel@15.0.0:
  paths:
    cc  = /usr/local/bin/icc-15.0.090
    cxx = /usr/local/bin/icpc-15.0.090
    f77 = /usr/local/bin/ifort-15.0.090
    fc  = /usr/local/bin/ifort-15.0.090
  modules = []
  operating_system = centos6
...

This shows which C, C++, and Fortran compilers were detected by Spack. Notice also that we didn't have to be too specific about the version. We just said intel@15, and information about the only matching Intel compiler was displayed.

Manual compiler configuration

If auto-detection fails, you can manually configure a compiler by editing your ~/.spack/compilers.yaml file. You can do this by running spack config edit compilers, which will open the file in your $EDITOR.

Each compiler configuration in the file looks like this:

compilers:
- compiler:
    modules: []
    operating_system: centos6
    paths:
      cc: /usr/local/bin/icc-15.0.024-beta
      cxx: /usr/local/bin/icpc-15.0.024-beta
      f77: /usr/local/bin/ifort-15.0.024-beta
      fc: /usr/local/bin/ifort-15.0.024-beta
    spec: intel@15.0.0:

For compilers that do not support Fortran (like clang), put None for f77 and fc:

compilers:
- compiler:
    modules: []
    operating_system: centos6
    paths:
      cc: /usr/bin/clang
      cxx: /usr/bin/clang++
      f77: None
      fc: None
    spec: clang@3.3svn

Once you save the file, the configured compilers will show up in the list displayed by spack compilers.

You can also add compiler flags to manually configured compilers. These flags should be specified in the flags section of the compiler specification. The valid flags are cflags, cxxflags, fflags, cppflags, ldflags, and ldlibs. For example:

compilers:
- compiler:
    modules: []
    operating_system: centos6
    paths:
      cc: /usr/bin/gcc
      cxx: /usr/bin/g++
      f77: /usr/bin/gfortran
      fc: /usr/bin/gfortran
    flags:
      cflags: -O3 -fPIC
      cxxflags: -O3 -fPIC
      cppflags: -O3 -fPIC
    spec: gcc@4.7.2

These flags will be treated by spack as if they were entered from the command line each time this compiler is used. The compiler wrappers then inject those flags into the compiler command. Compiler flags entered from the command line will be discussed in more detail in the following section.

Build Your Own Compiler

If you are particular about which compiler/version you use, you might wish to have Spack build it for you. For example:

$ spack install gcc@4.9.3

Once that has finished, you will need to add it to your compilers.yaml file. You can then set Spack to use it by default by adding the following to your packages.yaml file:

packages:
  all:
    compiler: [gcc@4.9.3]

Compilers Requiring Modules

Many installed compilers will work regardless of the environment they are called with. However, some installed compilers require $LD_LIBRARY_PATH or other environment variables to be set in order to run; this is typical for Intel and other proprietary compilers.

In such a case, you should tell Spack which module(s) to load in order to run the chosen compiler (If the compiler does not come with a module file, you might consider making one by hand). Spack will load this module into the environment ONLY when the compiler is run, and NOT in general for a package's install() method. See, for example, this compilers.yaml file:

compilers:
- compiler:
    modules: [other/comp/gcc-5.3-sp3]
    operating_system: SuSE11
    paths:
      cc: /usr/local/other/SLES11.3/gcc/5.3.0/bin/gcc
      cxx: /usr/local/other/SLES11.3/gcc/5.3.0/bin/g++
      f77: /usr/local/other/SLES11.3/gcc/5.3.0/bin/gfortran
      fc: /usr/local/other/SLES11.3/gcc/5.3.0/bin/gfortran
    spec: gcc@5.3.0

Some compilers require special environment settings to be loaded not just to run, but also to execute the code they build, breaking packages that need to execute code they just compiled. If it's not possible or practical to use a better compiler, you'll need to ensure that environment settings are preserved for compilers like this (i.e., you'll need to load the module or source the compiler's shell script).

By default, Spack tries to ensure that builds are reproducible by cleaning the environment before building. If this interferes with your compiler settings, you CAN use spack install --dirty as a workaround. Note that this MAY interfere with package builds.

Licensed Compilers

Some proprietary compilers require licensing to use. If you need to use a licensed compiler (eg, PGI), the process is similar to a mix of build your own, plus modules:

  1. Create a Spack package (if it doesn't exist already) to install your compiler. Follow instructions on installing Licensed software.

  2. Once the compiler is installed, you should be able to test it by using Spack to load the module it just created, and running simple builds (eg: cc helloWorld.c && ./a.out)

  3. Add the newly-installed compiler to compilers.yaml as shown above.

Mixed Toolchains

Modern compilers typically come with related compilers for C, C++ and Fortran bundled together. When possible, results are best if the same compiler is used for all languages.

In some cases, this is not possible. For example, starting with macOS El Capitan (10.11), many packages no longer build with GCC, but XCode provides no Fortran compilers. The user is therefore forced to use a mixed toolchain: XCode-provided Clang for C/C++ and GNU gfortran for Fortran.

  1. You need to make sure that Xcode is installed. Run the following command:

    $ xcode-select --install
    

    If the Xcode command-line tools are already installed, you will see an error message:

    xcode-select: error: command line tools are already installed, use "Software Update" to install updates
    
  2. For most packages, the Xcode command-line tools are sufficient. However, some packages like qt require the full Xcode suite. You can check to see which you have installed by running:

    $ xcode-select -p
    

    If the output is:

    /Applications/Xcode.app/Contents/Developer
    

    you already have the full Xcode suite installed. If the output is:

    /Library/Developer/CommandLineTools
    

    you only have the command-line tools installed. The full Xcode suite can be installed through the App Store. Make sure you launch the Xcode application and accept the license agreement before using Spack. It may ask you to install additional components. Alternatively, the license can be accepted through the command line:

    $ sudo xcodebuild -license accept
    

    Note: the flag is -license, not --license.

  3. Run spack compiler find to locate Clang.

  4. There are different ways to get gfortran on macOS. For example, you can install GCC with Spack (spack install gcc) or with Homebrew (brew install gcc).

  5. The only thing left to do is to edit ~/.spack/compilers.yaml to provide the path to gfortran:

    compilers:
      darwin-x86_64:
        clang@7.3.0-apple:
          cc: /usr/bin/clang
          cxx: /usr/bin/clang++
          f77: /path/to/bin/gfortran
          fc: /path/to/bin/gfortran
    

    If you used Spack to install GCC, you can get the installation prefix by spack location -i gcc (this will only work if you have a single version of GCC installed). Whereas for Homebrew, GCC is installed in /usr/local/Cellar/gcc/x.y.z.

Compiler Verification

You can verify that your compilers are configured properly by installing a simple package. For example:

$ spack install zlib%gcc@5.3.0

Vendor-Specific Compiler Configuration

With Spack, things usually "just work" with GCC. Not so for other compilers. This section provides details on how to get specific compilers working.

Intel Compilers

Intel compilers are unusual because a single Intel compiler version can emulate multiple GCC versions. In order to provide this functionality, the Intel compiler needs GCC to be installed. Therefore, the following steps are necessary to successfully use Intel compilers:

  1. Install a version of GCC that implements the desired language features (spack install gcc).

  2. Tell the Intel compiler how to find that desired GCC. This may be done in one of two ways:

    "By default, the compiler determines which version of gcc or g++ you have installed from the PATH environment variable.

    If you want use a version of gcc or g++ other than the default version on your system, you need to use either the -gcc-name or -gxx-name compiler option to specify the path to the version of gcc or g++ that you want to use."

    Intel Reference Guide

Intel compilers may therefore be configured in one of two ways with Spack: using modules, or using compiler flags.

Configuration with Modules

One can control which GCC is seen by the Intel compiler with modules. A module must be loaded both for the Intel Compiler (so it will run) and GCC (so the compiler can find the intended GCC). The following configuration in compilers.yaml illustrates this technique:

compilers:
- compiler:
    modules: [gcc-4.9.3, intel-15.0.24]
    operating_system: centos7
    paths:
      cc: /opt/intel-15.0.24/bin/icc-15.0.24-beta
      cxx: /opt/intel-15.0.24/bin/icpc-15.0.24-beta
      f77: /opt/intel-15.0.24/bin/ifort-15.0.24-beta
      fc: /opt/intel-15.0.24/bin/ifort-15.0.24-beta
    spec: intel@15.0.24.4.9.3

注釈

The version number on the Intel compiler is a combination of the "native" Intel version number and the GNU compiler it is targeting.

Command Line Configuration

One can also control which GCC is seen by the Intel compiler by adding flags to the icc command:

  1. Identify the location of the compiler you just installed:

    $ spack location --install-dir gcc
    ~/spack/opt/spack/linux-centos7-x86_64/gcc-4.9.3-iy4rw...
    
  2. Set up compilers.yaml, for example:

    compilers:
    - compiler:
        modules: [intel-15.0.24]
        operating_system: centos7
        paths:
          cc: /opt/intel-15.0.24/bin/icc-15.0.24-beta
          cflags: -gcc-name ~/spack/opt/spack/linux-centos7-x86_64/gcc-4.9.3-iy4rw.../bin/gcc
          cxx: /opt/intel-15.0.24/bin/icpc-15.0.24-beta
          cxxflags: -gxx-name ~/spack/opt/spack/linux-centos7-x86_64/gcc-4.9.3-iy4rw.../bin/g++
          f77: /opt/intel-15.0.24/bin/ifort-15.0.24-beta
          fc: /opt/intel-15.0.24/bin/ifort-15.0.24-beta
          fflags: -gcc-name ~/spack/opt/spack/linux-centos7-x86_64/gcc-4.9.3-iy4rw.../bin/gcc
        spec: intel@15.0.24.4.9.3
    

PGI

PGI comes with two sets of compilers for C++ and Fortran, distinguishable by their names. "Old" compilers:

cc:  /soft/pgi/15.10/linux86-64/15.10/bin/pgcc
cxx: /soft/pgi/15.10/linux86-64/15.10/bin/pgCC
f77: /soft/pgi/15.10/linux86-64/15.10/bin/pgf77
fc:  /soft/pgi/15.10/linux86-64/15.10/bin/pgf90

"New" compilers:

cc:  /soft/pgi/15.10/linux86-64/15.10/bin/pgcc
cxx: /soft/pgi/15.10/linux86-64/15.10/bin/pgc++
f77: /soft/pgi/15.10/linux86-64/15.10/bin/pgfortran
fc:  /soft/pgi/15.10/linux86-64/15.10/bin/pgfortran

Older installations of PGI contains just the old compilers; whereas newer installations contain the old and the new. The new compiler is considered preferable, as some packages (hdf) will not build with the old compiler.

When auto-detecting a PGI compiler, there are cases where Spack will find the old compilers, when you really want it to find the new compilers. It is best to check this compilers.yaml; and if the old compilers are being used, change pgf77 and pgf90 to pgfortran.

Other issues:

  • There are reports that some packages will not build with PGI, including libpciaccess and openssl. A workaround is to build these packages with another compiler and then use them as dependencies for PGI-build packages. For example:

    $ spack install openmpi%pgi ^libpciaccess%gcc
    
  • PGI requires a license to use; see Licensed Compilers for more information on installation.

注釈

It is believed the problem with HDF 4 is that everything is compiled with the F77 compiler, but at some point some Fortran 90 code slipped in there. So compilers that can handle both FORTRAN 77 and Fortran 90 (gfortran, pgfortran, etc) are fine. But compilers specific to one or the other (pgf77, pgf90) won't work.

NAG

The Numerical Algorithms Group provides a licensed Fortran compiler. Like Clang, this requires you to set up a Mixed Toolchains. It is recommended to use GCC for your C/C++ compilers.

The NAG Fortran compilers are a bit more strict than other compilers, and many packages will fail to install with error messages like:

Error: mpi_comm_spawn_multiple_f90.f90: Argument 3 to MPI_COMM_SPAWN_MULTIPLE has data type DOUBLE PRECISION in reference from MPI_COMM_SPAWN_MULTIPLEN and CHARACTER in reference from MPI_COMM_SPAWN_MULTIPLEA

In order to convince the NAG compiler not to be too picky about calling conventions, you can use FFLAGS=-mismatch and FCFLAGS=-mismatch. This can be done through the command line:

$ spack install openmpi fflags="-mismatch"

Or it can be set permanently in your compilers.yaml:

- compiler:
 modules: []
 operating_system: centos6
 paths:
   cc: /soft/spack/opt/spack/linux-x86_64/gcc-5.3.0/gcc-6.1.0-q2zosj3igepi3pjnqt74bwazmptr5gpj/bin/gcc
   cxx: /soft/spack/opt/spack/linux-x86_64/gcc-5.3.0/gcc-6.1.0-q2zosj3igepi3pjnqt74bwazmptr5gpj/bin/g++
   f77: /soft/spack/opt/spack/linux-x86_64/gcc-4.4.7/nag-6.1-jt3h5hwt5myezgqguhfsan52zcskqene/bin/nagfor
   fc: /soft/spack/opt/spack/linux-x86_64/gcc-4.4.7/nag-6.1-jt3h5hwt5myezgqguhfsan52zcskqene/bin/nagfor
 flags:
   fflags: -mismatch
 spec: nag@6.1

System Packages

Once compilers are configured, one needs to determine which pre-installed system packages, if any, to use in builds. This is configured in the file ~/.spack/packages.yaml. For example, to use an OpenMPI installed in /opt/local, one would use:

packages:
    openmpi:
        paths:
            openmpi@1.10.1: /opt/local
        buildable: False

In general, Spack is easier to use and more reliable if it builds all of its own dependencies. However, there are two packages for which one commonly needs to use system versions:

MPI

On supercomputers, sysadmins have already built MPI versions that take into account the specifics of that computer's hardware. Unless you know how they were built and can choose the correct Spack variants, you are unlikely to get a working MPI from Spack. Instead, use an appropriate pre-installed MPI.

If you choose a pre-installed MPI, you should consider using the pre-installed compiler used to build that MPI; see above on compilers.yaml.

OpenSSL

The openssl package underlies much of modern security in a modern OS; an attacker can easily "pwn" any computer on which they can modify SSL. Therefore, any openssl used on a system should be created in a "trusted environment" --- for example, that of the OS vendor.

OpenSSL is also updated by the OS vendor from time to time, in response to security problems discovered in the wider community. It is in everyone's best interest to use any newly updated versions as soon as they come out. Modern Linux installations have standard procedures for security updates without user involvement.

Spack running at user-level is not a trusted environment, nor do Spack users generally keep up-to-date on the latest security holes in SSL. For these reasons, a Spack-installed OpenSSL should likely not be trusted.

As long as the system-provided SSL works, you can use it instead. One can check if it works by trying to download an https://. For example:

$ curl -O https://github.com/ImageMagick/ImageMagick/archive/7.0.2-7.tar.gz

To tell Spack to use the system-supplied OpenSSL, first determine what version you have:

$ openssl version
OpenSSL 1.0.2g  1 Mar 2016

Then add the following to ~/.spack/packages.yaml:

packages:
    openssl:
        paths:
            openssl@1.0.2g: /usr
        buildable: False

BLAS / LAPACK

The recommended way to use system-supplied BLAS / LAPACK packages is to add the following to packages.yaml:

packages:
    netlib-lapack:
        paths:
            netlib-lapack@3.6.1: /usr
        buildable: False
    all:
        providers:
            blas: [netlib-lapack]
            lapack: [netlib-lapack]

注釈

Above we pretend that the system-provided BLAS / LAPACK is netlib-lapack only because it is the only BLAS / LAPACK provider which use standard names for libraries (as opposed to, for example, libopenblas.so).

Although we specify external package in /usr, Spack is smart enough not to add /usr/lib to RPATHs, where it could cause unrelated system libraries to be used instead of their Spack equivalents. usr/bin will be present in PATH, however it will have lower precedence compared to paths from other dependencies. This ensures that binaries in Spack dependencies are preferred over system binaries.

Git

Some Spack packages use git to download, which might not work on some computers. For example, the following error was encountered on a Macintosh during spack install julia-master:

==> Cloning git repository:
  https://github.com/JuliaLang/julia.git
  on branch master
Cloning into 'julia'...
fatal: unable to access 'https://github.com/JuliaLang/julia.git/':
    SSL certificate problem: unable to get local issuer certificate

This problem is related to OpenSSL, and in some cases might be solved by installing a new version of git and openssl:

  1. Run spack install git

  2. Add the output of spack module tcl loads git to your .bashrc.

If this doesn't work, it is also possible to disable checking of SSL certificates by using:

$ spack --insecure install

Using --insecure makes Spack disable SSL checking when fetching from websites and from git.

警告

This workaround should be used ONLY as a last resort! Wihout SSL certificate verification, spack and git will download from sites you wouldn't normally trust. The code you download and run may then be compromised! While this is not a major issue for archives that will be checksummed, it is especially problematic when downloading from name Git branches or tags, which relies entirely on trusting a certificate for security (no verification).

certificate for security (no verification).

Utilities Configuration

Although Spack does not need installation per se, it does rely on other packages to be available on its host system. If those packages are out of date or missing, then Spack will not work. Sometimes, an appeal to the system's package manager can fix such problems. If not, the solution is have Spack install the required packages, and then have Spack use them.

For example, if curl doesn't work, one could use the following steps to provide Spack a working curl:

$ spack install curl
$ spack load curl

or alternately:

$ spack module tcl loads curl >>~/.bashrc

or if environment modules don't work:

$ export PATH=`spack location --install-dir curl`/bin:$PATH

External commands are used by Spack in two places: within core Spack, and in the package recipes. The bootstrapping procedure for these two cases is somewhat different, and is treated separately below.

Core Spack Utilities

Core Spack uses the following packages, mainly to download and unpack source code, and to load generated environment modules: curl, env, git, go, hg, svn, tar, unzip, patch, environment-modules.

As long as the user's environment is set up to successfully run these programs from outside of Spack, they should work inside of Spack as well. They can generally be activated as in the curl example above; or some systems might already have an appropriate hand-built environment module that may be loaded. Either way works.

If you find that you are missing some of these programs, spack can build some of them for you with spack bootstrap. Currently supported programs are environment-modules.

A few notes on specific programs in this list:

cURL, git, Mercurial, etc.

Spack depends on cURL to download tarballs, the format that most Spack-installed packages come in. Your system's cURL should always be able to download unencrypted http://. However, the cURL on some systems has problems with SSL-enabled https:// URLs, due to outdated / insecure versions of OpenSSL on those systems. This will prevent Spack from installing any software requiring https:// until a new cURL has been installed, using the technique above.

警告

remember that if you install curl via Spack that it may rely on a user-space OpenSSL that is not upgraded regularly. It may fall out of date faster than your system OpenSSL.

Some packages use source code control systems as their download method: git, hg, svn and occasionally go. If you had to install a new curl, then chances are the system-supplied version of these other programs will also not work, because they also rely on OpenSSL. Once curl has been installed, you can similarly install the others.

Environment Modules

In order to use Spack's generated module files, you must have installed environment-modules or lmod. The simplest way to get the latest version of either of these tools is installing it as part of Spack's bootstrap procedure:

$ spack bootstrap

警告

At the moment spack bootstrap is only able to install environment-modules. Extending its capabilities to prefer lmod where possible is in the roadmap, and likely to happen before the next release.

Alternatively, on many Linux distributions, you can install a pre-built binary from the vendor's repository. On Fedora/RHEL/CentOS, for example, this can be done with the command:

$ yum install environment-modules

Once you have the tool installed and available in your path, you can source Spack's setup file:

$ source share/spack/setup-env.sh

This activates shell support and makes commands like spack load available for use.

Package Utilities

Spack may also encounter bootstrapping problems inside a package's install() method. In this case, Spack will normally be running inside a sanitized build environment. This includes all of the package's dependencies, but none of the environment Spack inherited from the user: if you load a module or modify $PATH before launching Spack, it will have no effect.

In this case, you will likely need to use the --dirty flag when running spack install, causing Spack to not sanitize the build environment. You are now responsible for making sure that environment does not do strange things to Spack or its installs.

Another way to get Spack to use its own version of something is to add that something to a package that needs it. For example:

depends_on('binutils', type='build')

This is considered best practice for some common build dependencies, such as autotools (if the autoreconf command is needed) and cmake --- cmake especially, because different packages require a different version of CMake.

binutils

Sometimes, strange error messages can happen while building a package. For example, ld might crash. Or one receives a message like:

ld: final link failed: Nonrepresentable section on output

or:

ld: .../_fftpackmodule.o: unrecognized relocation (0x2a) in section `.text'

These problems are often caused by an outdated binutils on your system. Unlike CMake or Autotools, adding depends_on('binutils') to every package is not considered a best practice because every package written in C/C++/Fortran would need it. A potential workaround is to load a recent binutils into your environment and use the --dirty flag.

GPG Signing

spack gpg

Spack has support for signing and verifying packages using GPG keys. A separate keyring is used for Spack, so any keys available in the user's home directory are not used.

spack gpg init

When Spack is first installed, its keyring is empty. Keys stored in var/spack/gpg are the default keys for a Spack installation. These keys may be imported by running spack gpg init. This will import the default keys into the keyring as trusted keys.

Trusting keys

Additional keys may be added to the keyring using spack gpg trust <keyfile>. Once a key is trusted, packages signed by the owner of they key may be installed.

Creating keys

You may also create your own key so that you may sign your own packages using spack gpg create <name> <email>. By default, the key has no expiration, but it may be set with the --expires <date> flag (see the gnupg2 documentation for accepted date formats). It is also recommended to add a comment as to the use of the key using the --comment <comment> flag. The public half of the key can also be exported for sharing with others so that they may use packages you have signed using the --export <keyfile> flag. Secret keys may also be later exported using the spack gpg export <location> [<key>...] command.

注釈

Key creation speed

The creation of a new GPG key requires generating a lot of random numbers. Depending on the entropy produced on your system, the entire process may take a long time (even appearing to hang). Virtual machines and cloud instances are particularly likely to display this behavior.

To speed it up you may install tools like rngd, which is usually available as a package in the host OS. On e.g. an Ubuntu machine you need to give the following commands:

$ sudo apt-get install rng-tools
$ sudo rngd -r /dev/urandom

before generating the keys.

Another alternative is haveged, which can be installed on RHEL/CentOS machines as follows:

$ sudo yum install haveged
$ sudo chkconfig haveged on

This Digital Ocean tutorial provides a good overview of sources of randomness.

Listing keys

In order to list the keys available in the keyring, the spack gpg list command will list trusted keys with the --trusted flag and keys available for signing using --signing. If you would like to remove keys from your keyring, spack gpg untrust <keyid>. Key IDs can be email addresses, names, or (best) fingerprints.

Signing and Verifying Packages

In order to sign a package, spack gpg sign <file> should be used. By default, the signature will be written to <file>.asc, but that may be changed by using the --output <file> flag. If there is only one signing key available, it will be used, but if there is more than one, the key to use must be specified using the --key <keyid> flag. The --clearsign flag may also be used to create a signed file which contains the contents, but it is not recommended. Signed packages may be verified by using spack gpg verify <file>.

Spack on Cray

Spack differs slightly when used on a Cray system. The architecture spec can differentiate between the front-end and back-end processor and operating system. For example, on Edison at NERSC, the back-end target processor is "Ivy Bridge", so you can specify to use the back-end this way:

$ spack install zlib target=ivybridge

You can also use the operating system to build against the back-end:

$ spack install zlib os=CNL10

Notice that the name includes both the operating system name and the major version number concatenated together.

Alternatively, if you want to build something for the front-end, you can specify the front-end target processor. The processor for a login node on Edison is "Sandy bridge" so we specify on the command line like so:

$ spack install zlib target=sandybridge

And the front-end operating system is:

$ spack install zlib os=SuSE11

Cray compiler detection

Spack can detect compilers using two methods. For the front-end, we treat everything the same. The difference lies in back-end compiler detection. Back-end compiler detection is made via the Tcl module avail command. Once it detects the compiler it writes the appropriate PrgEnv and compiler module name to compilers.yaml and sets the paths to each compiler with Cray's compiler wrapper names (i.e. cc, CC, ftn). During build time, Spack will load the correct PrgEnv and compiler module and will call appropriate wrapper.

The compilers.yaml config file will also differ. There is a modules section that is filled with the compiler's Programming Environment and module name. On other systems, this field is empty []:

- compiler:
    modules:
      - PrgEnv-intel
      - intel/15.0.109

As mentioned earlier, the compiler paths will look different on a Cray system. Since most compilers are invoked using cc, CC and ftn, the paths for each compiler are replaced with their respective Cray compiler wrapper names:

paths:
  cc: cc
  cxx: CC
  f77: ftn
  fc: ftn

As opposed to an explicit path to the compiler executable. This allows Spack to call the Cray compiler wrappers during build time.

For more on compiler configuration, check out Compiler configuration.

Spack sets the default Cray link type to dynamic, to better match other other platforms. Individual packages can enable static linking (which is the default outside of Spack on cray systems) using the -static flag.

Setting defaults and using Cray modules

If you want to use default compilers for each PrgEnv and also be able to load cray external modules, you will need to set up a packages.yaml.

Here's an example of an external configuration for cray modules:

packages:
  mpich:
    modules:
      mpich@7.3.1%gcc@5.2.0 arch=cray_xc-haswell-CNL10: cray-mpich
      mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-haswell-CNL10: cray-mpich
  all:
    providers:
      mpi: [mpich]

This tells Spack that for whatever package that depends on mpi, load the cray-mpich module into the environment. You can then be able to use whatever environment variables, libraries, etc, that are brought into the environment via module load.

注釈

For Cray-provided packages, it is best to use modules: instead of paths: in packages.yaml, because the Cray Programming Environment heavily relies on modules (e.g., loading the cray-mpich module adds MPI libraries to the compiler wrapper link line).

You can set the default compiler that Spack can use for each compiler type. If you want to use the Cray defaults, then set them under all: in packages.yaml. In the compiler field, set the compiler specs in your order of preference. Whenever you build with that compiler type, Spack will concretize to that version.

Here is an example of a full packages.yaml used at NERSC

packages:
  mpich:
    modules:
      mpich@7.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-mpich
      mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-SuSE11-ivybridge: cray-mpich
    buildable: False
  netcdf:
    modules:
      netcdf@4.3.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-netcdf
      netcdf@4.3.3.1%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge: cray-netcdf
    buildable: False
  hdf5:
    modules:
      hdf5@1.8.14%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-hdf5
      hdf5@1.8.14%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge: cray-hdf5
    buildable: False
  all:
    compiler: [gcc@5.2.0, intel@16.0.0.109]
    providers:
      mpi: [mpich]

Here we tell spack that whenever we want to build with gcc use version 5.2.0 or if we want to build with intel compilers, use version 16.0.0.109. We add a spec for each compiler type for each cray modules. This ensures that for each compiler on our system we can use that external module.

For more on external packages check out the section External Packages.

Using Linux containers on Cray machines

Spack uses environment variables particular to the Cray programming environment to determine which systems are Cray platforms. These environment variables may be propagated into containers that are not using the Cray programming environment.

To ensure that Spack does not autodetect the Cray programming environment, unset the environment variable CRAYPE_VERSION. This will cause Spack to treat a linux container on a Cray system as a base linux distro.

基本的な使い方

spack コマンドには多くの サブコマンド があります。典型的な使い方の場合、その一部を利用することになります。

Spackは出力を色付けしています。この出力の色付けを保つため、 less -R をご利用ください。例:

$ spack find | less -R

ご利用中の環境の .bashrc ファイルに以下を追加することをお勧めします。

alias less='less -R'

利用可能なパッケージの一覧表示

Spackでインストール可能なソフトウェアの一覧は、 パッケージ一覧 のウェブページもしくは、 spack list コマンドの出力で確認できます。

spack list

spack list コマンドは、Spackがインストール可能なパッケージの一覧を出力します:

$ spack list
abinit                           multiverso                             r-blockmodeling
abyss                            mummer                                 r-bookdown
accfft                           mumps                                  r-boot
ack                              munge                                  r-brew
activeharmony                    muparser                               r-broom
acts-core                        muscle                                 r-bsgenome
adept-utils                      muse                                   r-bumphunter
adios                            muster                                 r-c50
adios2                           mvapich2                               r-cairo
adlbx                            mxml                                   r-callr
...

出力数が多いため、上記は後半を省略していますが、完全な一覧は full list here で確認できます。パッケージ名のアルファベット順に並べられています。ワイルドカードの *? なしでの一致は、始めと終わりに * を付けた場合と同じ扱いになります。つまり、 util は、 *util* と同等です。

パッケージ名に "sql" が含まれるもの:

$ spack list sql
mysql            postgresql          py-pygresql  py-sqlalchemy  r-rsqlite  sqlitebrowser
perl-dbd-mysql   py-mysql-connector  py-pymysql   r-rmysql       r-sqldf
perl-dbd-sqlite  py-mysqldb1         py-pysqlite  r-rpostgresql  sqlite

名前か説明に "documentation" を含むすぺてのパッケージ:

$ spack list --search-description documentation
compositeproto     libxfixes     py-docutils          py-sphinxcontrib-websupport  r-roxygen2     xorg-sgml-doctools
damageproto        libxpresent   py-epydoc            r-ggplot2                    r-stanheaders
double-conversion  man-db        py-markdown          r-quadprog                   sowing
doxygen            perl-dbfile   py-sphinx            r-rcpp                       texinfo
gflags             py-alabaster  py-sphinxautomodapi  r-rinside                    xorg-docs

spack info

spack list で表示される特定のパッケージについて更に詳細な情報を得たい場合、 spack info をご利用ください。パッケージ名をコマンドの後につけてください:

$ spack info mpich
AutotoolsPackage:   mpich

Description:
    MPICH is a high performance and widely portable implementation of the
    Message Passing Interface (MPI) standard.

Homepage: http://www.mpich.org

Tags: 
    None

Preferred version:  
    3.3        http://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz

Safe versions:  
    develop    [git] https://github.com/pmodels/mpich.git
    3.3        http://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz
    3.2        http://www.mpich.org/static/downloads/3.2/mpich-3.2.tar.gz
    3.1.4      http://www.mpich.org/static/downloads/3.1.4/mpich-3.1.4.tar.gz
    3.1.3      http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz
    3.1.2      http://www.mpich.org/static/downloads/3.1.2/mpich-3.1.2.tar.gz
    3.1.1      http://www.mpich.org/static/downloads/3.1.1/mpich-3.1.1.tar.gz
    3.1        http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
    3.0.4      http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

Variants:
    Name [Default]    Allowed values          Description


    device [ch3]      ch3, ch4                Abstract Device Interface
                                              (ADI) implementation. The ch4
                                              device is currently in
                                              experimental state
    hydra [on]        True, False             Build the hydra process
                                              manager
    netmod [tcp]      tcp, mxm, ofi, ucx      Network module. Only single
                                              netmod builds are supported.
                                              For ch3 device configurations,
                                              this presumes the ch3:nemesis
                                              communication channel.
                                              ch3:sock is not supported by
                                              this spack package at this
                                              time.
    pci [on]          True, False             Support analyzing devices on
                                              PCI bus
    pmi [pmi]         off, pmi, pmi2, pmix    PMI interface.
    romio [on]        True, False             Enable ROMIO MPI I/O
                                              implementation
    slurm [off]       True, False             Enable SLURM support
    verbs [off]       True, False             Build support for OpenFabrics
                                              verbs.

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    findutils  libfabric  libpciaccess  libxml2  pkgconfig  pmix  slurm

Link Dependencies:
    libfabric  libpciaccess  libxml2  pmix  slurm

Run Dependencies:
    None

Virtual Packages: 
    mpich@3: provides mpi@:3.0
    mpich@1: provides mpi@:1.3
    mpich provides mpi

多くの情報は一目瞭然でしょう。 安全なバージョン(safe versions) はSpackがchecksumを認識しているバージョンであり、これらのバージョンがエラーやウィルスなしでダンロード可能なことを確認できます。

Dependencies と、 virtual dependencies については後述します。

spack versions

To see more available versions of a package, run spack versions. For example:

$ spack versions libelf
  0.8.13

There are two sections in the output. Safe versions are versions for which Spack has a checksum on file. It can verify that these versions are downloaded correctly.

In many cases, Spack can also show you what versions are available out on the web---these are remote versions. Spack gets this information by scraping it directly from package web pages. Depending on the package and how its releases are organized, Spack may or may not be able to find remote versions.

Installing and uninstalling

spack install

spack install will install any package shown by spack list. For example, To install the latest version of the mpileaks package, you might type this:

$ spack install mpileaks

If mpileaks depends on other packages, Spack will install the dependencies first. It then fetches the mpileaks tarball, expands it, verifies that it was downloaded without errors, builds it, and installs it in its own directory under $SPACK_ROOT/opt. You'll see a number of messages from spack, a lot of build output, and a message that the packages is installed:

$ spack install mpileaks
==> Installing mpileaks
==> mpich is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4.
==> callpath is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318.
==> adept-utils is already installed in ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da.
==> Trying to fetch from https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
######################################################################## 100.0%
==> Staging archive: ~/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23/mpileaks-1.0.tar.gz
==> Created stage in ~/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23.
==> No patches needed for mpileaks.
==> Building mpileaks.

... build output ...

==> Successfully installed mpileaks.
  Fetch: 2.16s.  Build: 9.82s.  Total: 11.98s.
[+] ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpileaks@1.0-59f6ad23

The last line, with the [+], indicates where the package is installed.

Building a specific version

Spack can also build specific versions of a package. To do this, just add @ after the package name, followed by a version:

$ spack install mpich@3.0.4

Any number of versions of the same package can be installed at once without interfering with each other. This is good for multi-user sites, as installing a version that one user needs will not disrupt existing installations for other users.

In addition to different versions, Spack can customize the compiler, compile-time options (variants), compiler flags, and platform (for cross compiles) of an installation. Spack is unique in that it can also configure the dependencies a package is built with. For example, two configurations of the same version of a package, one built with boost 1.39.0, and the other version built with version 1.43.0, can coexist.

This can all be done on the command line using the spec syntax. Spack calls the descriptor used to refer to a particular package configuration a spec. In the commands above, mpileaks and mpileaks@3.0.4 are both valid specs. We'll talk more about how you can use them to customize an installation in Specs & dependencies.

spack uninstall

To uninstall a package, type spack uninstall <package>. This will ask the user for confirmation before completely removing the directory in which the package was installed.

$ spack uninstall mpich

If there are still installed packages that depend on the package to be uninstalled, spack will refuse to uninstall it.

To uninstall a package and every package that depends on it, you may give the --dependents option.

$ spack uninstall --dependents mpich

will display a list of all the packages that depend on mpich and, upon confirmation, will uninstall them in the right order.

A command like

$ spack uninstall mpich

may be ambiguous if multiple mpich configurations are installed. For example, if both mpich@3.0.2 and mpich@3.1 are installed, mpich could refer to either one. Because it cannot determine which one to uninstall, Spack will ask you either to provide a version number to remove the ambiguity or use the --all option to uninstall all of the matching packages.

You may force uninstall a package with the --force option

$ spack uninstall --force mpich

but you risk breaking other installed packages. In general, it is safer to remove dependent packages before removing their dependencies or use the --dependents option.

Non-Downloadable Tarballs

The tarballs for some packages cannot be automatically downloaded by Spack. This could be for a number of reasons:

  1. The author requires users to manually accept a license agreement before downloading (jdk and galahad).

  2. The software is proprietary and cannot be downloaded on the open Internet.

To install these packages, one must create a mirror and manually add the tarballs in question to it (see ミラー):

  1. Create a directory for the mirror. You can create this directory anywhere you like, it does not have to be inside ~/.spack:

    $ mkdir ~/.spack/manual_mirror
    
  2. Register the mirror with Spack by creating ~/.spack/mirrors.yaml:

    mirrors:
      manual: file://~/.spack/manual_mirror
    
  3. Put your tarballs in it. Tarballs should be named <package>/<package>-<version>.tar.gz. For example:

    $ ls -l manual_mirror/galahad
    
    -rw-------. 1 me me 11657206 Jun 21 19:25 galahad-2.60003.tar.gz
    
  4. Install as usual:

    $ spack install galahad
    

Seeing installed packages

We know that spack list shows you the names of available packages, but how do you figure out which are already installed?

spack find

spack find shows the specs of installed packages. A spec is like a name, but it has a version, compiler, architecture, and build options associated with it. In spack, you can have many installations of the same package with different specs.

Running spack find with no arguments lists installed packages:

$ spack find
==> 74 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
ImageMagick@6.8.9-10  libdwarf@20130729  py-dateutil@2.4.0
adept-utils@1.0       libdwarf@20130729  py-ipython@2.3.1
atk@2.14.0            libelf@0.8.12      py-matplotlib@1.4.2
boost@1.55.0          libelf@0.8.13      py-nose@1.3.4
bzip2@1.0.6           libffi@3.1         py-numpy@1.9.1
cairo@1.14.0          libmng@2.0.2       py-pygments@2.0.1
callpath@1.0.2        libpng@1.6.16      py-pyparsing@2.0.3
cmake@3.0.2           libtiff@4.0.3      py-pyside@1.2.2
dbus@1.8.6            libtool@2.4.2      py-pytz@2014.10
dbus@1.9.0            libxcb@1.11        py-setuptools@11.3.1
dyninst@8.1.2         libxml2@2.9.2      py-six@1.9.0
fontconfig@2.11.1     libxml2@2.9.2      python@2.7.8
freetype@2.5.3        llvm@3.0           qhull@1.0
gdk-pixbuf@2.31.2     memaxes@0.5        qt@4.8.6
glib@2.42.1           mesa@8.0.5         qt@5.4.0
graphlib@2.0.0        mpich@3.0.4        readline@6.3
gtkplus@2.24.25       mpileaks@1.0       sqlite@3.8.5
harfbuzz@0.9.37       mrnet@4.1.0        stat@2.1.0
hdf5@1.8.13           ncurses@5.9        tcl@8.6.3
icu@54.1              netcdf@4.3.3       tk@src
jpeg@9a               openssl@1.0.1h     vtk@6.1.0
launchmon@1.0.1       pango@1.36.8       xcb-proto@1.11
lcms@2.6              pixman@0.32.6      xz@5.2.0
libdrm@2.4.33         py-dateutil@2.4.0  zlib@1.2.8

-- linux-debian7-x86_64 / gcc@4.9.2 --------------------------------
libelf@0.8.10  mpich@3.0.4

Packages are divided into groups according to their architecture and compiler. Within each group, Spack tries to keep the view simple, and only shows the version of installed packages.

spack find can filter the package list based on the package name, spec, or a number of properties of their installation status. For example, missing dependencies of a spec can be shown with --missing, packages which were explicitly installed with spack install <package> can be singled out with --explicit and those which have been pulled in only as dependencies with --implicit.

In some cases, there may be different configurations of the same version of a package installed. For example, there are two installations of libdwarf@20130729 above. We can look at them in more detail using spack find --deps, and by asking only to show libdwarf packages:

$ spack find --deps libdwarf
==> 2 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libdwarf@20130729-d9b90962
        ^libelf@0.8.12
    libdwarf@20130729-b52fac98
        ^libelf@0.8.13

Now we see that the two instances of libdwarf depend on different versions of libelf: 0.8.12 and 0.8.13. This view can become complicated for packages with many dependencies. If you just want to know whether two packages' dependencies differ, you can use spack find --long:

$ spack find --long libdwarf
==> 2 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
libdwarf@20130729-d9b90962  libdwarf@20130729-b52fac98

Now the libdwarf installs have hashes after their names. These are hashes over all of the dependencies of each package. If the hashes are the same, then the packages have the same dependency configuration.

If you want to know the path where each package is installed, you can use spack find --paths:

$ spack find --paths
==> 74 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    ImageMagick@6.8.9-10  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/ImageMagick@6.8.9-10-4df950dd
    adept-utils@1.0       ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da
    atk@2.14.0            ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/atk@2.14.0-3d09ac09
    boost@1.55.0          ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/boost@1.55.0
    bzip2@1.0.6           ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/bzip2@1.0.6
    cairo@1.14.0          ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/cairo@1.14.0-fcc2ab44
    callpath@1.0.2        ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318
...

And, finally, you can restrict your search to a particular package by supplying its name:

$ spack find --paths libelf
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libelf@0.8.11  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.11
    libelf@0.8.12  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.12
    libelf@0.8.13  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.13

spack find actually does a lot more than this. You can use specs to query for specific configurations and builds of each package. If you want to find only libelf versions greater than version 0.8.12, you could say:

$ spack find libelf@0.8.12:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    libelf@0.8.12  libelf@0.8.13

Finding just the versions of libdwarf built with a particular version of libelf would look like this:

$ spack find --long libdwarf ^libelf@0.8.12
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
libdwarf@20130729-d9b90962

We can also search for packages that have a certain attribute. For example, spack find libdwarf +debug will show only installations of libdwarf with the 'debug' compile-time option enabled.

The full spec syntax is discussed in detail in Specs & dependencies.

Specs & dependencies

We know that spack install, spack uninstall, and other commands take a package name with an optional version specifier. In Spack, that descriptor is called a spec. Spack uses specs to refer to a particular build configuration (or configurations) of a package. Specs are more than a package name and a version; you can use them to specify the compiler, compiler version, architecture, compile options, and dependency options for a build. In this section, we'll go over the full syntax of specs.

Here is an example of a much longer spec than we've seen thus far:

mpileaks @1.2:1.4 %gcc@4.7.5 +debug -qt arch=bgq_os ^callpath @1.1 %gcc@4.7.2

If provided to spack install, this will install the mpileaks library at some version between 1.2 and 1.4 (inclusive), built using gcc at version 4.7.5 for the Blue Gene/Q architecture, with debug options enabled, and without Qt support. Additionally, it says to link it with the callpath library (which it depends on), and to build callpath with gcc 4.7.2. Most specs will not be as complicated as this one, but this is a good example of what is possible with specs.

More formally, a spec consists of the following pieces:

  • Package name identifier (mpileaks above)

  • @ Optional version specifier (@1.2:1.4)

  • % Optional compiler specifier, with an optional compiler version (gcc or gcc@4.7.3)

  • + or - or ~ Optional variant specifiers (+debug, -qt, or ~qt) for boolean variants

  • name=<value> Optional variant specifiers that are not restricted to boolean variants

  • name=<value> Optional compiler flag specifiers. Valid flag names are cflags, cxxflags, fflags, cppflags, ldflags, and ldlibs.

  • target=<value> os=<value> Optional architecture specifier (target=haswell os=CNL10)

  • ^ Dependency specs (^callpath@1.1)

There are two things to notice here. The first is that specs are recursively defined. That is, each dependency after ^ is a spec itself. The second is that everything is optional except for the initial package name identifier. Users can be as vague or as specific as they want about the details of building packages, and this makes spack good for beginners and experts alike.

To really understand what's going on above, we need to think about how software is structured. An executable or a library (these are generally the artifacts produced by building software) depends on other libraries in order to run. We can represent the relationship between a package and its dependencies as a graph. Here is the full dependency graph for mpileaks:

digraph { mpileaks -> mpich mpileaks -> callpath -> mpich callpath -> dyninst dyninst -> libdwarf -> libelf dyninst -> libelf }

Each box above is a package and each arrow represents a dependency on some other package. For example, we say that the package mpileaks depends on callpath and mpich. mpileaks also depends indirectly on dyninst, libdwarf, and libelf, in that these libraries are dependencies of callpath. To install mpileaks, Spack has to build all of these packages. Dependency graphs in Spack have to be acyclic, and the depends on relationship is directional, so this is a directed, acyclic graph or DAG.

The package name identifier in the spec is the root of some dependency DAG, and the DAG itself is implicit. Spack knows the precise dependencies among packages, but users do not need to know the full DAG structure. Each ^ in the full spec refers to some dependency of the root package. Spack will raise an error if you supply a name after ^ that the root does not actually depend on (e.g. mpileaks ^emacs@23.3).

Spack further simplifies things by only allowing one configuration of each package within any single build. Above, both mpileaks and callpath depend on mpich, but mpich appears only once in the DAG. You cannot build an mpileaks version that depends on one version of mpich and on a callpath version that depends on some other version of mpich. In general, such a configuration would likely behave unexpectedly at runtime, and Spack enforces this to ensure a consistent runtime environment.

The point of specs is to abstract this full DAG from Spack users. If a user does not care about the DAG at all, she can refer to mpileaks by simply writing mpileaks. If she knows that mpileaks indirectly uses dyninst and she wants a particular version of dyninst, then she can refer to mpileaks ^dyninst@8.1. Spack will fill in the rest when it parses the spec; the user only needs to know package names and minimal details about their relationship.

When spack prints out specs, it sorts package names alphabetically to normalize the way they are displayed, but users do not need to worry about this when they write specs. The only restriction on the order of dependencies within a spec is that they appear after the root package. For example, these two specs represent exactly the same configuration:

mpileaks ^callpath@1.0 ^libelf@0.8.3
mpileaks ^libelf@0.8.3 ^callpath@1.0

You can put all the same modifiers on dependency specs that you would put on the root spec. That is, you can specify their versions, compilers, variants, and architectures just like any other spec. Specifiers are associated with the nearest package name to their left. For example, above, @1.1 and %gcc@4.7.2 associates with the callpath package, while @1.2:1.4, %gcc@4.7.5, +debug, -qt, and target=haswell os=CNL10 all associate with the mpileaks package.

In the diagram above, mpileaks depends on mpich with an unspecified version, but packages can depend on other packages with constraints by adding more specifiers. For example, mpileaks could depend on mpich@1.2: if it can only build with version 1.2 or higher of mpich.

Below are more details about the specifiers that you can add to specs.

Version specifier

A version specifier comes somewhere after a package name and starts with @. It can be a single version, e.g. @1.0, @3, or @1.2a7. Or, it can be a range of versions, such as @1.0:1.5 (all versions between 1.0 and 1.5, inclusive). Version ranges can be open, e.g. :3 means any version up to and including 3. This would include 3.4 and 3.4.2. 4.2: means any version above and including 4.2. Finally, a version specifier can be a set of arbitrary versions, such as @1.0,1.5,1.7 (1.0, 1.5, or 1.7). When you supply such a specifier to spack install, it constrains the set of versions that Spack will install.

If the version spec is not provided, then Spack will choose one according to policies set for the particular spack installation. If the spec is ambiguous, i.e. it could match multiple versions, Spack will choose a version within the spec's constraints according to policies set for the particular Spack installation.

Details about how versions are compared and how Spack determines if one version is less than another are discussed in the developer guide.

Compiler specifier

A compiler specifier comes somewhere after a package name and starts with %. It tells Spack what compiler(s) a particular package should be built with. After the % should come the name of some registered Spack compiler. This might include gcc, or intel, but the specific compilers available depend on the site. You can run spack compilers to get a list; more on this below.

The compiler spec can be followed by an optional compiler version. A compiler version specifier looks exactly like a package version specifier. Version specifiers will associate with the nearest package name or compiler specifier to their left in the spec.

If the compiler spec is omitted, Spack will choose a default compiler based on site policies.

Variants

Variants are named options associated with a particular package. They are optional, as each package must provide default values for each variant it makes available. Variants can be specified using a flexible parameter syntax name=<value>. For example, spack install libelf debug=True will install libelf build with debug flags. The names of particular variants available for a package depend on what was provided by the package author. spack info <package> will provide information on what build variants are available.

For compatibility with earlier versions, variants which happen to be boolean in nature can be specified by a syntax that represents turning options on and off. For example, in the previous spec we could have supplied libelf +debug with the same effect of enabling the debug compile time option for the libelf package.

Depending on the package a variant may have any default value. For libelf here, debug is False by default, and we turned it on with debug=True or +debug. If a variant is True by default you can turn it off by either adding -name or ~name to the spec.

There are two syntaxes here because, depending on context, ~ and - may mean different things. In most shells, the following will result in the shell performing home directory substitution:

mpileaks ~debug   # shell may try to substitute this!
mpileaks~debug    # use this instead

If there is a user called debug, the ~ will be incorrectly expanded. In this situation, you would want to write libelf -debug. However, - can be ambiguous when included after a package name without spaces:

mpileaks-debug     # wrong!
mpileaks -debug    # right

Spack allows the - character to be part of package names, so the above will be interpreted as a request for the mpileaks-debug package, not a request for mpileaks built without debug options. In this scenario, you should write mpileaks~debug to avoid ambiguity.

When spack normalizes specs, it prints them out with no spaces boolean variants using the backwards compatibility syntax and uses only ~ for disabled boolean variants. The - and spaces on the command line are provided for convenience and legibility.

Compiler Flags

Compiler flags are specified using the same syntax as non-boolean variants, but fulfill a different purpose. While the function of a variant is set by the package, compiler flags are used by the compiler wrappers to inject flags into the compile line of the build. Additionally, compiler flags are inherited by dependencies. spack install libdwarf cppflags="-g" will install both libdwarf and libelf with the -g flag injected into their compile line.

Notice that the value of the compiler flags must be quoted if it contains any spaces. Any of cppflags=-O3, cppflags="-O3", cppflags='-O3', and cppflags="-O3 -fPIC" are acceptable, but cppflags=-O3 -fPIC is not. Additionally, if the value of the compiler flags is not the last thing on the line, it must be followed by a space. The commmand spack install libelf cppflags="-O3"%intel will be interpreted as an attempt to set cppflags="-O3%intel".

The six compiler flags are injected in the order of implicit make commands in GNU Autotools. If all flags are set, the order is $cppflags $cflags|$cxxflags $ldflags <command> $ldlibs for C and C++ and $fflags $cppflags $ldflags <command> $ldlibs for Fortran.

Compiler environment variables and additional RPATHs

In the exceptional case a compiler requires setting special environment variables, like an explicit library load path. These can bet set in an extra section in the compiler configuration (the supported environment modification commands are: set, unset, append-path, and prepend-path). The user can also specify additional RPATHs that the compiler will add to all executables generated by that compiler. This is useful for forcing certain compilers to RPATH their own runtime libraries, so that executables will run without the need to set LD_LIBRARY_PATH.

compilers:
  - compiler:
      spec: gcc@4.9.3
      paths:
        cc: /opt/gcc/bin/gcc
        c++: /opt/gcc/bin/g++
        f77: /opt/gcc/bin/gfortran
        fc: /opt/gcc/bin/gfortran
      environment:
        unset:
          BAD_VARIABLE: # The colon is required but the value must be empty
        set:
          GOOD_VARIABLE_NUM: 1
          GOOD_VARIABLE_STR: good
        prepend-path:
          PATH: /path/to/binutils
        append-path:
          LD_LIBRARY_PATH: /opt/gcc/lib
      extra_rpaths:
      - /path/to/some/compiler/runtime/directory
      - /path/to/some/other/compiler/runtime/directory

注釈

The section environment is interpreted as an ordered dictionary, which means two things. First, environment modification are applied in the order they are specified in the configuration file. Second, you cannot express environment modifications that require mixing different commands, i.e. you cannot set one variable, than prepend-path to another one, and than again set a third one.

Architecture specifiers

The architecture can be specified by using the reserved words target and/or os (target=x86-64 os=debian7). You can also use the triplet form of platform, operating system and processor.

$ spack install libelf arch=cray-CNL10-haswell

Users on non-Cray systems won't have to worry about specifying the architecture. Spack will autodetect what kind of operating system is on your machine as well as the processor. For more information on how the architecture can be used on Cray machines, see Spack on Cray

Virtual dependencies

The dependence graph for mpileaks we saw above wasn't quite accurate. mpileaks uses MPI, which is an interface that has many different implementations. Above, we showed mpileaks and callpath depending on mpich, which is one particular implementation of MPI. However, we could build either with another implementation, such as openmpi or mvapich.

Spack represents interfaces like this using virtual dependencies. The real dependency DAG for mpileaks looks like this:

digraph { mpi [color=red] mpileaks -> mpi mpileaks -> callpath -> mpi callpath -> dyninst dyninst -> libdwarf -> libelf dyninst -> libelf }

Notice that mpich has now been replaced with mpi. There is no real MPI package, but some packages provide the MPI interface, and these packages can be substituted in for mpi when mpileaks is built.

You can see what virtual packages a particular package provides by getting info on it:

$ spack info mpich
AutotoolsPackage:   mpich

Description:
    MPICH is a high performance and widely portable implementation of the
    Message Passing Interface (MPI) standard.

Homepage: http://www.mpich.org

Tags: 
    None

Preferred version:  
    3.3        http://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz

Safe versions:  
    develop    [git] https://github.com/pmodels/mpich.git
    3.3        http://www.mpich.org/static/downloads/3.3/mpich-3.3.tar.gz
    3.2.1      http://www.mpich.org/static/downloads/3.2.1/mpich-3.2.1.tar.gz
    3.2        http://www.mpich.org/static/downloads/3.2/mpich-3.2.tar.gz
    3.1.4      http://www.mpich.org/static/downloads/3.1.4/mpich-3.1.4.tar.gz
    3.1.3      http://www.mpich.org/static/downloads/3.1.3/mpich-3.1.3.tar.gz
    3.1.2      http://www.mpich.org/static/downloads/3.1.2/mpich-3.1.2.tar.gz
    3.1.1      http://www.mpich.org/static/downloads/3.1.1/mpich-3.1.1.tar.gz
    3.1        http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
    3.0.4      http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz

Variants:
    Name [Default]    Allowed values          Description


    device [ch3]      ch3, ch4                Abstract Device Interface
                                              (ADI) implementation. The ch4
                                              device is currently in
                                              experimental state
    hydra [on]        True, False             Build the hydra process
                                              manager
    netmod [tcp]      tcp, mxm, ofi, ucx      Network module. Only single
                                              netmod builds are supported.
                                              For ch3 device configurations,
                                              this presumes the ch3:nemesis
                                              communication channel.
                                              ch3:sock is not supported by
                                              this spack package at this
                                              time.
    pci [on]          True, False             Support analyzing devices on
                                              PCI bus
    pmi [pmi]         off, pmi, pmi2, pmix    PMI interface.
    romio [on]        True, False             Enable ROMIO MPI I/O
                                              implementation
    slurm [off]       True, False             Enable SLURM support
    verbs [off]       True, False             Build support for OpenFabrics
                                              verbs.

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    findutils  libfabric  libpciaccess  libxml2  pkgconfig  pmix  slurm

Link Dependencies:
    libfabric  libpciaccess  libxml2  pmix  slurm

Run Dependencies:
    None

Virtual Packages: 
    mpich@3: provides mpi@:3.0
    mpich@1: provides mpi@:1.3
    mpich provides mpi

Spack is unique in that its virtual packages can be versioned, just like regular packages. A particular version of a package may provide a particular version of a virtual package, and we can see above that mpich versions 1 and above provide all mpi interface versions up to 1, and mpich versions 3 and above provide mpi versions up to 3. A package can depend on a particular version of a virtual package, e.g. if an application needs MPI-2 functions, it can depend on mpi@2: to indicate that it needs some implementation that provides MPI-2 functions.

Constraining virtual packages

When installing a package that depends on a virtual package, you can opt to specify the particular provider you want to use, or you can let Spack pick. For example, if you just type this:

$ spack install mpileaks

Then spack will pick a provider for you according to site policies. If you really want a particular version, say mpich, then you could run this instead:

$ spack install mpileaks ^mpich

This forces spack to use some version of mpich for its implementation. As always, you can be even more specific and require a particular mpich version:

$ spack install mpileaks ^mpich@3

The mpileaks package in particular only needs MPI-1 commands, so any MPI implementation will do. If another package depends on mpi@2 and you try to give it an insufficient MPI implementation (e.g., one that provides only mpi@:1), then Spack will raise an error. Likewise, if you try to plug in some package that doesn't provide MPI, Spack will raise an error.

Specifying Specs by Hash

Complicated specs can become cumbersome to enter on the command line, especially when many of the qualifications are necessary to distinguish between similar installs. To avoid this, when referencing an existing spec, Spack allows you to reference specs by their hash. We previously discussed the spec hash that Spack computes. In place of a spec in any command, substitute /<hash> where <hash> is any amount from the beginning of a spec hash.

For example, lets say that you accidentally installed two different mvapich2 installations. If you want to uninstall one of them but don't know what the difference is, you can run:

$ spack find --long mvapich2
==> 2 installed packages.
-- linux-centos7-x86_64 / gcc@6.3.0 ----------
qmt35td mvapich2@2.2%gcc
er3die3 mvapich2@2.2%gcc

You can then uninstall the latter installation using:

$ spack uninstall /er3die3

Or, if you want to build with a specific installation as a dependency, you can use:

$ spack install trilinos ^/er3die3

If the given spec hash is sufficiently long as to be unique, Spack will replace the reference with the spec to which it refers. Otherwise, it will prompt for a more qualified hash.

Note that this will not work to reinstall a dependency uninstalled by spack uninstall --force.

spack providers

You can see what packages provide a particular virtual package using spack providers. If you wanted to see what packages provide mpi, you would just run:

$ spack providers mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich      mvapich2        openmpi@2.0.0:
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich@1:   openmpi         spectrum-mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-mpi              mpich@3:   openmpi@1.6.5
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-parallel-studio  mpilander  openmpi@1.7.5:

And if you only wanted to see packages that provide MPI-2, you would add a version specifier to the spec:

$ spack providers mpi@2
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich      openmpi         spectrum-mpi
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:         mpich@3:   openmpi@1.6.5
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-mpi              mpilander  openmpi@1.7.5:
charmpp@6.7.1:  charmpp@6.7.1:  charmpp@6.7.1:  intel-parallel-studio  mvapich2   openmpi@2.0.0:

Notice that the package versions that provide insufficient MPI versions are now filtered out.

Extensions & Python support

Spack's installation model assumes that each package will live in its own install prefix. However, certain packages are typically installed within the directory hierarchy of other packages. For example, modules in interpreted languages like Python are typically installed in the $prefix/lib/python-2.7/site-packages directory.

Spack has support for this type of installation as well. In Spack, a package that can live inside the prefix of another package is called an extension. Suppose you have Python installed like so:

$ spack find python
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
python@2.7.8

spack extensions

You can find extensions for your Python installation like this:

$ spack extensions python
==> python@2.7.8%gcc@4.4.7 arch=linux-debian7-x86_64-703c7a96
==> 36 extensions:
geos          py-ipython     py-pexpect    py-pyside            py-sip
py-basemap    py-libxml2     py-pil        py-pytz              py-six
py-biopython  py-mako        py-pmw        py-rpy2              py-sympy
py-cython     py-matplotlib  py-pychecker  py-scientificpython  py-virtualenv
py-dateutil   py-mpi4py      py-pygments   py-scikit-learn
py-epydoc     py-mx          py-pylint     py-scipy
py-gnuplot    py-nose        py-pyparsing  py-setuptools
py-h5py       py-numpy       py-pyqt       py-shiboken

==> 12 installed:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-dateutil@2.4.0    py-nose@1.3.4       py-pyside@1.2.2
py-dateutil@2.4.0    py-numpy@1.9.1      py-pytz@2014.10
py-ipython@2.3.1     py-pygments@2.0.1   py-setuptools@11.3.1
py-matplotlib@1.4.2  py-pyparsing@2.0.3  py-six@1.9.0

==> None activated.

The extensions are a subset of what's returned by spack list, and they are packages like any other. They are installed into their own prefixes, and you can see this with spack find --paths:

$ spack find --paths py-numpy
==> 1 installed packages.
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
    py-numpy@1.9.1  ~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/py-numpy@1.9.1-66733244

However, even though this package is installed, you cannot use it directly when you run python:

$ spack load python
$ python
Python 2.7.8 (default, Feb 17 2015, 01:35:25)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named numpy
>>>

Using Extensions

There are three ways to get numpy working in Python. The first is to use Using module files via Spack. You can simply use or load the module for the extension, and it will be added to the PYTHONPATH in your current shell.

For tcl modules:

$ spack load python
$ spack load py-numpy

or, for dotkit:

$ spack use python
$ spack use py-numpy

Now import numpy will succeed for as long as you keep your current session open.

Activating Extensions in a View

The second way to use extensions is to create a view, which merges the python installation along with the extensions into a single prefix. See Filesystem Views for a more in-depth description of views and spack view for usage of the spack view command.

Activating Extensions Globally

As an alternative to creating a merged prefix with Python and its extensions, and prior to support for views, Spack has provided a means to install the extension into the Spack installation prefix for the extendee. This has typically been useful since extendable packages typically search their own installation path for addons by default.

Global activations are performed with the spack activate command:

spack activate

$ spack activate py-numpy
==> Activated extension py-setuptools@11.3.1%gcc@4.4.7 arch=linux-debian7-x86_64-3c74eb69 for python@2.7.8%gcc@4.4.7.
==> Activated extension py-nose@1.3.4%gcc@4.4.7 arch=linux-debian7-x86_64-5f70f816 for python@2.7.8%gcc@4.4.7.
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.

Several things have happened here. The user requested that py-numpy be activated in the python installation it was built with. Spack knows that py-numpy depends on py-nose and py-setuptools, so it activated those packages first. Finally, once all dependencies were activated in the python installation, py-numpy was activated as well.

If we run spack extensions again, we now see the three new packages listed as activated:

$ spack extensions python
==> python@2.7.8%gcc@4.4.7  arch=linux-debian7-x86_64-703c7a96
==> 36 extensions:
geos          py-ipython     py-pexpect    py-pyside            py-sip
py-basemap    py-libxml2     py-pil        py-pytz              py-six
py-biopython  py-mako        py-pmw        py-rpy2              py-sympy
py-cython     py-matplotlib  py-pychecker  py-scientificpython  py-virtualenv
py-dateutil   py-mpi4py      py-pygments   py-scikit-learn
py-epydoc     py-mx          py-pylint     py-scipy
py-gnuplot    py-nose        py-pyparsing  py-setuptools
py-h5py       py-numpy       py-pyqt       py-shiboken

==> 12 installed:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-dateutil@2.4.0    py-nose@1.3.4       py-pyside@1.2.2
py-dateutil@2.4.0    py-numpy@1.9.1      py-pytz@2014.10
py-ipython@2.3.1     py-pygments@2.0.1   py-setuptools@11.3.1
py-matplotlib@1.4.2  py-pyparsing@2.0.3  py-six@1.9.0

==> 3 currently activated:
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
py-nose@1.3.4  py-numpy@1.9.1  py-setuptools@11.3.1

Now, when a user runs python, numpy will be available for import without the user having to explicitly loaded. python@2.7.8 now acts like a system Python installation with numpy installed inside of it.

Spack accomplishes this by symbolically linking the entire prefix of the py-numpy into the prefix of the python package. To the python interpreter, it looks like numpy is installed in the site-packages directory.

The only limitation of global activation is that you can only have a single version of an extension activated at a time. This is because multiple versions of the same extension would conflict if symbolically linked into the same prefix. Users who want a different version of a package can still get it by using environment modules or views, but they will have to explicitly load their preferred version.

spack activate --force

If, for some reason, you want to activate a package without its dependencies, you can use spack activate --force:

$ spack activate --force py-numpy
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.

spack deactivate

We've seen how activating an extension can be used to set up a default version of a Python module. Obviously, you may want to change that at some point. spack deactivate is the command for this. There are several variants:

  • spack deactivate <extension> will deactivate a single extension. If another activated extension depends on this one, Spack will warn you and exit with an error.

  • spack deactivate --force <extension> deactivates an extension regardless of packages that depend on it.

  • spack deactivate --all <extension> deactivates an extension and all of its dependencies. Use --force to disregard dependents.

  • spack deactivate --all <extendee> deactivates all activated extensions of a package. For example, to deactivate all python extensions, use:

    $ spack deactivate --all python
    

Filesystem requirements

By default, Spack needs to be run from a filesystem that supports flock locking semantics. Nearly all local filesystems and recent versions of NFS support this, but parallel filesystems or NFS volumes may be configured without flock support enabled. You can determine how your filesystems are mounted with mount. The output for a Lustre filesystem might look like this:

$ mount | grep lscratch
mds1-lnet0@o2ib100:/lsd on /p/lscratchd type lustre (rw,nosuid,lazystatfs,flock)
mds2-lnet0@o2ib100:/lse on /p/lscratche type lustre (rw,nosuid,lazystatfs,flock)

Note the flock option on both Lustre mounts.

If you do not see this or a similar option for your filesystem, you have a few options. First, you can move your Spack installation to a filesystem that supports locking. Second, you could ask your system administrator to enable flock for your filesystem.

If none of those work, you can disable locking in one of two ways:

  1. Run Spack with the -L or --disable-locks option to disable locks on a call-by-call basis.

  2. Edit config.yaml and set the locks option to false to always disable locking.

警告

If you disable locking, concurrent instances of Spack will have no way to avoid stepping on each other. You must ensure that there is only one instance of Spack running at a time. Otherwise, Spack may end up with a corrupted database file, or you may not be able to see all installed packages in commands like spack find.

If you are unfortunate enough to run into this situation, you may be able to fix it by running spack reindex.

This issue typically manifests with the error below:

$ ./spack find
Traceback (most recent call last):
File "./spack", line 176, in <module>
  main()
File "./spack", line 154,' in main
  return_val = command(parser, args)
File "./spack/lib/spack/spack/cmd/find.py", line 170, in find
  specs = set(spack.installed_db.query(\**q_args))
File "./spack/lib/spack/spack/database.py", line 551, in query
  with self.read_transaction():
File "./spack/lib/spack/spack/database.py", line 598, in __enter__
  if self._enter() and self._acquire_fn:
File "./spack/lib/spack/spack/database.py", line 608, in _enter
  return self._db.lock.acquire_read(self._timeout)
File "./spack/lib/spack/llnl/util/lock.py", line 103, in acquire_read
  self._lock(fcntl.LOCK_SH, timeout)   # can raise LockError.
File "./spack/lib/spack/llnl/util/lock.py", line 64, in _lock
  fcntl.lockf(self._fd, op | fcntl.LOCK_NB)
IOError: [Errno 38] Function not implemented

A nicer error message is TBD in future versions of Spack.

Getting Help

spack help

If you don't find what you need here, the help subcommand will print out out a list of all of spack's options and subcommands:

$ spack help
usage: spack [-hkV] [--color {always,never,auto}] COMMAND ...

A flexible package manager that supports multiple versions,
configurations, platforms, and compilers.

These are common spack commands:

query packages:
  list                  list and search available packages
  info                  get detailed information on a particular package
  find                  list and search installed packages

build packages:
  install               build and install packages
  uninstall             remove installed packages
  spec                  show what would be installed, given a spec

environments:
  env                   manage virtual environments
  view                  project packages to a compact naming scheme on the filesystem.

modules:
  load                  add package to environment using `module load`
  module                manipulate module files
  unload                remove package from environment using `module unload`

create packages:
  create                create a new package file
  edit                  open package files in $EDITOR

system:
  arch                  print architecture information about this machine
  compilers             list available compilers

optional arguments:
  -h, --help            show this help message and exit
  -k, --insecure        do not check ssl certificates when downloading
  -V, --version         show version number and exit
  --color {always,never,auto}
                        when to colorize output (default: auto)

more help:
  spack help --all       list all commands and options
  spack help <command>   help on a specific command
  spack help --spec      help on the spec syntax
  spack docs             open http://spack.rtfd.io/ in a browser

Adding an argument, e.g. spack help <subcommand>, will print out usage information for a particular subcommand:

$ spack help install
usage: spack install [-hInvy] [--only {package,dependencies}] [-j JOBS] [--overwrite] [--keep-prefix] [--keep-stage]
                     [--dont-restage] [--use-cache | --no-cache] [--show-log-on-error] [--source] [--fake]
                     [--only-concrete] [-f SPEC_YAML_FILE] [--clean | --dirty] [--test {root,all} | --run-tests]
                     [--log-format {None,junit,cdash}] [--log-file LOG_FILE] [--cdash-upload-url CDASH_UPLOAD_URL]
                     [--cdash-build CDASH_BUILD] [--cdash-site CDASH_SITE]
                     [--cdash-track CDASH_TRACK | --cdash-buildstamp CDASH_BUILDSTAMP]
                     ...

build and install packages

positional arguments:
  package               spec of the package to install

optional arguments:
  -h, --help            show this help message and exit
  --only {package,dependencies}
                        select the mode of installation.
                        the default is to install the package along with all its dependencies.
                        alternatively one can decide to install only the package or only
                        the dependencies
  -j JOBS, --jobs JOBS  explicitly set number of parallel jobs
  -I, --install-status  show install status of packages. packages can be: installed [+], missing and needed by an installed package [-], or not installed (no annotation)
  --overwrite           reinstall an existing spec, even if it has dependents
  --keep-prefix         don't remove the install prefix if installation fails
  --keep-stage          don't remove the build stage if installation succeeds
  --dont-restage        if a partial install is detected, don't delete prior state
  --use-cache           check for pre-built Spack packages in mirrors (default)
  --no-cache            do not check for pre-built Spack packages in mirrors
  --show-log-on-error   print full build log to stderr if build fails
  --source              install source files in prefix
  -n, --no-checksum     do not use checksums to verify downloaded files (unsafe)
  -v, --verbose         display verbose build output while installing
  --fake                fake install for debug purposes.
  --only-concrete       (with environment) only install already concretized specs
  -f SPEC_YAML_FILE, --file SPEC_YAML_FILE
                        install from file. Read specs to install from .yaml files
  --clean               unset harmful variables in the build environment (default)
  --dirty               preserve user environment in the spack build environment (danger!)
  --test {root,all}     If 'root' is chosen, run package tests during
                        installation for top-level packages (but skip tests for dependencies).
                        if 'all' is chosen, run package tests during installation for all
                        packages. If neither are chosen, don't run tests for any packages.
  --run-tests           run package tests during installation (same as --test=all)
  --log-format {None,junit,cdash}
                        format to be used for log files
  --log-file LOG_FILE   filename for the log file. if not passed a default will be used
  --cdash-upload-url CDASH_UPLOAD_URL
                        CDash URL where reports will be uploaded
  --cdash-build CDASH_BUILD
                        The name of the build that will be reported to CDash.
                        Defaults to spec of the package to install.
  --cdash-site CDASH_SITE
                        The site name that will be reported to CDash.
                        Defaults to current system hostname.
  --cdash-track CDASH_TRACK
                        Results will be reported to this group on CDash.
                        Defaults to Experimental.
  --cdash-buildstamp CDASH_BUILDSTAMP
                        Instead of letting the CDash reporter prepare the
                        buildstamp which, when combined with build name, site and project,
                        uniquely identifies the build, provide this argument to identify
                        the build yourself.  Format: %Y%m%d-%H%M-[cdash-track]
  -y, --yes-to-all      assume "yes" is the answer to every confirmation request

Alternately, you can use spack --help in place of spack help, or spack <subcommand> --help to get help on a particular subcommand.

ワークフロー

The process of using Spack involves building packages, running binaries from those packages, and developing software that depends on those packages. For example, one might use Spack to build the netcdf package, use spack load to run the ncdump binary, and finally, write a small C program to read/write a particular NetCDF file.

Spack supports a variety of workflows to suit a variety of situations and user preferences, there is no single way to do all these things. This chapter demonstrates different workflows that have been developed, pointing out the pros and cons of them.

Definitions

First some basic definitions.

Package, Concrete Spec, Installed Package

In Spack, a package is an abstract recipe to build one piece of software. Spack packages may be used to build, in principle, any version of that software with any set of variants. Examples of packages include curl and zlib.

A package may be instantiated to produce a concrete spec; one possible realization of a particular package, out of combinatorially many other realizations. For example, here is a concrete spec instantiated from curl:

$ spack spec curl
Input spec
--------------------------------
curl

Concretized
--------------------------------
curl@7.63.0%gcc@7.5.0~darwinssl~gssapi~libssh~libssh2~nghttp2 arch=linux-ubuntu18.04-x86_64
    ^openssl@1.1.1b%gcc@7.5.0+systemcerts arch=linux-ubuntu18.04-x86_64
        ^perl@5.26.2%gcc@7.5.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu18.04-x86_64
            ^gdbm@1.18.1%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                ^readline@7.0%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
                    ^ncurses@6.1%gcc@7.5.0~symlinks~termlib arch=linux-ubuntu18.04-x86_64
                        ^pkgconf@1.6.0%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64
        ^zlib@1.2.11%gcc@7.5.0+optimize+pic+shared arch=linux-ubuntu18.04-x86_64

Spack's core concretization algorithm generates concrete specs by instantiating packages from its repo, based on a set of "hints", including user input and the packages.yaml file. This algorithm may be accessed at any time with the spack spec command.

Every time Spack installs a package, that installation corresponds to a concrete spec. Only a vanishingly small fraction of possible concrete specs will be installed at any one Spack site.

Consistent Sets

A set of Spack specs is said to be consistent if each package is only instantiated one way within it --- that is, if two specs in the set have the same package, then they must also have the same version, variant, compiler, etc. For example, the following set is consistent:

curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
    ^openssl@1.0.2k%gcc@5.3.0 arch=linux-SuSE11-x86_64
    ^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64

The following set is not consistent:

curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
    ^openssl@1.0.2k%gcc@5.3.0 arch=linux-SuSE11-x86_64
    ^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
zlib@1.2.7%gcc@5.3.0 arch=linux-SuSE11-x86_64

The compatibility of a set of installed packages determines what may be done with it. It is always possible to spack load any set of installed packages, whether or not they are consistent, and run their binaries from the command line. However, a set of installed packages can only be linked together in one binary if it is consistent.

If the user produces a series of spack spec or spack load commands, in general there is no guarantee of consistency between them. Spack's concretization procedure guarantees that the results of any single spack spec call will be consistent. Therefore, the best way to ensure a consistent set of specs is to create a Spack package with dependencies, and then instantiate that package. We will use this technique below.

Building Packages

Suppose you are tasked with installing a set of software packages on a system in order to support one application -- both a core application program, plus software to prepare input and analyze output. The required software might be summed up as a series of spack install commands placed in a script. If needed, this script can always be run again in the future. For example:

#!/bin/sh
spack install modele-utils
spack install emacs
spack install ncview
spack install nco
spack install modele-control
spack install py-numpy

In most cases, this script will not correctly install software according to your specific needs: choices need to be made for variants, versions and virtual dependency choices may be needed. It is possible to specify these choices by extending specs on the command line; however, the same choices must be specified repeatedly. For example, if you wish to use openmpi to satisfy the mpi dependency, then ^openmpi will have to appear on every spack install line that uses MPI. It can get repetitive fast.

Customizing Spack installation options is easier to do in the ~/.spack/packages.yaml file. In this file, you can specify preferred versions and variants to use for packages. For example:

packages:
    python:
        version: [3.5.1]
    modele-utils:
        version: [cmake]

    everytrace:
        version: [develop]
    eigen:
        variants: ~suitesparse
    netcdf:
        variants: +mpi

    all:
        compiler: [gcc@5.3.0]
        providers:
            mpi: [openmpi]
            blas: [openblas]
            lapack: [openblas]

This approach will work as long as you are building packages for just one application.

Multiple Applications

Suppose instead you're building multiple inconsistent applications. For example, users want package A to be built with openmpi and package B with mpich --- but still share many other lower-level dependencies. In this case, a single packages.yaml file will not work. Plans are to implement per-project packages.yaml files. In the meantime, one could write shell scripts to switch packages.yaml between multiple versions as needed, using symlinks.

Combinatorial Sets of Installs

Suppose that you are now tasked with systematically building many incompatible versions of packages. For example, you need to build petsc 9 times for 3 different MPI implementations on 3 different compilers, in order to support user needs. In this case, you will need to either create 9 different packages.yaml files; or more likely, create 9 different spack install command lines with the correct options in the spec. Here is a real-life example of this kind of usage:

#!/bin/bash

compilers=(
    %gcc
    %intel
    %pgi
)

mpis=(
    openmpi+psm~verbs
    openmpi~psm+verbs
    mvapich2+psm~mrail
    mvapich2~psm+mrail
    mpich+verbs
)

for compiler in "${compilers[@]}"
do
    # Serial installs
    spack install szip           $compiler
    spack install hdf            $compiler
    spack install hdf5           $compiler
    spack install netcdf         $compiler
    spack install netcdf-fortran $compiler
    spack install ncview         $compiler

    # Parallel installs
    for mpi in "${mpis[@]}"
    do
        spack install $mpi            $compiler
        spack install hdf5~cxx+mpi    $compiler ^$mpi
        spack install parallel-netcdf $compiler ^$mpi
    done
done

Running Binaries from Packages

Once Spack packages have been built, the next step is to use them. As with building packages, there are many ways to use them, depending on the use case.

Find and Run

The simplest way to run a Spack binary is to find it and run it! In many cases, nothing more is needed because Spack builds binaries with RPATHs. Spack installation directories may be found with spack location --install-dir commands. For example:

$ spack location --install-dir cmake
~/spack/opt/spack/linux-SuSE11-x86_64/gcc-5.3.0/cmake-3.6.0-7cxrynb6esss6jognj23ak55fgxkwtx7

This gives the root of the Spack package; relevant binaries may be found within it. For example:

$ CMAKE=`spack location --install-dir cmake`/bin/cmake

Standard UNIX tools can find binaries as well. For example:

$ find ~/spack/opt -name cmake | grep bin
~/spack/opt/spack/linux-SuSE11-x86_64/gcc-5.3.0/cmake-3.6.0-7cxrynb6esss6jognj23ak55fgxkwtx7/bin/cmake

These methods are suitable, for example, for setting up build processes or GUIs that need to know the location of particular tools. However, other more powerful methods are generally preferred for user environments.

Spack-Generated Modules

Suppose that Spack has been used to install a set of command-line programs, which users now wish to use. One can in principle put a number of spack load commands into .bashrc, for example, to load a set of Spack-generated modules:

spack load modele-utils
spack load emacs
spack load ncview
spack load nco
spack load modele-control

Although simple load scripts like this are useful in many cases, they have some drawbacks:

  1. The set of modules loaded by them will in general not be consistent. They are a decent way to load commands to be called from command shells. See below for better ways to assemble a consistent set of packages for building application programs.

  2. The spack spec and spack install commands use a sophisticated concretization algorithm that chooses the "best" among several options, taking into account packages.yaml file. The spack load and spack module tcl loads commands, on the other hand, are not very smart: if the user-supplied spec matches more than one installed package, then spack module tcl loads will fail. This may change in the future. For now, the workaround is to be more specific on any spack module tcl loads lines that fail.

Generated Load Scripts

Another problem with using spack load is, it is slow; a typical user environment could take several seconds to load, and would not be appropriate to put into .bashrc directly. It is preferable to use a series of spack module tcl loads commands to pre-compute which modules to load. These can be put in a script that is run whenever installed Spack packages change. For example:

#!/bin/sh
#
# Generate module load commands in ~/env/spackenv

cat <<EOF | /bin/sh >$HOME/env/spackenv
FIND='spack module tcl loads --prefix linux-SuSE11-x86_64/'

\$FIND modele-utils
\$FIND emacs
\$FIND ncview
\$FIND nco
\$FIND modele-control
EOF

The output of this file is written in ~/env/spackenv:

# binutils@2.25%gcc@5.3.0+gold~krellpatch~libiberty arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/binutils-2.25-gcc-5.3.0-6w5d2t4
# python@2.7.12%gcc@5.3.0~tk~ucs4 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/python-2.7.12-gcc-5.3.0-2azoju2
# ncview@2.1.7%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/ncview-2.1.7-gcc-5.3.0-uw3knq2
# nco@4.5.5%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/nco-4.5.5-gcc-5.3.0-7aqmimu
# modele-control@develop%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/modele-control-develop-gcc-5.3.0-7rddsij
# zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/zlib-1.2.8-gcc-5.3.0-fe5onbi
# curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/curl-7.50.1-gcc-5.3.0-4vlev55
# hdf5@1.10.0-patch1%gcc@5.3.0+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/hdf5-1.10.0-patch1-gcc-5.3.0-pwnsr4w
# netcdf@4.4.1%gcc@5.3.0~hdf4+mpi arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/netcdf-4.4.1-gcc-5.3.0-rl5canv
# netcdf-fortran@4.4.4%gcc@5.3.0 arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/netcdf-fortran-4.4.4-gcc-5.3.0-stdk2xq
# modele-utils@cmake%gcc@5.3.0+aux+diags+ic arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/modele-utils-cmake-gcc-5.3.0-idyjul5
# everytrace@develop%gcc@5.3.0+fortran+mpi arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/everytrace-develop-gcc-5.3.0-p5wmb25

Users may now put source ~/env/spackenv into .bashrc.

注釈

Some module systems put a prefix on the names of modules created by Spack. For example, that prefix is linux-SuSE11-x86_64/ in the above case. If a prefix is not needed, you may omit the --prefix flag from spack module tcl loads.

Transitive Dependencies

In the script above, each spack module tcl loads command generates a single module load line. Transitive dependencies do not usually need to be loaded, only modules the user needs in $PATH. This is because Spack builds binaries with RPATH. Spack's RPATH policy has some nice features:

  1. Modules for multiple inconsistent applications may be loaded simultaneously. In the above example (Multiple Applications), package A and package B can coexist together in the user's $PATH, even though they use different MPIs.

  2. RPATH eliminates a whole class of strange errors that can happen in non-RPATH binaries when the wrong LD_LIBRARY_PATH is loaded.

  3. Recursive module systems such as LMod are not necessary.

  4. Modules are not needed at all to execute binaries. If a path to a binary is known, it may be executed. For example, the path for a Spack-built compiler can be given to an IDE without requiring the IDE to load that compiler's module.

Unfortunately, Spack's RPATH support does not work in all case. For example:

  1. Software comes in many forms --- not just compiled ELF binaries, but also as interpreted code in Python, R, JVM bytecode, etc. Those systems almost universally use an environment variable analogous to LD_LIBRARY_PATH to dynamically load libraries.

  2. Although Spack generally builds binaries with RPATH, it does not currently do so for compiled Python extensions (for example, py-numpy). Any libraries that these extensions depend on (blas in this case, for example) must be specified in the LD_LIBRARY_PATH.`

  3. In some cases, Spack-generated binaries end up without a functional RPATH for no discernible reason.

In cases where RPATH support doesn't make things "just work," it can be necessary to load a module's dependencies as well as the module itself. This is done by adding the --dependencies flag to the spack module tcl loads command. For example, the following line, added to the script above, would be used to load SciPy, along with Numpy, core Python, BLAS/LAPACK and anything else needed:

spack module tcl loads --dependencies py-scipy

Dummy Packages

As an alternative to a series of module load commands, one might consider dummy packages as a way to create a consistent set of packages that may be loaded as one unit. The idea here is pretty simple:

  1. Create a package (say, mydummy) with no URL and no install() method, just dependencies.

  2. Run spack install mydummy to install.

An advantage of this method is the set of packages produced will be consistent. This means that you can reliably build software against it. A disadvantage is the set of packages will be consistent; this means you cannot load up two applications this way if they are not consistent with each other.

Filesystem Views

Filesystem views offer an alternative to environment modules, another way to assemble packages in a useful way and load them into a user's environment.

A single-prefix filesystem view is a single directory tree that is the union of the directory hierarchies of a number of installed packages; it is similar to the directory hiearchy that might exist under /usr/local. The files of the view's installed packages are brought into the view by symbolic or hard links, referencing the original Spack installation.

A combinatorial filesystem view can contain more software than a single-prefix view. Combinatorial filesystem views are created by defining a projection for each spec or set of specs. The syntax for this will be discussed in the section for the spack view command under adding_projections_to_views.

The projection for a spec or set of specs specifies the naming scheme for the directory structure under the root of the view into which the package will be linked. For example, the spec zlib@1.2.8%gcc@4.4.7 could be projected to MYVIEW/zlib-1.2.8-gcc.

When software is built and installed, absolute paths are frequently "baked into" the software, making it non-relocatable. This happens not just in RPATHs, but also in shebangs, configuration files, and assorted other locations.

Therefore, programs run out of a Spack view will typically still look in the original Spack-installed location for shared libraries and other resources. This behavior is not easily changed; in general, there is no way to know where absolute paths might be written into an installed package, and how to relocate it. Therefore, the original Spack tree must be kept in place for a filesystem view to work, even if the view is built with hardlinks.

spack view

A filesystem view is created, and packages are linked in, by the spack view command's symlink and hardlink sub-commands. The spack view remove command can be used to unlink some or all of the filesystem view.

The following example creates a filesystem view based on an installed cmake package and then removes from the view the files in the cmake package while retaining its dependencies.

$ spack view --verbose symlink myview cmake@3.5.2
==> Linking package: "ncurses"
==> Linking package: "zlib"
==> Linking package: "openssl"
==> Linking package: "cmake"

$ ls myview/
bin  doc  etc  include  lib  share

$ ls myview/bin/
captoinfo  clear  cpack     ctest    infotocap        openssl  tabs  toe   tset
ccmake     cmake  c_rehash  infocmp  ncurses6-config  reset    tic   tput

$ spack view --verbose --dependencies false rm myview cmake@3.5.2
==> Removing package: "cmake"

$ ls myview/bin/
captoinfo  c_rehash  infotocap        openssl  tabs  toe   tset
clear      infocmp   ncurses6-config  reset    tic   tput

注釈

If the set of packages being included in a view is inconsistent, then it is possible that two packages will provide the same file. Any conflicts of this type are handled on a first-come-first-served basis, and a warning is printed.

注釈

When packages are removed from a view, empty directories are purged.

Controlling View Projections

The default projection into a view is to link every package into the root of the view. This can be changed by adding a projections.yaml configuration file to the view. The projection configuration file for a view located at /my/view is stored in /my/view/.spack/projections.yaml.

When creating a view, the projection configuration file can also be specified from the command line using the --projection-file option to the spack view command.

The projections configuration file is a mapping of partial specs to spec format strings, as shown in the example below.

projections:
  zlib: {name}-{version}
  ^mpi: {name}-{version}/{^mpi.name}-{^mpi.version}-{compiler.name}-{compiler.version}
  all: {name}-{version}/{compiler.name}-{compiler.version}

The entries in the projections configuration file must all be either specs or the keyword all. For each spec, the projection used will be the first non-all entry that the spec satisfies, or all if there is an entry for all and no other entry is satisfied by the spec. Where the keyword all appears in the file does not matter. Given the example above, any spec satisfying zlib@1.2.8 will be linked into /my/view/zlib-1.2.8/, any spec satisfying hdf5@1.8.10+mpi %gcc@4.9.3 ^mvapich2@2.2 will be linked into /my/view/hdf5-1.8.10/mvapich2-2.2-gcc-4.9.3, and any spec satisfying hdf5@1.8.10~mpi %gcc@4.9.3 will be linked into /my/view/hdf5-1.8.10/gcc-4.9.3.

If the keyword all does not appear in the projections configuration file, any spec that does not satisfy any entry in the file will be linked into the root of the view as in a single-prefix view. Any entries that appear below the keyword all in the projections configuration file will not be used, as all specs will use the projection under all before reaching those entries.

Fine-Grain Control

The --exclude and --dependencies option flags allow for fine-grained control over which packages and dependencies do or not get included in a view. For example, suppose you are developing the appsy package. You wish to build against a view of all appsy dependencies, but not appsy itself:

$ spack view --dependencies yes --exclude appsy symlink /path/to/MYVIEW/ appsy

Alternately, you wish to create a view whose purpose is to provide binary executables to end users. You only need to include applications they might want, and not those applications' dependencies. In this case, you might use:

$ spack view --dependencies no symlink /path/to/MYVIEW/ cmake
Hybrid Filesystem Views

Although filesystem views are usually created by Spack, users are free to add to them by other means. For example, imagine a filesystem view, created by Spack, that looks something like:

/path/to/MYVIEW/bin/programA -> /path/to/spack/.../bin/programA
/path/to/MYVIEW/lib/libA.so -> /path/to/spack/.../lib/libA.so

Now, the user may add to this view by non-Spack means; for example, by running a classic install script. For example:

$ tar -xf B.tar.gz
$ cd B/
$ ./configure --prefix=/path/to/MYVIEW \
            --with-A=/path/to/MYVIEW
$ make && make install

The result is a hybrid view:

/path/to/MYVIEW/bin/programA -> /path/to/spack/.../bin/programA
/path/to/MYVIEW/bin/programB
/path/to/MYVIEW/lib/libA.so -> /path/to/spack/.../lib/libA.so
/path/to/MYVIEW/lib/libB.so

In this case, real files coexist, interleaved with the "view" symlinks. At any time one can delete /path/to/MYVIEW or use spack view to manage it surgically. None of this will affect the real Spack install area.

Global Activations

spack activate may be used as an alternative to loading Python (and similar systems) packages directly or creating a view. If extensions are globally activated, then spack load python will also load all the extensions activated for the given python. This reduces the need for users to load a large number of modules.

However, Spack global activations have two potential drawbacks:

  1. Activated packages that involve compiled C extensions may still need their dependencies to be loaded manually. For example, spack load openblas might be required to make py-numpy work.

  2. Global activations "break" a core feature of Spack, which is that multiple versions of a package can co-exist side-by-side. For example, suppose you wish to run a Python package in two different environments but the same basic Python --- one with py-numpy@1.7 and one with py-numpy@1.8. Spack extensions will not support this potential debugging use case.

Discussion: Running Binaries

Modules, extension packages and filesystem views are all ways to assemble sets of Spack packages into a useful environment. They are all semantically similar, in that conflicting installed packages cannot simultaneously be loaded, activated or included in a view.

With all of these approaches, there is no guarantee that the environment created will be consistent. It is possible, for example, to simultaneously load application A that uses OpenMPI and application B that uses MPICH. Both applications will run just fine in this inconsistent environment because they rely on RPATHs, not the environment, to find their dependencies.

In general, environments set up using modules vs. views will work similarly. Both can be used to set up ephemeral or long-lived testing/development environments. Operational differences between the two approaches can make one or the other preferable in certain environments:

  • Filesystem views do not require environment module infrastructure. Although Spack can install environment-modules, users might be hostile to its use. Filesystem views offer a good solution for sysadmins serving users who just "want all the stuff I need in one place" and don't want to hear about Spack.

  • Although modern build systems will find dependencies wherever they might be, some applications with hand-built make files expect their dependencies to be in one place. One common problem is makefiles that assume that netcdf and netcdf-fortran are installed in the same tree. Or, one might use an IDE that requires tedious configuration of dependency paths; and it's easier to automate that administration in a view-building script than in the IDE itself. For all these cases, a view will be preferable to other ways to assemble an environment.

  • On systems with I-node quotas, modules might be preferable to views and extension packages.

  • Views and activated extensions maintain state that is semantically equivalent to the information in a spack module tcl loads script. Administrators might find things easier to maintain without the added "heavyweight" state of a view.

Developing Software with Spack

For any project, one needs to assemble an environment of that application's dependencies. You might consider loading a series of modules or creating a filesystem view. This approach, while obvious, has some serious drawbacks:

  1. There is no guarantee that an environment created this way will be consistent. Your application could end up with dependency A expecting one version of MPI, and dependency B expecting another. The linker will not be happy...

  2. Suppose you need to debug a package deep within your software DAG. If you build that package with a manual environment, then it becomes difficult to have Spack auto-build things that depend on it. That could be a serious problem, depending on how deep the package in question is in your dependency DAG.

  3. At its core, Spack is a sophisticated concretization algorithm that matches up packages with appropriate dependencies and creates a consistent environment for the package it's building. Writing a list of spack load commands for your dependencies is at least as hard as writing the same list of depends_on() declarations in a Spack package. But it makes no use of Spack concretization and is more error-prone.

  4. Spack provides an automated, systematic way not just to find a packages's dependencies --- but also to build other packages on top. Any Spack package can become a dependency for another Spack package, offering a powerful vision of software re-use. If you build your package A outside of Spack, then your ability to use it as a building block for other packages in an automated way is diminished: other packages depending on package A will not be able to use Spack to fulfill that dependency.

  5. If you are reading this manual, you probably love Spack. You're probably going to write a Spack package for your software so prospective users can install it with the least amount of pain. Why should you go to additional work to find dependencies in your development environment? Shouldn't Spack be able to help you build your software based on the package you've already written?

In this section, we show how Spack can be used in the software development process to greatest effect, and how development packages can be seamlessly integrated into the Spack ecosystem. We will show how this process works by example, assuming the software you are creating is called mylib.

Write the CMake Build

For now, the techniques in this section only work for CMake-based projects, although they could be easily extended to other build systems in the future. We will therefore assume you are using CMake to build your project.

The CMakeLists.txt file should be written as normal. A few caveats:

  1. Your project should produce binaries with RPATHs. This will ensure that they work the same whether built manually or automatically by Spack. For example:

# enable @rpath in the install name for any shared library being built
# note: it is planned that a future version of CMake will enable this by default
set(CMAKE_MACOSX_RPATH 1)

# Always use full RPATH
# http://www.cmake.org/Wiki/CMake_RPATH_handling
# http://www.kitware.com/blog/home/post/510

# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  FALSE)

# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# the RPATH to be used when installing, but only if it's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF("${isSystemDir}" STREQUAL "-1")
  1. Spack provides a CMake variable called SPACK_TRANSITIVE_INCLUDE_PATH, which contains the include/ directory for all of your project's transitive dependencies. It can be useful if your project #include``s files from package B, which ``#include files from package C, but your project only lists project B as a dependency. This works in traditional single-tree build environments, in which B and C's include files live in the same place. In order to make it work with Spack as well, you must add the following to CMakeLists.txt. It will have no effect when building without Spack:

    # Include all the transitive dependencies determined by Spack.
    # If we're not running with Spack, this does nothing...
    include_directories($ENV{SPACK_TRANSITIVE_INCLUDE_PATH})
    

    注釈

    Note that this feature is controversial and could break with future versions of GNU ld. The best practice is to make sure anything you #include is listed as a dependency in your CMakeLists.txt (and Spack package).

Write the Spack Package

The Spack package also needs to be written, in tandem with setting up the build (for example, CMake). The most important part of this task is declaring dependencies. Here is an example of the Spack package for the mylib package (ellipses for brevity):

class Mylib(CMakePackage):
    """Misc. reusable utilities used by Myapp."""

    homepage = "https://github.com/citibeth/mylib"
    url = "https://github.com/citibeth/mylib/tarball/123"

    version('0.1.2', '3a6acd70085e25f81b63a7e96c504ef9')
    version('develop', git='https://github.com/citibeth/mylib.git',
        branch='develop')

    variant('everytrace', default=False,
            description='Report errors through Everytrace')
    ...

    extends('python')

    depends_on('eigen')
    depends_on('everytrace', when='+everytrace')
    depends_on('proj', when='+proj')
    ...
    depends_on('cmake', type='build')
    depends_on('doxygen', type='build')

    def cmake_args(self):
        spec = self.spec
        return [
            '-DUSE_EVERYTRACE=%s' % ('YES' if '+everytrace' in spec else 'NO'),
            '-DUSE_PROJ4=%s' % ('YES' if '+proj' in spec else 'NO'),
            ...
            '-DUSE_UDUNITS2=%s' % ('YES' if '+udunits2' in spec else 'NO'),
            '-DUSE_GTEST=%s' % ('YES' if '+googletest' in spec else 'NO')]

This is a standard Spack package that can be used to install mylib in a production environment. The list of dependencies in the Spack package will generally be a repeat of the list of CMake dependencies. This package also has some features that allow it to be used for development:

  1. It subclasses CMakePackage instead of Package. This eliminates the need to write an install() method, which is defined in the superclass. Instead, one just needs to write the configure_args() method. That method should return the arguments needed for the cmake command (beyond the standard CMake arguments, which Spack will include already). These arguments are typically used to turn features on/off in the build.

  2. It specifies a non-checksummed version develop. Running spack install mylib@develop the @develop version will install the latest version off the develop branch. This method of download is useful for the developer of a project while it is in active development; however, it should only be used by developers who control and trust the repository in question!

  3. The url, url_for_version() and homepage attributes are not used in development. Don't worry if you don't have any, or if they are behind a firewall.

Build with Spack

Now that you have a Spack package, you can use Spack to find its dependencies automatically. For example:

$ cd mylib
$ spack setup mylib@local

The result will be a file spconfig.py in the top-level mylib/ directory. It is a short script that calls CMake with the dependencies and options determined by Spack --- similar to what happens in spack install, but now written out in script form. From a developer's point of view, you can think of spconfig.py as a stand-in for the cmake command.

注釈

You can invent any "version" you like for the spack setup command.

注釈

Although spack setup does not build your package, it does create and install a module file, and mark in the database that your package has been installed. This can lead to errors, of course, if you don't subsequently install your package. Also... you will need to spack uninstall before you run spack setup again.

You can now build your project as usual with CMake:

$ mkdir build; cd build
$ ../spconfig.py ..   # Instead of cmake ..
$ make
$ make install

Once your make install command is complete, your package will be installed, just as if you'd run spack install. Except you can now edit, re-build and re-install as often as needed, without checking into Git or downloading tarballs.

注釈

The build you get this way will be almost the same as the build from spack install. The only difference is, you will not be using Spack's compiler wrappers. This difference has not caused problems in our experience, as long as your project sets RPATHs as shown above. You DO use RPATHs, right?

Build Other Software

Now that you've built mylib with Spack, you might want to build another package that depends on it --- for example, myapp. This is accomplished easily enough:

$ spack install myapp ^mylib@local

Note that auto-built software has now been installed on top of manually-built software, without breaking Spack's "web." This property is useful if you need to debug a package deep in the dependency hierarchy of your application. It is a big advantage of using spack setup to build your package's environment.

If you feel your software is stable, you might wish to install it with spack install and skip the source directory. You can just use, for example:

$ spack install mylib@develop

Release Your Software

You are now ready to release your software as a tarball with a numbered version, and a Spack package that can build it. If you're hosted on GitHub, this process will be a bit easier.

  1. Put tag(s) on the version(s) in your GitHub repo you want to be release versions. For example, a tag v0.1.0 for version 0.1.0.

  2. Set the url in your package.py to download a tarball for the appropriate version. GitHub will give you a tarball for any commit in the repo, if you tickle it the right way. For example:

    url = 'https://github.com/citibeth/mylib/tarball/v0.1.2'
    
  3. Use Spack to determine your version's hash, and cut'n'paste it into your package.py:

    $ spack checksum mylib 0.1.2
    ==> Found 1 versions of mylib
      0.1.2     https://github.com/citibeth/mylib/tarball/v0.1.2
    
    How many would you like to checksum? (default is 5, q to abort)
    ==> Downloading...
    ==> Trying to fetch from https://github.com/citibeth/mylib/tarball/v0.1.2
    ######################################################################## 100.0%
    ==> Checksummed new versions of mylib:
          version('0.1.2', '3a6acd70085e25f81b63a7e96c504ef9')
    
  4. You should now be able to install released version 0.1.2 of your package with:

    $ spack install mylib@0.1.2
    
  5. There is no need to remove the develop version from your package. Spack concretization will always prefer numbered version to non-numeric versions. Users will only get it if they ask for it.

Distribute Your Software

Once you've released your software, other people will want to build it; and you will need to tell them how. In the past, that has meant a few paragraphs of prose explaining which dependencies to install. But now you use Spack, and those instructions are written in executable Python code. But your software has many dependencies, and you know Spack is the best way to install it:

  1. First, you will want to fork Spack's develop branch. Your aim is to provide a stable version of Spack that you KNOW will install your software. If you make changes to Spack in the process, you will want to submit pull requests to Spack core.

  2. Add your software's package.py to that fork. You should submit a pull request for this as well, unless you don't want the public to know about your software.

  3. Prepare instructions that read approximately as follows:

    1. Download Spack from your forked repo.

    2. Install Spack; see はじめに.

    3. Set up an appropriate packages.yaml file. You should tell your users to include in this file whatever versions/variants are needed to make your software work correctly (assuming those are not already in your packages.yaml).

    4. Run spack install mylib.

    5. Run this script to generate the module load commands or filesystem view needed to use this software.

  4. Be aware that your users might encounter unexpected bootstrapping issues on their machines, especially if they are running on older systems. The はじめに section should cover this, but there could always be issues.

Other Build Systems

spack setup currently only supports CMake-based builds, in packages that subclass CMakePackage. The intent is that this mechanism should support a wider range of build systems; for example, GNU Autotools. Someone well-versed in Autotools is needed to develop this patch and test it out.

Python Distutils is another popular build system that should get spack setup support. For non-compiled languages like Python, spack diy may be used. Even better is to put the source directory directly in the user's PYTHONPATH. Then, edits in source files are immediately available to run without any install process at all!

Conclusion

The spack setup development workflow provides better automation, flexibility and safety than workflows relying on environment modules or filesystem views. However, it has some drawbacks:

  1. It currently works only with projects that use the CMake build system. Support for other build systems is not hard to build, but will require a small amount of effort for each build system to be supported. It might not work well with some IDEs.

  2. It only works with packages that sub-class StagedPackage. Currently, most Spack packages do not. Converting them is not hard; but must be done on a package-by-package basis.

  3. It requires that users are comfortable with Spack, as they integrate Spack explicitly in their workflow. Not all users are willing to do this.

Using Spack on Travis-CI

Spack can be deployed as a provider for userland software in Travis-CI.

A starting-point for a .travis.yml file can look as follows. It uses caching for already built environments, so make sure to clean the Travis cache if you run into problems.

The main points that are implemented below:

  1. Travis is detected as having up to 34 cores available, but only 2 are actually allocated for the user. We limit the parallelism of the spack builds in the config. (The Travis yaml parser is a bit buggy on the echo command.)

  2. Builds over 10 minutes need to be prefixed with travis_wait. Alternatively, generate output once with spack install -v.

  3. Travis builds are non-interactive. This prevents using bash aliases and functions for modules. We fix that by sourcing /etc/profile first (or running everything in a subshell with bash -l -c '...').

language: cpp
sudo: false
dist: trusty

cache:
  apt: true
  directories:
    - $HOME/.cache

addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-4.9
      - environment-modules

env:
  global:
    - SPACK_ROOT: $HOME/.cache/spack
    - PATH: $PATH:$HOME/.cache/spack/bin

before_install:
  - export CXX=g++-4.9
  - export CC=gcc-4.9
  - export FC=gfortran-4.9
  - export CXXFLAGS="-std=c++11"

install:
  - if ! which spack >/dev/null; then
      mkdir -p $SPACK_ROOT &&
      git clone --depth 50 https://github.com/spack/spack.git $SPACK_ROOT &&
      echo -e "config:""\n  build_jobs:"" 2" > $SPACK_ROOT/etc/spack/config.yaml;
    fi
  - travis_wait spack install cmake@3.7.2~openssl~ncurses
  - travis_wait spack install boost@1.62.0~graph~iostream~locale~log~wave
  - spack clean -a
  - source /etc/profile &&
    source $SPACK_ROOT/share/spack/setup-env.sh
  - spack load cmake
  - spack load boost

script:
  - mkdir -p $HOME/build
  - cd $HOME/build
  - cmake $TRAVIS_BUILD_DIR
  - make -j 2
  - make test

Using Spack to Create Docker Images

Spack can be the ideal tool to set up images for Docker (and Singularity).

An example Dockerfile is given below, downloading the latest spack version.

The following functionality is prepared:

  1. Base image: the example starts from a minimal ubuntu.

  2. Installing as root: docker images are usually set up as root. Since some autotools scripts might complain about this being unsafe, we set FORCE_UNSAFE_CONFIGURE=1 to avoid configure errors.

  3. Pre-install the spack dependencies, including modules from the packages. This avoids needing to build those from scratch via spack bootstrap. Package installs are followed by a clean-up of the system package index, to avoid outdated information and it saves space.

  4. Install spack in /usr/local. Add setup-env.sh to profile scripts, so commands in login shells can use the whole spack functionality, including modules.

  5. Install an example package (tar). As with system package managers above, spack install commands should be concatenated with a && spack clean -a in order to keep image sizes small.

  6. Add a startup hook to an interactive login shell so spack modules will be usable.

In order to build and run the image, execute:

docker build -t spack .
docker run -it spack
FROM       ubuntu:16.04
MAINTAINER Your Name <someone@example.com>

# general environment for docker
ENV        DEBIAN_FRONTEND=noninteractive \
           SPACK_ROOT=/usr/local \
           FORCE_UNSAFE_CONFIGURE=1

# install minimal spack depedencies
RUN        apt-get update \
           && apt-get install -y --no-install-recommends \
              autoconf \
              build-essential \
              ca-certificates \
              coreutils \
              curl \
              environment-modules \
              git \
              python \
              unzip \
              vim \
           && rm -rf /var/lib/apt/lists/*

# load spack environment on login
RUN        echo "source $SPACK_ROOT/share/spack/setup-env.sh" \
           > /etc/profile.d/spack.sh

# spack settings
# note: if you wish to change default settings, add files alongside
#       the Dockerfile with your desired settings. Then uncomment this line
#COPY       packages.yaml modules.yaml $SPACK_ROOT/etc/spack/

# install spack
RUN        curl -s -L https://api.github.com/repos/spack/spack/tarball \
           | tar xzC $SPACK_ROOT --strip 1
# note: at this point one could also run ``spack bootstrap`` to avoid
#       parts of the long apt-get install list above

# install software
RUN        spack install tar \
           && spack clean -a

# need the modules already during image build?
#RUN        /bin/bash -l -c ' \
#                spack load tar \
#                && which tar'

# image run hook: the -l will make sure /etc/profile environments are loaded
CMD        /bin/bash -l

Best Practices

MPI

Due to the dependency on Fortran for OpenMPI, which is the spack default implementation, consider adding gfortran to the apt-get install list.

Recent versions of OpenMPI will require you to pass --allow-run-as-root to your mpirun calls if started as root user inside Docker.

For execution on HPC clusters, it can be helpful to import the docker image into Singularity in order to start a program with an external MPI. Otherwise, also add openssh-server to the apt-get install list.

CUDA

Starting from CUDA 9.0, Nvidia provides minimal CUDA images based on Ubuntu. Please see their instructions. Avoid double-installing CUDA by adding, e.g.

packages:
  cuda:
    paths:
      cuda@9.0.176%gcc@5.4.0 arch=linux-ubuntu16-x86_64: /usr/local/cuda
    buildable: False

to your packages.yaml. Then COPY in that file into the image as in the example above.

Users will either need nvidia-docker or e.g. Singularity to execute device kernels.

Singularity

Importing and running the image created above into Singularity works like a charm. Just use the docker bootstraping mechanism:

Bootstrap: docker
From: registry/user/image:tag

%runscript
exec /bin/bash -l
Docker for Development

For examples of how we use docker in development, see Docker for Developers.

Docker on Windows and OSX

On Mac OS and Windows, docker runs on a hypervisor that is not allocated much memory by default, and some spack packages may fail to build due to lack of memory. To work around this issue, consider configuring your docker installation to use more of your host memory. In some cases, you can also ease the memory pressure on parallel builds by limiting the parallelism in your config.yaml.

config:
  build_jobs: 2

Upstream Bug Fixes

It is not uncommon to discover a bug in an upstream project while trying to build with Spack. Typically, the bug is in a package that serves a dependency to something else. This section describes procedure to work around and ultimately resolve these bugs, while not delaying the Spack user's main goal.

Buggy New Version

Sometimes, the old version of a package works fine, but a new version is buggy. For example, it was once found that Adios did not build with hdf5@1.10. If the old version of hdf5 will work with adios, the suggested procedure is:

  1. Revert adios to the old version of hdf5. Put in its adios/package.py:

    # Adios does not build with HDF5 1.10
    # See: https://github.com/spack/spack/issues/1683
    depends_on('hdf5@:1.9')
    
  2. Determine whether the problem is with hdf5 or adios, and report the problem to the appropriate upstream project. In this case, the problem was with adios.

  3. Once a new version of adios comes out with the bugfix, modify adios/package.py to reflect it:

    # Adios up to v1.10.0 does not build with HDF5 1.10
    # See: https://github.com/spack/spack/issues/1683
    depends_on('hdf5@:1.9', when='@:1.10.0')
    depends_on('hdf5', when='@1.10.1:')
    

No Version Works

Sometimes, no existing versions of a dependency work for a build. This typically happens when developing a new project: only then does the developer notice that existing versions of a dependency are all buggy, or the non-buggy versions are all missing a critical feature.

In the long run, the upstream project will hopefully fix the bug and release a new version. But that could take a while, even if a bugfix has already been pushed to the project's repository. In the meantime, the Spack user needs things to work.

The solution is to create an unofficial Spack release of the project, as soon as the bug is fixed in some repository. A study of the Git history of py-proj/package.py is instructive here:

  1. On April 1, an initial bugfix was identified for the PyProj project and a pull request submitted to PyProj. Because the upstream authors had not yet fixed the bug, the py-proj Spack package downloads from a forked repository, set up by the package's author. A non-numeric version number is used to make it easy to upgrade the package without recomputing checksums; however, this is an untrusted download method and should not be distributed. The package author has now become, temporarily, a maintainer of the upstream project:

    # We need the benefits of this PR
    # https://github.com/jswhit/pyproj/pull/54
    version('citibeth-latlong2',
        git='https://github.com/citibeth/pyproj.git',
        branch='latlong2')
    
  2. By May 14, the upstream project had accepted a pull request with the required bugfix. At this point, the forked repository was deleted. However, the upstream project still had not released a new version with a bugfix. Therefore, a Spack-only release was created by specifying the desired hash in the main project repository. The version number @1.9.5.1.1 was chosen for this "release" because it's a descendent of the officially released version @1.9.5.1. This is a trusted download method, and can be released to the Spack community:

    # This is not a tagged release of pyproj.
    # The changes in this "version" fix some bugs, especially with Python3 use.
    version('1.9.5.1.1', 'd035e4bc704d136db79b43ab371b27d2',
        url='https://www.github.com/jswhit/pyproj/tarball/0be612cc9f972e38b50a90c946a9b353e2ab140f')
    

    注釈

    It would have been simpler to use Spack's Git download method, which is also a trusted download in this case:

    # This is not a tagged release of pyproj.
    # The changes in this "version" fix some bugs, especially with Python3 use.
    version('1.9.5.1.1',
         git='https://github.com/jswhit/pyproj.git',
         commit='0be612cc9f972e38b50a90c946a9b353e2ab140f')
    

    注釈

    In this case, the upstream project fixed the bug in its repository in a relatively timely manner. If that had not been the case, the numbered version in this step could have been released from the forked repository.

  3. The author of the Spack package has now become an unofficial release engineer for the upstream project. Depending on the situation, it may be advisable to put preferred=True on the latest officially released version.

  4. As of August 31, the upstream project still had not made a new release with the bugfix. In the meantime, Spack-built py-proj provides the bugfix needed by packages depending on it. As long as this works, there is no particular need for the upstream project to make a new official release.

  5. If the upstream project releases a new official version with the bugfix, then the unofficial version() line should be removed from the Spack package.

Patches

Spack's source patching mechanism provides another way to fix bugs in upstream projects. This has advantages and disadvantages compared to the procedures above.

Advantages:

  1. It can fix bugs in existing released versions, and (probably) future releases as well.

  2. It is lightweight, does not require a new fork to be set up.

Disadvantages:

  1. It is harder to develop and debug a patch, vs. a branch in a repository. The user loses the automation provided by version control systems.

  2. Although patches of a few lines work OK, large patch files can be hard to create and maintain.

チュートリアル: Spack 101

This is a full-day introduction to Spack with lectures and live demos. It was presented as a tutorial for staff at the RIKEN Center for Computational Science (R-CCS). You can use these materials to teach a course on Spack at your own site, or you can just skip ahead and read the live demo scripts to see how Spack is used in practice.

Slides

Slide Preview

Download Slides.

Full citation: Todd Gamblin, Gregory Becker, and Peter Scheibel. Managing HPC Software Complexity with Spack. Tutorial presented at RIKEN Center for Computational Science. April 23, 2019. Kobe, Japan.

Live Demos

We provide scripts that take you step-by-step through basic Spack tasks. They correspond to sections in the slides above. You can use one of the following methods to run through the scripts:

  1. We provide the spack/tutorial container image on Docker Hub that you can use to do the tutorial on your local machine. You can invoke docker run -it spack/tutorial to start using the container.

  2. When we host the tutorial, we also provision VM instances in AWS, so that users who are unfamiliar with Docker can simply log into a VPM to do the demo exercises.

You should now be ready to run through our demo scripts:

Full contents:

Basic Installation Tutorial

This tutorial will guide you through the process of installing software using Spack. We will first cover the spack install command, focusing on the power of the spec syntax and the flexibility it gives to users. We will also cover the spack find command for viewing installed packages and the spack uninstall command. Finally, we will touch on how Spack manages compilers, especially as it relates to using Spack-built compilers within Spack. We will include full output from all of the commands demonstrated, although we will frequently call attention to only small portions of that output (or merely to the fact that it succeeded). The provided output is all from an AWS instance running Ubuntu 16.04

Installing Spack

Spack works out of the box. Simply clone spack and get going. We will clone Spack and immediately checkout the most recent release, v0.12.

$ git clone https://github.com/spack/spack
git clone https://github.com/spack/spack
Cloning into 'spack'...
remote: Enumerating objects: 68, done.
remote: Counting objects: 100% (68/68), done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 135389 (delta 40), reused 16 (delta 9), pack-reused 135321
Receiving objects: 100% (135389/135389), 47.31 MiB | 1.01 MiB/s, done.
Resolving deltas: 100% (64414/64414), done.
Checking connectivity... done.
$ cd spack
$ git checkout releases/v0.12
Branch releases/v0.12 set up to track remote branch releases/v0.12 from origin.
Switched to a new branch 'releases/v0.12'

Next add Spack to your path. Spack has some nice command line integration tools, so instead of simply appending to your PATH variable, source the spack setup script. Then add Spack to your path.

$ . share/spack/setup-env.sh

You're good to go!

What is in Spack?

The spack list command shows available packages.

$ spack list
==> 2907 packages.
abinit                           libgpuarray                            py-espresso                     r-mlrmbo
abyss                            libgridxc                              py-espressopp                   r-mmwrweek
accfft                           libgtextutils                          py-et-xmlfile                   r-mnormt
...

The spack list command can also take a query string. Spack automatically adds wildcards to both ends of the string. For example, we can view all available python packages.

$ spack list py-
==> 479 packages.
lumpy-sv                               py-funcsigs          py-numpydoc         py-utililib
perl-file-copy-recursive               py-functools32       py-olefile          py-pywavelets
py-3to2                                py-future            py-ont-fast5-api    py-pyyaml
...

Installing Packages

Installing a package with Spack is very simple. To install a piece of software, simply type spack install <package_name>.

$ spack install zlib
==> Installing zlib
==> Searching for binary cache of zlib
==> Warning: No Spack mirrors are currently configured
==> No binary for zlib found: installing from source
==> Fetching http://zlib.net/fossils/zlib-1.2.11.tar.gz
######################################################################## 100.0%
==> Staging archive: /home/spack1/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb/zlib-1.2.11.tar.gz
==> Created stage in /home/spack1/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> No patches needed for zlib
==> Building zlib [Package]
==> Executing phase: 'install'
==> Successfully installed zlib
  Fetch: 3.27s.  Build: 2.18s.  Total: 5.44s.
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb

Spack can install software either from source or from a binary cache. Packages in the binary cache are signed with GPG for security. For the tutorial we have prepared a binary cache so you don't have to wait on slow compilation from source. To be able to install from the binary cache, we will need to configure Spack with the location of the binary cache and trust the GPG key that the binary cache was signed with.

$ spack mirror add tutorial /mirror
$ spack gpg trust /mirror/public.key
gpg: keybox '/home/spack1/spack/opt/spack/gpg/pubring.kbx' created
gpg: /home/spack1/spack/opt/spack/gpg/trustdb.gpg: trustdb created
gpg: key 3B7C69B2: public key "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" imported
gpg: Total number processed: 1
gpg:               imported: 1

You'll learn more about configuring Spack later in the tutorial, but for now you will be able to install the rest of the packages in the tutorial from a binary cache using the same spack install command. By default this will install the binary cached version if it exists and fall back on installing from source.

Spack's spec syntax is the interface by which we can request specific configurations of the package. The % sigil is used to specify compilers.

$ spack install zlib %clang
==> Installing zlib
==> Searching for binary cache of zlib
==> Finding buildcaches in /mirror/build_cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64-gcc-7.2.0-texinfo-6.5-cuqnfgfhhmudqp5f7upmld6ax7pratzw.spec.yaml
######################################################################## 100.0%
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64-gcc-4.7-zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r.spec.yaml
######################################################################## 100.0%
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-dyninst-9.3.2-bu6s2jzievsjkwtcnrtimc5b625j5omf.spec.yaml
######################################################################## 100.0%
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64-gcc-7.2.0-openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4.spec.yaml
...
==> Installing zlib from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:08:01 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed zlib from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul

Note that this installation is located separately from the previous one. We will discuss this in more detail later, but this is part of what allows Spack to support arbitrarily versioned software.

You can check for particular versions before requesting them. We will use the spack versions command to see the available versions, and then install a different version of zlib.

$ spack versions zlib
==> Safe versions (already checksummed):
  1.2.11  1.2.8  1.2.3
==> Remote versions (not yet checksummed):
  1.2.10   1.2.7    1.2.5.1  1.2.4.2  1.2.3.7
  ...

The @ sigil is used to specify versions, both of packages and of compilers.

$ spack install zlib@1.2.8
==> Installing zlib
==> Searching for binary cache of zlib
==> Finding buildcaches in /mirror/build_cache
==> Installing zlib from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:30 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed zlib from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc

$ spack install zlib %gcc@4.7
==> Installing zlib
==> Searching for binary cache of zlib
==> Finding buildcaches in /mirror/build_cache
==> Installing zlib from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-4.7/zlib-1.2.11/linux-ubuntu16.04-x86_64-gcc-4.7-zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 04:55:30 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed zlib from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-4.7/zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r

The spec syntax also includes compiler flags. Spack accepts cppflags, cflags, cxxflags, fflags, ldflags, and ldlibs parameters. The values of these fields must be quoted on the command line if they include spaces. These values are injected into the compile line automatically by the Spack compiler wrappers.

$ spack install zlib @1.2.8 cppflags=-O3
==> Installing zlib
==> Searching for binary cache of zlib
==> Finding buildcaches in /mirror/build_cache
==> Installing zlib from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:31:54 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed zlib from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu

The spack find command is used to query installed packages. Note that some packages appear identical with the default output. The -l flag shows the hash of each package, and the -f flag shows any non-empty compiler flags of those packages.

$ spack find
==> 5 installed packages.
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
zlib@1.2.8  zlib@1.2.8  zlib@1.2.11


$ spack find -lf
==> 5 installed packages.
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
4pt75q7 zlib@1.2.11%clang


-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
bq2wtdx zlib@1.2.11%gcc


-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
bkyl5bh zlib@1.2.8%gcc

64mns5m zlib@1.2.8%gcc cppflags="-O3"

5nus6kn zlib@1.2.11%gcc

Spack generates a hash for each spec. This hash is a function of the full provenance of the package, so any change to the spec affects the hash. Spack uses this value to compare specs and to generate unique installation directories for every combinatorial version. As we move into more complicated packages with software dependencies, we can see that Spack reuses existing packages to satisfy a dependency only when the existing package's hash matches the desired spec.

$ spack install tcl
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> Installing tcl
==> Searching for binary cache of tcl
==> Finding buildcaches in /mirror/build_cache
==> Installing tcl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-tcl-8.6.8-qhwyccywhx2i6s7ob2gvjrjtj3rnfuqt.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:15 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed tcl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-qhwyccywhx2i6s7ob2gvjrjtj3rnfuqt

Dependencies can be explicitly requested using the ^ sigil. Note that the spec syntax is recursive. Anything we could specify about the top-level package, we can also specify about a dependency using ^.

$ spack install tcl ^zlib @1.2.8 %clang
==> Installing zlib
==> Searching for binary cache of zlib
==> Finding buildcaches in /mirror/build_cache
==> Installing zlib from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.8/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.8-i426yu3o6lyau5fv5ljwsajfkqxj5rl5.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:09:01 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed zlib from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.8-i426yu3o6lyau5fv5ljwsajfkqxj5rl5
==> Installing tcl
==> Searching for binary cache of tcl
==> Installing tcl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/tcl-8.6.8/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-tcl-8.6.8-6wc66etr7y6hgibp2derrdkf763exwvc.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:10:21 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed tcl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/tcl-8.6.8-6wc66etr7y6hgibp2derrdkf763exwvc

Packages can also be referred to from the command line by their package hash. Using the spack find -lf command earlier we saw that the hash of our optimized installation of zlib (cppflags="-O3") began with 64mns5m. We can now explicitly build with that package without typing the entire spec, by using the / sigil to refer to it by hash. As with other tools like git, you do not need to specify an entire hash on the command line. You can specify just enough digits to identify a hash uniquely. If a hash prefix is ambiguous (i.e., two or more installed packages share the prefix) then spack will report an error.

$ spack install tcl ^/64mn
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu
==> Installing tcl
==> Searching for binary cache of tcl
==> Finding buildcaches in /mirror/build_cache
==> Installing tcl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-tcl-8.6.8-am4pbatrtga3etyusg2akmsvrswwxno2.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:11:53 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed tcl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-am4pbatrtga3etyusg2akmsvrswwxno2

The spack find command can also take a -d flag, which can show dependency information. Note that each package has a top-level entry, even if it also appears as a dependency.

$ spack find -ldf
==> 9 installed packages
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
6wc66et    tcl@8.6.8%clang
i426yu3        ^zlib@1.2.8%clang

i426yu3    zlib@1.2.8%clang

4pt75q7    zlib@1.2.11%clang


-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
bq2wtdx    zlib@1.2.11%gcc


-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
am4pbat    tcl@8.6.8%gcc
64mns5m        ^zlib@1.2.8%gcc cppflags="-O3"

qhwyccy    tcl@8.6.8%gcc
5nus6kn        ^zlib@1.2.11%gcc

bkyl5bh    zlib@1.2.8%gcc

64mns5m    zlib@1.2.8%gcc cppflags="-O3"

5nus6kn    zlib@1.2.11%gcc

Let's move on to slightly more complicated packages. HDF5 is a good example of a more complicated package, with an MPI dependency. If we install it "out of the box," it will build with openmpi.

$ spack install hdf5
==> Installing libsigsegv
==> Searching for binary cache of libsigsegv
==> Finding buildcaches in /mirror/build_cache
==> Installing libsigsegv from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11/linux-ubuntu16.04-x86_64-gcc-5.4.0-libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:08:01 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed libsigsegv from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> Installing m4
==> Searching for binary cache of m4
==> Installing m4 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18/linux-ubuntu16.04-x86_64-gcc-5.4.0-m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:24:11 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed m4 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel
==> Installing libtool
==> Searching for binary cache of libtool
==> Installing libtool from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:12:47 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed libtool from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
==> Installing pkgconf
==> Searching for binary cache of pkgconf
==> Installing pkgconf from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:00:47 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed pkgconf from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v
==> Installing util-macros
==> Searching for binary cache of util-macros
==> Installing util-macros from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:31:54 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed util-macros from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr
==> Installing libpciaccess
==> Searching for binary cache of libpciaccess
==> Installing libpciaccess from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5/linux-ubuntu16.04-x86_64-gcc-5.4.0-libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:09:34 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed libpciaccess from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc
==> Installing xz
==> Searching for binary cache of xz
==> Installing xz from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-xz-5.2.4-teneqii2xv5u6zl5r6qi3pwurc6pmypz.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:05:03 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed xz from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.4-teneqii2xv5u6zl5r6qi3pwurc6pmypz
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> Installing libxml2
==> Searching for binary cache of libxml2
==> Installing libxml2 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-libxml2-2.9.8-wpexsphdmfayxqxd4up5vgwuqgu5woo7.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 04:56:04 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed libxml2 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.8-wpexsphdmfayxqxd4up5vgwuqgu5woo7
==> Installing ncurses
==> Searching for binary cache of ncurses
==> Installing ncurses from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:04:49 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed ncurses from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh
==> Installing readline
==> Searching for binary cache of readline
==> Installing readline from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:04:56 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed readline from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi
==> Installing gdbm
==> Searching for binary cache of gdbm
==> Installing gdbm from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:34 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed gdbm from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes
==> Installing perl
==> Searching for binary cache of perl
==> Installing perl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:12:45 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed perl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo
==> Installing autoconf
==> Searching for binary cache of autoconf
==> Installing autoconf from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69/linux-ubuntu16.04-x86_64-gcc-5.4.0-autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:24:03 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed autoconf from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q
==> Installing automake
==> Searching for binary cache of automake
==> Installing automake from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:12:03 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed automake from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy
==> Installing numactl
==> Searching for binary cache of numactl
==> Installing numactl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/numactl-2.0.11/linux-ubuntu16.04-x86_64-gcc-5.4.0-numactl-2.0.11-ft463odrombnxlc3qew4omckhlq7tqgc.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:30:34 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed numactl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/numactl-2.0.11-ft463odrombnxlc3qew4omckhlq7tqgc
==> Installing hwloc
==> Searching for binary cache of hwloc
==> Installing hwloc from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.9/linux-ubuntu16.04-x86_64-gcc-5.4.0-hwloc-1.11.9-43tkw5mt6huhv37vqnybqgxtkodbsava.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:08:00 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hwloc from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.9-43tkw5mt6huhv37vqnybqgxtkodbsava
==> Installing openmpi
==> Searching for binary cache of openmpi
==> Installing openmpi from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.1.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:01:54 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed openmpi from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx
==> Installing hdf5
==> Searching for binary cache of hdf5
==> Installing hdf5 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.4-ozyvmhzdew66byarohm4p36ep7wtcuiw.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:23:04 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hdf5 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-ozyvmhzdew66byarohm4p36ep7wtcuiw

Spack packages can also have build options, called variants. Boolean variants can be specified using the + and ~ or - sigils. There are two sigils for False to avoid conflicts with shell parsing in different situations. Variants (boolean or otherwise) can also be specified using the same syntax as compiler flags. Here we can install HDF5 without MPI support.

$ spack install hdf5~mpi
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> Installing hdf5
==> Searching for binary cache of hdf5
==> Finding buildcaches in /mirror/build_cache
==> Installing hdf5 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.4-5vcv5r67vpjzenq4apyebshclelnzuja.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:23:24 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hdf5 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-5vcv5r67vpjzenq4apyebshclelnzuja

We might also want to install HDF5 with a different MPI implementation. While MPI is not a package itself, packages can depend on abstract interfaces like MPI. Spack handles these through "virtual dependencies." A package, such as HDF5, can depend on the MPI interface. Other packages (openmpi, mpich, mvapich, etc.) provide the MPI interface. Any of these providers can be requested for an MPI dependency. For example, we can build HDF5 with MPI support provided by mpich by specifying a dependency on mpich. Spack also supports versioning of virtual dependencies. A package can depend on the MPI interface at version 3, and provider packages specify what version of the interface they provide. The partial spec ^mpi@3 can be safisfied by any of several providers.

$ spack install hdf5+hl+mpi ^mpich
==> libsigsegv is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel
==> pkgconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v
==> ncurses is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh
==> readline is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi
==> gdbm is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes
==> perl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo
==> autoconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q
==> automake is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy
==> libtool is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
==> Installing texinfo
==> Searching for binary cache of texinfo
==> Finding buildcaches in /mirror/build_cache
==> Installing texinfo from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/texinfo-6.5/linux-ubuntu16.04-x86_64-gcc-5.4.0-texinfo-6.5-zs7a2pcwhq6ho2cj2x26uxfktwkpyucn.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:29 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed texinfo from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/texinfo-6.5-zs7a2pcwhq6ho2cj2x26uxfktwkpyucn
==> Installing findutils
==> Searching for binary cache of findutils
==> Installing findutils from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/findutils-4.6.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-findutils-4.6.0-d4iajxsopzrlcjtasahxqeyjkjv5jx4v.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:17 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed findutils from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/findutils-4.6.0-d4iajxsopzrlcjtasahxqeyjkjv5jx4v
==> Installing mpich
==> Searching for binary cache of mpich
==> Installing mpich from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpich-3.2.1-p3f7p2r5ntrynqibosglxvhwyztiwqs5.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:23:57 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed mpich from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2.1-p3f7p2r5ntrynqibosglxvhwyztiwqs5
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> Installing hdf5
==> Searching for binary cache of hdf5
==> Installing hdf5 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.4-xxd7syhgej6onpyfyewxqcqe7ltkt7ob.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:32 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hdf5 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-xxd7syhgej6onpyfyewxqcqe7ltkt7ob

We'll do a quick check in on what we have installed so far.

$ spack find -ldf
==> 32 installed packages
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
6wc66et    tcl@8.6.8%clang
i426yu3        ^zlib@1.2.8%clang

i426yu3    zlib@1.2.8%clang

4pt75q7    zlib@1.2.11%clang


-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
bq2wtdx    zlib@1.2.11%gcc


-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
3sx2gxe    autoconf@2.69%gcc
suf5jtc        ^m4@1.4.18%gcc
fypapcp            ^libsigsegv@2.11%gcc
ic2kyoa        ^perl@5.26.2%gcc
q4fpyuo            ^gdbm@1.14.1%gcc
nxhwrg7                ^readline@7.0%gcc
3o765ou                    ^ncurses@6.1%gcc

rymw7im    automake@1.16.1%gcc
ic2kyoa        ^perl@5.26.2%gcc
q4fpyuo            ^gdbm@1.14.1%gcc
nxhwrg7                ^readline@7.0%gcc
3o765ou                    ^ncurses@6.1%gcc

d4iajxs    findutils@4.6.0%gcc

q4fpyuo    gdbm@1.14.1%gcc
nxhwrg7        ^readline@7.0%gcc
3o765ou            ^ncurses@6.1%gcc

5vcv5r6    hdf5@1.10.4%gcc
5nus6kn        ^zlib@1.2.11%gcc

ozyvmhz    hdf5@1.10.4%gcc
3njc4q5        ^openmpi@3.1.3%gcc
43tkw5m            ^hwloc@1.11.9%gcc
5urc6tc                ^libpciaccess@0.13.5%gcc
wpexsph                ^libxml2@2.9.8%gcc
teneqii                    ^xz@5.2.4%gcc
5nus6kn                    ^zlib@1.2.11%gcc
ft463od                ^numactl@2.0.11%gcc

xxd7syh    hdf5@1.10.4%gcc
p3f7p2r        ^mpich@3.2.1%gcc
5nus6kn        ^zlib@1.2.11%gcc

43tkw5m    hwloc@1.11.9%gcc
5urc6tc        ^libpciaccess@0.13.5%gcc
wpexsph        ^libxml2@2.9.8%gcc
teneqii            ^xz@5.2.4%gcc
5nus6kn            ^zlib@1.2.11%gcc
ft463od        ^numactl@2.0.11%gcc

5urc6tc    libpciaccess@0.13.5%gcc

fypapcp    libsigsegv@2.11%gcc

o2pfwjf    libtool@2.4.6%gcc

wpexsph    libxml2@2.9.8%gcc
teneqii        ^xz@5.2.4%gcc
5nus6kn        ^zlib@1.2.11%gcc

suf5jtc    m4@1.4.18%gcc
fypapcp        ^libsigsegv@2.11%gcc

p3f7p2r    mpich@3.2.1%gcc

3o765ou    ncurses@6.1%gcc

ft463od    numactl@2.0.11%gcc

3njc4q5    openmpi@3.1.3%gcc
43tkw5m        ^hwloc@1.11.9%gcc
5urc6tc            ^libpciaccess@0.13.5%gcc
wpexsph            ^libxml2@2.9.8%gcc
teneqii                ^xz@5.2.4%gcc
5nus6kn                ^zlib@1.2.11%gcc
ft463od            ^numactl@2.0.11%gcc

ic2kyoa    perl@5.26.2%gcc
q4fpyuo        ^gdbm@1.14.1%gcc
nxhwrg7            ^readline@7.0%gcc
3o765ou                ^ncurses@6.1%gcc

fovrh7a    pkgconf@1.4.2%gcc

nxhwrg7    readline@7.0%gcc
3o765ou        ^ncurses@6.1%gcc

am4pbat    tcl@8.6.8%gcc
64mns5m        ^zlib@1.2.8%gcc cppflags="-O3"

qhwyccy    tcl@8.6.8%gcc
5nus6kn        ^zlib@1.2.11%gcc

zs7a2pc    texinfo@6.5%gcc
ic2kyoa        ^perl@5.26.2%gcc
q4fpyuo            ^gdbm@1.14.1%gcc
nxhwrg7                ^readline@7.0%gcc
3o765ou                    ^ncurses@6.1%gcc

milz7fm    util-macros@1.19.1%gcc

teneqii    xz@5.2.4%gcc

bkyl5bh    zlib@1.2.8%gcc

64mns5m    zlib@1.2.8%gcc cppflags="-O3"

5nus6kn    zlib@1.2.11%gcc

Spack models the dependencies of packages as a directed acyclic graph (DAG). The spack find -d command shows the tree representation of that graph. We can also use the spack graph command to view the entire DAG as a graph.

$ spack graph hdf5+hl+mpi ^mpich
o  hdf5
|\
o |  zlib
 /
o  mpich
o  findutils
|\
| |\
| | |\
| | | |\
o | | | |  texinfo
| | | o |  automake
| |_|/| |
|/| | | |
| | | |/
| | | o  autoconf
| |_|/|
|/| |/
| |/|
o | |  perl
o | |  gdbm
o | |  readline
o | |  ncurses
o | |  pkgconf
 / /
| o  libtool
|/
o  m4
o  libsigsegv

You may also have noticed that there are some packages shown in the spack find -d output that we didn't install explicitly. These are dependencies that were installed implicitly. A few packages installed implicitly are not shown as dependencies in the spack find -d output. These are build dependencies. For example, libpciaccess is a dependency of openmpi and requires m4 to build. Spack will build m4 as part of the installation of openmpi, but it does not become a part of the DAG because it is not linked in at run time. Spack handles build dependencies differently because of their different (less strict) consistency requirements. It is entirely possible to have two packages using different versions of a dependency to build, which obviously cannot be done with linked dependencies.

HDF5 is more complicated than our basic example of zlib and openssl, but it's still within the realm of software that an experienced HPC user could reasonably expect to install given a bit of time. Now let's look at an even more complicated package.

$ spack install trilinos
==> Installing diffutils
==> Searching for binary cache of diffutils
==> Finding buildcaches in /mirror/build_cache
==> Installing diffutils from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/diffutils-3.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-diffutils-3.6-2rhuivgjrna2nrxhntyde6md2khcvs34.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:30:17 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed diffutils from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/diffutils-3.6-2rhuivgjrna2nrxhntyde6md2khcvs34
==> Installing bzip2
==> Searching for binary cache of bzip2
==> Installing bzip2 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:34:37 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed bzip2 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> Installing boost
==> Searching for binary cache of boost
==> Installing boost from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.68.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-boost-1.68.0-zbgfxapchxa4awxdwpleubfuznblxzvt.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 04:58:55 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed boost from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.68.0-zbgfxapchxa4awxdwpleubfuznblxzvt
==> pkgconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v
==> ncurses is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh
==> readline is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi
==> gdbm is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes
==> perl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo
==> Installing openssl
==> Searching for binary cache of openssl
==> Installing openssl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2o/linux-ubuntu16.04-x86_64-gcc-5.4.0-openssl-1.0.2o-b4y3w3bsyvjla6eesv4vt6aplpfrpsha.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:24:10 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed openssl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2o-b4y3w3bsyvjla6eesv4vt6aplpfrpsha
==> Installing cmake
==> Searching for binary cache of cmake
==> Installing cmake from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.12.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-cmake-3.12.3-otafqzhh4xnlq2mpakch7dr3tjfsrjnx.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:33:15 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed cmake from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.12.3-otafqzhh4xnlq2mpakch7dr3tjfsrjnx
==> Installing glm
==> Searching for binary cache of glm
==> Installing glm from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:30:33 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed glm from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws
==> libsigsegv is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel
==> libtool is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
==> util-macros is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr
==> libpciaccess is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc
==> xz is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.4-teneqii2xv5u6zl5r6qi3pwurc6pmypz
==> libxml2 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.8-wpexsphdmfayxqxd4up5vgwuqgu5woo7
==> autoconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q
==> automake is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy
==> numactl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/numactl-2.0.11-ft463odrombnxlc3qew4omckhlq7tqgc
==> hwloc is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.9-43tkw5mt6huhv37vqnybqgxtkodbsava
==> openmpi is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx
==> Installing hdf5
==> Searching for binary cache of hdf5
==> Installing hdf5 from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.4-oqwnui7wtovuf2id4vjwcxfmxlzjus6y.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:09:10 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hdf5 from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-oqwnui7wtovuf2id4vjwcxfmxlzjus6y
==> Installing openblas
==> Searching for binary cache of openblas
==> Installing openblas from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.3.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-openblas-0.3.3-cyeg2yiitpuqglhvbox5gtbgsim2v5vn.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:32:04 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed openblas from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.3.3-cyeg2yiitpuqglhvbox5gtbgsim2v5vn
==> Installing hypre
==> Searching for binary cache of hypre
==> Installing hypre from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.15.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hypre-2.15.1-fshksdpecwiq7r6vawfswpboedhbisju.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:34 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hypre from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.15.1-fshksdpecwiq7r6vawfswpboedhbisju
==> Installing matio
==> Searching for binary cache of matio
==> Installing matio from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9/linux-ubuntu16.04-x86_64-gcc-5.4.0-matio-1.5.9-lmzdgssvobdljw52mtahelu2ju7osh6h.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:05:13 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed matio from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9-lmzdgssvobdljw52mtahelu2ju7osh6h
==> Installing metis
==> Searching for binary cache of metis
==> Installing metis from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-metis-5.1.0-3wnvp4ji3wwu4v4vymszrhx6naehs6jc.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:31:42 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed metis from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0-3wnvp4ji3wwu4v4vymszrhx6naehs6jc
==> Installing netlib-scalapack
==> Searching for binary cache of netlib-scalapack
==> Installing netlib-scalapack from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-netlib-scalapack-2.0.2-wotpfwfctgfkzzn2uescucxvvbg3tm6b.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:22 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed netlib-scalapack from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-wotpfwfctgfkzzn2uescucxvvbg3tm6b
==> Installing mumps
==> Searching for binary cache of mumps
==> Installing mumps from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-mumps-5.1.1-acsg2dzroox2swssgc5cwgkvdy6jcm5q.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:32 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed mumps from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1-acsg2dzroox2swssgc5cwgkvdy6jcm5q
==> Installing netcdf
==> Searching for binary cache of netcdf
==> Installing netcdf from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.6.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.6.1-mhm4izpogf4mrjidyskb6ewtzxdi7t6g.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:11:57 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed netcdf from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.6.1-mhm4izpogf4mrjidyskb6ewtzxdi7t6g
==> Installing parmetis
==> Searching for binary cache of parmetis
==> Installing parmetis from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-parmetis-4.0.3-uv6h3sqx6quqg22hxesi2mw2un3kw6b7.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:12:04 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed parmetis from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3-uv6h3sqx6quqg22hxesi2mw2un3kw6b7
==> Installing suite-sparse
==> Searching for binary cache of suite-sparse
==> Installing suite-sparse from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-5.3.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-suite-sparse-5.3.0-zaau4kifha2enpdcn3mjlrqym7hm7yon.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:22:54 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed suite-sparse from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-5.3.0-zaau4kifha2enpdcn3mjlrqym7hm7yon
==> Installing trilinos
==> Searching for binary cache of trilinos
==> Installing trilinos from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-trilinos-12.12.1-rlsruavxqvwk2tgxzxboclbo6ykjf54r.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:10 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed trilinos from binary cache

Now we're starting to see the power of Spack. Trilinos in its default configuration has 23 top level dependecies, many of which have dependencies of their own. Installing more complex packages can take days or weeks even for an experienced user. Although we've done a binary installation for the tutorial, a source installation of trilinos using Spack takes about 3 hours (depending on the system), but only 20 seconds of programmer time.

Spack manages constistency of the entire DAG. Every MPI dependency will be satisfied by the same configuration of MPI, etc. If we install trilinos again specifying a dependency on our previous HDF5 built with mpich:

$ spack install trilinos +hdf5 ^hdf5+hl+mpi ^mpich
==> diffutils is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/diffutils-3.6-2rhuivgjrna2nrxhntyde6md2khcvs34
==> bzip2 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> boost is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.68.0-zbgfxapchxa4awxdwpleubfuznblxzvt
==> pkgconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v
==> ncurses is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh
==> readline is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi
==> gdbm is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes
==> perl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo
==> openssl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2o-b4y3w3bsyvjla6eesv4vt6aplpfrpsha
==> cmake is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.12.3-otafqzhh4xnlq2mpakch7dr3tjfsrjnx
==> glm is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws
==> libsigsegv is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel
==> autoconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q
==> automake is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy
==> libtool is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
==> texinfo is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/texinfo-6.5-zs7a2pcwhq6ho2cj2x26uxfktwkpyucn
==> findutils is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/findutils-4.6.0-d4iajxsopzrlcjtasahxqeyjkjv5jx4v
==> mpich is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2.1-p3f7p2r5ntrynqibosglxvhwyztiwqs5
==> hdf5 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-xxd7syhgej6onpyfyewxqcqe7ltkt7ob
==> openblas is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.3.3-cyeg2yiitpuqglhvbox5gtbgsim2v5vn
==> Installing hypre
==> Searching for binary cache of hypre
==> Finding buildcaches in /mirror/build_cache
==> Installing hypre from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.15.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hypre-2.15.1-obewuozolon7tkdg4cfxc6ae2tzkronb.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:34:36 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed hypre from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.15.1-obewuozolon7tkdg4cfxc6ae2tzkronb
==> Installing matio
==> Searching for binary cache of matio
==> Installing matio from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9/linux-ubuntu16.04-x86_64-gcc-5.4.0-matio-1.5.9-gvyqldhifflmvcrtui3b6s64jcczsxxh.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:25:11 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed matio from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9-gvyqldhifflmvcrtui3b6s64jcczsxxh
==> metis is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0-3wnvp4ji3wwu4v4vymszrhx6naehs6jc
==> Installing netlib-scalapack
==> Searching for binary cache of netlib-scalapack
==> Installing netlib-scalapack from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-netlib-scalapack-2.0.2-p7iln2pcosw2ipyqoyr7ie6lpva2oj7r.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:32:20 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed netlib-scalapack from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-p7iln2pcosw2ipyqoyr7ie6lpva2oj7r
==> Installing mumps
==> Searching for binary cache of mumps
==> Installing mumps from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-mumps-5.1.1-cumcj5a75cagsznpjrgretxdg6okxaur.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:33:18 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed mumps from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1-cumcj5a75cagsznpjrgretxdg6okxaur
==> Installing netcdf
==> Searching for binary cache of netcdf
==> Installing netcdf from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.6.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.6.1-wmmx5sgwfds34v7bkkhiduar5yecrnnd.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:24:01 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed netcdf from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.6.1-wmmx5sgwfds34v7bkkhiduar5yecrnnd
==> Installing parmetis
==> Searching for binary cache of parmetis
==> Installing parmetis from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-parmetis-4.0.3-jehtatan4y2lcobj6waoqv66jj4libtz.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:07:41 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed parmetis from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3-jehtatan4y2lcobj6waoqv66jj4libtz
==> suite-sparse is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-5.3.0-zaau4kifha2enpdcn3mjlrqym7hm7yon
==> Installing trilinos
==> Searching for binary cache of trilinos
==> Installing trilinos from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-trilinos-12.12.1-kqc52moweigxqxzwzfqajc6ocxwdwn4w.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:30:15 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed trilinos from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-kqc52moweigxqxzwzfqajc6ocxwdwn4w

We see that every package in the trilinos DAG that depends on MPI now uses mpich.

$ spack find -d trilinos
==> 2 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    trilinos@12.12.1
        ^boost@1.68.0
            ^bzip2@1.0.6
            ^zlib@1.2.11
        ^glm@0.9.7.1
        ^hdf5@1.10.4
            ^openmpi@3.1.3
                ^hwloc@1.11.9
                    ^libpciaccess@0.13.5
                    ^libxml2@2.9.8
                        ^xz@5.2.4
                    ^numactl@2.0.11
        ^hypre@2.15.1
            ^openblas@0.3.3
        ^matio@1.5.9
        ^metis@5.1.0
        ^mumps@5.1.1
            ^netlib-scalapack@2.0.2
        ^netcdf@4.6.1
        ^parmetis@4.0.3
        ^suite-sparse@5.3.0

    trilinos@12.12.1
        ^boost@1.68.0
            ^bzip2@1.0.6
            ^zlib@1.2.11
        ^glm@0.9.7.1
        ^hdf5@1.10.4
            ^mpich@3.2.1
        ^hypre@2.15.1
            ^openblas@0.3.3
        ^matio@1.5.9
        ^metis@5.1.0
        ^mumps@5.1.1
            ^netlib-scalapack@2.0.2
        ^netcdf@4.6.1
        ^parmetis@4.0.3
        ^suite-sparse@5.3.0

As we discussed before, the spack find -d command shows the dependency information as a tree. While that is often sufficient, many complicated packages, including trilinos, have dependencies that cannot be fully represented as a tree. Again, the spack graph command shows the full DAG of the dependency information.

$ spack graph trilinos
o  trilinos
|\
| |\
| | |\
| | | |\
| | | | |\
| | | | | |\
| | | | | | |\
| | | | | | | |\
| | | | | | | | |\
| | | | | | | | | |\
| | | | | | | | | | |\
| | | | | | | | | | | |\
| | | | | | | | | | | | |\
o | | | | | | | | | | | | |  suite-sparse
|\ \ \ \ \ \ \ \ \ \ \ \ \ \
| |_|_|/ / / / / / / / / / /
|/| | | | | | | | | | | | |
| |\ \ \ \ \ \ \ \ \ \ \ \ \
| | |_|_|_|_|_|/ / / / / / /
| |/| | | | | | | | | | | |
| | | |_|_|_|_|_|_|_|/ / /
| | |/| | | | | | | | | |
| | | o | | | | | | | | |  parmetis
| | |/| | | | | | | | | |
| |/|/| | | | | | | | | |
| | | |/ / / / / / / / /
| | | | | | o | | | | |  mumps
| |_|_|_|_|/| | | | | |
|/| | | |_|/| | | | | |
| | | |/| |/ / / / / /
| | | | |/| | | | | |
| | | | o | | | | | |  netlib-scalapack
| |_|_|/| | | | | | |
|/| | |/| | | | | | |
| | |/|/ / / / / / /
| o | | | | | | | |  metis
| |/ / / / / / / /
| | | | | | | o |  glm
| | |_|_|_|_|/ /
| |/| | | | | |
| o | | | | | |  cmake
| |\ \ \ \ \ \ \
| o | | | | | | |  openssl
| |\ \ \ \ \ \ \ \
| | | | | o | | | |  netcdf
| | |_|_|/| | | | |
| |/| | |/| | | | |
| | | | | |\ \ \ \ \
| | | | | | | |_|/ /
| | | | | | |/| | |
| | | | | | | o | |  matio
| | |_|_|_|_|/| | |
| |/| | | | |/ / /
| | | | | | | o |  hypre
| |_|_|_|_|_|/| |
|/| | | | |_|/ /
| | | | |/| | |
| | | | | | o |  hdf5
| | |_|_|_|/| |
| |/| | | |/ /
| | | | |/| |
| | | | o | |  openmpi
| | |_|/| | |
| |/| | | | |
| | | | |\ \ \
| | | | | o | |  hwloc
| | | | |/| | |
| | | | | |\ \ \
| | | | | | |\ \ \
| | | | | | o | | |  libxml2
| | |_|_|_|/| | | |
| |/| | | |/| | | |
| | | | | | | | | o  boost
| | |_|_|_|_|_|_|/|
| |/| | | | | | | |
| o | | | | | | | |  zlib
|  / / / / / / / /
| | | | | o | | |  xz
| | | | |  / / /
| | | | | o | |  libpciaccess
| | | | |/| | |
| | | | | |\ \ \
| | | | | o | | |  util-macros
| | | | |  / / /
| | | o | | | |  numactl
| | | |\ \ \ \ \
| | | | |_|_|/ /
| | | |/| | | |
| | | | |\ \ \ \
| | | | | |_|/ /
| | | | |/| | |
| | | | | |\ \ \
| | | | | o | | |  automake
| | |_|_|/| | | |
| |/| | | | | | |
| | | | | |/ / /
| | | | | o | |  autoconf
| | |_|_|/| | |
| |/| | |/ / /
| | | |/| | |
| o | | | | |  perl
| o | | | | |  gdbm
| o | | | | |  readline
| |/ / / / /
| o | | | |  ncurses
| | |_|/ /
| |/| | |
| o | | |  pkgconf
|  / / /
o | | |  openblas
 / / /
 | o |  libtool
 |/ /
 o |  m4
 o |  libsigsegv
  /
  o  bzip2
  o  diffutils

You can control how the output is displayed with a number of options.

The ASCII output from spack graph can be difficult to parse for complicated packages. The output can be changed to the graphviz .dot format using the --dot flag.

$ spack graph --dot trilinos | dot -Tpdf trilinos_graph.pdf

Uninstalling Packages

Earlier we installed many configurations each of zlib and tcl. Now we will go through and uninstall some of those packages that we didn't really need.

$ spack find -d tcl
==> 3 installed packages
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
    tcl@8.6.8
        ^zlib@1.2.8


-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    tcl@8.6.8
        ^zlib@1.2.8

    tcl@8.6.8
        ^zlib@1.2.11


$ spack find zlib
==> 6 installed packages.
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
zlib@1.2.8  zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
zlib@1.2.8  zlib@1.2.8  zlib@1.2.11

We can uninstall packages by spec using the same syntax as install.

$ spack uninstall zlib %gcc@4.7
==> The following packages will be uninstalled:

-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
bq2wtdx zlib@1.2.11%gcc+optimize+pic+shared

==> Do you want to proceed? [y/N] y
==> Successfully uninstalled zlib@1.2.11%gcc@4.7+optimize+pic+shared arch=linux-ubuntu16.04-x86_64 /bq2wtdx

$ spack find -lf zlib
==> 5 installed packages.
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
i426yu3 zlib@1.2.8%clang
4pt75q7 zlib@1.2.11%clang


-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
bkyl5bh zlib@1.2.8%gcc
64mns5m zlib@1.2.8%gcc cppflags="-O3"
5nus6kn zlib@1.2.11%gcc

We can also uninstall packages by referring only to their hash.

We can use either -f (force) or -R (remove dependents as well) to remove packages that are required by another installed package.

$ spack uninstall zlib/i426
==> Error: Will not uninstall zlib@1.2.8%clang@3.8.0-2ubuntu4/i426yu3

The following packages depend on it:
    -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
    6wc66et tcl@8.6.8%clang

==> Error: Use \`spack uninstall --dependents\` to uninstall these dependencies as well.

$ spack uninstall -R zlib/i426
==> The following packages will be uninstalled:

    -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
    6wc66et tcl@8.6.8%clang
    i426yu3 zlib@1.2.8%clang+optimize+pic+shared
==> Do you want to proceed? [y/N] y
==> Successfully uninstalled tcl@8.6.8%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64 /6wc66et
==> Successfully uninstalled zlib@1.2.8%clang@3.8.0-2ubuntu4+optimize+pic+shared arch=linux-ubuntu16.04-x86_64 /i426yu3

Spack will not uninstall packages that are not sufficiently specified. The -a (all) flag can be used to uninstall multiple packages at once.

$ spack uninstall trilinos
==> Error: trilinos matches multiple packages:

    -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    rlsruav trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
    kqc52mo trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2

==> Error: You can either:
    a) use a more specific spec, or
    b) use `spack uninstall --all` to uninstall ALL matching specs.


$ spack uninstall /rlsr
==> The following packages will be uninstalled:

    -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    rlsruav trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
==> Do you want to proceed? [y/N] y
==> Successfully uninstalled trilinos@12.12.1%gcc@5.4.0~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2 arch=linux-ubuntu16.04-x86_64 /rlsruav

Advanced spack find Usage

We will go over some additional uses for the spack find command not already covered in the Installing Spack and Uninstalling Packages sections.

The spack find command can accept what we call "anonymous specs." These are expressions in spec syntax that do not contain a package name. For example, spack find ^mpich will return every installed package that depends on mpich, and spack find cppflags="-O3" will return every package which was built with cppflags="-O3".

$ spack find ^mpich
==> 8 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
hdf5@1.10.4   matio@1.5.9  netcdf@4.6.1            parmetis@4.0.3
hypre@2.15.1  mumps@5.1.1  netlib-scalapack@2.0.2  trilinos@12.12.1

$ spack find cppflags=-O3
==> 1 installed packages.
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
zlib@1.2.8

The find command can also show which packages were installed explicitly (rather than pulled in as a dependency) using the -x flag. The -X flag shows implicit installs only. The find command can also show the path to which a spack package was installed using the -p command.

$ spack find -px
==> 10 installed packages
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
    zlib@1.2.11  /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    hdf5@1.10.4       /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-5vcv5r67vpjzenq4apyebshclelnzuja
    hdf5@1.10.4       /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-ozyvmhzdew66byarohm4p36ep7wtcuiw
    hdf5@1.10.4       /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-xxd7syhgej6onpyfyewxqcqe7ltkt7ob
    tcl@8.6.8         /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-am4pbatrtga3etyusg2akmsvrswwxno2
    tcl@8.6.8         /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-qhwyccywhx2i6s7ob2gvjrjtj3rnfuqt
    trilinos@12.12.1  /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-kqc52moweigxqxzwzfqajc6ocxwdwn4w
    zlib@1.2.8        /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc
    zlib@1.2.8        /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu
    zlib@1.2.11       /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb

Customizing Compilers

Spack manages a list of available compilers on the system, detected automatically from from the user's PATH variable. The spack compilers command is an alias for the command spack compiler list.

$ spack compilers
==> Available compilers
-- clang ubuntu16.04-x86_64 -------------------------------------
clang@3.8.0-2ubuntu4  clang@3.7.1-2ubuntu2

-- gcc ubuntu16.04-x86_64 ---------------------------------------
gcc@5.4.0  gcc@4.7

The compilers are maintained in a YAML file. Later in the tutorial you will learn how to configure compilers by hand for special cases. Spack also has tools to add compilers, and compilers built with Spack can be added to the configuration.

$ spack install gcc @7.2.0
==> libsigsegv is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-suf5jtcfehivwfesrc5hjy72r4nukyel
==> pkgconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkgconf-1.4.2-fovrh7alpft646n6mhis5mml6k6e5f4v
==> ncurses is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.1-3o765ourmesfrji6yeclb4wb5w54aqbh
==> readline is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-nxhwrg7xwc6nbsm2v4ezwe63l6nfidbi
==> gdbm is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.14.1-q4fpyuo7ouhkeq6d3oabtrppctpvxmes
==> perl is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.26.2-ic2kyoadgp3dxfejcbllyplj2wf524fo
==> autoconf is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-3sx2gxeibc4oasqd4o5h6lnwpcpsgd2q
==> automake is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.16.1-rymw7imfehycqxzj4nuy2oiw3abegooy
==> libtool is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
==> Installing gmp
==> Searching for binary cache of gmp
==> Finding buildcaches in /mirror/build_cache
==> Installing gmp from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gmp-6.1.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-gmp-6.1.2-qc4qcfz4monpllc3nqupdo7vwinf73sw.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:18:16 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed gmp from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gmp-6.1.2-qc4qcfz4monpllc3nqupdo7vwinf73sw
==> Installing isl
==> Searching for binary cache of isl
==> Installing isl from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/isl-0.18/linux-ubuntu16.04-x86_64-gcc-5.4.0-isl-0.18-vttqoutnsmjpm3ogb52rninksc7hq5ax.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:05:19 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed isl from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/isl-0.18-vttqoutnsmjpm3ogb52rninksc7hq5ax
==> Installing mpfr
==> Searching for binary cache of mpfr
==> Installing mpfr from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpfr-3.1.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpfr-3.1.6-jnt2nnp5pmvikbw7opueajlbwbhmjxyv.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:32:07 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed mpfr from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpfr-3.1.6-jnt2nnp5pmvikbw7opueajlbwbhmjxyv
==> Installing mpc
==> Searching for binary cache of mpc
==> Installing mpc from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpc-1.1.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpc-1.1.0-iuf3gc3zpgr4n4mditnxhff6x3joxi27.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:30:35 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed mpc from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpc-1.1.0-iuf3gc3zpgr4n4mditnxhff6x3joxi27
==> zlib is already installed in /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
Installing gcc
==> Searching for binary cache of gcc
==> Finding buildcaches in /mirror/build_cache
==> Installing gcc from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs.spack
######################################################################## 100.0%
gpg: Signature made Sat Nov 10 05:22:47 2018 UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed gcc from binary cache
[+] /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs

$ spack find -p gcc
spack find -p gcc
==> 1 installed package
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    gcc@7.2.0  /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs

We can add gcc to Spack as an available compiler using the spack compiler add command. This will allow future packages to build with gcc@7.2.0.

$ spack compiler add `spack location -i gcc@7.2.0`
==> Added 1 new compiler to /home/ubuntu/.spack/linux/compilers.yaml
    gcc@7.2.0
==> Compilers are defined in the following files:
    /home/ubuntu/.spack/linux/compilers.yaml

We can also remove compilers from our configuration using spack compiler remove <compiler_spec>

$ spack compiler remove gcc@7.2.0
==> Removed compiler gcc@7.2.0

Configuration Tutorial

This tutorial will guide you through various configuration options that allow you to customize Spack's behavior with respect to software installation. We will first cover the configuration file hierarchy. Then, we will cover configuration options for compilers, focusing on how they can be used to extend Spack's compiler auto-detection. Next, we will cover the packages configuration file, focusing on how it can be used to override default build options as well as specify external package installations to use. Finally, we will briefly touch on the config configuration file, which manages more high-level Spack configuration options.

For all of these features we will demonstrate how we build up a full configuration file. For some we will then demonstrate how the configuration affects the install command, and for others we will use the spack spec command to demonstrate how the configuration changes have affected Spack's concretization algorithm. The provided output is all from a server running Ubuntu version 16.04.

Configuration Scopes

Depending on your use case, you may want to provide configuration settings common to everyone on your team, or you may want to set default behaviors specific to a single user account. Spack provides six configuration scopes to handle this customization. These scopes, in order of decreasing priority, are:

Scope

Directory

Command-line

N/A

Custom

Custom directory, specified with --config-scope

User

~/.spack/

Site

$SPACK_ROOT/etc/spack/

System

/etc/spack/

Defaults

$SPACK_ROOT/etc/spack/defaults/

Spack's default configuration settings reside in $SPACK_ROOT/etc/spack/defaults. These are useful for reference, but should never be directly edited. To override these settings, create new configuration files in any of the higher-priority configuration scopes.

A particular cluster may have multiple Spack installations associated with different projects. To provide settings common to all Spack installations, put your configuration files in /etc/spack. To provide settings specific to a particular Spack installation, you can use the $SPACK_ROOT/etc/spack directory.

For settings specific to a particular user, you will want to add configuration files to the ~/.spack directory. When Spack first checked for compilers on your system, you may have noticed that it placed your compiler configuration in this directory.

Configuration settings can also be placed in a custom location, which is then specified on the command line via --config-scope. An example use case is managing two sets of configurations, one for development and another for production preferences.

Settings specified on the command line have precedence over all other configuration scopes.

Platform-specific Scopes

Some facilities manage multiple platforms from a single shared file system. In order to handle this, each of the configuration scopes listed above has two sub-scopes: platform-specific and platform-independent. For example, compiler settings can be stored in compilers.yaml configuration files in the following locations:

  1. ~/.spack/<platform>/compilers.yaml

  2. ~/.spack/compilers.yaml

  3. $SPACK_ROOT/etc/spack/<platform>/compilers.yaml

  4. $SPACK_ROOT/etc/spack/compilers.yaml

  5. /etc/spack/<platform>/compilers.yaml

  6. /etc/spack/compilers.yaml

  7. $SPACK_ROOT/etc/defaults/<platform>/compilers.yaml

  8. $SPACK_ROOT/etc/defaults/compilers.yaml

These files are listed in decreasing order of precedence, so files in ~/.spack/<platform> will override settings in ~/.spack.

YAML Format

Spack configurations are YAML dictionaries. Every configuration file begins with a top-level dictionary that tells Spack which configuration set it modifies. When Spack checks it's configuration, the configuration scopes are updated as dictionaries in increasing order of precedence, allowing higher precedence files to override lower. YAML dictionaries use a colon ":" to specify key-value pairs. Spack extends YAML syntax slightly to allow a double-colon "::" to specify a key-value pair. When a double-colon is used to specify a key-value pair, instead of adding that section Spack replaces what was in that section with the new value. For example, a user compilers configuration file as follows:

compilers::
- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/gcc
      cxx: /usr/bin/g++
      f77: /usr/bin/gfortran
      fc: /usr/bin/gfortran
    spec: gcc@5.4.0
    target: x86_64

ensures that no other compilers are used, as the user configuration scope is the last scope searched and the compilers:: line replaces all previous configuration files information. If the same configuration file had a single colon instead of the double colon, it would add the GCC version 5.4.0 compiler to whatever other compilers were listed in other configuration files.

Compiler Configuration

For most tasks, we can use Spack with the compilers auto-detected the first time Spack runs on a system. As discussed in the basic installation tutorial, we can also tell Spack where compilers are located using the spack compiler add command. However, in some circumstances we want even more fine-grained control over the compilers available. This section will teach you how to exercise that control using the compilers configuration file.

We will start by opening the compilers configuration file

$ spack config edit compilers
compilers:
- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/clang-3.7
      cxx: /usr/bin/clang++-3.7
      f77: null
      fc: null
    spec: clang@3.7.1-2ubuntu2
    target: x86_64
- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/clang
      cxx: /usr/bin/clang++
      f77: null
      fc: null
    spec: clang@3.8.0-2ubuntu4
    target: x86_64
- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/gcc-4.7
      cxx: /usr/bin/g++-4.7
      f77: /usr/bin/gfortran-4.7
      fc: /usr/bin/gfortran-4.7
    spec: gcc@4.7
    target: x86_64
- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/gcc
      cxx: /usr/bin/g++
      f77: /usr/bin/gfortran
      fc: /usr/bin/gfortran
    spec: gcc@5.4.0
    target: x86_64

This specifies two versions of the GCC compiler and two versions of the Clang compiler with no Flang compiler. Now suppose we have a code that we want to compile with the Clang compiler for C/C++ code, but with gfortran for Fortran components. We can do this by adding another entry to the compilers.yaml file.

- compiler:
    environment: {}
    extra_rpaths: []
    flags: {}
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/clang
      cxx: /usr/bin/clang++
      f77: /usr/bin/gfortran
      fc: /usr/bin/gfortran
    spec: clang@3.8.0-gfortran
    target: x86_64

Let's talk about the sections of this compiler entry that we've changed. The biggest change we've made is to the paths section. This lists the paths to the compilers to use for each language/specification. In this case, we point to the clang compiler for C/C++ and the gfortran compiler for both specifications of Fortran. We've also changed the spec entry for this compiler. The spec entry is effectively the name of the compiler for Spack. It consists of a name and a version number, separated by the @ sigil. The name must be one of the supported compiler names in Spack (gcc, intel, pgi, xl, xl_r, clang, nag, cce, arm). The version number can be an arbitrary string of alphanumeric characters, as well as -, ., and _. The target and operating_system sections we leave unchanged. These sections specify when Spack can use different compilers, and are primarily useful for configuration files that will be used across multiple systems.

We can verify that our new compiler works by invoking it now:

$ spack install --no-cache zlib %clang@3.8.0-gfortran
...

This new compiler also works on Fortran codes:

$ spack install --no-cache cfitsio %clang@3.8.0-gfortran -bzip2
...
Compiler Flags

Some compilers may require specific compiler flags to work properly in a particular computing environment. Spack provides configuration options for setting compiler flags every time a specific compiler is invoked. These flags become part of the package spec and therefore of the build provenance. As on the command line, the flags are set through the implicit build variables cflags, cxxflags, cppflags, fflags, ldflags, and ldlibs.

Let's open our compilers configuration file again and add a compiler flag.

- compiler:
    environment: {}
    extra_rpaths: []
    flags:
      cppflags: -g
    modules: []
    operating_system: ubuntu16.04
    paths:
      cc: /usr/bin/clang
      cxx: /usr/bin/clang++
      f77: /usr/bin/gfortran
      fc: /usr/bin/gfortran
    spec: clang@3.8.0-gfortran
    target: x86_64

We can test this out using the spack spec command to show how the spec is concretized.

$ spack spec cfitsio %clang@3.8.0-gfortran
Input spec
--------------------------------
cfitsio%clang@3.8.0-gfortran

Normalized
--------------------------------
cfitsio%clang@3.8.0-gfortran

Concretized
--------------------------------
cfitsio@3.410%clang@3.8.0-gfortran cppflags="-g" +bzip2+shared arch=linux-ubuntu16.04-x86_64
    ^bzip2@1.0.6%clang@3.8.0-gfortran cppflags="-g" +shared arch=linux-ubuntu16.04-x86_64

We can see that cppflags="-g" has been added to every node in the DAG.

Advanced Compiler Configuration

There are three fields of the compiler configuration entry that we have not yet talked about.

The modules field of the compiler is used primarily on Cray systems, but can be useful on any system that has compilers that are only useful when a particular module is loaded. Any modules in the modules field of the compiler configuration will be loaded as part of the build environment for packages using that compiler.

The extra_rpaths field of the compiler configuration is used for compilers that do not rpath all of their dependencies by default. Since compilers are often installed externally to Spack, Spack is unable to manage compiler dependencies and enforce rpath usage. This can lead to packages not finding link dependencies imposed by the compiler properly. For compilers that impose link dependencies on the resulting executables that are not rpath'ed into the executable automatically, the extra_rpaths field of the compiler configuration tells Spack which dependencies to rpath into every executable created by that compiler. The executables will then be able to find the link dependencies imposed by the compiler. As an example, this field can be set by

- compiler:
  ...
  extra_rpaths:
   - /apps/intel/ComposerXE2017/compilers_and_libraries_2017.5.239/linux/compiler/lib/intel64_lin
  ...

The environment field of the compiler configuration is used for compilers that require environment variables to be set during build time. For example, if your Intel compiler suite requires the INTEL_LICENSE_FILE environment variable to point to the proper license server, you can set this in compilers.yaml as follows:

- compiler:
    environment:
      set:
        INTEL_LICENSE_FILE: 1713@license4
    ...

In addition to set, environment also supports unset, prepend-path, and append-path.

Configuring Package Preferences

Package preferences in Spack are managed through the packages.yaml configuration file. First, we will look at the default packages.yaml file.

$ spack config --scope defaults edit packages
# -------------------------------------------------------------------------
# This file controls default concretization preferences for Spack.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
#   $SPACK_ROOT/etc/spack/packages.yaml
#
# Per-user settings (overrides default and site settings):
#   ~/.spack/packages.yaml
# -------------------------------------------------------------------------
packages:
  all:
    compiler: [gcc, intel, pgi, clang, xl, nag, fj]
    providers:
      D: [ldc]
      awk: [gawk]
      blas: [openblas]
      daal: [intel-daal]
      elf: [elfutils]
      fftw-api: [fftw]
      gl: [mesa+opengl, opengl]
      glx: [mesa+glx, opengl]
      glu: [mesa-glu, openglu]
      golang: [gcc]
      ipp: [intel-ipp]
      java: [jdk, openjdk, ibm-java]
      jpeg: [libjpeg-turbo, libjpeg]
      lapack: [openblas]
      mariadb-client: [mariadb-c-client, mariadb]
      mkl: [intel-mkl]
      mpe: [mpe2]
      mpi: [openmpi, mpich]
      mysql-client: [mysql, mariadb-c-client]
      ninja: [ninja, ninja-fortran]
      ninja-fortran: [ninja-fortran, ninja@kitware]
      opencl: [pocl]
      openfoam: [openfoam-com, openfoam-org, foam-extend]
      pil: [py-pillow]
      pkgconfig: [pkgconf, pkg-config]
      scalapack: [netlib-scalapack]
      szip: [libszip, libaec]
      tbb: [intel-tbb]
      unwind: [libunwind]
    permissions:
      read: world
      write: user

This sets the default preferences for compilers and for providers of virtual packages. To illustrate how this works, suppose we want to change the preferences to prefer the Clang compiler and to prefer MPICH over OpenMPI. Currently, we prefer GCC and OpenMPI.

$ spack spec hdf5
Input spec
--------------------------------
hdf5

Concretized
--------------------------------
hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^openmpi@3.1.3%gcc@5.4.0~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
        ^hwloc@1.11.9%gcc@5.4.0~cairo~cuda+libxml2+pci+shared arch=linux-ubuntu16.04-x86_64
            ^libpciaccess@0.13.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                    ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                        ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^util-macros@1.19.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
            ^libxml2@2.9.8%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
                ^xz@5.2.4%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
            ^numactl@2.0.11%gcc@5.4.0 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
                ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                    ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
                        ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                            ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                                ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64

Now we will open the packages configuration file and update our preferences.

$ spack config edit packages
packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]

Because of the configuration scoping we discussed earlier, this overrides the default settings just for these two items.

$ spack spec hdf5
Input spec
--------------------------------
hdf5

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^mpich@3.2.1%clang@3.8.0-2ubuntu4 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
        ^findutils@4.6.0%clang@3.8.0-2ubuntu4 patches=84b916c0bf8c51b7e7b28417692f0ad3e7030d1f3c248ba77c42ede5c1c5d11e,bd9e4e5cc280f9753ae14956c4e4aa17fe7a210f55dd6c84aa60b12d106d47a2 arch=linux-ubuntu16.04-x86_64
            ^autoconf@2.69%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^m4@1.4.18%clang@3.8.0-2ubuntu4 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                    ^libsigsegv@2.11%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^perl@5.26.2%clang@3.8.0-2ubuntu4+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
                    ^gdbm@1.14.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                        ^readline@7.0%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                            ^ncurses@6.1%clang@3.8.0-2ubuntu4~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                                ^pkgconf@1.4.2%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^automake@1.16.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^libtool@2.4.6%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^texinfo@6.5%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.11%clang@3.8.0-2ubuntu4+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
Variant Preferences

The packages configuration file can also set variant preferences for package variants. For example, let's change our preferences to build all packages without shared libraries. We will accomplish this by turning off the shared variant on all packages that have one.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared

We can check the effect of this command with spack spec hdf5 again.

$ spack spec hdf5
Input spec
--------------------------------
hdf5

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^mpich@3.2.1%clang@3.8.0-2ubuntu4 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
        ^findutils@4.6.0%clang@3.8.0-2ubuntu4 patches=84b916c0bf8c51b7e7b28417692f0ad3e7030d1f3c248ba77c42ede5c1c5d11e,bd9e4e5cc280f9753ae14956c4e4aa17fe7a210f55dd6c84aa60b12d106d47a2 arch=linux-ubuntu16.04-x86_64
            ^autoconf@2.69%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^m4@1.4.18%clang@3.8.0-2ubuntu4 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                    ^libsigsegv@2.11%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^perl@5.26.2%clang@3.8.0-2ubuntu4+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac ~shared+threads arch=linux-ubuntu16.04-x86_64
                    ^gdbm@1.14.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                        ^readline@7.0%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                            ^ncurses@6.1%clang@3.8.0-2ubuntu4~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                                ^pkgconf@1.4.2%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^automake@1.16.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^libtool@2.4.6%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^texinfo@6.5%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.11%clang@3.8.0-2ubuntu4+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

So far we have only made global changes to the package preferences. As we've seen throughout this tutorial, hdf5 builds with MPI enabled by default in Spack. If we were working on a project that would routinely need serial hdf5, that might get annoying quickly, having to type hdf5~mpi all the time. Instead, we'll update our preferences for hdf5.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared
  hdf5:
    variants: ~mpi

Now hdf5 will concretize without an MPI dependency by default.

$ spack spec hdf5
Input spec
--------------------------------
hdf5

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.11%clang@3.8.0-2ubuntu4+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

In general, every attribute that we can set for all packages we can set separately for an individual package.

External Packages

The packages configuration file also controls when Spack will build against an externally installed package. On these systems we have a pre-installed zlib.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared
  hdf5:
    variants: ~mpi
  zlib:
    paths:
      zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr

Here, we've told Spack that zlib 1.2.8 is installed on our system. We've also told it the installation prefix where zlib can be found. We don't know exactly which variants it was built with, but that's okay.

$ spack spec hdf5
Input spec
--------------------------------
hdf5

Concretized
--------------------------------
hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

You'll notice that Spack is now using the external zlib installation, but the compiler used to build zlib is now overriding our compiler preference of clang. If we explicitly specify clang:

$ spack spec hdf5 %clang
Input spec
--------------------------------
hdf5%clang

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.11%clang@3.8.0-2ubuntu4+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

Spack concretizes to both hdf5 and zlib being built with clang. This has a side-effect of rebuilding zlib. If we want to force Spack to use the system zlib, we have two choices. We can either specify it on the command line, or we can tell Spack that it's not allowed to build its own zlib. We'll go with the latter.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared
  hdf5:
    variants: ~mpi
  zlib:
    paths:
      zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
    buildable: False

Now Spack will be forced to choose the external zlib.

$ spack spec hdf5 %clang
Input spec
--------------------------------
hdf5%clang

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

This gets slightly more complicated with virtual dependencies. Suppose we don't want to build our own MPI, but we now want a parallel version of hdf5? Well, fortunately we have mpich installed on these systems.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared
  hdf5:
    variants: ~mpi
  zlib:
    paths:
      zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
    buildable: False
  mpich:
    paths:
      mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64: /usr
    buildable: False

If we concretize hdf5+mpi with this configuration file, we will just build with an alternate MPI implementation.

$ spack spec hdf5 %clang +mpi
Input spec
--------------------------------
hdf5%clang+mpi

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^openmpi@3.1.3%clang@3.8.0-2ubuntu4~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
        ^hwloc@1.11.9%clang@3.8.0-2ubuntu4~cairo~cuda+libxml2+pci~shared arch=linux-ubuntu16.04-x86_64
            ^libpciaccess@0.13.5%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^libtool@2.4.6%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                    ^m4@1.4.18%clang@3.8.0-2ubuntu4 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                        ^libsigsegv@2.11%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^pkgconf@1.4.2%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^util-macros@1.19.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
            ^libxml2@2.9.8%clang@3.8.0-2ubuntu4~python arch=linux-ubuntu16.04-x86_64
                ^xz@5.2.4%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64
            ^numactl@2.0.11%clang@3.8.0-2ubuntu4 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
                ^autoconf@2.69%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                    ^perl@5.26.2%clang@3.8.0-2ubuntu4+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac ~shared+threads arch=linux-ubuntu16.04-x86_64
                        ^gdbm@1.14.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                            ^readline@7.0%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
                                ^ncurses@6.1%clang@3.8.0-2ubuntu4~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                ^automake@1.16.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64

We have only expressed a preference for mpich over other MPI implementations, and Spack will happily build with one we haven't forbid it from building. We could resolve this by requesting hdf5%clang+mpi^mpich explicitly, or we can configure Spack not to use any other MPI implementation. Since we're focused on configurations here and the former can get tedious, we'll need to modify our packages.yaml file again.

While we're at it, we can configure hdf5 to build with MPI by default again.

packages:
  all:
    compiler: [clang, gcc, intel, pgi, xl, nag]
    providers:
      mpi: [mpich, openmpi]
    variants: ~shared
  zlib:
    paths:
      zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
    buildable: False
  mpich:
    paths:
      mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64: /usr
    buildable: False
  openmpi:
    buildable: False
  mvapich2:
    buildable: False
  intel-mpi:
    buildable: False
  intel-parallel-studio:
    buildable: False
  spectrum-mpi:
    buildable: False
  mpilander:
    buildable: False
  charm:
    buildable: False
  charmpp:
    buildable: False

Now that we have configured Spack not to build any of the possible providers for MPI we can try again.

$ spack spec hdf5 %clang
Input spec
--------------------------------
hdf5%clang

Concretized
--------------------------------
hdf5@1.10.4%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
    ^mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
    ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64

By configuring most of our package preferences in packages.yaml, we can cut down on the amount of work we need to do when specifying a spec on the command line. In addition to compiler and variant preferences, we can specify version preferences as well. Anything that you can specify on the command line can be specified in packages.yaml with the exact same spec syntax.

Installation Permissions

The packages.yaml file also controls the default permissions to use when installing a package. You'll notice that by default, the installation prefix will be world readable but only user writable.

Let's say we need to install converge, a licensed software package. Since a specific research group, fluid_dynamics, pays for this license, we want to ensure that only members of this group can access the software. We can do this like so:

packages:
  converge:
    permissions:
      read: group
      group: fluid_dynamics

Now, only members of the fluid_dynamics group can use any converge installations.

警告

Make sure to delete or move the packages.yaml you have been editing up to this point. Otherwise, it will change the hashes of your packages, leading to differences in the output of later tutorial sections.

High-level Config

In addition to compiler and package settings, Spack allows customization of several high-level settings. These settings are stored in the generic config.yaml configuration file. You can see the default settings by running:

$ spack config --scope defaults edit config
# -------------------------------------------------------------------------
# This is the default spack configuration file.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
#   $SPACK_ROOT/etc/spack/config.yaml
#
# Per-user settings (overrides default and site settings):
#   ~/.spack/config.yaml
# -------------------------------------------------------------------------
config:
  # This is the path to the root of the Spack install tree.
  # You can use $spack here to refer to the root of the spack instance.
  install_tree: $spack/opt/spack


  # Locations where templates should be found
  template_dirs:
    - $spack/share/spack/templates


  # Default directory layout
  install_path_scheme: "${ARCHITECTURE}/${COMPILERNAME}-${COMPILERVER}/${PACKAGE}-${VERSION}-${HASH}"


  # Locations where different types of modules should be installed.
  module_roots:
    tcl:    $spack/share/spack/modules
    lmod:   $spack/share/spack/lmod
    dotkit: $spack/share/spack/dotkit


  # Temporary locations Spack can try to use for builds.
  #
  # Spack will use the first one it finds that exists and is writable.
  # You can use $tempdir to refer to the system default temp directory
  # (as returned by tempfile.gettempdir()).
  #
  # A value of $spack/var/spack/stage indicates that Spack should run
  # builds directly inside its install directory without staging them in
  # temporary space.
  #
  # The build stage can be purged with `spack clean --stage`.
  build_stage:
    - $tempdir
    - $spack/var/spack/stage


  # Cache directory for already downloaded source tarballs and archived
  # repositories. This can be purged with `spack clean --downloads`.
  source_cache: $spack/var/spack/cache


  # Cache directory for miscellaneous files, like the package index.
  # This can be purged with `spack clean --misc-cache`
  misc_cache: ~/.spack/cache


  # If this is false, tools like curl that use SSL will not verify
  # certifiates. (e.g., curl will use use the -k option)
  verify_ssl: true


  # If set to true, Spack will attempt to build any compiler on the spec
  # that is not already available. If set to False, Spack will only use
  # compilers already configured in compilers.yaml
  install_missing_compilers: False


  # If set to true, Spack will always check checksums after downloading
  # archives. If false, Spack skips the checksum step.
  checksum: true


  # If set to true, `spack install` and friends will NOT clean
  # potentially harmful variables from the build environment. Use wisely.
  dirty: false


  # The language the build environment will use. This will produce English
  # compiler messages by default, so the log parser can highlight errors.
  # If set to C, it will use English (see man locale).
  # If set to the empty string (''), it will use the language from the
  # user's environment.
  build_language: C


  # When set to true, concurrent instances of Spack will use locks to
  # avoid modifying the install tree, database file, etc. If false, Spack
  # will disable all locking, but you must NOT run concurrent instances
  # of Spack.  For filesystems that don't support locking, you should set
  # this to false and run one Spack at a time, but otherwise we recommend
  # enabling locks.
  locks: true


  # The default number of jobs to use when running `make` in parallel.
  # If set to 4, for example, `spack install` will run `make -j4`.
  # If not set, all available cores are used by default.
  # build_jobs: 4


  # If set to true, Spack will use ccache to cache C compiles.
  ccache: false


  # How long to wait to lock the Spack installation database. This lock is used
  # when Spack needs to manage its own package metadata and all operations are
  # expected to complete within the default time limit. The timeout should
  # therefore generally be left untouched.
  db_lock_timeout: 120


  # How long to wait when attempting to modify a package (e.g. to install it).
  # This value should typically be 'null' (never time out) unless the Spack
  # instance only ever has a single user at a time, and only if the user
  # anticipates that a significant delay indicates that the lock attempt will
  # never succeed.
  package_lock_timeout: null

As you can see, many of the directories Spack uses can be customized. For example, you can tell Spack to install packages to a prefix outside of the $SPACK_ROOT hierarchy. Module files can be written to a central location if you are using multiple Spack instances. If you have a fast scratch file system, you can run builds from this file system with the following config.yaml:

config:
  build_stage:
    - /scratch/$user

On systems with compilers that absolutely require environment variables like LD_LIBRARY_PATH, it is possible to prevent Spack from cleaning the build environment with the dirty setting:

config:
  dirty: true

However, this is strongly discouraged, as it can pull unwanted libraries into the build.

One last setting that may be of interest to many users is the ability to customize the parallelism of Spack builds. By default, Spack installs all packages in parallel with the number of jobs equal to the number of cores on the node. For example, on a node with 16 cores, this will look like:

$ spack install --no-cache --verbose --overwrite zlib
==> Installing zlib
==> Using cached archive: /home/user/spack/var/spack/cache/zlib/zlib-1.2.11.tar.gz
==> Staging archive: /home/user/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb/zlib-1.2.11.tar.gz
==> Created stage in /home/user/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> No patches needed for zlib
==> Building zlib [Package]
==> Executing phase: 'install'
==> './configure' '--prefix=/home/user/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb'
...
==> 'make' '-j16'
...
==> 'make' '-j16' 'install'
...
==> Successfully installed zlib
  Fetch: 0.00s.  Build: 1.03s.  Total: 1.03s.
[+] /home/user/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb

As you can see, we are building with all 16 cores on the node. If you are on a shared login node, this can slow down the system for other users. If you have a strict ulimit or restriction on the number of available licenses, you may not be able to build at all with this many cores. On nodes with 64+ cores, you may not see a significant speedup of the build anyway. To limit the number of cores our build uses, set build_jobs like so:

config:
  build_jobs: 2

If we uninstall and reinstall zlib, we see that it now uses only 4 cores:

$ spack install --no-cache --verbose --overwrite zlib
==> Installing zlib
==> Using cached archive: /home/user/spack/var/spack/cache/zlib/zlib-1.2.11.tar.gz
==> Staging archive: /home/user/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb/zlib-1.2.11.tar.gz
==> Created stage in /home/user/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
==> No patches needed for zlib
==> Building zlib [Package]
==> Executing phase: 'install'
==> './configure' '--prefix=/home/user/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb'
...
==> 'make' '-j2'
...
==> 'make' '-j2' 'install'
...
==> Successfully installed zlib
  Fetch: 0.00s.  Build: 1.03s.  Total: 1.03s.
[+] /home/user/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb

Obviously, if you want to build everything in serial for whatever reason, you would set build_jobs to 1.

Examples

For examples of how other sites configure Spack, see https://github.com/spack/spack-configs. If you use Spack at your site and want to share your config files, feel free to submit a pull request!

Package Creation Tutorial

This tutorial will walk you through the steps behind building a simple package installation script. We'll focus building an mpileaks package, which is a MPI debugging tool. By creating a package file we're essentially giving Spack a recipe for how to build a particular piece of software. We're describing some of the software's dependencies, where to find the package, what commands and options are used to build the package from source, and more. Once we've specified a package's recipe, we can ask Spack to build that package in many different ways.

This tutorial assumes you have a basic familiarity with some of the Spack commands, and that you have a working version of Spack installed. If not, we suggest looking at Spack's Getting Started guide. This tutorial also assumes you have at least a beginner's-level familiarity with Python.

Also note that this document is a tutorial. It can help you get started with packaging, but is not intended to be complete. See Spack's Packaging Guide for more complete documentation on this topic.

はじめに

A few things before we get started:

  • We'll refer to the Spack installation location via the environment variable SPACK_ROOT. You should point SPACK_ROOT at wherever you have Spack installed.

  • Add $SPACK_ROOT/bin to your PATH before you start.

  • Make sure your EDITOR environment variable is set to some text editor you like.

  • We'll be writing Python code as part of this tutorial. You can find successive versions of the Python code in $SPACK_ROOT/lib/spack/docs/tutorial/examples.

Creating the Package File

We will use a separate package repository for the tutorial. Package repositories allow you to separate sets of packages that take precedence over one another. We will use the tutorial repo that ships with Spack to avoid breaking the builtin Spack packages.

$ spack repo add $SPACK_ROOT/var/spack/repos/tutorial/
==> Added repo with namespace 'tutorial'.

Spack comes with a handy command to create a new package: spack create.

This command is given the location of a package's source code, downloads the code, and sets up some basic packaging infrastructure for you. The mpileaks source code can be found on GitHub, and here's what happens when we run spack create on it:

$ spack create -t generic -f https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
==> This looks like a URL for mpileaks
==> Found 1 version of mpileaks:

  1.0  https://github.com/LLNL/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz

==> How many would you like to checksum? (default is 1, q to abort) 1
==> Downloading...
==> Fetching https://github.com/LLNL/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
############################################################################# 100.0%
==> Checksummed 1 version of mpileaks
==> Using specified package template: 'generic'
==> Created template for mpileaks package
==> Created package file: /home/spack1/spack/var/spack/repos/builtin/packages/mpileaks/package.py

And Spack should spawn a text editor with this file:

# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

#
# This is a template package file for Spack.  We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
#     spack install mpileaks
#
# You can edit this file again by typing:
#
#     spack edit mpileaks
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *


class Mpileaks(Package):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def install(self, spec, prefix):
        # FIXME: Unknown build system
        make()
        make('install')

Spack has created this file in /home/spack1/spack/var/spack/repos/builtin/packages/mpileaks/package.py. Take a moment to look over the file. There's a few placeholders that Spack has created, which we'll fill in as part of this tutorial:

  • We'll document some information about this package in the comments.

  • We'll fill in the dependency list for this package.

  • We'll fill in some of the configuration arguments needed to build this package.

For the moment, exit your editor and let's see what happens when we try to build this package:

$ spack install mpileaks
==> No binary for mpileaks found: installing from source
==> Fetching file:///mirror/mpileaks/mpileaks-1.0.tar.gz
curl: (37) Couldn't open file /mirror/mpileaks/mpileaks-1.0.tar.gz
==> Fetching from file:///mirror/mpileaks/mpileaks-1.0.tar.gz failed.
==> Fetching https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
######################################################################## 100.0%
==> Staging archive: /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-sv75n3u5ev6mljwcezisz3slooozbbxu/mpileaks-1.0.tar.gz
==> Created stage in /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-sv75n3u5ev6mljwcezisz3slooozbbxu
==> No patches needed for mpileaks
==> Building mpileaks [Package]
==> Executing phase: 'install'
==> Error: ProcessError: Command exited with status 2:
    'make' '-j16'

1 error found in build log:
     1    ==> Executing phase: 'install'
     2    ==> 'make' '-j16'
  >> 3    make: *** No targets specified and no makefile found.  Stop.

See build log for details:
  /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-sv75n3u5ev6mljwcezisz3slooozbbxu/mpileaks-1.0/spack-build.out

This obviously didn't work; we need to fill in the package-specific information. Specifically, Spack didn't try to build any of mpileaks' dependencies, nor did it use the proper configure arguments. Let's start fixing things

Package Documentation

We can bring the package.py file back into our EDITOR with the spack edit command:

$ spack edit mpileaks

Let's remove some of the FIXME comments, and add links to the mpileaks homepage and document what mpileaks does. I'm also going to cut out the Copyright clause at this point to keep this tutorial document shorter, but you shouldn't do that normally. The results of these changes can be found in $SPACK_ROOT/lib/spack/docs/tutorial/examples/1.package.py and are below. Make these changes to your package.py:

from spack import *


class Mpileaks(Package):
    """Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"  # NOQA
    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def install(self, spec, prefix):
        # FIXME: Unknown build system
        make()
        make('install')

We've filled in the comment that describes what this package does and added a link to the web site. That won't help us build yet, but it will allow Spack to provide some documentation on this package to other users:

$ spack info mpileaks
Package:   mpileaks

Description:
    Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes.

Homepage: https://github.com/hpc/mpileaks

Tags:
    None

Preferred version:
    1.0    https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz

Safe versions:
    1.0    https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz

Variants:
    None

Installation Phases:
    install

Build Dependencies:
    None

Link Dependencies:
    None

Run Dependencies:
    None

Virtual Packages:
    None

As we fill in more information about this package the spack info command will become more informative. Now let's start making this package build.

Dependencies

The mpileaks packages depends on three other package: MPI, adept-utils, and callpath. Let's add those via the depends_on command in our package.py (this version is in $SPACK_ROOT/lib/spack/docs/tutorial/examples/2.package.py):

from spack import *


class Mpileaks(Package):
    """Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    depends_on('mpi')
    depends_on('adept-utils')
    depends_on('callpath')

    def install(self, spec, prefix):
        # FIXME: Unknown build system
        make()
        make('install')

Now when we go to build mpileaks, Spack will fetch and build these dependencies before building mpileaks. Note that the mpi dependency is a different kind of beast than the adept-utils and callpath dependencies; there is no mpi package available in Spack. Instead mpi is a virtual dependency. Spack may satisfy that dependency by installing packages such as openmpi or mvapich. See the Packaging Guide for more information on virtual dependencies.

Now when we try to install this package a lot more happens:

$ spack install mpileaks
...
==> Successfully installed libdwarf from binary cache
[+] /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libdwarf-20180129-p4jeflorwlnkoq2vpuyocwrbcht2ayak
==> Installing callpath
==> Searching for binary cache of callpath
==> Installing callpath from binary cache
==> Fetching file:///mirror/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/callpath-1.0.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-callpath-1.0.4-empvyxdkc4j4pwg7gznwhbiumruey66x.spack
######################################################################## 100.0%
gpg: Signature made Sat 10 Nov 2018 05:30:21 AM UTC using RSA key ID 3B7C69B2
gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F  D6E9 9CFA 4A45 3B7C 69B2
==> Successfully installed callpath from binary cache
[+] /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/callpath-1.0.4-empvyxdkc4j4pwg7gznwhbiumruey66x
==> Installing mpileaks
==> Searching for binary cache of mpileaks
==> No binary for mpileaks found: installing from source
==> Using cached archive: /home/ubuntu/packaging/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb/mpileaks-1.0.tar.gz
==> Created stage in /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb
==> No patches needed for mpileaks
==> Building mpileaks [Package]
==> Executing phase: 'install'
==> Error: ProcessError: Command exited with status 2:
    'make' '-j16'

1 error found in build log:
     1    ==> Executing phase: 'install'
     2    ==> 'make' '-j16'
  >> 3    make: *** No targets specified and no makefile found.  Stop.

See build log for details:
  /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb/mpileaks-1.0/spack-build.out

Note that this command may take a while to run and produce more output if you don't have an MPI already installed or configured in Spack.

Now Spack has identified and made sure all of our dependencies have been built. It found the openmpi package that will satisfy our mpi dependency, and the callpath and adept-utils package to satisfy our concrete dependencies.

Debugging Package Builds

Our mpileaks package is still not building. It may be obvious to many of you that we never ran the configure script. Let's add a call to configure() to the top of the install routine. The resulting package.py is in $SPACK_ROOT/lib/spack/docs/tutorial/examples/3.package.py:

from spack import *


class Mpileaks(Package):
    """Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    depends_on('mpi')
    depends_on('adept-utils')
    depends_on('callpath')

    def install(self, spec, prefix):
        configure()
        make()
        make('install')

If we re-run we still get errors:

$ spack install mpileask
...
==> Installing mpileaks
==> Searching for binary cache of mpileaks
==> Finding buildcaches in /mirror/build_cache
==> No binary for mpileaks found: installing from source
==> Using cached archive: /home/ubuntu/packaging/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb/mpileaks-1.0.tar.gz
==> Created stage in /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb
==> No patches needed for mpileaks
==> Building mpileaks [Package]
==> Executing phase: 'install'
==> Error: ProcessError: Command exited with status 1:
    './configure'

1 error found in build log:
     25    checking for /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-
           5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx/bin/mpicc... /home/ubuntu/pa
           ckaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.1.3-3njc4q5p
           qdpptq6jvqjrezkffwokv2sx/bin/mpicc
     26    Checking whether /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/
           gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx/bin/mpicc responds to '-
           showme:compile'... no
     27    Checking whether /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/
           gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx/bin/mpicc responds to '-
           showme'... no
     28    Checking whether /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/
           gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx/bin/mpicc responds to '-
           compile-info'... no
     29    Checking whether /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/
           gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx/bin/mpicc responds to '-
           show'... no
     30    ./configure: line 4809: Echo: command not found
  >> 31    configure: error: unable to locate adept-utils installation

See build log for details:
  /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb/mpileaks-1.0/spack-build.out

Again, the problem may be obvious. But let's pretend we're not all intelligent developers and use this opportunity spend some time debugging. We have a few options that can tell us about what's going wrong:

As per the error message, Spack has given us a spack-build.out debug log:

==> Executing phase: 'install'
==> './configure'
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /home/spack1/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/spack1/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /home/spack1/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /home/spack1/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /home/spack1/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /home/spack1/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /home/spack1/spack/lib/spack/env/gcc/g++... gcc3
checking for /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc... /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc
Checking whether /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation

This gives us the output from the build, and mpileaks isn't finding its adept-utils package. Spack has automatically added the include and library directories of adept-utils to the compiler's search path, but some packages like mpileaks can sometimes be picky and still want things spelled out on their command line. But let's continue to pretend we're not brilliant developers, and explore some other debugging paths:

We can also enter the build area and try to manually run the build:

$ spack build-env mpileaks bash
$ spack cd mpileaks

The spack env command spawned a new shell that contains the same environment that Spack used to build the mpileaks package (you can substitute bash for your favorite shell). The spack cd command changed our working dirctory to the last attempted build for mpileaks. From here we can manually re-run the build:

$ ./configure
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /home/spack1/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /home/spack1/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /home/spack1/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /home/spack1/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /home/spack1/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /home/spack1/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /home/spack1/spack/lib/spack/env/gcc/g++... gcc3
checking for /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc... /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc
Checking whether /home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation

We're seeing the same error, but now we're in a shell where we can run the command ourselves and debug as needed. We could, for example, run ./configure --help to see what options we can use to specify dependencies.

We can use the exit command to leave the shell spawned by spack env.

Specifying Configure Arguments

Let's add the configure arguments to the mpileaks' package.py. This version can be found in $SPACK_ROOT/lib/spack/docs/tutorial/examples/4.package.py:

from spack import *


class Mpileaks(Package):
    """Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    depends_on('mpi')
    depends_on('adept-utils')
    depends_on('callpath')

    def install(self, spec, prefix):
        configure('--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
                  '--with-callpath=%s' % self.spec['callpath'].prefix,
                  '--prefix=%s' % self.spec.prefix)
        make()
        make('install')

This is all we need for working mpileaks! If we install now we'll see:

$ spack install mpileaks
...
==> Installing mpileaks
==> Searching for binary cache of mpileaks
==> Finding buildcaches in /mirror/build_cache
==> No binary for mpileaks found: installing from source
==> Using cached archive: /home/ubuntu/packaging/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb/mpileaks-1.0.tar.gz
==> Created stage in /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb
==> No patches needed for mpileaks
==> Building mpileaks [Package]
==> Executing phase: 'install'
==> Successfully installed mpileaks
  Fetch: 0.00s.  Build: 9.41s.  Total: 9.41s.
[+] /home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpileaks-1.0-csoikctsalli4cdkkdk377gprkc472rb

There are some special circumstances in package that are worth highlighting. Normally spack would have automatically detected that mpileaks was an Autotools-based package when we ran spack create and made it an AutoToolsPackage class (except we added the -t generic option to skip this). Instead of a full install routine we would have just written:

def configure_args(self):
    args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
            '--with-callpath=%s' % self.spec['callpath'].prefix]
    return args

Similarly, if this had been a CMake-based package we would have been filling in a cmake_args function instead of configure_args. There are similar default package types for many build environments that will be discussed later in the tutorial.

Variants

We have a successful mpileaks build, but let's take some time to improve it. mpileaks has a build-time option to truncate parts of the stack that it walks. Let's add a variant to allow users to set this when they build in Spack.

To do this, we'll add a variant to our package, as per the following (see $SPACK_ROOT/lib/spack/docs/tutorial/examples/5.package.py):

from spack import *


class Mpileaks(Package):
    """Tool to detect and report MPI objects like MPI_Requests and
    MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    variant('stackstart', values=int, default=0, description='Specify the number of stack frames to truncate.')

    depends_on('mpi')
    depends_on('adept-utils')
    depends_on('callpath')

    def install(self, spec, prefix):
        stackstart = int(self.spec.variants['stackstart'].value)
        confargs = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
                    '--with-callpath=%s' % self.spec['callpath'].prefix,
                    '--prefix=%s' % self.spec.prefix]
        if stackstart:
            confargs.extend(['--with-stack-start-c=%s' % stackstart,
                             '--with-stack-start-fortran=%s' % stackstart])
        configure(*confargs)
        make()
        make('install')

We've added the variant stackstart, and given it a default value of 0. If we install now we can see the stackstart variant added to the configure line (output truncated for length):

$ spack install --verbose mpileaks stackstart=4
...
==> Installing mpileaks
==> Searching for binary cache of mpileaks
==> Finding buildcaches in /mirror/build_cache
==> No binary for mpileaks found: installing from source
==> Using cached archive: /home/ubuntu/packaging/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-meufjojkxve3l7rci2mbud3faidgplto/mpileaks-1.0.tar.gz
==> Created stage in /home/ubuntu/packaging/spack/var/spack/stage/mpileaks-1.0-meufjojkxve3l7rci2mbud3faidgplto
==> No patches needed for mpileaks
==> Building mpileaks [Package]
==> Executing phase: 'install'
==> './configure' '--with-adept-utils=/home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/adept-utils-1.0.1-7tippnvo5g76wpijk7x5kwfpr3iqiaen' '--with-callpath=/home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/callpath-1.0.4-empvyxdkc4j4pwg7gznwhbiumruey66x' '--prefix=/home/ubuntu/packaging/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpileaks-1.0-meufjojkxve3l7rci2mbud3faidgplto' '--with-stack-start-c=4' '--with-stack-start-fortran=4'

The Spec Object

This tutorial has glossed over a few important features, which weren't too relevant for mpileaks but may be useful for other packages. There were several places we references the self.spec object. This is a powerful class for querying information about what we're building. For example, you could use the spec to query information about how a package's dependencies were built, or what compiler was being used, or what version of a package is being installed. Full documentation can be found in the Packaging Guide, but here's some quick snippets with common queries:

  • Am I building mpileaks version 1.1 or greater?

if self.spec.satisfies('@1.1:'):
  # Do things needed for 1.1+
  • Is openmpi the MPI I'm building with?

if self.spec['mpi'].name == 'openmpi':
  # Do openmpi things
  • Am I building with gcc version less than 5.0.0:

if self.spec.satisfies('%gcc@:5.0.0'):
  # Add arguments specific to gcc's earlier than 5.0.0
  • Am I built with the debug variant:

if self.spec.satisfies('+debug'):
  # Add -g option to configure flags
  • Is my dyninst dependency greater than version 8.0?

if self.spec['dyninst'].satisfies('@8.0:'):
 # Use newest dyninst options

More examples can be found in the thousands of packages already added to Spack in $SPACK_ROOT/var/spack/repos/builtin/packages.

Good Luck!

To ensure that future sections of the tutorial run properly, please uninstall mpileaks and remove the tutorial repo from your configuration.

Environments, spack.yaml, and spack.lock

We've shown you how to install and remove packages with Spack. You can use spack install to install packages, spack uninstall to remove them, and spack find to look at and query what is installed. We've also shown you how to customize Spack's installation with configuration files like packages.yaml.

If you build a lot of software, or if you work on multiple projects, managing everything in one place can be overwhelming. The default spack find output may contain many packages, but you may want to just focus on packages a particular project. Moreover, you may want to include special configuration with your package groups, e.g., to build all the packages in the same group the same way.

Spack environments provide a way to handle these problems.

Environment basics

Let's look at the output of spack find at this point in the tutorial.

$ bin/spack find
==> 70 installed packages
-- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
tcl@8.6.8  zlib@1.2.8  zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
zlib@1.2.11

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
adept-utils@1.0.1  hdf5@1.10.4          mpc@1.1.0               perl@5.26.2
autoconf@2.69      hdf5@1.10.4          mpfr@3.1.6              pkgconf@1.4.2
automake@1.16.1    hdf5@1.10.4          mpich@3.2.1             readline@7.0
boost@1.68.0       hwloc@1.11.9         mpileaks@1.0            suite-sparse@5.3.0
bzip2@1.0.6        hypre@2.15.1         mumps@5.1.1             tar@1.30
callpath@1.0.4     hypre@2.15.1         mumps@5.1.1             tcl@8.6.8
cmake@3.12.3       isl@0.18             ncurses@6.1             tcl@8.6.8
diffutils@3.6      libdwarf@20180129    netcdf@4.6.1            texinfo@6.5
dyninst@9.3.2      libiberty@2.31.1     netcdf@4.6.1            trilinos@12.12.1
elfutils@0.173     libpciaccess@0.13.5  netlib-scalapack@2.0.2  trilinos@12.12.1
findutils@4.6.0    libsigsegv@2.11      netlib-scalapack@2.0.2  util-macros@1.19.1
gcc@7.2.0          libtool@2.4.6        numactl@2.0.11          xz@5.2.4
gdbm@1.14.1        libxml2@2.9.8        openblas@0.3.3          zlib@1.2.8
gettext@0.19.8.1   m4@1.4.18            openmpi@3.1.3           zlib@1.2.8
glm@0.9.7.1        matio@1.5.9          openssl@1.0.2o          zlib@1.2.11
gmp@6.1.2          matio@1.5.9          parmetis@4.0.3
hdf5@1.10.4        metis@5.1.0          parmetis@4.0.3

This is a complete, but cluttered view. There are packages built with both openmpi and mpich, as well as multiple variants of other packages, like zlib. The query mechanism we learned about in spack find can help, but it would be nice if we could start from a clean slate without losing what we've already done.

Creating and activating environments

The spack env command can help. Let's create a new environment:

$ spack env create myproject
==> Created environment 'myproject' in ~/spack/var/spack/environments/myproject

An environment is a virtualized spack instance that you can use for a specific purpose. You can see the environments we've created so far like this:

$ spack env list
==> 1 environments
    myproject

And you can activate an environment with spack env activate:

$ spack env activate myproject

Once you enter an environment, spack find shows only what is in the current environment. That's nothing, so far:

$ spack find
==> In environment myproject
==> No root specs

==> 0 installed packages

The spack find output is still slightly different. It tells you that you're in the myproject environment, so that you don't panic when you see that there is nothing installed. It also says that there are no root specs. We'll get back to what that means later.

If you only want to check what environment you are in, you can use spack env status:

$ spack env status
==> In environment myproject

And, if you want to leave this environment and go back to normal Spack, you can use spack env deactivate. We like to use the despacktivate alias (which Spack sets up automatically) for short:

$ despacktivate     # short alias for `spack env deactivate`
$ spack env status
==> No active environment
$ spack find
netcdf@4.6.1            readline@7.0        zlib@1.2.11
diffutils@3.6      hdf5@1.10.4       m4@1.4.18            netcdf@4.6.1            suite-sparse@5.3.0
dyninst@10.0.0     hwloc@1.11.9      matio@1.5.9          netlib-scalapack@2.0.2  tar@1.30
elfutils@0.173     hypre@2.15.1      matio@1.5.9          netlib-scalapack@2.0.2  tcl@8.6.8
findutils@4.6.0    hypre@2.15.1      metis@5.1.0          numactl@2.0.11          tcl@8.6.8
gcc@7.2.0          intel-tbb@2019    mpc@1.1.0            openblas@0.3.3          texinfo@6.5~
Installing packages

Ok, now that we understand how creation and activation work, let's go back to myproject and install a few packages:

$ spack env activate myproject
$ spack install tcl
==> tcl is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-qhwyccywhx2i6s7ob2gvjrjtj3rnfuqt
$ spack install trilinos
==> trilinos is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-rlsruavxqvwk2tgxzxboclbo6ykjf54r
$ spack find
==> In environment myproject
==> Root specs
tcl  trilinos

==> 22 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
boost@1.68.0  hwloc@1.11.9         matio@1.5.9   netlib-scalapack@2.0.2  parmetis@4.0.3      xz@5.2.4
bzip2@1.0.6   hypre@2.15.1         metis@5.1.0   numactl@2.0.11          suite-sparse@5.3.0  zlib@1.2.11
glm@0.9.7.1   libpciaccess@0.13.5  mumps@5.1.1   openblas@0.3.3          tcl@8.6.8
hdf5@1.10.4   libxml2@2.9.8        netcdf@4.6.1  openmpi@3.1.3           trilinos@12.12.1

We've installed tcl and trilinos in our environment, along with all of their dependencies. We call tcl and trilinos the roots because we asked for them explicitly. The other 20 packages listed under "installed packages" are present because they were needed as dependencies. So, these are the roots of the packages' dependency graph.

The "<package> is already installed" messages above are generated because we already installed these packages in previous steps of the tutorial, and we don't have to rebuild them to put them in an environment.

Now let's create another project. We'll call this one myproject2:

$ spack env create myproject2
==> Created environment 'myproject2' in ~/spack/var/spack/environments/myproject2
$ spack env activate myproject2
$ spack install hdf5
==> hdf5 is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-ozyvmhzdew66byarohm4p36ep7wtcuiw
$ spack install trilinos
==> trilinos is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-rlsruavxqvwk2tgxzxboclbo6ykjf54r
$ spack find
==> In environment myproject2
==> Root specs
hdf5  trilinos

==> 22 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
boost@1.68.0  hdf5@1.10.4          libxml2@2.9.8  netcdf@4.6.1            openmpi@3.1.3       xz@5.2.4
bzip2@1.0.6   hwloc@1.11.9         matio@1.5.9    netlib-scalapack@2.0.2  parmetis@4.0.3      zlib@1.2.11
glm@0.9.7.1   hypre@2.15.1         metis@5.1.0    numactl@2.0.11          suite-sparse@5.3.0
hdf5@1.10.4   libpciaccess@0.13.5  mumps@5.1.1    openblas@0.3.3          trilinos@12.12.1

Now we have two environments: one with tcl and trilinos, and another with hdf5 and trilinos.

We can uninstall trilinos from myproject2 as you would expect:

$ spack uninstall trilinos
==> The following packages will be uninstalled:

    -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
    rlsruav trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
==> Do you want to proceed? [y/N] y
$ spack find
==> In environment myproject2
==> Root specs
hdf5

==> 8 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
hdf5@1.10.4   libpciaccess@0.13.5  numactl@2.0.11  xz@5.2.4
hwloc@1.11.9  libxml2@2.9.8        openmpi@3.1.3   zlib@1.2.11

Now there is only one root spec, hdf5, which requires fewer additional dependencies.

However, we still needed trilinos for the myproject environment! What happened to it? Let's switch back and see.

$ despacktivate
$ spack env activate myproject
$ spack find
==> In environment myproject
==> Root specs
tcl  trilinos

==> 22 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
boost@1.68.0  hwloc@1.11.9         matio@1.5.9   netlib-scalapack@2.0.2  parmetis@4.0.3      xz@5.2.4
bzip2@1.0.6   hypre@2.15.1         metis@5.1.0   numactl@2.0.11          suite-sparse@5.3.0  zlib@1.2.11
glm@0.9.7.1   libpciaccess@0.13.5  mumps@5.1.1   openblas@0.3.3          tcl@8.6.8
hdf5@1.10.4   libxml2@2.9.8        netcdf@4.6.1  openmpi@3.1.3           trilinos@12.12.1

Spack is smart enough to realize that trilinos is still present in the other environment. Trilinos won't actually be uninstalled unless it is no longer needed by any environments or packages. If it is still needed, it is only removed from the environment.

Dealing with many specs at once

In the above examples, we just used install and uninstall. There are other ways to deal with groups of packages, as well.

Adding specs

Let's go back to our first myproject environment and add a few specs instead of installing them:

$ spack add hdf5
==> Adding hdf5 to environment myproject
$ spack add gmp
==> Adding mumps to environment myproject
$ spack find
==> In environment myproject
==> Root specs
gmp  hdf5  tcl  trilinos

==> 22 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
boost@1.68.0  hwloc@1.11.9         matio@1.5.9   netlib-scalapack@2.0.2  parmetis@4.0.3      xz@5.2.4
bzip2@1.0.6   hypre@2.15.1         metis@5.1.0   numactl@2.0.11          suite-sparse@5.3.0  zlib@1.2.11
glm@0.9.7.1   libpciaccess@0.13.5  mumps@5.1.1   openblas@0.3.3          tcl@8.6.8
hdf5@1.10.4   libxml2@2.9.8        netcdf@4.6.1  openmpi@3.1.3           trilinos@12.12.1

Let's take a close look at what happened. The two packages we added, hdf5 and gmp, are present, but they're not installed in the environment yet. spack add just adds roots to the environment, but it does not automatically install them.

We can install all the as-yet uninstalled packages in an environment by simply running spack install with no arguments:

$ spack install
==> Concretizing hdf5
[+]  ozyvmhz  hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
[+]  3njc4q5      ^openmpi@3.1.3%gcc@5.4.0~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
[+]  43tkw5m          ^hwloc@1.11.9%gcc@5.4.0~cairo~cuda+libxml2+pci+shared arch=linux-ubuntu16.04-x86_64
[+]  5urc6tc              ^libpciaccess@0.13.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf                  ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc                      ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp                          ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a                  ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  milz7fm                  ^util-macros@1.19.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  wpexsph              ^libxml2@2.9.8%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
[+]  teneqii                  ^xz@5.2.4%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn                  ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
[+]  ft463od              ^numactl@2.0.11%gcc@5.4.0 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe                  ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa                      ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo                          ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                              ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3o765ou                                  ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  rymw7im                  ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
==> Concretizing gmp
[+]  qc4qcfz  gmp@6.1.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe      ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc          ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp              ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa          ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo              ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                  ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3o765ou                      ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a                          ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  rymw7im      ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf      ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
==> Installing environment myproject
==> tcl is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/tcl-8.6.8-qhwyccywhx2i6s7ob2gvjrjtj3rnfuqt
==> trilinos is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-rlsruavxqvwk2tgxzxboclbo6ykjf54r
==> hdf5 is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.4-ozyvmhzdew66byarohm4p36ep7wtcuiw
==> gmp is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gmp-6.1.2-qc4qcfz4monpllc3nqupdo7vwinf73sw

Spack will concretize the new roots, and install everything you added to the environment. Now we can see the installed roots in the output of spack find:

$ spack find
==> In environment myproject
==> Root specs
gmp  hdf5  tcl  trilinos

==> 24 installed packages
-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
boost@1.68.0  hdf5@1.10.4   libpciaccess@0.13.5  mumps@5.1.1             openblas@0.3.3      tcl@8.6.8
bzip2@1.0.6   hdf5@1.10.4   libxml2@2.9.8        netcdf@4.6.1            openmpi@3.1.3       trilinos@12.12.1
glm@0.9.7.1   hwloc@1.11.9  matio@1.5.9          netlib-scalapack@2.0.2  parmetis@4.0.3      xz@5.2.4
gmp@6.1.2     hypre@2.15.1  metis@5.1.0          numactl@2.0.11          suite-sparse@5.3.0  zlib@1.2.11

We can build whole environments this way, by adding specs and installing all at once, or we can install them with the usual install and uninstall portions. The advantage to doing them all at once is that we don't have to write a script outside of Spack to automate this, and we can kick off a large build of many packages easily.

Configuration

So far, myproject does not have any special configuration associated with it. The specs concretize using Spack's defaults:

$ spack spec hypre
Input spec
--------------------------------
hypre

Concretized
--------------------------------
hypre@2.15.1%gcc@5.4.0~debug~int64+internal-superlu+mpi+shared arch=linux-ubuntu16.04-x86_64
    ^openblas@0.3.3%gcc@5.4.0 cpu_target= ~ilp64 patches=47cfa7a952ac7b2e4632c73ae199d69fb54490627b66a62c681e21019c4ddc9d,714aea33692304a50bd0ccde42590c176c82ded4a8ac7f06e573dc8071929c33 +pic+shared threads=none ~virtual_machine arch=linux-ubuntu16.04-x86_64
    ^openmpi@3.1.3%gcc@5.4.0~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
        ^hwloc@1.11.9%gcc@5.4.0~cairo~cuda+libxml2+pci+shared arch=linux-ubuntu16.04-x86_64
            ^libpciaccess@0.13.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                    ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                        ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^util-macros@1.19.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
            ^libxml2@2.9.8%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
                ^xz@5.2.4%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
            ^numactl@2.0.11%gcc@5.4.0 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
                ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                    ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
                        ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                            ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                                ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64

You may want to add extra configuration to your environment. You can see how your environment is configured using spack config get:

$ spack config get
# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  # add package specs to the `specs` list
  specs: [tcl, trilinos, hdf5, gmp]

It turns out that this is a special configuration format where Spack stores the state for the environment. Currently, the file is just a spack: header and a list of specs. These are the roots.

You can edit this file to add your own custom configuration. Spack provides a shortcut to do that:

spack config edit

You should now see the same file, and edit it to look like this:

# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  packages:
    all:
      providers:
        mpi: [mpich]

  # add package specs to the `specs` list
  specs: [tcl, trilinos, hdf5, gmp]

Now if we run spack spec again in the environment, specs will concretize with mpich as the MPI implementation:

$ spack spec hypre
Input spec
--------------------------------
hypre

Concretized
--------------------------------
hypre@2.15.1%gcc@5.4.0~debug~int64+internal-superlu+mpi+shared arch=linux-ubuntu16.04-x86_64
    ^mpich@3.2.1%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
        ^findutils@4.6.0%gcc@5.4.0 patches=84b916c0bf8c51b7e7b28417692f0ad3e7030d1f3c248ba77c42ede5c1c5d11e,bd9e4e5cc280f9753ae14956c4e4aa17fe7a210f55dd6c84aa60b12d106d47a2 arch=linux-ubuntu16.04-x86_64
            ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
                    ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
                    ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                        ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
                            ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
                                ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
            ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
            ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
            ^texinfo@6.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
    ^openblas@0.3.3%gcc@5.4.0 cpu_target= ~ilp64 patches=47cfa7a952ac7b2e4632c73ae199d69fb54490627b66a62c681e21019c4ddc9d,714aea33692304a50bd0ccde42590c176c82ded4a8ac7f06e573dc8071929c33 +pic+shared threads=none ~virtual_machine arch=linux-ubuntu16.04-x86_64

In addition to the specs section, an environment's configuration can contain any of the configuration options from Spack's various config sections. You can add custom repositories, a custom install location, custom compilers, or custom external packages, in addition to the package preferences we show here.

But now we have a problem. We already installed part of this environment with openmpi, but now we want to install it with mpich.

You can run spack concretize inside of an environment to concretize all of its specs. We can run it here:

$ spack concretize -f
==> Concretizing tcl
[+]  qhwyccy  tcl@8.6.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn      ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
==> Concretizing trilinos
[+]  kqc52mo  trilinos@12.12.1%gcc@5.4.0~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2 arch=linux-ubuntu16.04-x86_64
[+]  zbgfxap      ^boost@1.68.0%gcc@5.4.0+atomic+chrono~clanglibcpp cxxstd=default +date_time~debug+exception+filesystem+graph~icu+iostreams+locale+log+math~mpi+multithreaded~numpy patches=2ab6c72d03dec6a4ae20220a9dfd5c8c572c5294252155b85c6874d97c323199 +program_options~python+random+regex+serialization+shared+signals~singlethreaded+system~taggedlayout+test+thread+timer~versionedlayout+wave arch=linux-ubuntu16.04-x86_64
[+]  ufczdvs          ^bzip2@1.0.6%gcc@5.4.0+shared arch=linux-ubuntu16.04-x86_64
[+]  2rhuivg              ^diffutils@3.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn          ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
[+]  otafqzh      ^cmake@3.12.3%gcc@5.4.0~doc+ncurses+openssl+ownlibs patches=dd3a40d4d92f6b2158b87d6fb354c277947c776424aa03f6dc8096cf3135f5d0 ~qt arch=linux-ubuntu16.04-x86_64
[+]  3o765ou          ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a              ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  b4y3w3b          ^openssl@1.0.2o%gcc@5.4.0+systemcerts arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa              ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo                  ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                      ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  jnw622j      ^glm@0.9.7.1%gcc@5.4.0 build_type=RelWithDebInfo arch=linux-ubuntu16.04-x86_64
[+]  xxd7syh      ^hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran+hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
[+]  p3f7p2r          ^mpich@3.2.1%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
[+]  d4iajxs              ^findutils@4.6.0%gcc@5.4.0 patches=84b916c0bf8c51b7e7b28417692f0ad3e7030d1f3c248ba77c42ede5c1c5d11e,bd9e4e5cc280f9753ae14956c4e4aa17fe7a210f55dd6c84aa60b12d106d47a2 arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe                  ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc                      ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp                          ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  rymw7im                  ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf                  ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  zs7a2pc                  ^texinfo@6.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  obewuoz      ^hypre@2.15.1%gcc@5.4.0~debug~int64~internal-superlu+mpi+shared arch=linux-ubuntu16.04-x86_64
[+]  cyeg2yi          ^openblas@0.3.3%gcc@5.4.0 cpu_target= ~ilp64 patches=47cfa7a952ac7b2e4632c73ae199d69fb54490627b66a62c681e21019c4ddc9d,714aea33692304a50bd0ccde42590c176c82ded4a8ac7f06e573dc8071929c33 +pic+shared threads=none ~virtual_machine arch=linux-ubuntu16.04-x86_64
[+]  gvyqldh      ^matio@1.5.9%gcc@5.4.0+hdf5+shared+zlib arch=linux-ubuntu16.04-x86_64
[+]  3wnvp4j      ^metis@5.1.0%gcc@5.4.0 build_type=Release ~gdb~int64 patches=4991da938c1d3a1d3dea78e49bbebecba00273f98df2a656e38b83d55b281da1 ~real64+shared arch=linux-ubuntu16.04-x86_64
[+]  cumcj5a      ^mumps@5.1.1%gcc@5.4.0+complex+double+float~int64~metis+mpi~parmetis~ptscotch~scotch+shared arch=linux-ubuntu16.04-x86_64
[+]  p7iln2p          ^netlib-scalapack@2.0.2%gcc@5.4.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
[+]  wmmx5sg      ^netcdf@4.6.1%gcc@5.4.0~dap~hdf4 maxdims=1024 maxvars=8192 +mpi~parallel-netcdf+shared arch=linux-ubuntu16.04-x86_64
[+]  jehtata      ^parmetis@4.0.3%gcc@5.4.0 build_type=RelWithDebInfo ~gdb patches=4f892531eb0a807eb1b82e683a416d3e35154a455274cf9b162fb02054d11a5b,50ed2081bc939269689789942067c58b3e522c269269a430d5d34c00edbc5870,704b84f7c7444d4372cb59cca6e1209df4ef3b033bc4ee3cf50f369bce972a9d +shared arch=linux-ubuntu16.04-x86_64
[+]  zaau4ki      ^suite-sparse@5.3.0%gcc@5.4.0~cuda~openmp+pic~tbb arch=linux-ubuntu16.04-x86_64
==> Concretizing hdf5
 -   zjgyn3w  hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
[+]  p3f7p2r      ^mpich@3.2.1%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
[+]  d4iajxs          ^findutils@4.6.0%gcc@5.4.0 patches=84b916c0bf8c51b7e7b28417692f0ad3e7030d1f3c248ba77c42ede5c1c5d11e,bd9e4e5cc280f9753ae14956c4e4aa17fe7a210f55dd6c84aa60b12d106d47a2 arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe              ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc                  ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp                      ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa                  ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo                      ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                          ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3o765ou                              ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a                                  ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  rymw7im              ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf              ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  zs7a2pc              ^texinfo@6.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn      ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
==> Concretizing gmp
[+]  qc4qcfz  gmp@6.1.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe      ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc          ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp              ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa          ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo              ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                  ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3o765ou                      ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a                          ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  rymw7im      ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf      ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64

Now, all the specs in the environment are concrete and ready to be installed with mpich as the MPI implementation.

Normally, we could just run spack config edit, edit the environment configuration, spack add some specs, and spack install.

But, when we already have installed packages in the environment, we have to force everything in the environment to be re-concretized using spack concretize -f. Then we can re-run spack install.

spack.yaml and spack.lock

So far we've shown you how to interact with environments from the command line, but they also have a file-based interface that can be used by developers and admins to manage workflows for projects.

In this section we'll dive a little deeper to see how environments are implemented, and how you could use this in your day-to-day development.

spack.yaml

Earlier, we changed an environment's configuration using spack config edit. We were actually editing a special file called spack.yaml. Let's take a look.

We can get directly to the current environment's location using spack cd:

$ spack cd -e myproject
$ pwd
~/spack/var/spack/environments/myproject
$ ls
spack.lock  spack.yaml

We notice two things here. First, the environment is just a directory inside of var/spack/environments within the Spack installation. Second, it contains two important files: spack.yaml and spack.lock.

spack.yaml is the configuration file for environments that we've already seen, but it does not have to live inside Spack. If you create an environment using spack env create, it is managed by Spack in the var/spack/environments directory, and you can refer to it by name.

You can actually put a spack.yaml file anywhere, and you can use it to bundle an environment, or a list of dependencies to install, with your project. Let's make a simple project:

$ cd
$ mkdir code
$ cd code
$ spack env create -d .
==> Created environment in ~/code

Here, we made a new directory called code, and we used the -d option to create an environment in it.

What really happened?

$ ls
spack.yaml
$ cat spack.yaml
# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  # add package specs to the `specs` list
  specs: []

Spack just created a spack.yaml file in the code directory, with an empty list of root specs. Now we have a Spack environment, in a directory, that we can use to manage dependencies. Suppose your project depends on boost, trilinos, and openmpi. You can add these to your spec list:

# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  # add package specs to the `specs` list
  specs:
  - boost
  - trilinos
  - openmpi

And now anyone who uses the code repository can use this format to install the project's dependencies. They need only clone the repository, cd into it, and type spack install:

$ spack install
==> Concretizing boost
[+]  zbgfxap  boost@1.68.0%gcc@5.4.0+atomic+chrono~clanglibcpp cxxstd=default +date_time~debug+exception+filesystem+graph~icu+iostreams+locale+log+math~mpi+multithreaded~numpy patches=2ab6c72d03dec6a4ae20220a9dfd5c8c572c5294252155b85c6874d97c323199 +program_options~python+random+regex+serialization+shared+signals~singlethreaded+system~taggedlayout+test+thread+timer~versionedlayout+wave arch=linux-ubuntu16.04-x86_64
[+]  ufczdvs      ^bzip2@1.0.6%gcc@5.4.0+shared arch=linux-ubuntu16.04-x86_64
[+]  2rhuivg          ^diffutils@3.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn      ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
==> Concretizing trilinos
[+]  rlsruav  trilinos@12.12.1%gcc@5.4.0~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~cgns~complex~dtk+epetra+epetraext+exodus+explicit_template_instantiation~float+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2~intrepid~intrepid2~isorropia+kokkos+metis~minitensor+ml+muelu+mumps~nox~openmp~phalanx~piro~pnetcdf~python~rol~rythmos+sacado~shards+shared~stk+suite-sparse~superlu~superlu-dist~teko~tempus+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2 arch=linux-ubuntu16.04-x86_64
[+]  zbgfxap      ^boost@1.68.0%gcc@5.4.0+atomic+chrono~clanglibcpp cxxstd=default +date_time~debug+exception+filesystem+graph~icu+iostreams+locale+log+math~mpi+multithreaded~numpy patches=2ab6c72d03dec6a4ae20220a9dfd5c8c572c5294252155b85c6874d97c323199 +program_options~python+random+regex+serialization+shared+signals~singlethreaded+system~taggedlayout+test+thread+timer~versionedlayout+wave arch=linux-ubuntu16.04-x86_64
[+]  ufczdvs          ^bzip2@1.0.6%gcc@5.4.0+shared arch=linux-ubuntu16.04-x86_64
[+]  2rhuivg              ^diffutils@3.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn          ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
[+]  otafqzh      ^cmake@3.12.3%gcc@5.4.0~doc+ncurses+openssl+ownlibs patches=dd3a40d4d92f6b2158b87d6fb354c277947c776424aa03f6dc8096cf3135f5d0 ~qt arch=linux-ubuntu16.04-x86_64
[+]  3o765ou          ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a              ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  b4y3w3b          ^openssl@1.0.2o%gcc@5.4.0+systemcerts arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa              ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo                  ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                      ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  jnw622j      ^glm@0.9.7.1%gcc@5.4.0 build_type=RelWithDebInfo arch=linux-ubuntu16.04-x86_64
[+]  oqwnui7      ^hdf5@1.10.4%gcc@5.4.0~cxx~debug~fortran+hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
[+]  3njc4q5          ^openmpi@3.1.3%gcc@5.4.0~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
[+]  43tkw5m              ^hwloc@1.11.9%gcc@5.4.0~cairo~cuda+libxml2+pci+shared arch=linux-ubuntu16.04-x86_64
[+]  5urc6tc                  ^libpciaccess@0.13.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf                      ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc                          ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp                              ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  milz7fm                      ^util-macros@1.19.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  wpexsph                  ^libxml2@2.9.8%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
[+]  teneqii                      ^xz@5.2.4%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ft463od                  ^numactl@2.0.11%gcc@5.4.0 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe                      ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  rymw7im                      ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  fshksdp      ^hypre@2.15.1%gcc@5.4.0~debug~int64~internal-superlu+mpi+shared arch=linux-ubuntu16.04-x86_64
[+]  cyeg2yi          ^openblas@0.3.3%gcc@5.4.0 cpu_target= ~ilp64 patches=47cfa7a952ac7b2e4632c73ae199d69fb54490627b66a62c681e21019c4ddc9d,714aea33692304a50bd0ccde42590c176c82ded4a8ac7f06e573dc8071929c33 +pic+shared threads=none ~virtual_machine arch=linux-ubuntu16.04-x86_64
[+]  lmzdgss      ^matio@1.5.9%gcc@5.4.0+hdf5+shared+zlib arch=linux-ubuntu16.04-x86_64
[+]  3wnvp4j      ^metis@5.1.0%gcc@5.4.0 build_type=Release ~gdb~int64 patches=4991da938c1d3a1d3dea78e49bbebecba00273f98df2a656e38b83d55b281da1 ~real64+shared arch=linux-ubuntu16.04-x86_64
[+]  acsg2dz      ^mumps@5.1.1%gcc@5.4.0+complex+double+float~int64~metis+mpi~parmetis~ptscotch~scotch+shared arch=linux-ubuntu16.04-x86_64
[+]  wotpfwf          ^netlib-scalapack@2.0.2%gcc@5.4.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
[+]  mhm4izp      ^netcdf@4.6.1%gcc@5.4.0~dap~hdf4 maxdims=1024 maxvars=8192 +mpi~parallel-netcdf+shared arch=linux-ubuntu16.04-x86_64
[+]  uv6h3sq      ^parmetis@4.0.3%gcc@5.4.0 build_type=RelWithDebInfo ~gdb patches=4f892531eb0a807eb1b82e683a416d3e35154a455274cf9b162fb02054d11a5b,50ed2081bc939269689789942067c58b3e522c269269a430d5d34c00edbc5870,704b84f7c7444d4372cb59cca6e1209df4ef3b033bc4ee3cf50f369bce972a9d +shared arch=linux-ubuntu16.04-x86_64
[+]  zaau4ki      ^suite-sparse@5.3.0%gcc@5.4.0~cuda~openmp+pic~tbb arch=linux-ubuntu16.04-x86_64
==> Concretizing openmpi
[+]  3njc4q5  openmpi@3.1.3%gcc@5.4.0~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
[+]  43tkw5m      ^hwloc@1.11.9%gcc@5.4.0~cairo~cuda+libxml2+pci+shared arch=linux-ubuntu16.04-x86_64
[+]  5urc6tc          ^libpciaccess@0.13.5%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  o2pfwjf              ^libtool@2.4.6%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  suf5jtc                  ^m4@1.4.18%gcc@5.4.0 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=linux-ubuntu16.04-x86_64
[+]  fypapcp                      ^libsigsegv@2.11%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  fovrh7a              ^pkgconf@1.4.2%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  milz7fm              ^util-macros@1.19.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  wpexsph          ^libxml2@2.9.8%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
[+]  teneqii              ^xz@5.2.4%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  5nus6kn              ^zlib@1.2.11%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
[+]  ft463od          ^numactl@2.0.11%gcc@5.4.0 patches=592f30f7f5f757dfc239ad0ffd39a9a048487ad803c26b419e0f96b8cda08c1a arch=linux-ubuntu16.04-x86_64
[+]  3sx2gxe              ^autoconf@2.69%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  ic2kyoa                  ^perl@5.26.2%gcc@5.4.0+cpanm patches=0eac10ed90aeb0459ad8851f88081d439a4e41978e586ec743069e8b059370ac +shared+threads arch=linux-ubuntu16.04-x86_64
[+]  q4fpyuo                      ^gdbm@1.14.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  nxhwrg7                          ^readline@7.0%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
[+]  3o765ou                              ^ncurses@6.1%gcc@5.4.0~symlinks~termlib arch=linux-ubuntu16.04-x86_64
[+]  rymw7im              ^automake@1.16.1%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
==> Installing environment ~/code
==> boost is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.68.0-zbgfxapchxa4awxdwpleubfuznblxzvt
==> trilinos is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-rlsruavxqvwk2tgxzxboclbo6ykjf54r
==> openmpi is already installed in ~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.1.3-3njc4q5pqdpptq6jvqjrezkffwokv2sx

Spack concretizes the specs in the spack.yaml file and installs them.

What happened here? If you cd into a directory tha has a spack.yaml file in it, Spack considers this directory's environment to be activated. The directory does not have to live within Spack; it can be anywhere.

So, from ~/code, we can actually manipulate spack.yaml using spack add and spack remove (just like managed environments):

$ spack add hdf5@5.5.1
==> Adding hdf5 to environment ~/code
$ cat spack.yaml
# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  # add package specs to the `specs` list
  specs:
  - boost
  - trilinos
  - openmpi
  - hdf5@5.5.1

$ spack remove hdf5
==> Removing hdf5 from environment ~/code
$ cat spack.yaml
# This is a Spack Environment file.
#
# It describes a set of packages to be installed, along with
# configuration settings.
spack:
  # add package specs to the `specs` list
  specs:
  - boost
  - trilinos
  - openmpi
spack.lock

Ok, we've covered managed environments, environments in directories, and the last thing we'll cover is spack.lock. You may remember that when we ran spack install, Spack concretized all the specs in the spack.yaml file and installed them.

Whenever we concretize Specs in an environment, all concrete specs in the environment are written out to a spack.lock file alongside spack.yaml. The spack.lock file is not really human-readable like the spack.yaml file. It is a json format that contains all the information that we need to reproduce the build of an environment:

$ head spack.lock
{
  "concrete_specs": {
   "teneqii2xv5u6zl5r6qi3pwurc6pmypz": {
    "xz": {
      "version": "5.2.4",
      "arch": {
        "platform": "linux",
        "platform_os": "ubuntu16.04",
      "target": "x86_64"
 },
 ...

spack.yaml and spack.lock correspond to two fundamental concepts in Spack, but for environments:

  • spack.yaml is the set of abstract specs and configuration that you want to install.

  • spack.lock is the set of all fully concretized specs generated from concretizing spack.yaml

Using either of these, you can recreate an environment that someone else built. spack env create takes an extra optional argument, which can be either a spack.yaml or a spack.lock file:

$ spack env create my-project spack.yaml

$ spack env create my-project spack.lock

Both of these create a new environment called my-project, but which one you choose to use depends on your needs:

  1. copying the yaml file allows someone else to build your requirements, potentially a different way.

  2. copying the lock file allows someone else to rebuild your installation exactly as you built it.

The first use case can re-concretize the same specs on new platforms in order to build, but it will preserve the abstract requirements. The second use case (currently) requires you to be on the same machine, but it retains all decisions made during concretization and is faithful to a prior install.

Module Files

In this tutorial, we'll introduce a few concepts that are fundamental to the generation of module files with Spack, and we'll guide you through the customization of both module files content and their layout on disk. In the end you should have a clear understanding of:

  • What are module files and how they work

  • How Spack generates them

  • Which commands are available to ease their maintenance

  • How it is possible to customize them in all aspects

Modules at a glance

Let's start by summarizing what module files are and how you can use them to modify your environment. The idea is to give enough information so that people without any previous exposure to them will be able to follow the tutorial later on. We'll also give a high-level view of how module files are generated in Spack. If you are already familiar with these topics you can quickly skim through this section or move directly to Setup for the tutorial.

What are module files?

Module files are an easy way to modify your environment in a controlled manner during a shell session. In general, they contain the information needed to run an application or use a library, and they work in conjunction with a tool that interprets them. Typical module files instruct this tool to modify the environment variables when a module file is loaded:

$ module show zlib
-------------------------------------------------------------------
/home/mculpo/PycharmProjects/spack/share/spack/modules/linux-ubuntu14.04-x86_64/zlib/1.2.11-gcc-7.2.0-linux-ubuntu14.04-x86_64-co2px3k:

module-whatis       A free, general-purpose, legally unencumbered lossless data-compression library.
prepend-path        MANPATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/share/man
prepend-path        LIBRARY_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib
prepend-path        LD_LIBRARY_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib
prepend-path        CPATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/include
prepend-path        PKG_CONFIG_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib/pkgconfig
prepend-path        CMAKE_PREFIX_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/
-------------------------------------------------------------------

$ echo $LD_LIBRARY_PATH

$ module load zlib
$ echo $LD_LIBRARY_PATH
/home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib

and to undo the modifications when the same module file is unloaded:

$ module unload zlib
$ echo $LD_LIBRARY_PATH

$

Different formats exist for module files, and different tools provide various levels of support for them. Spack can natively generate:

  1. Non-hierarchical module files written in TCL

  2. Hierarchical module files written in Lua

and can build environment-modules and lmod as support tools. Which of the formats or tools best suits one's needs depends on each particular use-case. For the sake of illustration, we'll be working on both formats using lmod.

参考

Environment modules

This is the original tool that provided modules support. Its first version was coded in C in the early '90s and was later substituted by a version completely coded in TCL - the one Spack is distributing. More details on its features are given in the homepage of the project or in its github page. The tool is able to interpret the non-hierarchical TCL modulefiles written by Spack.

Lmod

Lmod is a module system written in Lua, designed to easily handle hierarchies of module files. It's a drop-in replacement of Environment Modules and works with both of the module file formats generated by Spack. Despite being fully compatible with Environment Modules there are many features that are unique to Lmod. These features are either targeted towards safety or meant to extend the module system functionality.

How do we generate module files?

Before we dive into the hands-on sections it's worth spending a couple of words to explain how module files are generated by Spack. The following diagram provides a high-level view of the process:

_images/module_file_generation.svg

The red dashed line above represents Spack's boundaries, the blue one Spack's dependencies 1. Module files are generated by combining:

  • the configuration details in config.yaml and modules.yaml

  • the information contained in Spack packages (and processed by the module subpackage)

  • a set of template files

with Jinja2, an external template engine that stamps out each particular module file. As Spack serves very diverse needs this process has many points of customization, and we'll explore most of them in the next sections.

1

Spack vendors its dependencies! This means that Spack comes with a copy of each one of its dependencies, including Jinja2, and is already configured to use them.

Setup for the tutorial

In order to showcase the capabilities of Spack's module file generation, we need a representative set of software to work with. This set must include different flavors of the same packages installed alongside each other and some external packages.

The purpose of this setup is not to make our life harder but to demonstrate how Spack can help with similar situations, as they will happen on real HPC clusters. For instance, it's often preferable for Spack to use vendor-provided MPI implementations than to build one itself.

To keep the set of software we're dealing with manageable, we're going to uninstall everything from earlier in the tutorial.

Build a module tool

The first thing that we need is the module tool. In this case we choose lmod as it can work with both hierarchical and non-hierarchical module file layouts.

$ bin/spack install lmod

Once the module tool is installed we need to have it available in the current shell. As the installation directories are definitely not easy to remember, we'll employ the command spack location to retrieve the lmod prefix directly from Spack:

$ . $(spack location -i lmod)/lmod/lmod/init/bash

Now we can re-source the setup file and Spack modules will be put in our module path.

$ . share/spack/setup-env.sh
Add a new compiler

The second step is to build a recent compiler. On first use, Spack scans the environment and automatically locates the compiler(s) already available on the system. For this tutorial, however, we want to use gcc@7.2.0.

$ spack install gcc@7.2.0
...
Wait a long time
...

Once gcc is installed we can use shell support to load it and make it readily available:

$ spack load gcc@7.2.0

It may not be apparent, but the last command employed the module files generated automatically by Spack. What happens under the hood when you use the spack load command is:

  1. the spec passed as argument is translated into a module file name

  2. the current module tool is used to load that module file

You can use this command to double check:

$ module list
Currently Loaded Modules:
1) gcc-7.2.0-gcc-5.4.0-b7smjjc

Note that the 7-digit hash at the end of the generated module may vary depending on architecture or package version. Now that we have gcc@7.2.0 in PATH we can finally add it to the list of compilers known to Spack:

$ spack compiler add
==> Added 1 new compiler to /home/spack1/.spack/linux/compilers.yaml
    gcc@7.2.0
==> Compilers are defined in the following files:
    /home/spack1/.spack/linux/compilers.yaml

$ spack compiler list
==> Available compilers
-- clang ubuntu16.04-x86_64 -------------------------------------
clang@3.8.0-2ubuntu4  clang@3.7.1-2ubuntu2

-- gcc ubuntu16.04-x86_64 ---------------------------------------
gcc@7.2.0  gcc@5.4.0  gcc@4.7
Build the software that will be used in the tutorial

Finally, we should use Spack to install the packages used in the examples:

$ spack install netlib-scalapack ^openmpi ^openblas
$ spack install netlib-scalapack ^mpich ^openblas
$ spack install netlib-scalapack ^openmpi ^netlib-lapack
$ spack install netlib-scalapack ^mpich ^netlib-lapack
$ spack install py-scipy ^openblas

Non-hierarchical module files

If you arrived to this point you should have an environment that looks similar to:

$ module avail

----------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------
   autoconf-2.69-gcc-5.4.0-3sx2gxe              libsigsegv-2.11-gcc-7.2.0-g67xpfd            openssl-1.0.2o-gcc-5.4.0-b4y3w3b
   autoconf-2.69-gcc-7.2.0-yb2makb              libtool-2.4.6-gcc-5.4.0-o2pfwjf              openssl-1.0.2o-gcc-7.2.0-cvldq3v
   automake-1.16.1-gcc-5.4.0-rymw7im            libtool-2.4.6-gcc-7.2.0-kt2udm6              pcre-8.42-gcc-5.4.0-gt5lgzi
   automake-1.16.1-gcc-7.2.0-qoowd5q            libxml2-2.9.8-gcc-5.4.0-wpexsph              perl-5.26.2-gcc-5.4.0-ic2kyoa
   bzip2-1.0.6-gcc-5.4.0-ufczdvs                libxml2-2.9.8-gcc-7.2.0-47gf5kk              perl-5.26.2-gcc-7.2.0-fdwz5yu
   bzip2-1.0.6-gcc-7.2.0-mwamumj                lmod-7.8-gcc-5.4.0-kmhks3p                   pkgconf-1.4.2-gcc-5.4.0-fovrh7a
   cmake-3.12.3-gcc-7.2.0-obqgn2v               lua-5.3.4-gcc-5.4.0-cpfeo2w                  pkgconf-1.4.2-gcc-7.2.0-yoxwmgb
   curl-7.60.0-gcc-5.4.0-vzqreb2                lua-luafilesystem-1_6_3-gcc-5.4.0-alakjim    py-numpy-1.15.2-gcc-7.2.0-wbwtcxf
   diffutils-3.6-gcc-5.4.0-2rhuivg              lua-luaposix-33.4.0-gcc-5.4.0-7wqhwoc        py-scipy-1.1.0-gcc-7.2.0-d5n3cph
   diffutils-3.6-gcc-7.2.0-eauxwi7              m4-1.4.18-gcc-5.4.0-suf5jtc                  py-setuptools-40.4.3-gcc-7.2.0-5dbwfwn
   expat-2.2.5-gcc-5.4.0-emyv67q                m4-1.4.18-gcc-7.2.0-wdzvagl                  python-2.7.15-gcc-7.2.0-ucmr2mn
   findutils-4.6.0-gcc-7.2.0-ca4b7zq            mpc-1.1.0-gcc-5.4.0-iuf3gc3                  readline-7.0-gcc-5.4.0-nxhwrg7
   gcc-7.2.0-gcc-5.4.0-b7smjjc           (L)    mpfr-3.1.6-gcc-5.4.0-jnt2nnp                 readline-7.0-gcc-7.2.0-ccruj2i
   gdbm-1.14.1-gcc-5.4.0-q4fpyuo                mpich-3.2.1-gcc-7.2.0-vt5xcat                sqlite-3.23.1-gcc-7.2.0-5ltus3a
   gdbm-1.14.1-gcc-7.2.0-zk5lhob                ncurses-6.1-gcc-5.4.0-3o765ou                tar-1.30-gcc-5.4.0-dk7lrpo
   gettext-0.19.8.1-gcc-5.4.0-tawgous           ncurses-6.1-gcc-7.2.0-xcgzqdv                tcl-8.6.8-gcc-5.4.0-qhwyccy
   git-2.19.1-gcc-5.4.0-p3gjnfa                 netlib-lapack-3.8.0-gcc-7.2.0-fj7nayd        texinfo-6.5-gcc-7.2.0-cuqnfgf
   gmp-6.1.2-gcc-5.4.0-qc4qcfz                  netlib-scalapack-2.0.2-gcc-7.2.0-67nmj7g     unzip-6.0-gcc-5.4.0-ba23fbg
   hwloc-1.11.9-gcc-7.2.0-gbyc65s               netlib-scalapack-2.0.2-gcc-7.2.0-6jgjbyg     util-macros-1.19.1-gcc-7.2.0-t62kozq
   isl-0.18-gcc-5.4.0-vttqout                   netlib-scalapack-2.0.2-gcc-7.2.0-prgo67d     xz-5.2.4-gcc-5.4.0-teneqii
   libbsd-0.8.6-gcc-5.4.0-f4qkkwm               netlib-scalapack-2.0.2-gcc-7.2.0-zxpt252     xz-5.2.4-gcc-7.2.0-rql5kog
   libiconv-1.15-gcc-5.4.0-u2x3umv              numactl-2.0.11-gcc-7.2.0-rifwktk             zlib-1.2.11-gcc-5.4.0-5nus6kn
   libpciaccess-0.13.5-gcc-7.2.0-riipwi2        openblas-0.3.3-gcc-7.2.0-xxoxfh4             zlib-1.2.11-gcc-7.2.0-ezuwp4p
   libsigsegv-2.11-gcc-5.4.0-fypapcp            openmpi-3.1.3-gcc-7.2.0-do5xfer

  Where:
   L:  Module is loaded

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

The non-hierarchical module files that have been generated so far follow the default rules for module generation. Taking a look at the gcc module you'll see, for example:

$ module show gcc-7.2.0-gcc-5.4.0-b7smjjc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
   /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/gcc-7.2.0-gcc-5.4.0-b7smjjc:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
prepend_path("PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin")
prepend_path("MANPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/share/man")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib")
prepend_path("LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib64")
prepend_path("LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib64")
prepend_path("CPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/include")
prepend_path("CMAKE_PREFIX_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/")
setenv("CC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gcc")
setenv("CXX","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/g++")
setenv("FC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F77","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F90","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, Ada, and Go, as well as libraries for these languages.
]])

As expected, a few environment variables representing paths will be modified by the module file according to the default prefix inspection rules.

Filter unwanted modifications to the environment

Now consider the case that your site has decided that CPATH and LIBRARY_PATH modifications should not be present in module files. What you can do to abide by the rules is to create a configuration file ~/.spack/modules.yaml with the following content:

modules:
  tcl:
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

Next you should regenerate all the module files:

$ spack module tcl refresh
==> You are about to regenerate tcl module files for:

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
3sx2gxe autoconf@2.69    b7smjjc gcc@7.2.0         f4qkkwm libbsd@0.8.6     cpfeo2w lua@5.3.4                3o765ou ncurses@6.1     dk7lrpo tar@1.30
rymw7im automake@1.16.1  q4fpyuo gdbm@1.14.1       u2x3umv libiconv@1.15    alakjim lua-luafilesystem@1_6_3  b4y3w3b openssl@1.0.2o  qhwyccy tcl@8.6.8
ufczdvs bzip2@1.0.6      tawgous gettext@0.19.8.1  fypapcp libsigsegv@2.11  7wqhwoc lua-luaposix@33.4.0      gt5lgzi pcre@8.42       ba23fbg unzip@6.0
vzqreb2 curl@7.60.0      p3gjnfa git@2.19.1        o2pfwjf libtool@2.4.6    suf5jtc m4@1.4.18                ic2kyoa perl@5.26.2     teneqii xz@5.2.4
2rhuivg diffutils@3.6    qc4qcfz gmp@6.1.2         wpexsph libxml2@2.9.8    iuf3gc3 mpc@1.1.0                fovrh7a pkgconf@1.4.2   5nus6kn zlib@1.2.11
emyv67q expat@2.2.5      vttqout isl@0.18          kmhks3p lmod@7.8         jnt2nnp mpfr@3.1.6               nxhwrg7 readline@7.0

-- linux-ubuntu16.04-x86_64 / gcc@7.2.0 -------------------------
yb2makb autoconf@2.69    riipwi2 libpciaccess@0.13.5  6jgjbyg netlib-scalapack@2.0.2  fdwz5yu perl@5.26.2           cuqnfgf texinfo@6.5
qoowd5q automake@1.16.1  g67xpfd libsigsegv@2.11      zxpt252 netlib-scalapack@2.0.2  yoxwmgb pkgconf@1.4.2         t62kozq util-macros@1.19.1
mwamumj bzip2@1.0.6      kt2udm6 libtool@2.4.6        67nmj7g netlib-scalapack@2.0.2  wbwtcxf py-numpy@1.15.2       rql5kog xz@5.2.4
obqgn2v cmake@3.12.3     47gf5kk libxml2@2.9.8        prgo67d netlib-scalapack@2.0.2  d5n3cph py-scipy@1.1.0        ezuwp4p zlib@1.2.11
eauxwi7 diffutils@3.6    wdzvagl m4@1.4.18            rifwktk numactl@2.0.11          5dbwfwn py-setuptools@40.4.3
ca4b7zq findutils@4.6.0  vt5xcat mpich@3.2.1          xxoxfh4 openblas@0.3.3          ucmr2mn python@2.7.15
zk5lhob gdbm@1.14.1      xcgzqdv ncurses@6.1          do5xfer openmpi@3.1.3           ccruj2i readline@7.0
gbyc65s hwloc@1.11.9     fj7nayd netlib-lapack@3.8.0  cvldq3v openssl@1.0.2o          5ltus3a sqlite@3.23.1

==> Do you want to proceed? [y/n] y
==> Regenerating tcl module files

If you take a look now at the module for gcc you'll see that the unwanted paths have disappeared:

$ module show gcc-7.2.0-gcc-5.4.0-b7smjjc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
   /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/gcc-7.2.0-gcc-5.4.0-b7smjjc:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
prepend_path("PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin")
prepend_path("MANPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/share/man")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib64")
prepend_path("CMAKE_PREFIX_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/")
setenv("CC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gcc")
setenv("CXX","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/g++")
setenv("FC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F77","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F90","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, Ada, and Go, as well as libraries for these languages.
]])
Prevent some module files from being generated

Another common request at many sites is to avoid exposing software that is only needed as an intermediate step when building a newer stack. Let's try to prevent the generation of module files for anything that is compiled with gcc@5.4.0 (the OS provided compiler).

To do this you should add a blacklist keyword to ~/.spack/modules.yaml:

modules:
  tcl:
    blacklist:
      -  '%gcc@5.4.0'
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

and regenerate the module files:

This time it is convenient to pass the option --delete-tree to the command that regenerates the module files to instruct it to delete the existing tree and regenerate a new one instead of overwriting the files in the existing directory.

$ spack module tcl refresh --delete-tree
==> You are about to regenerate tcl module files for:

-- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
3sx2gxe autoconf@2.69    b7smjjc gcc@7.2.0         f4qkkwm libbsd@0.8.6     cpfeo2w lua@5.3.4                3o765ou ncurses@6.1     dk7lrpo tar@1.30
rymw7im automake@1.16.1  q4fpyuo gdbm@1.14.1       u2x3umv libiconv@1.15    alakjim lua-luafilesystem@1_6_3  b4y3w3b openssl@1.0.2o  qhwyccy tcl@8.6.8
ufczdvs bzip2@1.0.6      tawgous gettext@0.19.8.1  fypapcp libsigsegv@2.11  7wqhwoc lua-luaposix@33.4.0      gt5lgzi pcre@8.42       ba23fbg unzip@6.0
vzqreb2 curl@7.60.0      p3gjnfa git@2.19.1        o2pfwjf libtool@2.4.6    suf5jtc m4@1.4.18                ic2kyoa perl@5.26.2     teneqii xz@5.2.4
2rhuivg diffutils@3.6    qc4qcfz gmp@6.1.2         wpexsph libxml2@2.9.8    iuf3gc3 mpc@1.1.0                fovrh7a pkgconf@1.4.2   5nus6kn zlib@1.2.11
emyv67q expat@2.2.5      vttqout isl@0.18          kmhks3p lmod@7.8         jnt2nnp mpfr@3.1.6               nxhwrg7 readline@7.0

-- linux-ubuntu16.04-x86_64 / gcc@7.2.0 -------------------------
yb2makb autoconf@2.69    riipwi2 libpciaccess@0.13.5  6jgjbyg netlib-scalapack@2.0.2  fdwz5yu perl@5.26.2           cuqnfgf texinfo@6.5
qoowd5q automake@1.16.1  g67xpfd libsigsegv@2.11      zxpt252 netlib-scalapack@2.0.2  yoxwmgb pkgconf@1.4.2         t62kozq util-macros@1.19.1
mwamumj bzip2@1.0.6      kt2udm6 libtool@2.4.6        67nmj7g netlib-scalapack@2.0.2  wbwtcxf py-numpy@1.15.2       rql5kog xz@5.2.4
obqgn2v cmake@3.12.3     47gf5kk libxml2@2.9.8        prgo67d netlib-scalapack@2.0.2  d5n3cph py-scipy@1.1.0        ezuwp4p zlib@1.2.11
eauxwi7 diffutils@3.6    wdzvagl m4@1.4.18            rifwktk numactl@2.0.11          5dbwfwn py-setuptools@40.4.3
ca4b7zq findutils@4.6.0  vt5xcat mpich@3.2.1          xxoxfh4 openblas@0.3.3          ucmr2mn python@2.7.15
zk5lhob gdbm@1.14.1      xcgzqdv ncurses@6.1          do5xfer openmpi@3.1.3           ccruj2i readline@7.0
gbyc65s hwloc@1.11.9     fj7nayd netlib-lapack@3.8.0  cvldq3v openssl@1.0.2o          5ltus3a sqlite@3.23.1

==> Do you want to proceed? [y/n] y
==> Regenerating tcl module files

$ module avail

----------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------
   autoconf-2.69-gcc-7.2.0-yb2makb          m4-1.4.18-gcc-7.2.0-wdzvagl                 perl-5.26.2-gcc-7.2.0-fdwz5yu
   automake-1.16.1-gcc-7.2.0-qoowd5q        mpich-3.2.1-gcc-7.2.0-vt5xcat               pkgconf-1.4.2-gcc-7.2.0-yoxwmgb
   bzip2-1.0.6-gcc-7.2.0-mwamumj            ncurses-6.1-gcc-7.2.0-xcgzqdv               py-numpy-1.15.2-gcc-7.2.0-wbwtcxf
   cmake-3.12.3-gcc-7.2.0-obqgn2v           netlib-lapack-3.8.0-gcc-7.2.0-fj7nayd       py-scipy-1.1.0-gcc-7.2.0-d5n3cph
   diffutils-3.6-gcc-7.2.0-eauxwi7          netlib-scalapack-2.0.2-gcc-7.2.0-67nmj7g    py-setuptools-40.4.3-gcc-7.2.0-5dbwfwn
   findutils-4.6.0-gcc-7.2.0-ca4b7zq        netlib-scalapack-2.0.2-gcc-7.2.0-6jgjbyg    python-2.7.15-gcc-7.2.0-ucmr2mn
   gdbm-1.14.1-gcc-7.2.0-zk5lhob            netlib-scalapack-2.0.2-gcc-7.2.0-prgo67d    readline-7.0-gcc-7.2.0-ccruj2i
   hwloc-1.11.9-gcc-7.2.0-gbyc65s           netlib-scalapack-2.0.2-gcc-7.2.0-zxpt252    sqlite-3.23.1-gcc-7.2.0-5ltus3a
   libpciaccess-0.13.5-gcc-7.2.0-riipwi2    numactl-2.0.11-gcc-7.2.0-rifwktk            texinfo-6.5-gcc-7.2.0-cuqnfgf
   libsigsegv-2.11-gcc-7.2.0-g67xpfd        openblas-0.3.3-gcc-7.2.0-xxoxfh4            util-macros-1.19.1-gcc-7.2.0-t62kozq
   libtool-2.4.6-gcc-7.2.0-kt2udm6          openmpi-3.1.3-gcc-7.2.0-do5xfer             xz-5.2.4-gcc-7.2.0-rql5kog
   libxml2-2.9.8-gcc-7.2.0-47gf5kk          openssl-1.0.2o-gcc-7.2.0-cvldq3v            zlib-1.2.11-gcc-7.2.0-ezuwp4p

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

If you look closely you'll see though that we went too far in blacklisting modules: the module for gcc@7.2.0 disappeared as it was bootstrapped with gcc@5.4.0. To specify exceptions to the blacklist rules you can use whitelist:

modules:
  tcl:
    whitelist:
      -  gcc
    blacklist:
      -  '%gcc@5.4.0'
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

whitelist rules always have precedence over blacklist rules. If you regenerate the modules again:

$ spack module tcl refresh -y
==> Regenerating tcl module files

you'll see that now the module for gcc@7.2.0 has reappeared:

$ module avail gcc-7.2.0-gcc-5.4.0-b7smjjc

-------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 ---------------------------------------------
   gcc-7.2.0-gcc-5.4.0-b7smjjc

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

An additional possibility that you can leverage to unclutter the environment is that of preventing the generation of module files for implicitly installed packages. In this case all one needs to do is to add the following line:

modules:
  tcl:
    blacklist_implicits: true
    whitelist:
      -  gcc
    blacklist:
      -  '%gcc@5.4.0'
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

to modules.yaml and regenerate the module file tree as above.

Change module file naming

The next step in making module files more user-friendly is to improve their naming scheme. To reduce the length of the hash or remove it altogether you can use the hash_length keyword in the configuration file:

modules:
  tcl:
    hash_length: 0
    whitelist:
      -  gcc
    blacklist:
      -  '%gcc@5.4.0'
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

If you try to regenerate the module files now you will get an error:

$ spack module tcl refresh --delete-tree -y
==> Error: Name clashes detected in module files:

file: /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/netlib-scalapack-2.0.2-gcc-7.2.0
spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64

==> Error: Operation aborted

注釈

We try to check for errors upfront!

In Spack we check for errors upfront whenever possible, so don't worry about your module files: as a name clash was detected nothing has been changed on disk.

The problem here is that without the hashes the four different flavors of netlib-scalapack map to the same module file name. We can add suffixes to differentiate them:

 modules:
   tcl:
     hash_length: 0
     whitelist:
       -  gcc
     blacklist:
       -  '%gcc@5.4.0'
     all:
       suffixes:
         '^openblas': openblas
         '^netlib-lapack': netlib
       filter:
         environment_blacklist: ['CPATH', 'LIBRARY_PATH']
     netlib-scalapack:
       suffixes:
         '^openmpi': openmpi
         '^mpich': mpich

As you can see it is possible to specify rules that apply only to a restricted set of packages using anonymous specs. Regenerating module files now we obtain:

$ spack module tcl refresh --delete-tree -y
==> Regenerating tcl module files
$ module avail

----------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------
   autoconf-2.69-gcc-7.2.0          m4-1.4.18-gcc-7.2.0                                  pkgconf-1.4.2-gcc-7.2.0
   automake-1.16.1-gcc-7.2.0        mpich-3.2.1-gcc-7.2.0                                py-numpy-1.15.2-gcc-7.2.0-openblas
   bzip2-1.0.6-gcc-7.2.0            ncurses-6.1-gcc-7.2.0                                py-scipy-1.1.0-gcc-7.2.0-openblas
   cmake-3.12.3-gcc-7.2.0           netlib-lapack-3.8.0-gcc-7.2.0                        py-setuptools-40.4.3-gcc-7.2.0
   diffutils-3.6-gcc-7.2.0          netlib-scalapack-2.0.2-gcc-7.2.0-netlib-mpich        python-2.7.15-gcc-7.2.0
   findutils-4.6.0-gcc-7.2.0        netlib-scalapack-2.0.2-gcc-7.2.0-netlib-openmpi      readline-7.0-gcc-7.2.0
   gcc-7.2.0-gcc-5.4.0              netlib-scalapack-2.0.2-gcc-7.2.0-openblas-mpich      sqlite-3.23.1-gcc-7.2.0
   gdbm-1.14.1-gcc-7.2.0            netlib-scalapack-2.0.2-gcc-7.2.0-openblas-openmpi    texinfo-6.5-gcc-7.2.0
   hwloc-1.11.9-gcc-7.2.0           numactl-2.0.11-gcc-7.2.0                             util-macros-1.19.1-gcc-7.2.0
   libpciaccess-0.13.5-gcc-7.2.0    openblas-0.3.3-gcc-7.2.0                             xz-5.2.4-gcc-7.2.0
   libsigsegv-2.11-gcc-7.2.0        openmpi-3.1.3-gcc-7.2.0                              zlib-1.2.11-gcc-7.2.0
   libtool-2.4.6-gcc-7.2.0          openssl-1.0.2o-gcc-7.2.0
   libxml2-2.9.8-gcc-7.2.0          perl-5.26.2-gcc-7.2.0

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

Finally we can set a naming_scheme to prevent users from loading modules that refer to different flavors of the same library/application:

modules:
  tcl:
    hash_length: 0
    naming_scheme: '{name}/{version}-{compiler.name}-{compiler.version}'
    whitelist:
      -  gcc
    blacklist:
      -  '%gcc@5.4.0'
    all:
      conflict:
        - '{name}'
      suffixes:
        '^openblas': openblas
        '^netlib-lapack': netlib
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
    netlib-scalapack:
      suffixes:
        '^openmpi': openmpi
        '^mpich': mpich

The final result should look like:

$ spack module tcl refresh --delete-tree -y
==> Regenerating tcl module files
$ module avail

----------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------
   autoconf/2.69-gcc-7.2.0          m4/1.4.18-gcc-7.2.0                                      pkgconf/1.4.2-gcc-7.2.0
   automake/1.16.1-gcc-7.2.0        mpich/3.2.1-gcc-7.2.0                                    py-numpy/1.15.2-gcc-7.2.0-openblas
   bzip2/1.0.6-gcc-7.2.0            ncurses/6.1-gcc-7.2.0                                    py-scipy/1.1.0-gcc-7.2.0-openblas
   cmake/3.12.3-gcc-7.2.0           netlib-lapack/3.8.0-gcc-7.2.0                            py-setuptools/40.4.3-gcc-7.2.0
   diffutils/3.6-gcc-7.2.0          netlib-scalapack/2.0.2-gcc-7.2.0-netlib-mpich            python/2.7.15-gcc-7.2.0
   findutils/4.6.0-gcc-7.2.0        netlib-scalapack/2.0.2-gcc-7.2.0-netlib-openmpi          readline/7.0-gcc-7.2.0
   gcc/7.2.0-gcc-5.4.0              netlib-scalapack/2.0.2-gcc-7.2.0-openblas-mpich          sqlite/3.23.1-gcc-7.2.0
   gdbm/1.14.1-gcc-7.2.0            netlib-scalapack/2.0.2-gcc-7.2.0-openblas-openmpi (D)    texinfo/6.5-gcc-7.2.0
   hwloc/1.11.9-gcc-7.2.0           numactl/2.0.11-gcc-7.2.0                                 util-macros/1.19.1-gcc-7.2.0
   libpciaccess/0.13.5-gcc-7.2.0    openblas/0.3.3-gcc-7.2.0                                 xz/5.2.4-gcc-7.2.0
   libsigsegv/2.11-gcc-7.2.0        openmpi/3.1.3-gcc-7.2.0                                  zlib/1.2.11-gcc-7.2.0
   libtool/2.4.6-gcc-7.2.0          openssl/1.0.2o-gcc-7.2.0
   libxml2/2.9.8-gcc-7.2.0          perl/5.26.2-gcc-7.2.0

  Where:
   D:  Default Module

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

注釈

TCL specific directive

The directives naming_scheme and conflict are TCL specific and can't be used in the lmod section of the configuration file.

Add custom environment modifications

At many sites it is customary to set an environment variable in a package's module file that points to the folder in which the package is installed. You can achieve this with Spack by adding an environment directive to the configuration file:

modules:
  tcl:
    hash_length: 0
    naming_scheme: '{name}/{version}-{compiler.name}-{compiler.version}'
    whitelist:
      -  gcc
    blacklist:
      -  '%gcc@5.4.0'
    all:
      conflict:
        - '{name}'
      suffixes:
        '^openblas': openblas
        '^netlib-lapack': netlib
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    netlib-scalapack:
      suffixes:
        '^openmpi': openmpi
        '^mpich': mpich

Under the hood Spack uses the format() API to substitute tokens in either environment variable names or values. There are two caveats though:

  • The set of allowed tokens in variable names is restricted to name, version, compiler, compiler.name, compiler.version, architecture

  • Any token expanded in a variable name is made uppercase, but other than that case sensitivity is preserved

Regenerating the module files results in something like:

$ spack module tcl refresh -y
==> Regenerating tcl module files

$ module show gcc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
   /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/gcc/7.2.0-gcc-5.4.0:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
conflict("gcc")
prepend_path("PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin")
prepend_path("MANPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/share/man")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib64")
prepend_path("CMAKE_PREFIX_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/")
setenv("CC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gcc")
setenv("CXX","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/g++")
setenv("FC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F77","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F90","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("GCC_ROOT","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, Ada, and Go, as well as libraries for these languages.
]])

As you can see, the gcc module has the environment variable GCC_ROOT set.

Sometimes it's also useful to apply environment modifications selectively and target only certain packages. You can, for instance set the common variables CC, CXX, etc. in the gcc module file and apply other custom modifications to the openmpi modules as follows:

modules:
  tcl:
    hash_length: 0
    naming_scheme: '{name}/{version}-{compiler.name}-{compiler.version}'
    whitelist:
      - gcc
    blacklist:
      - '%gcc@5.4.0'
    all:
      conflict:
        - '{name}'
      suffixes:
        '^openblas': openblas
        '^netlib-lapack': netlib
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    gcc:
      environment:
        set:
          CC: gcc
          CXX: g++
          FC: gfortran
          F90: gfortran
          F77: gfortran
    openmpi:
      environment:
        set:
          SLURM_MPI_TYPE: pmi2
          OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
    netlib-scalapack:
      suffixes:
        '^openmpi': openmpi
        '^mpich': mpich

This time we will be more selective and regenerate only the gcc and openmpi module files:

$ spack module tcl refresh -y gcc
==> Regenerating tcl module files

$ spack module tcl refresh -y openmpi
==> Regenerating tcl module files

$ module show gcc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
   /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/gcc/7.2.0-gcc-5.4.0:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
conflict("gcc")
prepend_path("PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin")
prepend_path("MANPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/share/man")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/lib64")
prepend_path("CMAKE_PREFIX_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/")
setenv("CC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gcc")
setenv("CXX","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/g++")
setenv("FC","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F77","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("F90","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs/bin/gfortran")
setenv("GCC_ROOT","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-b7smjjcsmwe5u5fcsvjmonlhlzzctnfs")
setenv("CC","gcc")
setenv("CXX","g++'")
setenv("FC","gfortran")
setenv("F77","gfortran")
setenv("F90","gfortran")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, Ada, and Go, as well as libraries for these languages.
]])

$ module show openmpi
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
  /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64/openmpi/3.1.3-gcc-7.2.0:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("An open source Message Passing Interface implementation. ")
conflict("openmpi")
prepend_path("PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4/bin")
prepend_path("MANPATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4/share/man")
prepend_path("LD_LIBRARY_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4/lib")
prepend_path("PKG_CONFIG_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4/lib/pkgconfig")
prepend_path("CMAKE_PREFIX_PATH","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4/")
setenv("OPENMPI_ROOT","/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/openmpi-3.1.3-do5xfer2whhk7gc26atgs3ozr3ljbvs4")
setenv("SLURM_MPI_TYPE","pmi2")
setenv("OMPI_MCA_btl_openib_warn_default_gid_prefix","0")
help([[An open source Message Passing Interface implementation. The Open MPI
Project is an open source Message Passing Interface implementation that
is developed and maintained by a consortium of academic, research, and
industry partners. Open MPI is therefore able to combine the expertise,
technologies, and resources from all across the High Performance
Computing community in order to build the best MPI library available.
Open MPI offers advantages for system and software vendors, application
developers and computer science researchers.
]])
Autoload dependencies

Spack can also generate module files that contain code to load the dependencies automatically. You can, for instance generate python modules that load their dependencies by adding the autoload directive and assigning it the value direct:

modules:
  tcl:
    verbose: True
    hash_length: 0
    naming_scheme: '{name}/{version}-{compiler.name}-{compiler.version}'
    whitelist:
      - gcc
    blacklist:
      - '%gcc@5.4.0'
    all:
      conflict:
        - '{name}'
      suffixes:
        '^openblas': openblas
        '^netlib-lapack': netlib
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    gcc:
      environment:
        set:
          CC: gcc
          CXX: g++
          FC: gfortran
          F90: gfortran
          F77: gfortran
    openmpi:
      environment:
        set:
          SLURM_MPI_TYPE: pmi2
          OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
    netlib-scalapack:
      suffixes:
        '^openmpi': openmpi
        '^mpich': mpich
    ^python:
      autoload:  'direct'

and regenerating the module files for every package that depends on python:

root@module-file-tutorial:/# spack module tcl refresh -y ^python
==> Regenerating tcl module files

Now the py-scipy module will be:

#%Module1.0
## Module file created by spack (https://github.com/spack/spack) on 2018-11-11 22:10:48.834221
##
## py-scipy@1.1.0%gcc@7.2.0 arch=linux-ubuntu16.04-x86_64 /d5n3cph
##


module-whatis "SciPy (pronounced 'Sigh Pie') is a Scientific Library for Python. It provides many user-friendly and efficient numerical routines such as routines for numerical integration and optimization."

proc ModulesHelp { } {
puts stderr "SciPy (pronounced "Sigh Pie") is a Scientific Library for Python. It"
puts stderr "provides many user-friendly and efficient numerical routines such as"
puts stderr "routines for numerical integration and optimization."
}

if { [ module-info mode load ] && ![ is-loaded python/2.7.15-gcc-7.2.0 ] } {
    puts stderr "Autoloading python/2.7.15-gcc-7.2.0"
    module load python/2.7.15-gcc-7.2.0
}
if { [ module-info mode load ] && ![ is-loaded openblas/0.3.3-gcc-7.2.0 ] } {
    puts stderr "Autoloading openblas/0.3.3-gcc-7.2.0"
    module load openblas/0.3.3-gcc-7.2.0
}
if { [ module-info mode load ] && ![ is-loaded py-numpy/1.15.2-gcc-7.2.0-openblas ] } {
    puts stderr "Autoloading py-numpy/1.15.2-gcc-7.2.0-openblas"
    module load py-numpy/1.15.2-gcc-7.2.0-openblas
}
conflict py-scipy

prepend-path LD_LIBRARY_PATH "/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-1.1.0-d5n3cphk2lx2v74ypwb6h7tna7vvgdyn/lib"
prepend-path CMAKE_PREFIX_PATH "/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-1.1.0-d5n3cphk2lx2v74ypwb6h7tna7vvgdyn/"
prepend-path PYTHONPATH "/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-1.1.0-d5n3cphk2lx2v74ypwb6h7tna7vvgdyn/lib/python2.7/site-packages"
setenv PY_SCIPY_ROOT "/home/spack1/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-1.1.0-d5n3cphk2lx2v74ypwb6h7tna7vvgdyn"

and will contain code to autoload all the dependencies:

$ module load py-scipy
Autoloading python/2.7.15-gcc-7.2.0
Autoloading openblas/0.3.3-gcc-7.2.0
Autoloading py-numpy/1.15.2-gcc-7.2.0-openblas

In case messages are unwanted during the autoload procedure, it will be sufficient to omit the line setting verbose: True in the configuration file above.

Hierarchical module files

So far we worked with non-hierarchical module files, i.e. with module files that are all generated in the same root directory and don't attempt to dynamically modify the MODULEPATH. This results in a flat module structure where all the software is visible at the same time:

$ module avail

----------------------------------------------- /home/spack1/spack/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------
   autoconf/2.69-gcc-7.2.0          m4/1.4.18-gcc-7.2.0                                      pkgconf/1.4.2-gcc-7.2.0
   automake/1.16.1-gcc-7.2.0        mpich/3.2.1-gcc-7.2.0                                    py-numpy/1.15.2-gcc-7.2.0-openblas (L)
   bzip2/1.0.6-gcc-7.2.0            ncurses/6.1-gcc-7.2.0                                    py-scipy/1.1.0-gcc-7.2.0-openblas  (L)
   cmake/3.12.3-gcc-7.2.0           netlib-lapack/3.8.0-gcc-7.2.0                            py-setuptools/40.4.3-gcc-7.2.0
   diffutils/3.6-gcc-7.2.0          netlib-scalapack/2.0.2-gcc-7.2.0-netlib-mpich           python/2.7.15-gcc-7.2.0            (L)
   findutils/4.6.0-gcc-7.2.0        netlib-scalapack/2.0.2-gcc-7.2.0-netlib-openmpi         readline/7.0-gcc-7.2.0
   gcc/7.2.0-gcc-5.4.0              netlib-scalapack/2.0.2-gcc-7.2.0-openblas-mpich          sqlite/3.23.1-gcc-7.2.0
   gdbm/1.14.1-gcc-7.2.0            netlib-scalapack/2.0.2-gcc-7.2.0-openblas-openmpi (D)    texinfo/6.5-gcc-7.2.0
   hwloc/1.11.9-gcc-7.2.0           numactl/2.0.11-gcc-7.2.0                                 util-macros/1.19.1-gcc-7.2.0
   libpciaccess/0.13.5-gcc-7.2.0    openblas/0.3.3-gcc-7.2.0                          (L)    xz/5.2.4-gcc-7.2.0
   libsigsegv/2.11-gcc-7.2.0        openmpi/3.1.3-gcc-7.2.0                                  zlib/1.2.11-gcc-7.2.0
   libtool/2.4.6-gcc-7.2.0          openssl/1.0.2o-gcc-7.2.0
   libxml2/2.9.8-gcc-7.2.0          perl/5.26.2-gcc-7.2.0

  Where:
   L:  Module is loaded
   D:  Default Module

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

This layout is quite simple to deploy, but you can see from the above snippet that nothing prevents users from loading incompatible sets of modules:

$ module purge
$ module load netlib-lapack/3.8.0-gcc-7.2.0 openblas/0.3.3-gcc-7.2.0
$ module list

Currently Loaded Modules:
  1) netlib-lapack/3.8.0-gcc-7.2.0   2) openblas/0.3.3-gcc-7.2.0

Even if conflicts directives are carefully placed in module files, they:

  • won't enforce a consistent environment, but will just report an error

  • need constant updates, for instance as soon as a new compiler or MPI library is installed

Hierarchical module files try to overcome these shortcomings by showing at start-up only a restricted view of what is available on the system: more specifically only the software that has been installed with OS provided compilers. Among this software there will be other - usually more recent - compilers that, once loaded, will prepend new directories to MODULEPATH unlocking all the software that was compiled with them. This "unlocking" idea can then be extended arbitrarily to virtual dependencies, as we'll see in the following section.

Core/Compiler/MPI

The most widely used hierarchy is the so called Core/Compiler/MPI where, on top of the compilers, different MPI libraries also unlock software linked to them. There are just a few steps needed to adapt the modules.yaml file we used previously:

  1. enable the lmod file generator

  2. change the tcl tag to lmod

  3. remove tcl specific directives (naming_scheme and conflict)

  4. declare which compilers are considered core_compilers

  5. remove the mpi related suffixes (as they will be substituted by hierarchies)

After these modifications your configuration file should look like:

modules:
  enable::
    - lmod
  lmod:
    core_compilers:
      - 'gcc@5.4.0'
    hierarchy:
      - mpi
    hash_length: 0
    whitelist:
      - gcc
    blacklist:
      - '%gcc@5.4.0'
    all:
      suffixes:
        '^openblas': openblas
        '^netlib-lapack': netlib
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    gcc:
      environment:
        set:
          CC: gcc
          CXX: g++
          FC: gfortran
          F90: gfortran
          F77: gfortran
    openmpi:
      environment:
        set:
          SLURM_MPI_TYPE: pmi2
          OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'

注釈

Double colon in configuration files

The double colon after enable is intentional and it serves the purpose of overriding the default list of enabled generators so that only lmod will be active (see Overriding entire sections for more details).

The directive core_compilers accepts a list of compilers. Everything built using these compilers will create a module in the Core part of the hierarchy, which is the entry point for hierarchical module files. It is common practice to put the OS provided compilers in the list and only build common utilities and other compilers with them.

If we now regenerate the module files:

$ spack module lmod refresh --delete-tree -y
==> Regenerating lmod module files

and update MODULEPATH to point to the Core:

$ module purge
$ module unuse $HOME/spack/share/spack/modules/linux-ubuntu16.04-x86_64
$ module use $HOME/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/Core

asking for the available modules will return:

$ module avail

----------------------------------------------------------- share/spack/lmod/linux-ubuntu16.04-x86_64/Core ------------------------------------------------------------
   gcc/7.2.0

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

Unsurprisingly, the only visible module is gcc. Loading that we'll unlock the Compiler part of the hierarchy:

$ module load gcc
$ module avail

------------------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------
   autoconf/2.69      findutils/4.6.0        libtool/2.4.6    netlib-lapack/3.8.0    perl/5.26.2                 python/2.7.15         xz/5.2.4
   automake/1.16.1    gdbm/1.14.1            libxml2/2.9.8    numactl/2.0.11         pkgconf/1.4.2               readline/7.0          zlib/1.2.11
   bzip2/1.0.6        hwloc/1.11.9           m4/1.4.18        openblas/0.3.3         py-numpy/1.15.2-openblas    sqlite/3.23.1
   cmake/3.12.3       libpciaccess/0.13.5    mpich/3.2.1      openmpi/3.1.3          py-scipy/1.1.0-openblas     texinfo/6.5
   diffutils/3.6      libsigsegv/2.11        ncurses/6.1      openssl/1.0.2o         py-setuptools/40.4.3        util-macros/1.19.1

----------------------------------------------------------- share/spack/lmod/linux-ubuntu16.04-x86_64/Core ------------------------------------------------------------
   gcc/7.2.0 (L)

  Where:
   L:  Module is loaded

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

The same holds true also for the MPI part, that you can enable by loading either mpich or openmpi. Let's start by loading mpich:

$ module load mpich
$ module avail

--------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/mpich/3.2.1-vt5xcat/gcc/7.2.0 ----------------------------------
   netlib-scalapack/2.0.2-netlib    netlib-scalapack/2.0.2-openblas (D)

------------------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------
   autoconf/2.69      findutils/4.6.0        libtool/2.4.6        netlib-lapack/3.8.0    perl/5.26.2                 python/2.7.15         xz/5.2.4
   automake/1.16.1    gdbm/1.14.1            libxml2/2.9.8        numactl/2.0.11         pkgconf/1.4.2               readline/7.0          zlib/1.2.11
   bzip2/1.0.6        hwloc/1.11.9           m4/1.4.18            openblas/0.3.3         py-numpy/1.15.2-openblas    sqlite/3.23.1
   cmake/3.12.3       libpciaccess/0.13.5    mpich/3.2.1   (L)    openmpi/3.1.3          py-scipy/1.1.0-openblas     texinfo/6.5
   diffutils/3.6      libsigsegv/2.11        ncurses/6.1          openssl/1.0.2o         py-setuptools/40.4.3        util-macros/1.19.1

----------------------------------------------------------- share/spack/lmod/linux-ubuntu16.04-x86_64/Core ------------------------------------------------------------
   gcc/7.2.0 (L)

  Where:
   L:  Module is loaded
   D:  Default Module

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".


root@module-file-tutorial:/# module load openblas netlib-scalapack/2.0.2-openblas
root@module-file-tutorial:/# module list

Currently Loaded Modules:
  1) gcc/7.2.0   2) mpich/3.2.1   3) openblas/0.3.3   4) netlib-scalapack/2.0.2-openblas

At this point we can showcase the improved consistency that a hierarchical layout provides over a non-hierarchical one:

$ module load openmpi

Lmod is automatically replacing "mpich/3.2.1" with "openmpi/3.1.3".


Due to MODULEPATH changes, the following have been reloaded:
  1) netlib-scalapack/2.0.2-openblas

Lmod took care of swapping the MPI provider for us, and it also substituted the netlib-scalapack module to conform to the change in the MPI. In this way we can't accidentally pull-in two different MPI providers at the same time or load a module file for a package linked to openmpi when mpich is also loaded. Consistency for compilers and MPI is ensured by the tool.

Add LAPACK to the hierarchy

The hierarchy just shown is already a great improvement over non-hierarchical layouts, but it still has an asymmetry: LAPACK providers cover the same semantic role as MPI providers, but yet they are not part of the hierarchy.

To be more practical, this means that although we have gained an improved consistency in our environment when it comes to MPI, we still have the same problems as we had before for LAPACK implementations:

root@module-file-tutorial:/# module list

Currently Loaded Modules:
  1) gcc/7.2.0   2) openblas/0.3.3   3) openmpi/3.1.3   4) netlib-scalapack/2.0.2-openblas

root@module-file-tutorial:/# module load netlib-scalapack/2.0.2-netlib

The following have been reloaded with a version change:
  1) netlib-scalapack/2.0.2-openblas => netlib-scalapack/2.0.2-netlib

root@module-file-tutorial:/# module list

Currently Loaded Modules:
  1) gcc/7.2.0   2) openblas/0.3.3   3) openmpi/3.1.3   4) netlib-scalapack/2.0.2-netlib

Hierarchies that are deeper than Core/Compiler/MPI are probably still considered "unusual" or "impractical" at many sites, mainly because module files are written manually and keeping track of the combinations among multiple providers quickly becomes quite involved.

For instance, having both MPI and LAPACK in the hierarchy means we must classify software into one of four categories:

  1. Software that doesn't depend on MPI or LAPACK

  2. Software that depends only on MPI

  3. Software that depends only on LAPACK

  4. Software that depends on both

to decide when to show it to the user. The situation becomes more involved as the number of virtual dependencies in the hierarchy increases.

We can take advantage of the DAG that Spack maintains for the installed software and solve this combinatorial problem in a clean and automated way. In some sense Spack's ability to manage this combinatorial complexity makes deeper hierarchies feasible.

Coming back to our example, let's add lapack to the hierarchy and remove any remaining suffix:

modules:
  enable::
    - lmod
  lmod:
    core_compilers:
      - 'gcc@5.4.0'
    hierarchy:
      - mpi
      - lapack
    hash_length: 0
    whitelist:
      - gcc
    blacklist:
      - '%gcc@5.4.0'
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    gcc:
      environment:
        set:
          CC: gcc
          CXX: g++
          FC: gfortran
          F90: gfortran
          F77: gfortran
    openmpi:
      environment:
        set:
          SLURM_MPI_TYPE: pmi2
          OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'

After module files have been regenerated as usual:

root@module-file-tutorial:/# module purge

root@module-file-tutorial:/# spack module lmod refresh --delete-tree -y
==> Regenerating lmod module files

we can see that now we have additional components in the hierarchy:

$ module load gcc
$ module load openblas
$ module avail

-------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/openblas/0.3.3-xxoxfh4/gcc/7.2.0 --------------------------------
   py-numpy/1.15.2    py-scipy/1.1.0

------------------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------
   autoconf/2.69      findutils/4.6.0        libtool/2.4.6    netlib-lapack/3.8.0        perl/5.26.2             sqlite/3.23.1
   automake/1.16.1    gdbm/1.14.1            libxml2/2.9.8    numactl/2.0.11             pkgconf/1.4.2           texinfo/6.5
   bzip2/1.0.6        hwloc/1.11.9           m4/1.4.18        openblas/0.3.3      (L)    py-setuptools/40.4.3    util-macros/1.19.1
   cmake/3.12.3       libpciaccess/0.13.5    mpich/3.2.1      openmpi/3.1.3              python/2.7.15           xz/5.2.4
   diffutils/3.6      libsigsegv/2.11        ncurses/6.1      openssl/1.0.2o             readline/7.0            zlib/1.2.11

----------------------------------------------------------- share/spack/lmod/linux-ubuntu16.04-x86_64/Core ------------------------------------------------------------
   gcc/7.2.0 (L)

  Where:
   L:  Module is loaded

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".


$ module load openmpi
$ module avail

--------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/openmpi/3.1.3-do5xfer/openblas/0.3.3-xxoxfh4/gcc/7.2.0 ---------------------
   netlib-scalapack/2.0.2

-------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/openblas/0.3.3-xxoxfh4/gcc/7.2.0 --------------------------------
   py-numpy/1.15.2    py-scipy/1.1.0

------------------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------
   autoconf/2.69      findutils/4.6.0        libtool/2.4.6    netlib-lapack/3.8.0        perl/5.26.2             sqlite/3.23.1
   automake/1.16.1    gdbm/1.14.1            libxml2/2.9.8    numactl/2.0.11             pkgconf/1.4.2           texinfo/6.5
   bzip2/1.0.6        hwloc/1.11.9           m4/1.4.18        openblas/0.3.3      (L)    py-setuptools/40.4.3    util-macros/1.19.1
   cmake/3.12.3       libpciaccess/0.13.5    mpich/3.2.1      openmpi/3.1.3       (L)    python/2.7.15           xz/5.2.4
   diffutils/3.6      libsigsegv/2.11        ncurses/6.1      openssl/1.0.2o             readline/7.0            zlib/1.2.11

---------------------------------------------- /home/spack1/spack/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------
   gcc/7.2.0 (L)

  Where:
   L:  Module is loaded

Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".

Both MPI and LAPACK providers will now benefit from the same safety features:

$ module load py-numpy netlib-scalapack
$ module load mpich

Lmod is automatically replacing "openmpi/3.1.3" with "mpich/3.2.1".


Due to MODULEPATH changes, the following have been reloaded:
  1) netlib-scalapack/2.0.2

$ module load netlib-lapack

Lmod is automatically replacing "openblas/0.3.3" with "netlib-lapack/3.8.0".


Inactive Modules:
  1) py-numpy

Due to MODULEPATH changes, the following have been reloaded:
  1) netlib-scalapack/2.0.2

Because we only compiled py-numpy with openblas the module is made inactive when we switch the LAPACK provider. The user environment is now consistent by design!

Working with templates

As briefly mentioned in the introduction, Spack uses Jinja2 to generate each individual module file. This means that you have all of its flexibility and power when it comes to customizing what gets generated!

Module file templates

The templates that Spack uses to generate module files are stored in the share/spack/templates/module directory within the Spack prefix, and they all share the same common structure. Usually, they start with a header that identifies the type of module being generated. In the case of hierarchical module files it's:

-- -*- lua -*-
-- Module file created by spack (https://github.com/spack/spack) on {{ timestamp }}
--
-- {{ spec.short_spec }}
--

The statements within double curly brackets {{ ... }} denote expressions that will be evaluated and substituted at module generation time. The rest of the file is then divided into blocks that can be overridden or extended by users, if need be. Control structures , delimited by {% ... %}, are also permitted in the template language:

{% block environment %}
{% for command_name, cmd in environment_modifications %}
{% if command_name == 'PrependPath' %}
prepend_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'AppendPath' %}
append_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'RemovePath' %}
remove_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'SetEnv' %}
setenv("{{ cmd.name }}", "{{ cmd.value }}")
{% elif command_name == 'UnsetEnv' %}
unsetenv("{{ cmd.name }}")
{% endif %}
{% endfor %}
{% endblock %}

The locations where Spack looks for templates are specified in config.yaml:

  # Locations where templates should be found
  template_dirs:
    - $spack/share/spack/templates

and can be extended by users to employ custom templates, as we'll see next.

Extend the default templates

Let's assume one of our software is protected by group membership: allowed users belong to the same linux group, and access is granted at group level. Wouldn't it be nice if people that are not yet entitled to use it could receive a helpful message at module load time that tells them who to contact in your organization to be inserted in the group?

To automate the generation of module files with such site-specific behavior we'll start by extending the list of locations where Spack looks for module files. Let's create the file ~/.spack/config.yaml with the content:

config:
  template_dirs:
    - $HOME/.spack/templates

This tells Spack to also search another location when looking for template files. Next, we need to create our custom template extension in the folder listed above:

{% extends "modules/modulefile.lua" %}
{% block footer %}
-- Access is granted only to specific groups
if not isDir("{{ spec.prefix }}") then
    LmodError (
        "You don't have the necessary rights to run \"{{ spec.name }}\".\n\n",
        "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
    )
end
{% endblock %}

Let's name this file group-restricted.lua. The line:

{% extends "modules/modulefile.lua" %}

tells Jinja2 that we are reusing the standard template for hierarchical module files. The section:

{% block footer %}
-- Access is granted only to specific groups
if not isDir("{{ spec.prefix }}") then
    LmodError (
        "You don't have the necessary rights to run \"{{ spec.name }}\".\n\n",
        "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
    )
end
{% endblock %}

overrides the footer block. Finally, we need to add a couple of lines in modules.yaml to tell Spack which specs need to use the new custom template. For the sake of illustration let's assume it's netlib-scalapack:

modules:
  enable::
    - lmod
  lmod:
    core_compilers:
      - 'gcc@5.4.0'
    hierarchy:
      - mpi
      - lapack
    hash_length: 0
    whitelist:
      - gcc
    blacklist:
      - '%gcc@5.4.0'
      - readline
    all:
      filter:
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']
      environment:
        set:
          '{name}_ROOT': '{prefix}'
    gcc:
      environment:
        set:
          CC: gcc
          CXX: g++
          FC: gfortran
          F90: gfortran
          F77: gfortran
    openmpi:
      environment:
        set:
          SLURM_MPI_TYPE: pmi2
          OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
    netlib-scalapack:
      template: 'group-restricted.lua'

If we regenerate the module files one last time:

root@module-file-tutorial:/# spack module lmod refresh -y netlib-scalapack
==> Regenerating lmod module files

we'll find the following at the end of each netlib-scalapack module file:

-- Access is granted only to specific groups
if not isDir("/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/netlib-scalapack-2.0.2-d3lertflood3twaor44eam2kcr4l72ag") then
    LmodError (
        "You don't have the necessary rights to run \"netlib-scalapack\".\n\n",
        "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
    )
end

and every user that doesn't have access to the software will now be redirected to the right e-mail address where to ask for it!

Spack Package Build Systems

You may begin to notice after writing a couple of package template files a pattern emerge for some packages. For example, you may find yourself writing an install() method that invokes: configure, cmake, make, make install. You may also find yourself writing "prefix=" + prefix as an argument to configure or cmake. Rather than having you repeat these lines for all packages, Spack has classes that can take care of these patterns. In addition, these package files allow for finer grained control of these build systems. In this section, we will describe each build system and give examples on how these can be manipulated to install a package.

Package Class Hierarchy

digraph G { node [ shape = "record" ] edge [ arrowhead = "empty" ] PackageBase -> Package [dir=back] PackageBase -> MakefilePackage [dir=back] PackageBase -> AutotoolsPackage [dir=back] PackageBase -> CMakePackage [dir=back] PackageBase -> PythonPackage [dir=back] }

The above diagram gives a high level view of the class hierarchy and how each package relates. Each subclass inherits from the PackageBaseClass super class. The bulk of the work is done in this super class which includes fetching, extracting to a staging directory and installing. Each subclass then adds additional build-system-specific functionality. In the following sections, we will go over examples of how to utilize each subclass and to see how powerful these abstractions are when packaging.

Package

We've already seen examples of a Package class in our walkthrough for writing package files, so we won't be spending much time with them here. Briefly, the Package class allows for abitrary control over the build process, whereas subclasses rely on certain patterns (e.g. configure make make install) to be useful. Package classes are particularly useful for packages that have a non-conventional way of being built since the packager can utilize some of Spack's helper functions to customize the building and installing of a package.

Autotools

As we have seen earlier, packages using Autotools use configure, make and make install commands to execute the build and install process. In our Package class, your typical build incantation will consist of the following:

def install(self, spec, prefix):
    configure("--prefix=" + prefix)
    make()
    make("install")

You'll see that this looks similar to what we wrote in our packaging tutorial.

The Autotools subclass aims to simplify writing package files and provides convenience methods to manipulate each of the different phases for a Autotools build system.

Autotools packages consist of four phases:

  1. autoreconf()

  2. configure()

  3. build()

  4. install()

Each of these phases have sensible defaults. Let's take a quick look at some the internals of the Autotools class:

$ spack edit --build-system autotools

This will open the AutotoolsPackage file in your text editor.

注釈

The examples showing code for these classes is abridged to avoid having long examples. We only show what is relevant to the packager.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

    They all have sensible defaults and for many packages the only thing
    necessary will be to override the helper method
    :py:meth:`~.AutotoolsPackage.configure_args`.
    For a finer tuning you may also override:

        +-----------------------------------------------+--------------------+
        | **Method**                                    | **Purpose**        |
        +===============================================+====================+
        | :py:attr:`~.AutotoolsPackage.build_targets`   | Specify ``make``   |
        |                                               | targets for the    |
        |                                               | build phase        |
        +-----------------------------------------------+--------------------+
        | :py:attr:`~.AutotoolsPackage.install_targets` | Specify ``make``   |
        |                                               | targets for the    |
        |                                               | install phase      |
        +-----------------------------------------------+--------------------+
        | :py:meth:`~.AutotoolsPackage.check`           | Run  build time    |
        |                                               | tests if required  |
        +-----------------------------------------------+--------------------+

    """
    #: Phases of a GNU Autotools package
    phases = ['autoreconf', 'configure', 'build', 'install']
    #: This attribute is used in UI queries that need to know the build
    #: system base class
    build_system_class = 'AutotoolsPackage'
    #: Whether or not to update ``config.guess`` on old architectures
    patch_config_guess = True

    #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.build`
    #: phase
    build_targets = []
    #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.install`
    #: phase
    install_targets = ['install']

    #: Callback names for build-time test
    build_time_test_callbacks = ['check']

    #: Callback names for install-time test
    install_time_test_callbacks = ['installcheck']

    #: Set to true to force the autoreconf step even if configure is present
    force_autoreconf = False
    #: Options to be passed to autoreconf when using the default implementation
    autoreconf_extra_args = []
        setattr(self, 'configure_flag_args', [])
        for flag, values in flags.items():
            if values:
                values_str = '{0}={1}'.format(flag.upper(), ' '.join(values))
                self.configure_flag_args.append(values_str)

    def configure(self, spec, prefix):
        """Runs configure with the arguments specified in
        :py:meth:`~.AutotoolsPackage.configure_args`

Important to note are the highlighted lines. These properties allow the packager to set what build targets and install targets they want for their package. If, for example, we wanted to add as our build target foo then we can append to our build_targets property:

build_targets = ["foo"]

Which is similiar to invoking make in our Package

make("foo")

This is useful if we have packages that ignore environment variables and need a command-line argument.

Another thing to take note of is in the configure() method. Here we see that the prefix argument is already included since it is a common pattern amongst packages using Autotools. We then only have to override configure_args(), which will then return it's output to to configure(). Then, configure() will append the common arguments

Packagers also have the option to run autoreconf in case a package needs to update the build system and generate a new configure. Though, for the most part this will be unnecessary.

Let's look at the mpileaks package.py file that we worked on earlier:

$ spack edit mpileaks

Notice that mpileaks is a Package class but uses the Autotools build system. Although this package is acceptable let's make this into an AutotoolsPackage class and simplify it further.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Mpileaks(AutotoolsPackage):
    """Tool to detect and report leaked MPI objects like MPI_Requests and
       MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def install(self, spec, prefix):
        configure("--prefix=" + prefix,
                  "--with-adept-utils=" + spec['adept-utils'].prefix,
                  "--with-callpath=" + spec['callpath'].prefix)
        make()
        make("install")

We first inherit from the AutotoolsPackage class.

Although we could keep the install() method, most of it can be handled by the AutotoolsPackage base class. In fact, the only thing that needs to be overridden is configure_args().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Mpileaks(AutotoolsPackage):
    """Tool to detect and report leaked MPI objects like MPI_Requests and
       MPI_Datatypes."""

    homepage = "https://github.com/hpc/mpileaks"
    url      = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    variant("stackstart", values=int, default=0,
            description="Specify the number of stack frames to truncate")

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

    def configure_args(self):
        stackstart = int(self.spec.variants['stackstart'].value)
        args = ["--with-adept-utils=" + spec['adept-utils'].prefix,
                "--with-callpath=" + spec['callpath'].prefix]
        if stackstart:
            args.extend(['--with-stack-start-c=%s' % stackstart,
                         '--with-stack-start-fortran=%s' % stackstart])
        return args

Since Spack takes care of setting the prefix for us we can exclude that as an argument to configure. Our packages look simpler, and the packager does not need to worry about whether they have properly included configure and make.

This version of the mpileaks package installs the same as the previous, but the AutotoolsPackage class lets us do it with a cleaner looking package file.

Makefile

Packages that utilize Make or a Makefile usually require you to edit a Makefile to set up platform and compiler specific variables. These packages are handled by the Makefile subclass which provides convenience methods to help write these types of packages.

A MakefilePackage class has three phases that can be overridden. These include:

  1. edit()

  2. build()

  3. install()

Packagers then have the ability to control how a Makefile is edited, and what targets to include for the build phase or install phase.

Let's also take a look inside the MakefilePackage class:

$ spack edit --build-system makefile

Take note of the following:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class MakefilePackage(PackageBase):
    #: Phases of a package that is built with an hand-written Makefile
    phases = ['edit', 'build', 'install']
    #: This attribute is used in UI queries that need to know the build
    #: system base class
    build_system_class = 'MakefilePackage'

    #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.build`
    #: phase
    build_targets = []
    #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.install`
    #: phase
    install_targets = ['install']

    #: Callback names for build-time test
    build_time_test_callbacks = ['check']

    #: Callback names for install-time test
    install_time_test_callbacks = ['installcheck']

    def edit(self, spec, prefix):
        """Edits the Makefile before calling make. This phase cannot
        be defaulted.
        """
        tty.msg('Using default implementation: skipping edit phase.')

    def build(self, spec, prefix):
        """Calls make, passing :py:attr:`~.MakefilePackage.build_targets`
        as targets.
        """
        with working_dir(self.build_directory):
            inspect.getmodule(self).make(*self.build_targets)

    def install(self, spec, prefix):
        """Calls make, passing :py:attr:`~.MakefilePackage.install_targets`
        as targets.
        """
        with working_dir(self.build_directory):
            inspect.getmodule(self).make(*self.install_targets)

Similar to Autotools, MakefilePackage class has properties that can be set by the packager. We can also override the different methods highlighted.

Let's try to recreate the Bowtie package:

$ spack create -f https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip
==> This looks like a URL for bowtie
==> Found 1 version of bowtie:

1.2.1.1  https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip

==> How many would you like to checksum? (default is 1, q to abort) 1
==> Downloading...
==> Fetching https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip
######################################################################## 100.0%
==> Checksummed 1 version of bowtie
==> This package looks like it uses the makefile build system
==> Created template for bowtie package
==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/bowtie/package.py

Once the fetching is completed, Spack will open up your text editor in the usual fashion and create a template of a MakefilePackage package.py.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Bowtie(MakefilePackage):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"

    version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def edit(self, spec, prefix):
        # FIXME: Edit the Makefile if necessary
        # FIXME: If not needed delete this function
        # makefile = FileFilter('Makefile')
        # makefile.filter('CC = .*', 'CC = cc')
        return

Spack was successfully able to detect that Bowtie uses Make. Let's add in the rest of our details for our package:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Bowtie(MakefilePackage):
    """Bowtie is an ultrafast, memory efficient short read aligner
    for short DNA sequences (reads) from next-gen sequencers."""

    homepage = "https://sourceforge.net/projects/bowtie-bio/"
    url      = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"

    version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')

    variant("tbb", default=False, description="Use Intel thread building block")

    depends_on("tbb", when="+tbb")

    def edit(self, spec, prefix):
        # FIXME: Edit the Makefile if necessary
        # FIXME: If not needed delete this function
        # makefile = FileFilter('Makefile')
        # makefile.filter('CC = .*', 'CC = cc')
        return

As we mentioned earlier, most packages using a Makefile have hard-coded variables that must be edited. These variables are fine if you happen to not care about setup or types of compilers used but Spack is designed to work with any compiler. The MakefilePackage subclass makes it easy to edit these Makefiles by having an edit() method that can be overridden.

Let's take a look at the default Makefile that Bowtie provides. If we look inside, we see that CC and CXX point to our GNU compiler:

$ spack stage bowtie

注釈

As usual make sure you have shell support activated with spack:

source /path/to/spack_root/spack/share/spack/setup-env.sh

$ spack cd -s bowtie
$ cd bowtie-1.2
$ vim Makefile
CPP = g++ -w
CXX = $(CPP)
CC = gcc
LIBS = $(LDFLAGS) -lz
HEADERS = $(wildcard *.h)

To fix this, we need to use the edit() method to write our custom Makefile.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Bowtie(MakefilePackage):
    """Bowtie is an ultrafast, memory efficient short read aligner
    for short DNA sequences (reads) from next-gen sequencers."""

    homepage = "https://sourceforge.net/projects/bowtie-bio/"
    url      = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"

    version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')

    variant("tbb", default=False, description="Use Intel thread building block")

    depends_on("tbb", when="+tbb")

    def edit(self, spec, prefix):
        makefile = FileFilter("Makefile")
        makefile.filter('CC= .*', 'CC = ' + env['CC'])
        makefile.filter('CXX = .*', 'CXX = ' + env['CXX'])

Here we use a FileFilter object to edit our Makefile. It takes in a regular expression and then replaces CC and CXX to whatever Spack sets CC and CXX environment variables to. This allows us to build Bowtie with whatever compiler we specify through Spack's spec syntax.

Let's change the build and install phases of our package:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Bowtie(MakefilePackage):
    """Bowtie is an ultrafast, memory efficient short read aligner
    for short DNA sequences (reads) from next-gen sequencers."""

    homepage = "https://sourceforge.net/projects/bowtie-bio/"
    url      = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"

    version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')

    variant("tbb", default=False, description="Use Intel thread building block")

    depends_on("tbb", when="+tbb")

    def edit(self, spec, prefix):
        makefile = FileFilter("Makefile")
        makefile.filter('CC= .*', 'CC = ' + env['CC'])
        makefile.filter('CXX = .*', 'CXX = ' + env['CXX'])

    @property
    def build_targets(self):
        if "+tbb" in spec:
            return []
        else:
            return ["NO_TBB=1"]

    @property
    def install_targets(self):
        return ['prefix={0}'.format(self.prefix), 'install']

Here demonstrate another strategy that we can use to manipulate our package We can provide command-line arguments to make(). Since Bowtie can use tbb we can either add NO_TBB=1 as a argument to prevent tbb support or we can just invoke make with no arguments.

Bowtie requires our install_target to provide a path to the install directory. We can do this by providing prefix= as a command line argument to make().

Let's look at a couple of other examples and go through them:

$ spack edit esmf

Some packages allow environment variables to be set and will honor them. Packages that use ?= for assignment in their Makefile can be set using environment variables. In our esmf example we set two environment variables in our edit() method:

def edit(self, spec, prefix):
    for var in os.environ:
        if var.startswith('ESMF_'):
            os.environ.pop(var)

    # More code ...

    if self.compiler.name == 'gcc':
        os.environ['ESMF_COMPILER'] = 'gfortran'
    elif self.compiler.name == 'intel':
        os.environ['ESMF_COMPILER'] = 'intel'
    elif self.compiler.name == 'clang':
        os.environ['ESMF_COMPILER'] = 'gfortranclang'
    elif self.compiler.name == 'nag':
        os.environ['ESMF_COMPILER'] = 'nag'
    elif self.compiler.name == 'pgi':
        os.environ['ESMF_COMPILER'] = 'pgi'
    else:
        msg  = "The compiler you are building with, "
        msg += "'{0}', is not supported by ESMF."
        raise InstallError(msg.format(self.compiler.name))

As you may have noticed, we didn't really write anything to the Makefile but rather we set environment variables that will override variables set in the Makefile.

Some packages include a configuration file that sets certain compiler variables, platform specific variables, and the location of dependencies or libraries. If the file is simple and only requires a couple of changes, we can overwrite those entries with our FileFilter object. If the configuration involves complex changes, we can write a new configuration file from scratch.

Let's look at an example of this in the elk package:

$ spack edit elk
def edit(self, spec, prefix):
    # Dictionary of configuration options
    config = {
        'MAKE': 'make',
        'AR':   'ar'
    }

    # Compiler-specific flags
    flags = ''
    if self.compiler.name == 'intel':
        flags = '-O3 -ip -unroll -no-prec-div'
    elif self.compiler.name == 'gcc':
        flags = '-O3 -ffast-math -funroll-loops'
    elif self.compiler.name == 'pgi':
        flags = '-O3 -lpthread'
    elif self.compiler.name == 'g95':
        flags = '-O3 -fno-second-underscore'
    elif self.compiler.name == 'nag':
        flags = '-O4 -kind=byte -dusty -dcfuns'
    elif self.compiler.name == 'xl':
        flags = '-O3'
    config['F90_OPTS'] = flags
    config['F77_OPTS'] = flags

    # BLAS/LAPACK support
    # Note: BLAS/LAPACK must be compiled with OpenMP support
    # if the +openmp variant is chosen
    blas = 'blas.a'
    lapack = 'lapack.a'
    if '+blas' in spec:
        blas = spec['blas'].libs.joined()
    if '+lapack' in spec:
        lapack = spec['lapack'].libs.joined()
    # lapack must come before blas
    config['LIB_LPK'] = ' '.join([lapack, blas])

    # FFT support
    if '+fft' in spec:
        config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib,
                                    'libfftw3.so')
        config['SRC_FFT'] = 'zfftifc_fftw.f90'
    else:
        config['LIB_FFT'] = 'fftlib.a'
        config['SRC_FFT'] = 'zfftifc.f90'

    # MPI support
    if '+mpi' in spec:
        config['F90'] = spec['mpi'].mpifc
        config['F77'] = spec['mpi'].mpif77
    else:
        config['F90'] = spack_fc
        config['F77'] = spack_f77
        config['SRC_MPI'] = 'mpi_stub.f90'

    # OpenMP support
    if '+openmp' in spec:
        config['F90_OPTS'] += ' ' + self.compiler.openmp_flag
        config['F77_OPTS'] += ' ' + self.compiler.openmp_flag
    else:
        config['SRC_OMP'] = 'omp_stub.f90'

    # Libxc support
    if '+libxc' in spec:
        config['LIB_libxc'] = ' '.join([
            join_path(spec['libxc'].prefix.lib, 'libxcf90.so'),
            join_path(spec['libxc'].prefix.lib, 'libxc.so')
        ])
        config['SRC_libxc'] = ' '.join([
            'libxc_funcs.f90',
            'libxc.f90',
            'libxcifc.f90'
        ])
    else:
        config['SRC_libxc'] = 'libxcifc_stub.f90'

    # Write configuration options to include file
    with open('make.inc', 'w') as inc:
        for key in config:
            inc.write('{0} = {1}\n'.format(key, config[key]))

config is just a dictionary that we can add key-value pairs to. By the end of the edit() method we write the contents of our dictionary to make.inc.

CMake

CMake is another common build system that has been gaining popularity. It works in a similar manner to Autotools but with differences in variable names, the number of configuration options available, and the handling of shared libraries. Typical build incantations look like this:

def install(self, spec, prefix):
    cmake("-DCMAKE_INSTALL_PREFIX:PATH=/path/to/install_dir ..")
    make()
    make("install")

As you can see from the example above, it's very similar to invoking configure and make in an Autotools build system. However, the variable names and options differ. Most options in CMake are prefixed with a '-D' flag to indicate a configuration setting.

In the CMakePackage class we can override the following phases:

  1. cmake()

  2. build()

  3. install()

The CMakePackage class also provides sensible defaults so we only need to override cmake_args().

Let's look at these defaults in the CMakePackage class in the _std_args() method:

$ spack edit --build-system cmake
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        return [os.path.join(self.build_directory, 'CMakeCache.txt')]

    @property
    def root_cmakelists_dir(self):
        """The relative path to the directory containing CMakeLists.txt

        This path is relative to the root of the extracted tarball,
        not to the ``build_directory``. Defaults to the current directory.

        :return: directory containing CMakeLists.txt
        """
        return self.stage.source_path

    @property
    def std_cmake_args(self):
        """Standard cmake arguments provided as a property for
        convenience of package writers

        :return: standard cmake arguments
        """
        # standard CMake arguments
        std_cmake_args = CMakePackage._std_args(self)
        std_cmake_args += getattr(self, 'cmake_flag_args', [])
        return std_cmake_args

    @staticmethod
    def _std_args(pkg):
        """Computes the standard cmake arguments for a generic package"""
        try:
            generator = pkg.generator
        except AttributeError:
            generator = 'Unix Makefiles'

        # Make sure a valid generator was chosen
        valid_primary_generators = ['Unix Makefiles', 'Ninja']
        primary_generator = _extract_primary_generator(generator)
        if primary_generator not in valid_primary_generators:
            msg  = "Invalid CMake generator: '{0}'\n".format(generator)
            msg += "CMakePackage currently supports the following "
            msg += "primary generators: '{0}'".\
                   format("', '".join(valid_primary_generators))
            raise InstallError(msg)

        try:
            build_type = pkg.spec.variants['build_type'].value
        except KeyError:

Some CMake packages use different generators. Spack is able to support Unix-Makefile generators as well as Ninja generators.

If no generator is specified Spack will default to Unix Makefiles.

Next we setup the build type. In CMake you can specify the build type that you want. Options include:

  1. empty

  2. Debug

  3. Release

  4. RelWithDebInfo

  5. MinSizeRel

With these options you can specify whether you want your executable to have the debug version only, release version or the release with debug information. Release executables tend to be more optimized than Debug. In Spack, we set the default as RelWithDebInfo unless otherwise specified through a variant.

Spack then automatically sets up the -DCMAKE_INSTALL_PREFIX path, appends the build type (RelWithDebInfo default), and then specifies a verbose Makefile.

Next we add the rpaths to -DCMAKE_INSTALL_RPATH:STRING.

Finally we add to -DCMAKE_PREFIX_PATH:STRING the locations of all our dependencies so that CMake can find them.

In the end our cmake line will look like this (example is xrootd):

$ cmake $HOME/spack/var/spack/stage/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/xrootd-4.6.0 -G Unix Makefiles -DCMAKE_INSTALL_PREFIX:PATH=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_FIND_FRAMEWORK:STRING=LAST -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=FALSE -DCMAKE_INSTALL_RPATH:STRING=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/lib:$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/lib64 -DCMAKE_PREFIX_PATH:STRING=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/cmake-3.9.4-hally3vnbzydiwl3skxcxcbzsscaasx5

We can see now how CMake takes care of a lot of the boilerplate code that would have to be otherwise typed in.

Let's try to recreate callpath:

$ spack create -f https://github.com/llnl/callpath/archive/v1.0.3.tar.gz
==> This looks like a URL for callpath
==> Found 4 versions of callpath:

1.0.3  https://github.com/LLNL/callpath/archive/v1.0.3.tar.gz
1.0.2  https://github.com/LLNL/callpath/archive/v1.0.2.tar.gz
1.0.1  https://github.com/LLNL/callpath/archive/v1.0.1.tar.gz
1.0    https://github.com/LLNL/callpath/archive/v1.0.tar.gz

==> How many would you like to checksum? (default is 1, q to abort) 1
==> Downloading...
==> Fetching https://github.com/LLNL/callpath/archive/v1.0.3.tar.gz
######################################################################## 100.0%
==> Checksummed 1 version of callpath
==> This package looks like it uses the cmake build system
==> Created template for callpath package
==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/callpath/package.py

which then produces the following template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

#
# This is a template package file for Spack.  We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
#     spack install callpath
#
# You can edit this file again by typing:
#
#     spack edit callpath
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *


class Callpath(CMakePackage):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "https://github.com/llnl/callpath/archive/v1.0.1.tar.gz"

    version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def cmake_args(self):
        # FIXME: Add arguments other than
        # FIXME: CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE
        # FIXME: If not needed delete this function
        args = []
        return args

Again we fill in the details:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Callpath(CMakePackage):
    """Library for representing callpaths consistently in
       distributed-memory performance tools."""

    homepage = "https://github.com/llnl/callpath"
    url      = "https://github.com/llnl/callpath/archive/v1.0.3.tar.gz"

    version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')

    depends_on("elf", type="link")
    depends_on("libdwarf")
    depends_on("dyninst")
    depends_on("adept-utils")
    depends_on("mpi")
    depends_on("cmake@2.8:", type="build")

As mentioned earlier, Spack will use sensible defaults to prevent repeated code and to make writing CMake package files simpler.

In callpath, we want to add options to CALLPATH_WALKER as well as add compiler flags. We add the following options like so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class Callpath(CMakePackage):
    """Library for representing callpaths consistently in
       distributed-memory performance tools."""

    homepage = "https://github.com/llnl/callpath"
    url      = "https://github.com/llnl/callpath/archive/v1.0.3.tar.gz"

    version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')

    depends_on("elf", type="link")
    depends_on("libdwarf")
    depends_on("dyninst")
    depends_on("adept-utils")
    depends_on("mpi")
    depends_on("cmake@2.8:", type="build")

    def cmake_args(self):
        args = ["-DCALLPATH_WALKER=dyninst"]

        if self.spec.satisfies("^dyninst@9.3.0:"):
            std.flag = self.compiler.cxx_flag
            args.append("-DCMAKE_CXX_FLAGS='{0}' -fpermissive'".format(
                std_flag))

        return args

Now we can control our build options using cmake_args(). If defaults are sufficient enough for the package, we can leave this method out.

CMakePackage classes allow for control of other features in the build system. For example, you can specify the path to the "out of source" build directory and also point to the root of the CMakeLists.txt file if it is placed in a non-standard location.

A good example of a package that has its CMakeLists.txt file located at a different location is found in spades.

$ spack edit spades
root_cmakelists_dir = "src"

Here root_cmakelists_dir will tell Spack where to find the location of CMakeLists.txt. In this example, it is located a directory level below in the src directory.

Some CMake packages also require the install phase to be overridden. For example, let's take a look at sniffles.

$ spack edit sniffles

In the install() method, we have to manually install our targets so we override the install() method to do it for us:

# the build process doesn't actually install anything, do it by hand
def install(self, spec, prefix):
    mkdir(prefix.bin)
    src = "bin/sniffles-core-{0}".format(spec.version.dotted)
    binaries = ['sniffles', 'sniffles-debug']
    for b in binaries:
        install(join_path(src, b), join_path(prefix.bin, b))

PythonPackage

Python extensions and modules are built differently from source than most applications. Python uses a setup.py script to install Python modules. The script consists of a call to setup() which provides the information required to build a module to Distutils. If you're familiar with pip or easy_install, setup.py does the same thing.

These modules are usually installed using the following line:

$ python setup.py install

There are also a list of commands and phases that you can call. To see the full list you can run:

$ python setup.py --help-commands
Standard commands:
    build             build everything needed to install
    build_py          "build" pure Python modules (copy to build directory)
    build_ext         build C/C++ extensions (compile/link to build directory)
    build_clib        build C/C++ libraries used by Python extensions
    build_scripts     "build" scripts (copy and fixup #! line)
    clean             (no description available)
    install           install everything from build directory
    install_lib       install all Python modules (extensions and pure Python)
    install_headers   install C/C++ header files
    install_scripts   install scripts (Python or otherwise)
    install_data      install data files
    sdist             create a source distribution (tarball, zip file, etc.)
    register          register the distribution with the Python package index
    bdist             create a built (binary) distribution
    bdist_dumb        create a "dumb" built distribution
    bdist_rpm         create an RPM distribution
    bdist_wininst     create an executable installer for MS Windows
    upload            upload binary package to PyPI
    check             perform some checks on the package

We can write package files for Python packages using the Package class, but the class brings with it a lot of methods that are useless for Python packages. Instead, Spack has a PythonPackage subclass that allows packagers of Python modules to be able to invoke setup.py and use Distutils, which is much more familiar to a typical python user.

To see the defaults that Spack has for each a methods, we will take a look at the PythonPackage class:

$ spack edit --build-system python

We see the following:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
class PythonPackage(PackageBase):

    # Standard commands

    def build(self, spec, prefix):
        """Build everything needed to install."""
        args = self.build_args(spec, prefix)

        self.setup_py('build', *args)

    def build_args(self, spec, prefix):
        """Arguments to pass to build."""
        return []

    def build_py(self, spec, prefix):
        '''"Build" pure Python modules (copy to build directory).'''
        args = self.build_py_args(spec, prefix)

        self.setup_py('build_py', *args)

    def build_py_args(self, spec, prefix):
        """Arguments to pass to build_py."""
        return []

    def build_ext(self, spec, prefix):
        """Build C/C++ extensions (compile/link to build directory)."""
        args = self.build_ext_args(spec, prefix)

        self.setup_py('build_ext', *args)

    def build_ext_args(self, spec, prefix):
        """Arguments to pass to build_ext."""
        return []

    def build_clib(self, spec, prefix):
        """Build C/C++ libraries used by Python extensions."""
        args = self.build_clib_args(spec, prefix)

        self.setup_py('build_clib', *args)

    def build_clib_args(self, spec, prefix):
        """Arguments to pass to build_clib."""
        return []

    def build_scripts(self, spec, prefix):
        '''"Build" scripts (copy and fixup #! line).'''
        args = self.build_scripts_args(spec, prefix)

        self.setup_py('build_scripts', *args)

    def clean(self, spec, prefix):
        """Clean up temporary files from 'build' command."""
        args = self.clean_args(spec, prefix)

        self.setup_py('clean', *args)

    def clean_args(self, spec, prefix):
        """Arguments to pass to clean."""
        return []

    def install(self, spec, prefix):
        """Install everything from build directory."""
        args = self.install_args(spec, prefix)

        self.setup_py('install', *args)

    def install_args(self, spec, prefix):
        """Arguments to pass to install."""
        args = ['--prefix={0}'.format(prefix)]

        # This option causes python packages (including setuptools) NOT
        # to create eggs or easy-install.pth files.  Instead, they
        # install naturally into $prefix/pythonX.Y/site-packages.
        #
        # Eggs add an extra level of indirection to sys.path, slowing
        # down large HPC runs.  They are also deprecated in favor of
        # wheels, which use a normal layout when installed.
        #
        # Spack manages the package directory on its own by symlinking
        # extensions into the site-packages directory, so we don't really
        # need the .pth files or egg directories, anyway.
        #
        # We need to make sure this is only for build dependencies. A package
        # such as py-basemap will not build properly with this flag since
        # it does not use setuptools to build and those does not recognize
        # the --single-version-externally-managed flag
        if ('py-setuptools' == spec.name or          # this is setuptools, or
            'py-setuptools' in spec._dependencies and  # it's an immediate dep
            'build' in spec._dependencies['py-setuptools'].deptypes):
                args += ['--single-version-externally-managed', '--root=/']

        return args

    def install_lib(self, spec, prefix):
        """Install all Python modules (extensions and pure Python)."""
        args = self.install_lib_args(spec, prefix)

        self.setup_py('install_lib', *args)

    def install_lib_args(self, spec, prefix):
        """Arguments to pass to install_lib."""
        return []

    def install_headers(self, spec, prefix):
        """Install C/C++ header files."""
        args = self.install_headers_args(spec, prefix)

        self.setup_py('install_headers', *args)

    def install_headers_args(self, spec, prefix):
        """Arguments to pass to install_headers."""
        return []

    def install_scripts(self, spec, prefix):
        """Install scripts (Python or otherwise)."""
        args = self.install_scripts_args(spec, prefix)

        self.setup_py('install_scripts', *args)

    def install_scripts_args(self, spec, prefix):
        """Arguments to pass to install_scripts."""
        return []

    def install_data(self, spec, prefix):
        """Install data files."""
        args = self.install_data_args(spec, prefix)

        self.setup_py('install_data', *args)

    def install_data_args(self, spec, prefix):
        """Arguments to pass to install_data."""
        return []

    def sdist(self, spec, prefix):
        """Create a source distribution (tarball, zip file, etc.)."""
        args = self.sdist_args(spec, prefix)

        self.setup_py('sdist', *args)

    def sdist_args(self, spec, prefix):
        """Arguments to pass to sdist."""
        return []

    def register(self, spec, prefix):
        """Register the distribution with the Python package index."""
        args = self.register_args(spec, prefix)

        self.setup_py('register', *args)

    def register_args(self, spec, prefix):
        """Arguments to pass to register."""
        return []

    def bdist(self, spec, prefix):
        """Create a built (binary) distribution."""
        args = self.bdist_args(spec, prefix)

        self.setup_py('bdist', *args)

    def bdist_args(self, spec, prefix):
        """Arguments to pass to bdist."""
        return []

    def bdist_dumb(self, spec, prefix):
        '''Create a "dumb" built distribution.'''
        args = self.bdist_dumb_args(spec, prefix)

        self.setup_py('bdist_dumb', *args)

    def bdist_dumb_args(self, spec, prefix):
        """Arguments to pass to bdist_dumb."""
        return []

    def bdist_rpm(self, spec, prefix):
        """Create an RPM distribution."""
        args = self.bdist_rpm(spec, prefix)

        self.setup_py('bdist_rpm', *args)

    def bdist_rpm_args(self, spec, prefix):
        """Arguments to pass to bdist_rpm."""
        return []

    def bdist_wininst(self, spec, prefix):
        """Create an executable installer for MS Windows."""
        args = self.bdist_wininst_args(spec, prefix)

        self.setup_py('bdist_wininst', *args)

    def bdist_wininst_args(self, spec, prefix):
        """Arguments to pass to bdist_wininst."""
        return []

    def upload(self, spec, prefix):
        """Upload binary package to PyPI."""
        args = self.upload_args(spec, prefix)

        self.setup_py('upload', *args)

    def upload_args(self, spec, prefix):
        """Arguments to pass to upload."""
        return []

    def check(self, spec, prefix):
        """Perform some checks on the package."""
        args = self.check_args(spec, prefix)

        self.setup_py('check', *args)

    def check_args(self, spec, prefix):
        """Arguments to pass to check."""
        return []

Each of these methods have sensible defaults or they can be overridden.

We will write a package file for Pandas:

$ spack create -f https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz
==> This looks like a URL for pandas
==> Warning: Spack was unable to fetch url list due to a certificate verification problem. You can try running spack -k, which will not check SSL certificates. Use this at your own risk.
==> Found 1 version of pandas:

0.19.0  https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz

==> How many would you like to checksum? (default is 1, q to abort) 1
==> Downloading...
==> Fetching https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz
######################################################################## 100.0%
==> Checksummed 1 version of pandas
==> This package looks like it uses the python build system
==> Changing package name from pandas to py-pandas
==> Created template for py-pandas package
==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/py-pandas/package.py

And we are left with the following template:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

#
# This is a template package file for Spack.  We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
#     spack install py-pandas
#
# You can edit this file again by typing:
#
#     spack edit py-pandas
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *


class PyPandas(PythonPackage):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz"

    version('0.19.0', 'bc9bb7188e510b5d44fbdd249698a2c3')

    # FIXME: Add dependencies if required.
    # depends_on('py-setuptools', type='build')
    # depends_on('py-foo',        type=('build', 'run'))

    def build_args(self, spec, prefix):
        # FIXME: Add arguments other than --prefix
        # FIXME: If not needed delete this function
        args = []
        return args

As you can see this is not any different than any package template that we have written. We have the choice of providing build options or using the sensible defaults

Luckily for us, there is no need to provide build args.

Next we need to find the dependencies of a package. Dependencies are usually listed in setup.py. You can find the dependencies by searching for install_requires keyword in that file. Here it is for Pandas:

# ... code
if sys.version_info[0] >= 3:

setuptools_kwargs = {
                     'zip_safe': False,
                     'install_requires': ['python-dateutil >= 2',
                                          'pytz >= 2011k',
                                          'numpy >= %s' % min_numpy_ver],
                     'setup_requires': ['numpy >= %s' % min_numpy_ver],
                     }
if not _have_setuptools:
    sys.exit("need setuptools/distribute for Py3k"
             "\n$ pip install distribute")

# ... more code

You can find a more comprehensive list at the Pandas documentation.

By reading the documentation and setup.py we found that Pandas depends on python-dateutil, pytz, and numpy, numexpr, and finally bottleneck.

Here is the completed Pandas script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack import *


class PyPandas(PythonPackage):
    """pandas is a Python package providing fast, flexible, and expressive
       data structures designed to make working with relational or
       labeled data both easy and intuitive. It aims to be the
       fundamental high-level building block for doing practical, real
       world data analysis in Python. Additionally, it has the broader
       goal of becoming the most powerful and flexible open source data
       analysis / manipulation tool available in any language.
    """
    homepage = "http://pandas.pydata.org/"
    url = "https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz"

    version('0.19.0', 'bc9bb7188e510b5d44fbdd249698a2c3')
    version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6')
    version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
    version('0.16.0', 'bfe311f05dc0c351f8955fbd1e296e73')

    depends_on('py-dateutil', type=('build', 'run'))
    depends_on('py-numpy', type=('build', 'run'))
    depends_on('py-setuptools', type='build')
    depends_on('py-cython', type='build')
    depends_on('py-pytz', type=('build', 'run'))
    depends_on('py-numexpr', type=('build', 'run'))
    depends_on('py-bottleneck', type=('build', 'run'))

It is quite important to declare all the dependencies of a Python package. Spack can "activate" Python packages to prevent the user from having to load each dependency module explictly. If a dependency is missed, Spack will be unable to properly activate the package and it will cause an issue. To learn more about extensions go to spack extensions.

From this example, you can see that building Python modules is made easy through the PythonPackage class.

Other Build Systems

Although we won't get in depth with any of the other build systems that Spack supports, it is worth mentioning that Spack does provide subclasses for the following build systems:

  1. IntelPackage

  2. SconsPackage

  3. WafPackage

  4. RPackage

  5. PerlPackage

  6. QMakePackage

Each of these classes have their own abstractions to help assist in writing package files. For whatever doesn't fit nicely into the other build-systems, you can use the Package class.

Hopefully by now you can see how we aim to make packaging simple and robust through these classes. If you want to learn more about these build systems, check out Implementing the installation procedure in the Packaging Guide.

Advanced Topics in Packaging

Spack tries to automatically configure packages with information from dependencies such that all you need to do is to list the dependencies (i.e., with the depends_on directive) and the build system (for example by deriving from CmakePackage).

However, there are many special cases. Often you need to retrieve details about dependencies to set package-specific configuration options, or to define package-specific environment variables used by the package's build system. This tutorial covers how to retrieve build information from dependencies, and how you can automatically provide important information to dependents in your package.

Setup for the tutorial

注釈

We do not recommend doing this section of the tutorial in a production Spack instance.

The tutorial uses custom package definitions with missing sections that will be filled in during the tutorial. These package definitions are stored in a separate package repository, which can be enabled with:

$ spack repo add --scope=site var/spack/repos/tutorial

This section of the tutorial may also require a newer version of gcc. If you have not already installed gcc@7.2.0 and added it to your configuration, you can do so with:

$ spack install gcc@7.2.0 %gcc@5.4.0
$ spack compiler add --scope=site `spack location -i gcc@7.2.0 %gcc@5.4.0`

If you are using the tutorial docker image, all dependency packages will have been installed. Otherwise, to install these packages you can use the following commands:

$ spack install openblas
$ spack install netlib-lapack
$ spack install mpich

Now, you are ready to set your preferred EDITOR and continue with the rest of the tutorial.

注釈

Several of these packages depend on an MPI implementation. You can use OpenMPI if you install it from scratch, but this is slow (>10 min.). A binary cache of MPICH may be provided, in which case you can force the package to use it and install quickly. All tutorial examples with packages that depend on MPICH include the spec syntax for building with it

Modifying a package's build environment

Spack sets up several environment variables like PATH by default to aid in building a package, but many packages make use of environment variables which convey specific information about their dependencies (e.g., MPICC). This section covers how to update your Spack packages so that package-specific environment variables are defined at build-time.

Set environment variables in dependent packages at build-time

Dependencies can set environment variables that are required when their dependents build. For example, when a package depends on a python extension like py-numpy, Spack's python package will add it to PYTHONPATH so it is available at build time; this is required because the default setup that spack does is not sufficient for python to import modules.

To provide environment setup for a dependent, a package can implement the setup_dependent_environment function. This function takes as a parameter a EnvironmentModifications object which includes convenience methods to update the environment. For example, an MPI implementation can set MPICC for packages that depend on it:

def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
    spack_env.set('MPICC', join_path(self.prefix.bin, 'mpicc'))

In this case packages that depend on mpi will have MPICC defined in their environment when they build. This section is focused on modifying the build-time environment represented by spack_env, but it's worth noting that modifications to run_env are included in Spack's automatically-generated module files.

We can practice by editing the mpich package to set the MPICC environment variable in the build-time environment of dependent packages.

root@advanced-packaging-tutorial:/# spack edit mpich

Once you're finished, the method should look like this:

def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
    spack_env.set('MPICC',  join_path(self.prefix.bin, 'mpicc'))
    spack_env.set('MPICXX', join_path(self.prefix.bin, 'mpic++'))
    spack_env.set('MPIF77', join_path(self.prefix.bin, 'mpif77'))
    spack_env.set('MPIF90', join_path(self.prefix.bin, 'mpif90'))

    spack_env.set('MPICH_CC', spack_cc)
    spack_env.set('MPICH_CXX', spack_cxx)
    spack_env.set('MPICH_F77', spack_f77)
    spack_env.set('MPICH_F90', spack_fc)
    spack_env.set('MPICH_FC', spack_fc)

At this point we can, for instance, install netlib-scalapack with mpich:

root@advanced-packaging-tutorial:/# spack install netlib-scalapack ^mpich
...
==> Created stage in /usr/local/var/spack/stage/netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z
==> No patches needed for netlib-scalapack
==> Building netlib-scalapack [CMakePackage]
==> Executing phase: 'cmake'
==> Executing phase: 'build'
==> Executing phase: 'install'
==> Successfully installed netlib-scalapack
  Fetch: 0.01s.  Build: 3m 59.86s.  Total: 3m 59.87s.
[+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z

and double check the environment logs to verify that every variable was set to the correct value.

Set environment variables in your own package

Packages can modify their own build-time environment by implementing the setup_environment function. For qt this looks like:

def setup_environment(self, spack_env, run_env):
    spack_env.set('MAKEFLAGS', '-j{0}'.format(make_jobs))
    run_env.set('QTDIR', self.prefix)

When qt builds, MAKEFLAGS will be defined in the environment.

To contrast with qt's setup_dependent_environment function:

def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
    spack_env.set('QTDIR', self.prefix)

Let's see how it works by completing the elpa package:

root@advanced-packaging-tutorial:/# spack edit elpa

In the end your method should look like:

def setup_environment(self, spack_env, run_env):
    spec = self.spec

    spack_env.set('CC', spec['mpi'].mpicc)
    spack_env.set('FC', spec['mpi'].mpifc)
    spack_env.set('CXX', spec['mpi'].mpicxx)
    spack_env.set('SCALAPACK_LDFLAGS', spec['scalapack'].libs.joined())

    spack_env.append_flags('LDFLAGS', spec['lapack'].libs.search_flags)
    spack_env.append_flags('LIBS', spec['lapack'].libs.link_flags)

At this point it's possible to proceed with the installation of elpa ^mpich

Retrieving library information

Although Spack attempts to help packages locate their dependency libraries automatically (e.g. by setting PKG_CONFIG_PATH and CMAKE_PREFIX_PATH), a package may have unique configuration options that are required to locate libraries. When a package needs information about dependency libraries, the general approach in Spack is to query the dependencies for the locations of their libraries and set configuration options accordingly. By default most Spack packages know how to automatically locate their libraries. This section covers how to retrieve library information from dependencies and how to locate libraries when the default logic doesn't work.

Accessing dependency libraries

If you need to access the libraries of a dependency, you can do so via the libs property of the spec, for example in the arpack-ng package:

def install(self, spec, prefix):
    lapack_libs = spec['lapack'].libs.joined(';')
    blas_libs = spec['blas'].libs.joined(';')

    cmake(*[
        '-DLAPACK_LIBRARIES={0}'.format(lapack_libs),
        '-DBLAS_LIBRARIES={0}'.format(blas_libs)
    ], '.')

Note that arpack-ng is querying virtual dependencies, which Spack automatically resolves to the installed implementation (e.g. openblas for blas).

We've started work on a package for armadillo. You should open it, read through the comment that starts with # TUTORIAL: and complete the cmake_args section:

root@advanced-packaging-tutorial:/# spack edit armadillo

If you followed the instructions in the package, when you are finished your cmake_args method should look like:

def cmake_args(self):
      spec = self.spec

      return [
          # ARPACK support
          '-DARPACK_LIBRARY={0}'.format(spec['arpack-ng'].libs.joined(";")),
          # BLAS support
          '-DBLAS_LIBRARY={0}'.format(spec['blas'].libs.joined(";")),
          # LAPACK support
          '-DLAPACK_LIBRARY={0}'.format(spec['lapack'].libs.joined(";")),
          # SuperLU support
          '-DSuperLU_INCLUDE_DIR={0}'.format(spec['superlu'].prefix.include),
          '-DSuperLU_LIBRARY={0}'.format(spec['superlu'].libs.joined(";")),
          # HDF5 support
          '-DDETECT_HDF5={0}'.format('ON' if '+hdf5' in spec else 'OFF')
      ]

As you can see, getting the list of libraries that your dependencies provide is as easy as accessing the their libs attribute. Furthermore, the interface remains the same whether you are querying regular or virtual dependencies.

At this point you can complete the installation of armadillo using openblas as a LAPACK provider (armadillo ^openblas ^mpich):

root@advanced-packaging-tutorial:/# spack install armadillo ^openblas ^mpich
==> pkg-config is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
...
==> superlu is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-5.2.1-q2mbtw2wo4kpzis2e2n227ip2fquxrno
==> Installing armadillo
==> Using cached archive: /usr/local/var/spack/cache/armadillo/armadillo-8.100.1.tar.xz
==> Staging archive: /usr/local/var/spack/stage/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4/armadillo-8.100.1.tar.xz
==> Created stage in /usr/local/var/spack/stage/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4
==> Applied patch undef_linux.patch
==> Building armadillo [CMakePackage]
==> Executing phase: 'cmake'
==> Executing phase: 'build'
==> Executing phase: 'install'
==> Successfully installed armadillo
  Fetch: 0.01s.  Build: 3.96s.  Total: 3.98s.
[+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4

Hopefully the installation went fine and the code we added expanded to the right list of semicolon separated libraries (you are encouraged to open armadillo's build logs to double check).

Providing libraries to dependents

Spack provides a default implementation for libs which often works out of the box. A user can write a package definition without having to implement a libs property and dependents can retrieve its libraries as shown in the above section. However, the default implementation assumes that libraries follow the naming scheme lib<package name>.so (or e.g. lib<package name>.a for static libraries). Packages which don't follow this naming scheme must implement this function themselves, e.g. opencv:

@property
def libs(self):
    shared = "+shared" in self.spec
    return find_libraries(
        "libopencv_*", root=self.prefix, shared=shared, recurse=True
    )

This issue is common for packages which implement an interface (i.e. virtual package providers in Spack). If we try to build another version of armadillo tied to netlib-lapack (armadillo ^netlib-lapack ^mpich) we'll notice that this time the installation won't complete:

root@advanced-packaging-tutorial:/# spack install  armadillo ^netlib-lapack ^mpich
==> pkg-config is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
...
==> openmpi is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f
==> Installing arpack-ng
==> Using cached archive: /usr/local/var/spack/cache/arpack-ng/arpack-ng-3.5.0.tar.gz
==> Already staged arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un in /usr/local/var/spack/stage/arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un
==> No patches needed for arpack-ng
==> Building arpack-ng [Package]
==> Executing phase: 'install'
==> Error: RuntimeError: Unable to recursively locate netlib-lapack libraries in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-lapack-3.6.1-jjfe23wgt7nkjnp2adeklhseg3ftpx6z
RuntimeError: RuntimeError: Unable to recursively locate netlib-lapack libraries in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-lapack-3.6.1-jjfe23wgt7nkjnp2adeklhseg3ftpx6z

/usr/local/var/spack/repos/builtin/packages/arpack-ng/package.py:105, in install:
     5             options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
     6
     7             # Make sure we use Spack's blas/lapack:
  >> 8             lapack_libs = spec['lapack'].libs.joined(';')
     9             blas_libs = spec['blas'].libs.joined(';')
     10
     11            options.extend([

See build log for details:
  /usr/local/var/spack/stage/arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un/arpack-ng-3.5.0/spack-build.out

Unlike openblas which provides a library named libopenblas.so, netlib-lapack provides liblapack.so, so it needs to implement customized library search logic. Let's edit it:

root@advanced-packaging-tutorial:/# spack edit netlib-lapack

and follow the instructions in the # TUTORIAL: comment as before. What we need to implement is:

@property
def lapack_libs(self):
    shared = True if '+shared' in self.spec else False
    return find_libraries(
        'liblapack', root=self.prefix, shared=shared, recursive=True
    )

i.e., a property that returns the correct list of libraries for the LAPACK interface.

We use the name lapack_libs rather than libs because netlib-lapack can also provide blas, and when it does it is provided as a separate library file. Using this name ensures that when dependents ask for lapack libraries, netlib-lapack will retrieve only the libraries associated with the lapack interface. Now we can finally install armadillo ^netlib-lapack ^mpich:

root@advanced-packaging-tutorial:/# spack install  armadillo ^netlib-lapack ^mpich
...

==> Building armadillo [CMakePackage]
==> Executing phase: 'cmake'
==> Executing phase: 'build'
==> Executing phase: 'install'
==> Successfully installed armadillo
  Fetch: 0.01s.  Build: 3.75s.  Total: 3.76s.
[+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/armadillo-8.100.1-sxmpu5an4dshnhickh6ykchyfda7jpyn

Since each implementation of a virtual package is responsible for locating the libraries associated with the interfaces it provides, dependents do not need to include special-case logic for different implementations and for example need only ask for spec['blas'].libs.

Other Packaging Topics

Attach attributes to other packages

Build tools usually also provide a set of executables that can be used when another package is being installed. Spack gives you the opportunity to monkey-patch dependent modules and attach attributes to them. This helps make the packager experience as similar as possible to what would have been the manual installation of the same package.

An example here is the automake package, which overrides setup_dependent_package:

def setup_dependent_package(self, module, dependent_spec):
    # Automake is very likely to be a build dependency,
    # so we add the tools it provides to the dependent module
    executables = ['aclocal', 'automake']
    for name in executables:
        setattr(module, name, self._make_executable(name))

so that every other package that depends on it can use directly aclocal and automake with the usual function call syntax of Executable:

aclocal('--force')
Extra query parameters

An advanced feature of the Spec's build-interface protocol is the support for extra parameters after the subscript key. In fact, any of the keys used in the query can be followed by a comma-separated list of extra parameters which can be inspected by the package receiving the request to fine-tune a response.

Let's look at an example and try to install netcdf ^mpich:

root@advanced-packaging-tutorial:/# spack install netcdf ^mpich
==> libsigsegv is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
...
==> Error: AttributeError: 'list' object has no attribute 'search_flags'
AttributeError: AttributeError: 'list' object has no attribute 'search_flags'

/usr/local/var/spack/repos/builtin/packages/netcdf/package.py:207, in configure_args:
     50            # used instead.
     51            hdf5_hl = self.spec['hdf5:hl']
     52            CPPFLAGS.append(hdf5_hl.headers.cpp_flags)
  >> 53            LDFLAGS.append(hdf5_hl.libs.search_flags)
     54
     55            if '+parallel-netcdf' in self.spec:
     56                config_args.append('--enable-pnetcdf')

See build log for details:
  /usr/local/var/spack/stage/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj/netcdf-4.4.1.1/spack-build.out

We can see from the error that netcdf needs to know how to link the high-level interface of hdf5, and thus passes the extra parameter hl after the request to retrieve it. Clearly the implementation in the hdf5 package is not complete, and we need to fix it:

root@advanced-packaging-tutorial:/# spack edit hdf5

If you followed the instructions correctly, the code added to the lib property should be similar to:

query_parameters = self.spec.last_query.extra_parameters
key = tuple(sorted(query_parameters))
libraries = query2libraries[key]
shared = '+shared' in self.spec
return find_libraries(
    libraries, root=self.prefix, shared=shared, recurse=True
)

where we highlighted the line retrieving the extra parameters. Now we can successfully complete the installation of netcdf ^mpich:

root@advanced-packaging-tutorial:/# spack install netcdf ^mpich
==> libsigsegv is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
==> m4 is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
...
==> Installing netcdf
==> Using cached archive: /usr/local/var/spack/cache/netcdf/netcdf-4.4.1.1.tar.gz
==> Already staged netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj in /usr/local/var/spack/stage/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj
==> Already patched netcdf
==> Building netcdf [AutotoolsPackage]
==> Executing phase: 'autoreconf'
==> Executing phase: 'configure'
==> Executing phase: 'build'
==> Executing phase: 'install'
==> Successfully installed netcdf
  Fetch: 0.01s.  Build: 24.61s.  Total: 24.62s.
[+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj

既知の問題

This is a list of known bugs in Spack. It provides ways of getting around these problems if you encounter them.

Variants are not properly forwarded to dependencies

Status: Expected to be fixed in the next release

Sometimes, a variant of a package can also affect how its dependencies are built. For example, in order to build MPI support for a package, it may require that its dependencies are also built with MPI support. In the package.py, this looks like:

depends_on('hdf5~mpi', when='~mpi')
depends_on('hdf5+mpi', when='+mpi')

Spack handles this situation properly for immediate dependencies, and builds hdf5 with the same variant you used for the package that depends on it. However, for indirect dependencies (dependencies of dependencies), Spack does not backtrack up the DAG far enough to handle this. Users commonly run into this situation when trying to build R with X11 support:

$ spack install r+X
...
==> Error: Invalid spec: 'cairo@1.14.8%gcc@6.2.1+X arch=linux-fedora25-x86_64 ^bzip2@1.0.6%gcc@6.2.1+shared arch=linux-fedora25-x86_64 ^font-util@1.3.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^fontconfig@2.12.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^freetype@2.7.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^gettext@0.19.8.1%gcc@6.2.1+bzip2+curses+git~libunistring+libxml2+tar+xz arch=linux-fedora25-x86_64 ^glib@2.53.1%gcc@6.2.1~libmount arch=linux-fedora25-x86_64 ^inputproto@2.3.2%gcc@6.2.1 arch=linux-fedora25-x86_64 ^kbproto@1.0.7%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libffi@3.2.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libpng@1.6.29%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libpthread-stubs@0.4%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libx11@1.6.5%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxau@1.0.8%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxcb@1.12%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxdmcp@1.1.2%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxext@1.3.3%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxml2@2.9.4%gcc@6.2.1~python arch=linux-fedora25-x86_64 ^libxrender@0.9.10%gcc@6.2.1 arch=linux-fedora25-x86_64 ^ncurses@6.0%gcc@6.2.1~symlinks arch=linux-fedora25-x86_64 ^openssl@1.0.2k%gcc@6.2.1 arch=linux-fedora25-x86_64 ^pcre@8.40%gcc@6.2.1+utf arch=linux-fedora25-x86_64 ^pixman@0.34.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^pkg-config@0.29.2%gcc@6.2.1+internal_glib arch=linux-fedora25-x86_64 ^python@2.7.13%gcc@6.2.1+shared~tk~ucs4 arch=linux-fedora25-x86_64 ^readline@7.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^renderproto@0.11.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^sqlite@3.18.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^tar^util-macros@1.19.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xcb-proto@1.12%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xextproto@7.3.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xproto@7.0.31%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xtrans@1.3.5%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xz@5.2.3%gcc@6.2.1 arch=linux-fedora25-x86_64 ^zlib@1.2.11%gcc@6.2.1+pic+shared arch=linux-fedora25-x86_64'.
Package cairo requires variant ~X, but spec asked for +X

A workaround is to explicitly activate the variants of dependencies as well:

$ spack install r+X ^cairo+X ^pango+X

See https://github.com/spack/spack/issues/267 and https://github.com/spack/spack/issues/2546 for further details.

spack setup doesn't work

Status: Work in progress

Spack provides a setup command that is useful for the development of software outside of Spack. Unfortunately, this command no longer works. See https://github.com/spack/spack/issues/2597 and https://github.com/spack/spack/issues/2662 for details. This is expected to be fixed by https://github.com/spack/spack/pull/2664.

設定ファイル

Spack has many configuration files. Here is a quick list of them, in case you want to skip directly to specific docs:

YAML Format

Spack configuration files are written in YAML. We chose YAML because it's human readable, but also versatile in that it supports dictionaries, lists, and nested sections. For more details on the format, see yaml.org and libyaml. Here is an example config.yaml file:

config:
  install_tree: $spack/opt/spack
  module_roots:
    lmod: $spack/share/spack/lmod
  build_stage:
    - $tempdir
    - /nfs/tmp2/$user

Each Spack configuration file is nested under a top-level section corresponding to its name. So, config.yaml starts with config:, mirrors.yaml starts with mirrors:, etc.

Configuration Scopes

Spack pulls configuration data from files in several directories. There are six configuration scopes. From lowest to highest:

  1. defaults: Stored in $(prefix)/etc/spack/defaults/. These are the "factory" settings. Users should generally not modify the settings here, but should override them in other configuration scopes. The defaults here will change from version to version of Spack.

  2. system: Stored in /etc/spack/. These are settings for this machine, or for all machines on which this file system is mounted. The site scope can be used for settings idiosyncratic to a particular machine, such as the locations of compilers or external packages. These settings are presumably controlled by someone with root access on the machine. They override the defaults scope.

  3. site: Stored in $(prefix)/etc/spack/. Settings here affect only this instance of Spack, and they override the defaults and system scopes. The site scope can can be used for per-project settings (one Spack instance per project) or for site-wide settings on a multi-user machine (e.g., for a common Spack instance).

  4. user: Stored in the home directory: ~/.spack/. These settings affect all instances of Spack and take higher precedence than site, system, or defaults scopes.

  5. custom: Stored in a custom directory specified by --config-scope. If multiple scopes are listed on the command line, they are ordered from lowest to highest precedence.

  6. command line: Build settings specified on the command line take precedence over all other scopes.

Each configuration directory may contain several configuration files, such as config.yaml, compilers.yaml, or mirrors.yaml. When configurations conflict, settings from higher-precedence scopes override lower-precedence settings.

Commands that modify scopes (e.g., spack compilers, spack repo, etc.) take a --scope=<name> parameter that you can use to control which scope is modified. By default, they modify the highest-precedence scope.

Custom scopes

In addition to the defaults, system, site, and user scopes, you may add configuration scopes directly on the command line with the --config-scope argument, or -C for short.

For example, the following adds two configuration scopes, named scopea and scopeb, to a spack spec command:

$ spack -C ~/myscopes/scopea -C ~/myscopes/scopeb spec ncurses

Custom scopes come after the spack command and before the subcommand, and they specify a single path to a directory full of configuration files. You can add the same configuration files to that directory that you can add to any other scope (config.yaml, packages.yaml, etc.).

If multiple scopes are provided:

  1. Each must be preceded with the --config-scope or -C flag.

  2. They must be ordered from lowest to highest precedence.

Example: scopes for release and development

Suppose that you need to support simultaneous building of release and development versions of mypackage, where mypackage -> A -> B. You could create The following files:

~/myscopes/release/packages.yaml
packages:
    mypackage:
        version: [1.7]
    A:
        version: [2.3]
    B:
        version: [0.8]
~/myscopes/develop/packages.yaml
packages:
    mypackage:
        version: [develop]
    A:
        version: [develop]
    B:
        version: [develop]

You can switch between release and develop configurations using configuration arguments. You would type spack -C ~/myscopes/release when you want to build the designated release versions of mypackage, A, and B, and you would type spack -C ~/myscopes/develop when you want to build all of these packages at the develop version.

Example: swapping MPI providers

Suppose that you need to build two software packages, packagea and packageb. packagea is Python 2-based and packageb is Python 3-based. packagea only builds with OpenMPI and packageb only builds with MPICH. You can create different configuration scopes for use with packagea and packageb:

~/myscopes/packgea/packages.yaml
packages:
    python:
        version: [2.7.11]
    all:
        providers:
            mpi: [openmpi]
~/myscopes/packageb/packages.yaml
packages:
    python:
        version: [3.5.2]
    all:
        providers:
            mpi: [mpich]

Platform-specific Scopes

For each scope above, there can also be platform-specific settings. For example, on most platforms, GCC is the preferred compiler. However, on macOS (darwin), Clang often works for more packages, and is set as the default compiler. This configuration is set in $(prefix)/etc/spack/defaults/darwin/packages.yaml. It will take precedence over settings in the defaults scope, but can still be overridden by settings in system, system/darwin, site, site/darwin, user, user/darwin, custom, or custom/darwin. So, the full scope precedence is:

  1. defaults

  2. defaults/<platform>

  3. system

  4. system/<platform>

  5. site

  6. site/<platform>

  7. user

  8. user/<platform>

  9. custom

  10. custom/<platform>

You can get the name to use for <platform> by running spack arch --platform. The system config scope has a <platform> section for sites at which /etc is mounted on multiple heterogeneous machines.

Scope Precedence

When spack queries for configuration parameters, it searches in higher-precedence scopes first. So, settings in a higher-precedence file can override those with the same key in a lower-precedence one. For list-valued settings, Spack prepends higher-precedence settings to lower-precedence settings. Completely ignoring higher-level configuration options is supported with the :: notation for keys (see Overriding entire sections below).

Simple keys

Let's look at an example of overriding a single key in a Spack file. If your configurations look like this:

$(prefix)/etc/spack/defaults/config.yaml
config:
  install_tree: $spack/opt/spack
  module_roots:
    lmod: $spack/share/spack/lmod
  build_stage:
    - $tempdir
    - /nfs/tmp2/$user
~/.spack/config.yaml
config:
  install_tree: /some/other/directory

Spack will only override install_tree in the config section, and will take the site preferences for other settings. You can see the final, combined configuration with the spack config get <configtype> command:

$ spack config get config
config:
  install_tree: /some/other/directory
  module_roots:
    lmod: $spack/share/spack/lmod
  build_stage:
    - $tempdir
    - /nfs/tmp2/$user

Overriding entire sections

Above, the user config.yaml only overrides specific settings in the default config.yaml. Sometimes, it is useful to completely override lower-precedence settings. To do this, you can use two colons at the end of a key in a configuration file. For example:

~/.spack/config.yaml
config::
  install_tree: /some/other/directory

Spack will ignore all lower-precedence configuration under the config:: section:

$ spack config get config
config:
  install_tree: /some/other/directory

List-valued settings

Let's revisit the config.yaml example one more time. The build_stage setting's value is an ordered list of directories:

$(prefix)/etc/spack/defaults/config.yaml
build_stage:
  - $tempdir
  - /nfs/tmp2/$user

Suppose the user configuration adds its own list of build_stage paths:

~/.spack/config.yaml
build_stage:
  - /lustre-scratch/$user
  - ~/mystage

Spack will first look at the paths in the defaults config.yaml, then the paths in the user's ~/.spack/config.yaml. The list in the higher-precedence scope is prepended to the defaults. spack config get config shows the result:

$ spack config get config
config:
  install_tree: /some/other/directory
  module_roots:
    lmod: $spack/share/spack/lmod
  build_stage:
    - /lustre-scratch/$user
    - ~/mystage
    - $tempdir
    - /nfs/tmp2/$user

As in Overriding entire sections, the higher-precedence scope can completely override the lower-precedence scope using ::. So if the user config looked like this:

~/.spack/config.yaml
build_stage::
  - /lustre-scratch/$user
  - ~/mystage

The merged configuration would look like this:

$ spack config get config
config:
  install_tree: /some/other/directory
  module_roots:
    lmod: $spack/share/spack/lmod
  build_stage:
    - /lustre-scratch/$user
    - ~/mystage

Config File Variables

Spack understands several variables which can be used in config file paths wherever they appear. There are three sets of these variables: Spack-specific variables, environment variables, and user path variables. Spack-specific variables and environment variables are both indicated by prefixing the variable name with $. User path variables are indicated at the start of the path with ~ or ~user.

Spack-specific variables

Spack understands several special variables. These are:

  • $spack: path to the prefix of this Spack installation

  • $tempdir: default system temporary directory (as specified in Python's tempfile.tempdir variable.

  • $user: name of the current user

Note that, as with shell variables, you can write these as $varname or with braces to distinguish the variable from surrounding characters: ${varname}. Their names are also case insensitive, meaning that $SPACK works just as well as $spack. These special variables are substituted first, so any environment variables with the same name will not be used.

Environment variables

After Spack-specific variables are evaluated, environment variables are expanded. These are formatted like Spack-specific variables, e.g., ${varname}. You can use this to insert environment variables in your Spack configuration.

User home directories

Spack performs Unix-style tilde expansion on paths in configuration files. This means that tilde (~) will expand to the current user's home directory, and ~user will expand to a specified user's home directory. The ~ must appear at the beginning of the path, or Spack will not expand it.

Seeing Spack's Configuration

With so many scopes overriding each other, it can sometimes be difficult to understand what Spack's final configuration looks like.

Spack provides two useful ways to view the final "merged" version of any configuration file: spack config get and spack config blame.

spack config get

spack config get shows a fully merged configuration file, taking into account all scopes. For example, to see the fully merged config.yaml, you can type:

$ spack config get config
config:
  debug: false
  checksum: true
  verify_ssl: true
  dirty: false
  build_jobs: 8
  install_tree: $spack/opt/spack
  template_dirs:
  - $spack/templates
  directory_layout: {architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}
  module_roots:
    tcl: $spack/share/spack/modules
    lmod: $spack/share/spack/lmod
    dotkit: $spack/share/spack/dotkit
  build_stage:
  - $tempdir
  - /nfs/tmp2/$user
  - $spack/var/spack/stage
  source_cache: $spack/var/spack/cache
  misc_cache: ~/.spack/cache
  locks: true

Likewise, this will show the fully merged packages.yaml:

$ spack config get packages

You can use this in conjunction with the -C / --config-scope argument to see how your scope will affect Spack's configuration:

$ spack -C /path/to/my/scope config get packages

spack config blame

spack config blame functions much like spack config get, but it shows exactly which configuration file each preference came from. If you do not know why Spack is behaving a certain way, this can help you track down the problem:

$ spack --insecure -C ./my-scope -C ./my-scope-2 config blame config
==> Warning: You asked for --insecure. Will NOT check SSL certificates.
---                                                   config:
_builtin                                                debug: False
/home/myuser/spack/etc/spack/defaults/config.yaml:72    checksum: True
command_line                                            verify_ssl: False
./my-scope-2/config.yaml:2                              dirty: False
_builtin                                                build_jobs: 8
./my-scope/config.yaml:2                                install_tree: /path/to/some/tree
/home/myuser/spack/etc/spack/defaults/config.yaml:23    template_dirs:
/home/myuser/spack/etc/spack/defaults/config.yaml:24    - $spack/templates
/home/myuser/spack/etc/spack/defaults/config.yaml:28    directory_layout: {architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}
/home/myuser/spack/etc/spack/defaults/config.yaml:32    module_roots:
/home/myuser/spack/etc/spack/defaults/config.yaml:33      tcl: $spack/share/spack/modules
/home/myuser/spack/etc/spack/defaults/config.yaml:34      lmod: $spack/share/spack/lmod
/home/myuser/spack/etc/spack/defaults/config.yaml:35      dotkit: $spack/share/spack/dotkit
/home/myuser/spack/etc/spack/defaults/config.yaml:49    build_stage:
/home/myuser/spack/etc/spack/defaults/config.yaml:50    - $tempdir
/home/myuser/spack/etc/spack/defaults/config.yaml:51    - /nfs/tmp2/$user
/home/myuser/spack/etc/spack/defaults/config.yaml:52    - $spack/var/spack/stage
/home/myuser/spack/etc/spack/defaults/config.yaml:57    source_cache: $spack/var/spack/cache
/home/myuser/spack/etc/spack/defaults/config.yaml:62    misc_cache: ~/.spack/cache
/home/myuser/spack/etc/spack/defaults/config.yaml:86    locks: True

You can see above that the build_jobs and debug settings are built in and are not overridden by a configuration file. The verify_ssl setting comes from the --insceure option on the command line. dirty and install_tree come from the custom scopes ./my-scope and ./my-scope-2, and all other configuration options come from the default configuration files that ship with Spack.

基本設定

Spack's basic configuration options are set in config.yaml. You can see the default settings by looking at etc/spack/defaults/config.yaml:

# -------------------------------------------------------------------------
# This is the default spack configuration file.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
#   $SPACK_ROOT/etc/spack/config.yaml
#
# Per-user settings (overrides default and site settings):
#   ~/.spack/config.yaml
# -------------------------------------------------------------------------
config:
  # This is the path to the root of the Spack install tree.
  # You can use $spack here to refer to the root of the spack instance.
  install_tree: $spack/opt/spack


  # Locations where templates should be found
  template_dirs:
    - $spack/share/spack/templates


  # Default directory layout
  install_path_scheme: "${ARCHITECTURE}/${COMPILERNAME}-${COMPILERVER}/${PACKAGE}-${VERSION}-${HASH}"


  # Locations where different types of modules should be installed.
  module_roots:
    tcl:    $spack/share/spack/modules
    lmod:   $spack/share/spack/lmod
    dotkit: $spack/share/spack/dotkit


  # Temporary locations Spack can try to use for builds.
  #
  # Spack will use the first one it finds that exists and is writable.
  # You can use $tempdir to refer to the system default temp directory
  # (as returned by tempfile.gettempdir()).
  #
  # A value of $spack/var/spack/stage indicates that Spack should run
  # builds directly inside its install directory without staging them in
  # temporary space.
  #
  # The build stage can be purged with `spack clean --stage`.
  build_stage:
    - $tempdir
    - $spack/var/spack/stage


  # Cache directory for already downloaded source tarballs and archived
  # repositories. This can be purged with `spack clean --downloads`.
  source_cache: $spack/var/spack/cache


  # Cache directory for miscellaneous files, like the package index.
  # This can be purged with `spack clean --misc-cache`
  misc_cache: ~/.spack/cache


  # If this is false, tools like curl that use SSL will not verify
  # certifiates. (e.g., curl will use use the -k option)
  verify_ssl: true


  # If set to true, Spack will attempt to build any compiler on the spec
  # that is not already available. If set to False, Spack will only use
  # compilers already configured in compilers.yaml
  install_missing_compilers: False


  # If set to true, Spack will always check checksums after downloading
  # archives. If false, Spack skips the checksum step.
  checksum: true


  # If set to true, `spack install` and friends will NOT clean
  # potentially harmful variables from the build environment. Use wisely.
  dirty: false


  # The language the build environment will use. This will produce English
  # compiler messages by default, so the log parser can highlight errors.
  # If set to C, it will use English (see man locale).
  # If set to the empty string (''), it will use the language from the
  # user's environment.
  build_language: C


  # When set to true, concurrent instances of Spack will use locks to
  # avoid modifying the install tree, database file, etc. If false, Spack
  # will disable all locking, but you must NOT run concurrent instances
  # of Spack.  For filesystems that don't support locking, you should set
  # this to false and run one Spack at a time, but otherwise we recommend
  # enabling locks.
  locks: true


  # The default number of jobs to use when running `make` in parallel.
  # If set to 4, for example, `spack install` will run `make -j4`.
  # If not set, all available cores are used by default.
  # build_jobs: 4


  # If set to true, Spack will use ccache to cache C compiles.
  ccache: false


  # How long to wait to lock the Spack installation database. This lock is used
  # when Spack needs to manage its own package metadata and all operations are
  # expected to complete within the default time limit. The timeout should
  # therefore generally be left untouched.
  db_lock_timeout: 120


  # How long to wait when attempting to modify a package (e.g. to install it).
  # This value should typically be 'null' (never time out) unless the Spack
  # instance only ever has a single user at a time, and only if the user
  # anticipates that a significant delay indicates that the lock attempt will
  # never succeed.
  package_lock_timeout: null

These settings can be overridden in etc/spack/config.yaml or ~/.spack/config.yaml. See Configuration Scopes for details.

install_tree

The location where Spack will install packages and their dependencies. Default is $spack/opt/spack.

install_hash_length and install_path_scheme

The default Spack installation path can be very long and can create problems for scripts with hardcoded shebangs. There are two parameters to help with that. Firstly, the install_hash_length parameter can set the length of the hash in the installation path from 1 to 32. The default path uses the full 32 characters.

Secondly, it is also possible to modify the entire installation scheme. By default Spack uses {architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash} where the tokens that are available for use in this directive are the same as those understood by the Spec.format method. Using this parameter it is possible to use a different package layout or reduce the depth of the installation paths. For example

config:
  install_path_scheme: '{name}/{version}/{hash:7}'

would install packages into sub-directories using only the package name, version and a hash length of 7 characters.

When using either parameter to set the hash length it only affects the representation of the hash in the installation directory. You should be aware that the smaller the hash length the more likely naming conflicts will occur. These parameters are independent of those used to configure module names.

警告

Modifying the installation hash length or path scheme after packages have been installed will prevent Spack from being able to find the old installation directories.

module_roots

Controls where Spack installs generated module files. You can customize the location for each type of module. e.g.:

module_roots:
  tcl:    $spack/share/spack/modules
  lmod:   $spack/share/spack/lmod
  dotkit: $spack/share/spack/dotkit

See モジュール for details.

build_stage

Spack is designed to run out of a user home directory, and on many systems the home directory is a (slow) network file system. On most systems, building in a temporary file system results in faster builds than building in the home directory. Usually, there is also more space available in the temporary location than in the home directory. So, Spack tries to create build stages in temporary space.

By default, Spack's build_stage is configured like this:

build_stage:
 - $tempdir
 - $spack/var/spack/stage

This is an ordered list of paths that Spack should search when trying to find a temporary directory for the build stage. The list is searched in order, and Spack will use the first directory to which it has write access. See Config File Variables for more on $tempdir and $spack.

When Spack builds a package, it creates a temporary directory within the build_stage, and it creates a symbolic link to that directory in $spack/var/spack/stage. This is used to track the temporary directory. After the package is successfully installed, Spack deletes the temporary directory it used to build. Unsuccessful builds are not deleted, but you can manually purge them with spack clean --stage.

注釈

The last item in the list is $spack/var/spack/stage. If this is the only writable directory in the build_stage list, Spack will build directly in $spack/var/spack/stage and will not link to temporary space.

source_cache

Location to cache downloaded tarballs and repositories. By default these are stored in $spack/var/spack/cache. These are stored indefinitely by default. Can be purged with spack clean --downloads.

misc_cache

Temporary directory to store long-lived cache files, such as indices of packages available in repositories. Defaults to ~/.spack/cache. Can be purged with spack clean --misc-cache.

verify_ssl

When set to true (default) Spack will verify certificates of remote hosts when making ssl connections. Set to false to disable, and tools like curl will use their --insecure options. Disabling this can expose you to attacks. Use at your own risk.

checksum

When set to true, Spack verifies downloaded source code using a checksum, and will refuse to build packages that it cannot verify. Set to false to disable these checks. Disabling this can expose you to attacks. Use at your own risk.

locks

When set to true, concurrent instances of Spack will use locks to avoid modifying the install tree, database file, etc. If false, Spack will disable all locking, but you must not run concurrent instances of Spack. For file systems that don't support locking, you should set this to false and run one Spack at a time, but otherwise we recommend enabling locks.

dirty

By default, Spack unsets variables in your environment that can change the way packages build. This includes LD_LIBRARY_PATH, CPATH, LIBRARY_PATH, DYLD_LIBRARY_PATH, and others.

By default, builds are clean, but on some machines, compilers and other tools may need custom LD_LIBRARY_PATH settings to run. You can set dirty to true to skip the cleaning step and make all builds "dirty" by default. Be aware that this will reduce the reproducibility of builds.

build_jobs

Unless overridden in a package or on the command line, Spack builds all packages in parallel. For a build system that uses Makefiles, this means running make -j<build_jobs>, where build_jobs is the number of threads to use.

The default parallelism is equal to the number of cores on your machine. If you work on a shared login node or have a strict ulimit, it may be necessary to set the default to a lower value. By setting build_jobs to 4, for example, commands like spack install will run make -j4 instead of hogging every core.

To build all software in serial, set build_jobs to 1.

ccache

When set to true Spack will use ccache to cache compiles. This is useful specifically in two cases: (1) when using spack setup, and (2) when building the same package with many different variants. The default is false.

When enabled, Spack will look inside your PATH for a ccache executable and stop if it is not found. Some systems come with ccache, but it can also be installed using spack install ccache. ccache comes with reasonable defaults for cache size and location. (See the Configuration settings section of man ccache to learn more about the default settings and how to change them). Please note that we currently disable ccache's hash_dir feature to avoid an issue with the stage directory (see https://github.com/LLNL/spack/pull/3761#issuecomment-294352232).

ビルドカスタマイゼーション

Spack allows you to customize how your software is built through the packages.yaml file. Using it, you can make Spack prefer particular implementations of virtual dependencies (e.g., MPI or BLAS/LAPACK), or you can make it prefer to build with particular compilers. You can also tell Spack to use external software installations already present on your system.

At a high level, the packages.yaml file is structured like this:

packages:
  package1:
    # settings for package1
  package2:
    # settings for package2
  # ...
  all:
    # settings that apply to all packages.

So you can either set build preferences specifically for one package, or you can specify that certain settings should apply to all packages. The types of settings you can customize are described in detail below.

Spack's build defaults are in the default etc/spack/defaults/packages.yaml file. You can override them in ~/.spack/packages.yaml or etc/spack/packages.yaml. For more details on how this works, see Configuration Scopes.

External Packages

Spack can be configured to use externally-installed packages rather than building its own packages. This may be desirable if machines ship with system packages, such as a customized MPI that should be used instead of Spack building its own MPI.

External packages are configured through the packages.yaml file found in a Spack installation's etc/spack/ or a user's ~/.spack/ directory. Here's an example of an external configuration:

packages:
  openmpi:
    paths:
      openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
      openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
      openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel

This example lists three installations of OpenMPI, one built with GCC, one built with GCC and debug information, and another built with Intel. If Spack is asked to build a package that uses one of these MPIs as a dependency, it will use the pre-installed OpenMPI in the given directory. packages.yaml can also be used to specify modules to load instead of the installation prefixes.

Each packages.yaml begins with a packages: token, followed by a list of package names. To specify externals, add a paths or modules token under the package name, which lists externals in a spec: /path or spec: module-name format. Each spec should be as well-defined as reasonably possible. If a package lacks a spec component, such as missing a compiler or package version, then Spack will guess the missing component based on its most-favored packages, and it may guess incorrectly.

Each package version and compiler listed in an external should have entries in Spack's packages and compiler configuration, even though the package and compiler may not ever be built.

The packages configuration can tell Spack to use an external location for certain package versions, but it does not restrict Spack to using external packages. In the above example, since newer versions of OpenMPI are available, Spack will choose to start building and linking with the latest version rather than continue using the pre-installed OpenMPI versions.

To prevent this, the packages.yaml configuration also allows packages to be flagged as non-buildable. The previous example could be modified to be:

packages:
  openmpi:
    paths:
      openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
      openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
      openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
    buildable: False

The addition of the buildable flag tells Spack that it should never build its own version of OpenMPI, and it will instead always rely on a pre-built OpenMPI. Similar to paths, buildable is specified as a property under a package name.

If an external module is specified as not buildable, then Spack will load the external module into the build environment which can be used for linking.

The buildable does not need to be paired with external packages. It could also be used alone to forbid packages that may be buggy or otherwise undesirable.

Concretization Preferences

Spack can be configured to prefer certain compilers, package versions, dependencies, and variants during concretization. The preferred configuration can be controlled via the ~/.spack/packages.yaml file for user configurations, or the etc/spack/packages.yaml site configuration.

Here's an example packages.yaml file that sets preferred packages:

packages:
  opencv:
    compiler: [gcc@4.9]
    variants: +debug
  gperftools:
    version: [2.2, 2.4, 2.3]
  all:
    compiler: [gcc@4.4.7, gcc@4.6:, intel, clang, pgi]
    providers:
      mpi: [mvapich2, mpich, openmpi]

At a high level, this example is specifying how packages should be concretized. The opencv package should prefer using GCC 4.9 and be built with debug options. The gperftools package should prefer version 2.2 over 2.4. Every package on the system should prefer mvapich2 for its MPI and GCC 4.4.7 (except for opencv, which overrides this by preferring GCC 4.9). These options are used to fill in implicit defaults. Any of them can be overwritten on the command line if explicitly requested.

Each packages.yaml file begins with the string packages: and package names are specified on the next level. The special string all applies settings to each package. Underneath each package name is one or more components: compiler, variants, version, or providers. Each component has an ordered list of spec constraints, with earlier entries in the list being preferred over later entries.

Sometimes a package installation may have constraints that forbid the first concretization rule, in which case Spack will use the first legal concretization rule. Going back to the example, if a user requests gperftools 2.3 or later, then Spack will install version 2.4 as the 2.4 version of gperftools is preferred over 2.3.

An explicit concretization rule in the preferred section will always take preference over unlisted concretizations. In the above example, xlc isn't listed in the compiler list. Every listed compiler from gcc to pgi will thus be preferred over the xlc compiler.

The syntax for the provider section differs slightly from other concretization rules. A provider lists a value that packages may depend_on (e.g, MPI) and a list of rules for fulfilling that dependency.

Package Permissions

Spack can be configured to assign permissions to the files installed by a package.

In the packages.yaml file under permissions, the attributes read, write, and group control the package permissions. These attributes can be set per-package, or for all packages under all. If permissions are set under all and for a specific package, the package-specific settings take precedence.

The read and write attributes take one of user, group, and world.

packages:
  all:
    permissions:
      write: group
      group: spack
  my_app:
    permissions:
      read: group
      group: my_team

The permissions settings describe the broadest level of access to installations of the specified packages. The execute permissions of the file are set to the same level as read permissions for those files that are executable. The default setting for read is world, and for write is user. In the example above, installations of my_app will be installed with user and group permissions but no world permissions, and owned by the group my_team. All other packages will be installed with user and group write privileges, and world read privileges. Those packages will be owned by the group spack.

The group attribute assigns a Unix-style group to a package. All files installed by the package will be owned by the assigned group, and the sticky group bit will be set on the install prefix and all directories inside the install prefix. This will ensure that even manually placed files within the install prefix are owned by the assigned group. If no group is assigned, Spack will allow the OS default behavior to go as expected.

ミラー

Some sites may not have access to the internet for fetching packages. These sites will need a local repository of tarballs from which they can get their files. Spack has support for this with mirrors. A mirror is a URL that points to a directory, either on the local filesystem or on some server, containing tarballs for all of Spack's packages.

Here's an example of a mirror's directory structure:

mirror/
    cmake/
        cmake-2.8.10.2.tar.gz
    dyninst/
        dyninst-8.1.1.tgz
        dyninst-8.1.2.tgz
    libdwarf/
        libdwarf-20130126.tar.gz
        libdwarf-20130207.tar.gz
        libdwarf-20130729.tar.gz
    libelf/
        libelf-0.8.12.tar.gz
        libelf-0.8.13.tar.gz
    libunwind/
        libunwind-1.1.tar.gz
    mpich/
        mpich-3.0.4.tar.gz
    mvapich2/
        mvapich2-1.9.tgz

The structure is very simple. There is a top-level directory. The second level directories are named after packages, and the third level contains tarballs for each package, named after each package.

注釈

Archives are not named exactly the way they were in the package's fetch URL. They have the form <name>-<version>.<extension>, where <name> is Spack's name for the package, <version> is the version of the tarball, and <extension> is whatever format the package's fetch URL contains.

In order to make mirror creation reasonably fast, we copy the tarball in its original format to the mirror directory, but we do not standardize on a particular compression algorithm, because this would potentially require expanding and re-compressing each archive.

spack mirror

Mirrors are managed with the spack mirror command. The help for spack mirror looks like this:

$ spack help mirror
usage: spack mirror [-hn] SUBCOMMAND ...

manage mirrors (source and binary)

positional arguments:
  SUBCOMMAND
    create           Create a directory to be used as a spack mirror, and fill it with
                            package archives.
    add              Add a mirror to Spack.
    remove (rm)      Remove a mirror by name.
    list             Print out available mirrors to the console.

optional arguments:
  -h, --help         show this help message and exit
  -n, --no-checksum  do not use checksums to verify downloaded files (unsafe)

The create command actually builds a mirror by fetching all of its packages from the internet and checksumming them.

The other three commands are for managing mirror configuration. They control the URL(s) from which Spack downloads its packages.

spack mirror create

You can create a mirror using the spack mirror create command, assuming you're on a machine where you can access the internet.

The command will iterate through all of Spack's packages and download the safe ones into a directory structure like the one above. Here is what it looks like:

$ spack mirror create libelf libdwarf
==> Created new mirror in spack-mirror-2014-06-24
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
##########################################################                81.6%
==> Checksum passed for libelf@0.8.13
==> Added libelf@0.8.13
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.12.tar.gz
######################################################################    98.6%
==> Checksum passed for libelf@0.8.12
==> Added libelf@0.8.12
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130207.tar.gz
######################################################################    97.3%
==> Checksum passed for libdwarf@20130207
==> Added libdwarf@20130207
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130126.tar.gz
########################################################                  78.9%
==> Checksum passed for libdwarf@20130126
==> Added libdwarf@20130126
==> Trying to fetch from http://www.prevanders.net/libdwarf-20130729.tar.gz
#############################################################             84.7%
==> Added libdwarf@20130729
==> Added spack-mirror-2014-06-24/libdwarf/libdwarf-20130729.tar.gz to mirror
==> Added python@2.7.8.
==> Successfully updated mirror in spack-mirror-2015-02-24.
  Archive stats:
    0    already present
    5    added
    0    failed to fetch.

Once this is done, you can tar up the spack-mirror-2014-06-24 directory and copy it over to the machine you want it hosted on.

Custom package sets

Normally, spack mirror create downloads all the archives it has checksums for. If you want to only create a mirror for a subset of packages, you can do that by supplying a list of package specs on the command line after spack mirror create. For example, this command:

$ spack mirror create libelf@0.8.12: boost@1.44:

Will create a mirror for libelf versions greater than or equal to 0.8.12 and boost versions greater than or equal to 1.44.

Mirror files

If you have a very large number of packages you want to mirror, you can supply a file with specs in it, one per line:

$ cat specs.txt
libdwarf
libelf@0.8.12:
boost@1.44:
boost@1.39.0
...
$ spack mirror create --file specs.txt
...

This is useful if there is a specific suite of software managed by your site.

spack mirror add

Once you have a mirror, you need to let spack know about it. This is relatively simple. First, figure out the URL for the mirror. If it's a directory, you can use a file URL like this one:

file://$HOME/spack-mirror-2014-06-24

That points to the directory on the local filesystem. If it were on a web server, you could use a URL like this one:

https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24

Spack will use the URL as the root for all of the packages it fetches. You can tell your Spack installation to use that mirror like this:

$ spack mirror add local_filesystem file://$HOME/spack-mirror-2014-06-24

Each mirror has a name so that you can refer to it again later.

spack mirror list

To see all the mirrors Spack knows about, run spack mirror list:

$ spack mirror list
local_filesystem    file:///home/username/spack-mirror-2014-06-24

spack mirror remove

To remove a mirror by name, run:

$ spack mirror remove local_filesystem
$ spack mirror list
==> No mirrors configured.

Mirror precedence

Adding a mirror really adds a line in ~/.spack/mirrors.yaml:

mirrors:
  local_filesystem: file:///home/username/spack-mirror-2014-06-24
  remote_server: https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24

If you want to change the order in which mirrors are searched for packages, you can edit this file and reorder the sections. Spack will search the topmost mirror first and the bottom-most mirror last.

Local Default Cache

Spack caches resources that are downloaded as part of installs. The cache is a valid spack mirror: it uses the same directory structure and naming scheme as other Spack mirrors (so it can be copied anywhere and referenced with a URL like other mirrors). The mirror is maintained locally (within the Spack installation directory) at var/spack/cache/. It is always enabled (and is always searched first when attempting to retrieve files for an installation) but can be cleared with clean; the cache directory can also be deleted manually without issue.

Caching includes retrieved tarball archives and source control repositories, but only resources with an associated digest or commit ID (e.g. a revision number for SVN) will be cached.

モジュール

The use of module systems to manage user environment in a controlled way is a common practice at HPC centers that is often embraced also by individual programmers on their development machines. To support this common practice Spack integrates with Environment Modules , LMod and Dotkit by providing post-install hooks that generate module files and commands to manipulate them.

注釈

If your machine does not already have a module system installed, we advise you to use either Environment Modules or LMod. See Environment Modules for more details.

Using module files via Spack

If you have installed a supported module system either manually or through spack bootstrap, you should be able to run either module avail or use -l spack to see what module files have been installed. Here is sample output of those programs, showing lots of installed packages:

$ module avail

--------------------------------------------------------------- ~/spack/share/spack/modules/linux-ubuntu14-x86_64 ---------------------------------------------------------------
autoconf-2.69-gcc-4.8-qextxkq       hwloc-1.11.6-gcc-6.3.0-akcisez             m4-1.4.18-gcc-4.8-ev2znoc                   openblas-0.2.19-gcc-6.3.0-dhkmed6        py-setuptools-34.2.0-gcc-6.3.0-fadur4s
automake-1.15-gcc-4.8-maqvukj       isl-0.18-gcc-4.8-afi6taq                   m4-1.4.18-gcc-6.3.0-uppywnz                 openmpi-2.1.0-gcc-6.3.0-go2s4z5          py-six-1.10.0-gcc-6.3.0-p4dhkaw
binutils-2.28-gcc-4.8-5s7c6rs       libiconv-1.15-gcc-4.8-at46wg3              mawk-1.3.4-gcc-4.8-acjez57                  openssl-1.0.2k-gcc-4.8-dkls5tk           python-2.7.13-gcc-6.3.0-tyehea7
bison-3.0.4-gcc-4.8-ek4luo5         libpciaccess-0.13.4-gcc-6.3.0-gmufnvh      mawk-1.3.4-gcc-6.3.0-ostdoms                openssl-1.0.2k-gcc-6.3.0-gxgr5or         readline-7.0-gcc-4.8-xhufqhn
bzip2-1.0.6-gcc-4.8-iffrxzn         libsigsegv-2.11-gcc-4.8-pp2cvte            mpc-1.0.3-gcc-4.8-g5mztc5                   pcre-8.40-gcc-4.8-r5pbrxb                readline-7.0-gcc-6.3.0-zzcyicg
bzip2-1.0.6-gcc-6.3.0-bequudr       libsigsegv-2.11-gcc-6.3.0-7enifnh          mpfr-3.1.5-gcc-4.8-o7xm7az                  perl-5.24.1-gcc-4.8-dg5j65u              sqlite-3.8.5-gcc-6.3.0-6zoruzj
cmake-3.7.2-gcc-6.3.0-fowuuby       libtool-2.4.6-gcc-4.8-7a523za              mpich-3.2-gcc-6.3.0-dmvd3aw                 perl-5.24.1-gcc-6.3.0-6uzkpt6            tar-1.29-gcc-4.8-wse2ass
curl-7.53.1-gcc-4.8-3fz46n6         libtool-2.4.6-gcc-6.3.0-n7zmbzt            ncurses-6.0-gcc-4.8-dcpe7ia                 pkg-config-0.29.2-gcc-4.8-ib33t75        tcl-8.6.6-gcc-4.8-tfxzqbr
expat-2.2.0-gcc-4.8-mrv6bd4         libxml2-2.9.4-gcc-4.8-ryzxnsu              ncurses-6.0-gcc-6.3.0-ucbhcdy               pkg-config-0.29.2-gcc-6.3.0-jpgubk3      util-macros-1.19.1-gcc-6.3.0-xorz2x2
flex-2.6.3-gcc-4.8-yf345oo          libxml2-2.9.4-gcc-6.3.0-rltzsdh            netlib-lapack-3.6.1-gcc-6.3.0-js33dog       py-appdirs-1.4.0-gcc-6.3.0-jxawmw7       xz-5.2.3-gcc-4.8-mew4log
gcc-6.3.0-gcc-4.8-24puqve           lmod-7.4.1-gcc-4.8-je4srhr                 netlib-scalapack-2.0.2-gcc-6.3.0-5aidk4l    py-numpy-1.12.0-gcc-6.3.0-oemmoeu        xz-5.2.3-gcc-6.3.0-3vqeuvb
gettext-0.19.8.1-gcc-4.8-yymghlh    lua-5.3.4-gcc-4.8-im75yaz                  netlib-scalapack-2.0.2-gcc-6.3.0-hjsemcn    py-packaging-16.8-gcc-6.3.0-i2n3dtl      zip-3.0-gcc-4.8-rwar22d
gmp-6.1.2-gcc-4.8-5ub2wu5           lua-luafilesystem-1_6_3-gcc-4.8-wkey3nl    netlib-scalapack-2.0.2-gcc-6.3.0-jva724b    py-pyparsing-2.1.10-gcc-6.3.0-tbo6gmw    zlib-1.2.11-gcc-4.8-pgxsxv7
help2man-1.47.4-gcc-4.8-kcnqmau     lua-luaposix-33.4.0-gcc-4.8-mdod2ry        netlib-scalapack-2.0.2-gcc-6.3.0-rgqfr6d    py-scipy-0.19.0-gcc-6.3.0-kr7nat4        zlib-1.2.11-gcc-6.3.0-7cqp6cj

The names should look familiar, as they resemble the output from spack find. You can use the modules here directly. For example, you could type either of these commands to load the cmake module:

$ use cmake-3.7.2-gcc-6.3.0-fowuuby
$ module load cmake-3.7.2-gcc-6.3.0-fowuuby

Neither of these is particularly pretty, easy to remember, or easy to type. Luckily, Spack has its own interface for using modules and dotkits.

Shell support

To enable additional Spack commands for loading and unloading module files, and to add the correct path to MODULEPATH, you need to source the appropriate setup file in the $SPACK_ROOT/share/spack directory. This will activate shell support for the commands that need it. For bash, ksh or zsh users:

$ . ${SPACK_ROOT}/share/spack/setup-env.sh

For csh and tcsh instead:

$ set SPACK_ROOT ...
$ source $SPACK_ROOT/share/spack/setup-env.csh

Note that in the latter case it is necessary to explicitly set SPACK_ROOT before sourcing the setup file (you will get a meaningful error message if you don't).

When bash and ksh users update their environment with setup-env.sh, it will check for spack-installed environment modules and add the module command to their environment; This only occurs if the module command is not already available. You can install environment-modules with spack bootstrap as described in Environment Modules.

Finally, if you want to have Spack's shell support available on the command line at any login you can put this source line in one of the files that are sourced at startup (like .profile, .bashrc or .cshrc). Be aware though that the startup time may be slightly increased because of that.

spack load / unload

Once you have shell support enabled you can use the same spec syntax you're used to:

モジュール

Dotkit

spack load <spec>

spack use <spec>

spack unload <spec>

spack unuse <spec>

And you can use the same shortened names you use everywhere else in Spack.

For example, if you are using dotkit, this will add the mpich package built with gcc to your path:

$ spack install mpich %gcc@4.4.7

# ... wait for install ...

$ spack use mpich %gcc@4.4.7     # dotkit
Prepending: mpich@3.0.4%gcc@4.4.7 (ok)
$ which mpicc
~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4/bin/mpicc

Or, similarly if you are using modules, you could type:

$ spack load mpich %gcc@4.4.7    # modules

These commands will add appropriate directories to your PATH, MANPATH, CPATH, and LD_LIBRARY_PATH. When you no longer want to use a package, you can type unload or unuse similarly:

$ spack unload mpich %gcc@4.4.7  # modules
$ spack unuse  mpich %gcc@4.4.7  # dotkit

注釈

These use, unuse, load, and unload subcommands are only available if you have enabled Spack's shell support and you have dotkit or modules installed on your machine.

Ambiguous module names

If a spec used with load/unload or use/unuse is ambiguous (i.e. more than one installed package matches it), then Spack will warn you:

$ spack load libelf
==> Error: Multiple matches for spec libelf.  Choose one:
libelf@0.8.13%gcc@4.4.7 arch=linux-debian7-x86_64
libelf@0.8.13%intel@15.0.0 arch=linux-debian7-x86_64

You can either type the spack load command again with a fully qualified argument, or you can add just enough extra constraints to identify one package. For example, above, the key differentiator is that one libelf is built with the Intel compiler, while the other used gcc. You could therefore just type:

$ spack load libelf %intel

To identify just the one built with the Intel compiler.

spack module tcl loads

In some cases, it is desirable to load not just a module, but also all the modules it depends on. This is not required for most modules because Spack builds binaries with RPATH support. However, not all packages use RPATH to find their dependencies: this can be true in particular for Python extensions, which are currently not built with RPATH.

Scripts to load modules recursively may be made with the command:

$ spack module tcl loads --dependencies <spec>

An equivalent alternative using process substitution is:

$ source <( spack module tcl loads --dependencies <spec> )

Module Commands for Shell Scripts

Although Spack is flexible, the module command is much faster. This could become an issue when emitting a series of spack load commands inside a shell script. By adding the --shell flag, spack module tcl find may also be used to generate code that can be cut-and-pasted into a shell script. For example:

$ spack module tcl loads --dependencies py-numpy git
# bzip2@1.0.6%gcc@4.9.3=linux-x86_64
module load bzip2-1.0.6-gcc-4.9.3-ktnrhkrmbbtlvnagfatrarzjojmkvzsx
# ncurses@6.0%gcc@4.9.3=linux-x86_64
module load ncurses-6.0-gcc-4.9.3-kaazyneh3bjkfnalunchyqtygoe2mncv
# zlib@1.2.8%gcc@4.9.3=linux-x86_64
module load zlib-1.2.8-gcc-4.9.3-v3ufwaahjnviyvgjcelo36nywx2ufj7z
# sqlite@3.8.5%gcc@4.9.3=linux-x86_64
module load sqlite-3.8.5-gcc-4.9.3-a3eediswgd5f3rmto7g3szoew5nhehbr
# readline@6.3%gcc@4.9.3=linux-x86_64
module load readline-6.3-gcc-4.9.3-se6r3lsycrwxyhreg4lqirp6xixxejh3
# python@3.5.1%gcc@4.9.3=linux-x86_64
module load python-3.5.1-gcc-4.9.3-5q5rsrtjld4u6jiicuvtnx52m7tfhegi
# py-setuptools@20.5%gcc@4.9.3=linux-x86_64
module load py-setuptools-20.5-gcc-4.9.3-4qr2suj6p6glepnedmwhl4f62x64wxw2
# py-nose@1.3.7%gcc@4.9.3=linux-x86_64
module load py-nose-1.3.7-gcc-4.9.3-pwhtjw2dvdvfzjwuuztkzr7b4l6zepli
# openblas@0.2.17%gcc@4.9.3+shared=linux-x86_64
module load openblas-0.2.17-gcc-4.9.3-pw6rmlom7apfsnjtzfttyayzc7nx5e7y
# py-numpy@1.11.0%gcc@4.9.3+blas+lapack=linux-x86_64
module load py-numpy-1.11.0-gcc-4.9.3-mulodttw5pcyjufva4htsktwty4qd52r
# curl@7.47.1%gcc@4.9.3=linux-x86_64
module load curl-7.47.1-gcc-4.9.3-ohz3fwsepm3b462p5lnaquv7op7naqbi
# autoconf@2.69%gcc@4.9.3=linux-x86_64
module load autoconf-2.69-gcc-4.9.3-bkibjqhgqm5e3o423ogfv2y3o6h2uoq4
# cmake@3.5.0%gcc@4.9.3~doc+ncurses+openssl~qt=linux-x86_64
module load cmake-3.5.0-gcc-4.9.3-x7xnsklmgwla3ubfgzppamtbqk5rwn7t
# expat@2.1.0%gcc@4.9.3=linux-x86_64
module load expat-2.1.0-gcc-4.9.3-6pkz2ucnk2e62imwakejjvbv6egncppd
# git@2.8.0-rc2%gcc@4.9.3+curl+expat=linux-x86_64
module load git-2.8.0-rc2-gcc-4.9.3-3bib4hqtnv5xjjoq5ugt3inblt4xrgkd

The script may be further edited by removing unnecessary modules.

Module Prefixes

On some systems, modules are automatically prefixed with a certain string; spack module tcl loads needs to know about that prefix when it issues module load commands. Add the --prefix option to your spack module tcl loads commands if this is necessary.

For example, consider the following on one system:

$ module avail
linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y

$ spack module tcl loads antlr    # WRONG!
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load antlr-2.7.7-gcc-5.3.0-bdpl46y

$ spack module tcl loads --prefix linux-SuSE11-x86_64/ antlr
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y

Module file customization

Module files are generated by post-install hooks after the successful installation of a package. The table below summarizes the essential information associated with the different file formats that can be generated by Spack:

Hook name

Default root directory

Default template file

Compatible tools

Dotkit

dotkit

share/spack/dotkit

share/spack/templates/modules/modulefile.dk

DotKit

TCL - Non-Hierarchical

tcl

share/spack/modules

share/spack/templates/modules/modulefile.tcl

Env. Modules/LMod

Lua - Hierarchical

lmod

share/spack/lmod

share/spack/templates/modules/modulefile.lua

LMod

Spack ships with sensible defaults for the generation of module files, but you can customize many aspects of it to accommodate package or site specific needs. In general you can override or extend the default behavior by:

  1. overriding certain callback APIs in the Python packages

  2. writing specific rules in the modules.yaml configuration file

  3. writing your own templates to override or extend the defaults

The former method let you express changes in the run-time environment that are needed to use the installed software properly, e.g. injecting variables from language interpreters into their extensions. The latter two instead permit to fine tune the filesystem layout, content and creation of module files to meet site specific conventions.

Override API calls in package.py

There are two methods that you can override in any package.py to affect the content of the module files generated by Spack. The first one:

def setup_environment(self, spack_env, run_env):
    """Set up the compile and runtime environments for a package."""
    pass

can alter the content of the module file associated with the same package where it is overridden. The second method:

def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
    """Set up the environment of packages that depend on this one"""
    pass

can instead inject run-time environment modifications in the module files of packages that depend on it. In both cases you need to fill run_env with the desired list of environment modifications.

注釈

The r package and callback APIs

An example in which it is crucial to override both methods is given by the r package. This package installs libraries and headers in non-standard locations and it is possible to prepend the appropriate directory to the corresponding environment variables:

LIBRARY_PATH

self.prefix/rlib/R/lib

LD_LIBRARY_PATH

self.prefix/rlib/R/lib

CPATH

self.prefix/rlib/R/include

with the following snippet:

    def setup_environment(self, spack_env, run_env):
        run_env.prepend_path('LIBRARY_PATH',
                             join_path(self.prefix, 'rlib', 'R', 'lib'))
        run_env.prepend_path('LD_LIBRARY_PATH',
                             join_path(self.prefix, 'rlib', 'R', 'lib'))
        run_env.prepend_path('CPATH',
                             join_path(self.prefix, 'rlib', 'R', 'include'))

The r package also knows which environment variable should be modified to make language extensions provided by other packages available, and modifies it appropriately in the override of the second method:

    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
        # Set R_LIBS to include the library dir for the
        # extension and any other R extensions it depends on.
        r_libs_path = []
        for d in dependent_spec.traverse(
                deptype=('build', 'run'), deptype_query='run'):
            if d.package.extends(self.spec):
                r_libs_path.append(join_path(d.prefix, self.r_lib_dir))

        r_libs_path = ':'.join(r_libs_path)
        spack_env.set('R_LIBS', r_libs_path)
        spack_env.set('R_MAKEVARS_SITE',
                      join_path(self.etcdir, 'Makeconf.spack'))

        # Use the number of make_jobs set in spack. The make program will
        # determine how many jobs can actually be started.
        spack_env.set('MAKEFLAGS', '-j{0}'.format(make_jobs))

        # For run time environment set only the path for dependent_spec and
        # prepend it to R_LIBS
        if dependent_spec.package.extends(self.spec):
            run_env.prepend_path('R_LIBS', join_path(
                dependent_spec.prefix, self.r_lib_dir))

Write a configuration file

The configuration files that control module generation behavior are named modules.yaml. The default configuration:

# -------------------------------------------------------------------------
# This is the default configuration for Spack's module file generation.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
#   $SPACK_ROOT/etc/spack/modules.yaml
#
# Per-user settings (overrides default and site settings):
#   ~/.spack/modules.yaml
# -------------------------------------------------------------------------
modules:
  enable:
    - tcl
    - dotkit
  prefix_inspections:
    bin:
      - PATH
    man:
      - MANPATH
    share/man:
      - MANPATH
    share/aclocal:
      - ACLOCAL_PATH
    lib:
      - LIBRARY_PATH
    lib64:
      - LIBRARY_PATH
    include:
      - CPATH
    lib/pkgconfig:
      - PKG_CONFIG_PATH
    lib64/pkgconfig:
      - PKG_CONFIG_PATH
    '':
      - CMAKE_PREFIX_PATH

  lmod:
    hierarchy:
      - mpi

activates the hooks to generate tcl and dotkit module files and inspects the installation folder of each package for the presence of a set of subdirectories (bin, man, share/man, etc.). If any is found its full path is prepended to the environment variables listed below the folder name.

Activate other hooks

Any other module file generator shipped with Spack can be activated adding it to the list under the enable key in the module file. Currently the only generator that is not active by default is lmod, which produces hierarchical lua module files.

Each module system can then be configured separately. In fact, you should list configuration options that affect a particular type of module files under a top level key corresponding to the generator being customized:

modules:
  enable:
    - tcl
    - dotkit
    - lmod
  tcl:
    # contains environment modules specific customizations
  dotkit:
    # contains dotkit specific customizations
  lmod:
    # contains lmod specific customizations

In general, the configuration options that you can use in modules.yaml will either change the layout of the module files on the filesystem, or they will affect their content. For the latter point it is possible to use anonymous specs to fine tune the set of packages on which the modifications should be applied.

Selection by anonymous specs

In the configuration file you can use anonymous specs (i.e. specs that are not required to have a root package and are thus used just to express constraints) to apply certain modifications on a selected set of the installed software. For instance, in the snippet below:

modules:
  tcl:
    # The keyword `all` selects every package
    all:
      environment:
        set:
          BAR: 'bar'
    # This anonymous spec selects any package that
    # depends on openmpi. The double colon at the
    # end clears the set of rules that matched so far.
    ^openmpi::
      environment:
        set:
          BAR: 'baz'
    # Selects any zlib package
    zlib:
      environment:
        prepend_path:
          LD_LIBRARY_PATH: 'foo'
    # Selects zlib compiled with gcc@4.8
    zlib%gcc@4.8:
      environment:
        unset:
        - FOOBAR

you are instructing Spack to set the environment variable BAR=bar for every module, unless the associated spec satisfies ^openmpi in which case BAR=baz. In addition in any spec that satisfies zlib the value foo will be prepended to LD_LIBRARY_PATH and in any spec that satisfies zlib%gcc@4.8 the variable FOOBAR will be unset.

注釈

Order does matter

The modifications associated with the all keyword are always evaluated first, no matter where they appear in the configuration file. All the other spec constraints are instead evaluated top to bottom.

Blacklist or whitelist specific module files

You can use anonymous specs also to prevent module files from being written or to force them to be written. Consider the case where you want to hide from users all the boilerplate software that you had to build in order to bootstrap a new compiler. Suppose for instance that gcc@4.4.7 is the compiler provided by your system. If you write a configuration file like:

modules:
  tcl:
    whitelist: ['gcc', 'llvm']  # Whitelist will have precedence over blacklist
    blacklist: ['%gcc@4.4.7']   # Assuming gcc@4.4.7 is the system compiler

you will prevent the generation of module files for any package that is compiled with gcc@4.4.7, with the only exception of any gcc or any llvm installation.

Customize the naming scheme

The names of environment modules generated by spack are not always easy to fully comprehend due to the long hash in the name. There are two module configuration options to help with that. The first is a global setting to adjust the hash length. It can be set anywhere from 0 to 32 and has a default length of 7. This is the representation of the hash in the module file name and does not affect the size of the package hash. Be aware that the smaller the hash length the more likely naming conflicts will occur. The following snippet shows how to set hash length in the module file names:

modules:
  tcl:
    hash_length: 7

To help make module names more readable, and to help alleviate name conflicts with a short hash, one can use the suffixes option in the modules configuration file. This option will add strings to modules that match a spec. For instance, the following config options,

modules:
  tcl:
    all:
      suffixes:
        ^python@2.7.12: 'python-2.7.12'
        ^openblas: 'openblas'

will add a python-2.7.12 version string to any packages compiled with python matching the spec, python@2.7.12. This is useful to know which version of python a set of python extensions is associated with. Likewise, the openblas string is attached to any program that has openblas in the spec, most likely via the +blas variant specification.

注釈

TCL module files

A modification that is specific to tcl module files is the possibility to change the naming scheme of modules.

modules:
  tcl:
    naming_scheme: '{name}/{version}-{compiler.name}-{compiler.version}'
    all:
      conflict:
        - '{name}'
        - 'intel/14.0.1'

will create module files that will conflict with intel/14.0.1 and with the base directory of the same module, effectively preventing the possibility to load two or more versions of the same software at the same time. The tokens that are available for use in this directive are the same understood by the Spec.format method.

注釈

LMod hierarchical module files

When lmod is activated Spack will generate a set of hierarchical lua module files that are understood by LMod. The hierarchy will always contain the two layers Core / Compiler but can be further extended to any of the virtual dependencies present in Spack. A case that could be useful in practice is for instance:

modules:
  enable:
    - lmod
  lmod:
    core_compilers:
      - 'gcc@4.8'
    hierarchy:
      - 'mpi'
      - 'lapack'

that will generate a hierarchy in which the lapack and mpi layer can be switched independently. This allows a site to build the same libraries or applications against different implementations of mpi and lapack, and let LMod switch safely from one to the other.

警告

Deep hierarchies and lmod spider

For hierarchies that are deeper than three layers lmod spider may have some issues. See this discussion on the LMod project.

Filter out environment modifications

Modifications to certain environment variables in module files are there by default, for instance because they are generated by prefix inspections. If you want to prevent modifications to some environment variables, you can do so by using the environment blacklist:

modules:
  dotkit:
    all:
      filter:
        # Exclude changes to any of these variables
        environment_blacklist: ['CPATH', 'LIBRARY_PATH']

The configuration above will generate dotkit module files that will not contain modifications to either CPATH or LIBRARY_PATH and environment module files that instead will contain these modifications.

Autoload dependencies

In some cases it can be useful to have module files that automatically load their dependencies. This may be the case for Python extensions, if not activated using spack activate:

modules:
  tcl:
    ^python:
      autoload: 'direct'

The configuration file above will produce module files that will load their direct dependencies if the package installed depends on python. The allowed values for the autoload statement are either none, direct or all. The default is none.

ちなみに

Building external software

Setting autoload to direct for all packages can be useful when building software outside of a Spack installation that depends on artifacts in that installation. E.g. (adjust lmod vs tcl as appropriate):

modules:
  lmod:
    all:
      autoload: 'direct'

注釈

TCL prerequisites

In the tcl section of the configuration file it is possible to use the prerequisites directive that accepts the same values as autoload. It will produce module files that have a prereq statement instead of automatically loading other modules.

Maintaining Module Files

Each type of module file has a command with the same name associated with it. The actions these commands permit are usually associated with the maintenance of a production environment. Here's, for instance, a sample of the features of the spack module tcl command:

$ spack module tcl --help
usage: spack module tcl [-h] SUBCOMMAND ...

positional arguments:
  SUBCOMMAND
    refresh   regenerate module files
    find      find module files for packages
    rm        remove module files
    loads     prompt the list of modules associated with a constraint

optional arguments:
  -h, --help  show this help message and exit

Refresh the set of modules

The subcommand that regenerates module files to update their content or their layout is refresh:

$ spack module tcl refresh --help
usage: spack module tcl refresh [-hy] [--delete-tree] [--upstream-modules] ...

positional arguments:
  constraint          constraint to select a subset of installed packages

optional arguments:
  -h, --help          show this help message and exit
  --delete-tree       delete the module file tree before refresh
  --upstream-modules  generate modules for packages installed upstream
  -y, --yes-to-all    assume "yes" is the answer to every confirmation request

A set of packages can be selected using anonymous specs for the optional constraint positional argument. Optionally the entire tree can be deleted before regeneration if the change in layout is radical.

Delete module files

If instead what you need is just to delete a few module files, then the right subcommand is rm:

$ spack module tcl rm --help
usage: spack module tcl rm [-hy] ...

positional arguments:
  constraint        constraint to select a subset of installed packages

optional arguments:
  -h, --help        show this help message and exit
  -y, --yes-to-all  assume "yes" is the answer to every confirmation request

注釈

We care about your module files!

Every modification done on modules that are already existing will ask for a confirmation by default. If the command is used in a script it is possible though to pass the -y argument, that will skip this safety measure.

パッケージレポジトリ

Spack comes with over 1,000 built-in package recipes in var/spack/repos/builtin/. This is a package repository -- a directory that Spack searches when it needs to find a package by name. You may need to maintain packages for restricted, proprietary or experimental software separately from the built-in repository. Spack allows you to configure local repositories using either the repos.yaml or the spack repo command.

A package repository a directory structured like this:

repo/
    repo.yaml
    packages/
        hdf5/
            package.py
        mpich/
            package.py
            mpich-1.9-bugfix.patch
        trilinos/
            package.py
        ...

The top-level repo.yaml file contains configuration metadata for the repository, and the packages directory contains subdirectories for each package in the repository. Each package directory contains a package.py file and any patches or other files needed to build the package.

Package repositories allow you to:

  1. Maintain your own packages separately from Spack;

  2. Share your packages (e.g., by hosting them in a shared file system), without committing them to the built-in Spack package repository; and

  3. Override built-in Spack packages with your own implementation.

Packages in a separate repository can also depend on built-in Spack packages. So, you can leverage existing recipes without re-implementing them in your own repository.

repos.yaml

Spack uses the repos.yaml file in ~/.spack (and elsewhere) to find repositories. Note that the repos.yaml configuration file is distinct from the repo.yaml file in each repository. For more on the YAML format, and on how configuration file precedence works in Spack, see configuration.

The default etc/spack/defaults/repos.yaml file looks like this:

repos:
- $spack/var/spack/repos/builtin

The file starts with repos: and contains a single ordered list of paths to repositories. Each path is on a separate line starting with -. You can add a repository by inserting another path into the list:

repos:
- /opt/local-repo
- $spack/var/spack/repos/builtin

When Spack interprets a spec, e.g., mpich in spack install mpich, it searches these repositories in order (first to last) to resolve each package name. In this example, Spack will look for the following packages and use the first valid file:

  1. /opt/local-repo/packages/mpich/package.py

  2. $spack/var/spack/repos/builtin/packages/mpich/package.py

注釈

Currently, Spack can only use repositories in the file system. We plan to eventually support URLs in repos.yaml, so that you can easily point to remote package repositories, but that is not yet implemented.

Namespaces

Every repository in Spack has an associated namespace defined in its top-level repo.yaml file. If you look at var/spack/repos/builtin/repo.yaml in the built-in repository, you'll see that its namespace is builtin:

$ cat var/spack/repos/builtin/repo.yaml
repo:
  namespace: builtin

Spack records the repository namespace of each installed package. For example, if you install the mpich package from the builtin repo, Spack records its fully qualified name as builtin.mpich. This accomplishes two things:

  1. You can have packages with the same name from different namespaces installed at once.

  1. You can easily determine which repository a package came from after it is installed (more below).

注釈

It may seem redundant for a repository to have both a namespace and a path, but repository paths may change over time, or, as mentioned above, a locally hosted repository path may eventually be hosted at some remote URL.

Namespaces are designed to allow package authors to associate a unique identifier with their packages, so that the package can be identified even if the repository moves. This is why the namespace is determined by the repo.yaml file in the repository rather than the local repos.yaml configuration: the repository maintainer sets the name.

Uniqueness

You should choose a namespace that uniquely identifies your package repository. For example, if you make a repository for packages written by your organization, you could use your organization's name. You can also nest namespaces using periods, so you could identify a repository by a sub-organization. For example, LLNL might use a namespace for its internal repositories like llnl. Packages from the Physical & Life Sciences directorate (PLS) might use the llnl.pls namespace, and packages created by the Computation directorate might use llnl.comp.

Spack cannot ensure that every repository is named uniquely, but it will prevent you from registering two repositories with the same namespace at the same time. If you try to add a repository that has the same name as an existing one, e.g., builtin, Spack will print a warning message.

Namespace example

Suppose that LLNL maintains its own version of mpich, separate from Spack's built-in mpich package, and suppose you've installed both LLNL's and Spack's mpich packages. If you just use spack find, you won't see a difference between these two packages:

$ spack find
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
mpich@3.2  mpich@3.2

However, if you use spack find -N, Spack will display the packages with their namespaces:

$ spack find -N
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
builtin.mpich@3.2  llnl.comp.mpich@3.2

Now you know which one is LLNL's special version, and which one is the built-in Spack package. As you might guess, packages that are identical except for their namespace will still have different hashes:

$ spack find -lN
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
c35p3gc builtin.mpich@3.2  itoqmox llnl.comp.mpich@3.2

All Spack commands that take a package spec can also accept a fully qualified spec with a namespace. This means you can use the namespace to be more specific when designating, e.g., which package you want to uninstall:

spack uninstall llnl.comp.mpich

Overriding built-in packages

Spack's search semantics mean that you can make your own implementation of a built-in Spack package (like mpich), put it in a repository, and use it to override the built-in package. As long as the repository containing your mpich is earlier any other in repos.yaml, any built-in package that depends on mpich will be use the one in your repository.

Suppose you have three repositories: the builtin Spack repo (builtin), a shared repo for your institution (e.g., llnl), and a repo containing your own prototype packages (proto). Suppose they contain packages as follows:

Namespace

Path to repo

Packages

proto

~/proto

mpich

llnl

/usr/local/llnl

hdf5

builtin

$spack/var/spack/repos/builtin

mpich, hdf5, others

Suppose that hdf5 depends on mpich. You can override the built-in hdf5 by adding the llnl repo to repos.yaml:

repos:
- /usr/local/llnl
- $spack/var/spack/repos/builtin

spack install hdf5 will install llnl.hdf5 ^builtin.mpich.

If, instead, repos.yaml looks like this:

repos:
- ~/proto
- /usr/local/llnl
- $spack/var/spack/repos/builtin

spack install hdf5 will install llnl.hdf5 ^proto.mpich.

Any unqualified package name will be resolved by searching repos.yaml from the first entry to the last. You can force a particular repository's package by using a fully qualified name. For example, if your repos.yaml is as above, and you want builtin.mpich instead of proto.mpich, you can write:

spack install hdf5 ^builtin.mpich

which will install llnl.hdf5 ^builtin.mpich.

Similarly, you can force the builtin.hdf5 like this:

spack install builtin.hdf5 ^builtin.mpich

This will not search repos.yaml at all, as the builtin repo is specified in both cases. It will install builtin.hdf5 ^builtin.mpich.

If you want to see which repositories will be used in a build before you install it, you can use spack spec -N:

$ spack spec -N hdf5
Input spec
--------------------------------
hdf5

Normalized
--------------------------------
hdf5
    ^zlib@1.1.2:

Concretized
--------------------------------
builtin.hdf5@1.10.0-patch1%clang@7.0.2-apple+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=darwin-elcapitan-x86_64
    ^builtin.openmpi@2.0.1%clang@7.0.2-apple~mxm~pmi~psm~psm2~slurm~sqlite3~thread_multiple~tm~verbs+vt arch=darwin-elcapitan-x86_64
        ^builtin.hwloc@1.11.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
            ^builtin.libpciaccess@0.13.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
                ^builtin.libtool@2.4.6%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
                    ^builtin.m4@1.4.17%clang@7.0.2-apple+sigsegv arch=darwin-elcapitan-x86_64
                        ^builtin.libsigsegv@2.10%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
                ^builtin.pkg-config@0.29.1%clang@7.0.2-apple+internal_glib arch=darwin-elcapitan-x86_64
                ^builtin.util-macros@1.19.0%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
    ^builtin.zlib@1.2.8%clang@7.0.2-apple+pic arch=darwin-elcapitan-x86_64

警告

You can use a fully qualified package name in a depends_on directive in a package.py file, like so:

depends_on('proto.hdf5')

This is not recommended, as it makes it very difficult for multiple repos to be composed and shared. A package.py like this will fail if the proto repository is not registered in repos.yaml.

spack repo

Spack's configuration system allows repository settings to come from repos.yaml files in many locations. If you want to see the repositories registered as a result of all configuration files, use spack repo list.

spack repo list

$ spack repo list
==> 2 package repositories.
myrepo     ~/myrepo
builtin    ~/spack/var/spack/repos/builtin

Each repository is listed with its associated namespace. To get the raw, merged YAML from all configuration files, use spack config get repos:

$ spack config get repos
repos:srepos:
- ~/myrepo
- $spack/var/spack/repos/builtin

mNote that, unlike spack repo list, this does not include the namespace, which is read from each repo's repo.yaml.

spack repo create

To make your own repository, you don't need to construct a directory yourself; you can use the spack repo create command.

$ spack repo create myrepo
==> Created repo with namespace 'myrepo'.
==> To register it with spack, run this command:
  spack repo add ~/myrepo

$ ls myrepo
packages/  repo.yaml

$ cat myrepo/repo.yaml
repo:
  namespace: 'myrepo'

By default, the namespace of a new repo matches its directory's name. You can supply a custom namespace with a second argument, e.g.:

$ spack repo create myrepo llnl.comp
==> Created repo with namespace 'llnl.comp'.
==> To register it with spack, run this command:
  spack repo add ~/myrepo

$ cat myrepo/repo.yaml
repo:
  namespace: 'llnl.comp'

spack repo add

Once your repository is created, you can register it with Spack with spack repo add:

$ spack repo add ./myrepo
==> Added repo with namespace 'llnl.comp'.

$ spack repo list
==> 2 package repositories.
llnl.comp    ~/myrepo
builtin      ~/spack/var/spack/repos/builtin

This simply adds the repo to your repos.yaml file.

Once a repository is registered like this, you should be able to see its packages' names in the output of spack list, and you should be able to build them using spack install <name> as you would with any built-in package.

spack repo remove

You can remove an already-registered repository with spack repo rm. This will work whether you pass the repository's namespace or its path.

By namespace:

$ spack repo rm llnl.comp
==> Removed repository ~/myrepo with namespace 'llnl.comp'.

$ spack repo list
==> 1 package repository.
builtin    ~/spack/var/spack/repos/builtin

By path:

$ spack repo rm ~/myrepo
==> Removed repository ~/myrepo

$ spack repo list
==> 1 package repository.
builtin    ~/spack/var/spack/repos/builtin

Repo namespaces and Python

You may have noticed that namespace notation for repositories is similar to the notation for namespaces in Python. As it turns out, you can treat Spack repositories like Python packages; this is how they are implemented.

You could, for example, extend a builtin package in your own repository:

from spack.pkg.builtin.mpich import Mpich

class MyPackage(Mpich):
    ...

Spack repo namespaces are actually Python namespaces tacked on under spack.pkg. The search semantics of repos.yaml are actually implemented using Python's built-in sys.path search. The spack.repo module implements a custom Python importer.

警告

The mechanism for extending packages is not yet extensively tested, and extending packages across repositories imposes inter-repo dependencies, which may be hard to manage. Use this feature at your own risk, but let us know if you have a use case for it.

ビルドキャシュ

Some sites may encourage users to set up their own test environments before carrying out central installations, or some users may prefer to set up these environments on their own motivation. To reduce the load of recompiling otherwise identical package specs in different installations, installed packages can be put into build cache tarballs, uploaded to your Spack mirror and then downloaded and installed by others.

Creating build cache files

A compressed tarball of an installed package is created. Tarballs are created for all of its link and run dependency packages as well. Compressed tarballs are signed with gpg and signature and tarball and put in a .spack file. Optionally, the rpaths (and ids and deps on macOS) can be changed to paths relative to the Spack install tree before the tarball is created.

Build caches are created via:

$ spack buildcache create spec

Finding or installing build cache files

To find build caches or install build caches, a Spack mirror must be configured with:

$ spack mirror add <name> <url>

Build caches are found via:

$ spack buildcache list

Build caches are installed via:

$ spack buildcache install

Relocation

Initial build and later installation do not necessarily happen at the same location. Spack provides a relocation capability and corrects for RPATHs and non-relocatable scripts. However, many packages compile paths into binary artifacts directly. In such cases, the build instructions of this package would need to be adjusted for better re-locatability.

spack buildcache

spack buildcache create

Create tarball of installed Spack package and all dependencies. Tarballs are checksummed and signed if gpg2 is available. Places them in a directory build_cache that can be copied to a mirror. Commands like spack buildcache install will search Spack mirrors for build_cache to get the list of build caches.

Arguments

Description

<specs>

list of partial specs or hashes with a leading / to match from installed packages and used for creating build caches

-d <path>

directory in which build_cache directory is created, defaults to .

-f

overwrite .spack file in build_cache directory if it exists

-k <key>

the key to sign package with. In the case where multiple keys exist, the package will be unsigned unless -k is used.

-r

make paths in binaries relative before creating tarball

-y

answer yes to all create unsigned build_cache questions

spack buildcache list

Retrieves all specs for build caches available on a Spack mirror.

Arguments

Description

<specs>

list of partial package specs to be matched against specs downloaded for build caches

E.g. spack buildcache list gcc with print only commands to install gcc package(s)

spack buildcache install

Retrieves all specs for build caches available on a Spack mirror and installs build caches with specs matching the specs input.

Arguments

Description

<specs>

list of partial package specs or hashes with a leading / to be installed from build caches

-f

remove install directory if it exists before unpacking tarball

-y

answer yes to all to don't verify package with gpg questions

spack buildcache keys

List public keys available on Spack mirror.

Arguments

Description

-i

trust the keys downloaded with prompt for each

-y

answer yes to all trust all keys downloaded

コマンドリファレンス

This is a reference for all commands in the Spack command line interface. The same information is available through spack help.

Commands that also have sections in the main documentation have a link to "More documentation".

カテゴリー

コマンド

Administration

Query packages

Build packages

Configuration

Developer

Environments

Extensions

More help

モジュール

Create packages

System


spack

A flexible package manager that supports multiple versions, configurations, platforms, and compilers.

spack [-hHdklLmpvV] [--color {always,never,auto}] [-C DIR] [--timestamp] [--pdb] [-e ENV | -D DIR | -E]
  [--use-env-repo] [--sorted-profile STAT] [--lines LINES] [--stacktrace] [--print-shell-vars PRINT_SHELL_VARS]
  COMMAND ...

Optional arguments

-h, --help

show this help message and exit

-H, --all-help

show help for all commands (same as spack help --all)

--color {always,never,auto}

when to colorize output (default: auto)

-C DIR, --config-scope DIR

add a custom configuration scope

-d, --debug

write out debug logs during compile

--timestamp

Add a timestamp to tty output

--pdb

run spack under the pdb debugger

-e ENV, --env ENV

run with a specific environment (see spack env)

-D DIR, --env-dir DIR

run with an environment directory (ignore named environments)

-E, --no-env

run without any environments activated (see spack env)

--use-env-repo

when running in an environment, use its package repository

-k, --insecure

do not check ssl certificates when downloading

-l, --enable-locks

use filesystem locking (default)

-L, --disable-locks

do not use filesystem locking (unsafe)

-m, --mock

use mock packages instead of real ones

-p, --profile

profile execution using cProfile

--sorted-profile STAT

profile and sort by one or more of: [calls, ncalls, cumtime, cumulative, filename, line, module]

--lines LINES

lines of profile output or 'all' (default: 20)

-v, --verbose

print additional output during builds

--stacktrace

add stacktraces to all printed statements

-V, --version

show version number and exit

--print-shell-vars PRINT_SHELL_VARS

print info needed by setup-env.[c]sh

Subcommands


spack activate

activate a package extension

spack activate [-hf] [-v VIEW] ...

More documentation

Positional arguments

spec

spec of package extension to activate

Optional arguments

-h, --help

show this help message and exit

-f, --force

activate without first activating dependencies

-v VIEW, --view VIEW

the view to operate on


spack add

add a spec to an environment

spack add [-h] ...

Positional arguments

specs

specs of packages to add

Optional arguments

-h, --help

show this help message and exit


spack arch

print architecture information about this machine

spack arch [-h] [-p | -o | -t]

Optional arguments

-h, --help

show this help message and exit

-p, --platform

print only the platform

-o, --operating-system

print only the operating system

-t, --target

print only the target


spack blame

show contributors to packages

spack blame [-h] [-t | -p | -g] package_name

Positional arguments

package_name

name of package to show contributions for, or path to a file in the spack repo

Optional arguments

-h, --help

show this help message and exit

-t, --time

sort by last modification date (default)

-p, --percent

sort by percent of code

-g, --git

show git blame output instead of summary


spack bootstrap

Bootstrap packages needed for spack to run smoothly

spack bootstrap [-hnv] [-j JOBS] [--keep-prefix] [--keep-stage] [--clean | --dirty]

Optional arguments

-h, --help

show this help message and exit

-j JOBS, --jobs JOBS

explicitly set number of parallel jobs

--keep-prefix

don't remove the install prefix if installation fails

--keep-stage

don't remove the build stage if installation succeeds

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

-v, --verbose

display verbose build output while installing

--clean

unset harmful variables in the build environment (default)

--dirty

preserve user environment in the spack build environment (danger!)


spack build

stops at build stage when installing a package, if possible

spack build [-hv] ...

Positional arguments

パッケージ

spec of the package to install

Optional arguments

-h, --help

show this help message and exit

-v, --verbose

print additional output during builds


spack build-env

run a command in a spec's install environment, or dump its environment to screen or file

spack build-env [-h] [--clean] [--dirty] [--dump FILE] [--pickle FILE] ...

Positional arguments

spec [--] [cmd]...

specs of package environment to emulate

Optional arguments

-h, --help

show this help message and exit

--clean

unset harmful variables in the build environment (default)

--dirty

preserve user environment in the spack build environment (danger!)

--dump FILE

dump a source-able environment to FILE

--pickle FILE

dump a pickled source-able environment to FILE


spack buildcache

create, download and install binary packages

spack buildcache [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack buildcache create

spack buildcache create [-hrfua] [-k key] [-d directory] [--no-rebuild-index] [-y SPEC_YAML] ...

Positional arguments

パッケージ

specs of packages to create buildcache for

Optional arguments

-h, --help

show this help message and exit

-r, --rel

make all rpaths relative before creating tarballs.

-f, --force

overwrite tarball if it exists.

-u, --unsigned

create unsigned buildcache tarballs for testing

-a, --allow-root

allow install root string in binary files after RPATH substitution

-k key, --key key

Key for signing.

-d directory, --directory directory

directory in which to save the tarballs.

--no-rebuild-index

skip rebuilding index after building package(s)

-y SPEC_YAML, --spec-yaml SPEC_YAML

Create buildcache entry for spec from yaml file


spack buildcache install

spack buildcache install [-hfmau] ...

Positional arguments

パッケージ

specs of packages to install buildcache for

Optional arguments

-h, --help

show this help message and exit

-f, --force

overwrite install directory if it exists.

-m, --multiple

allow all matching packages

-a, --allow-root

allow install root string in binary files after RPATH substitution

-u, --unsigned

install unsigned buildcache tarballs for testing


spack buildcache list

spack buildcache list [-hlLvf] ...

Positional arguments

パッケージ

specs of packages to search for

Optional arguments

-h, --help

show this help message and exit

-l, --long

show dependency hashes as well as versions

-L, --very-long

show full dependency hashes as well as versions

-v, --variants

show variants in output (can be long)

-f, --force

force new download of specs


spack buildcache keys

spack buildcache keys [-hitf]

Optional arguments

-h, --help

show this help message and exit

-i, --install

install Keys pulled from mirror

-t, --trust

trust all downloaded keys

-f, --force

force new download of keys


spack buildcache preview

spack buildcache preview [-h] packages [packages ...]

Positional arguments

パッケージ

list of installed packages

Optional arguments

-h, --help

show this help message and exit


spack buildcache check

spack buildcache check [-h] [-m MIRROR_URL] [-o OUTPUT_FILE] [--scope {defaults,system,site,user}[/PLATFORM]]
                   [-s SPEC] [-y SPEC_YAML] [--rebuild-on-error]

Optional arguments

-h, --help

show this help message and exit

-m MIRROR_URL, --mirror-url MIRROR_URL

Override any configured mirrors with this mirror url

-o OUTPUT_FILE, --output-file OUTPUT_FILE

File where rebuild info should be written

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope containing mirrors to check

-s SPEC, --spec SPEC

Check single spec instead of release specs file

-y SPEC_YAML, --spec-yaml SPEC_YAML

Check single spec from yaml file instead of release specs file

--rebuild-on-error

Default to rebuilding packages if errors are encountered during the process of checking whether rebuilding is needed


spack buildcache download

spack buildcache download [-hc] [-s SPEC] [-y SPEC_YAML] [-p PATH]

Optional arguments

-h, --help

show this help message and exit

-s SPEC, --spec SPEC

Download built tarball for spec from mirror

-y SPEC_YAML, --spec-yaml SPEC_YAML

Download built tarball for spec (from yaml file) from mirror

-p PATH, --path PATH

Path to directory where tarball should be downloaded

-c, --require-cdashid

Require .cdashid file to be downloaded with buildcache entry


spack buildcache get-buildcache-name

spack buildcache get-buildcache-name [-h] [-s SPEC] [-y SPEC_YAML]

Optional arguments

-h, --help

show this help message and exit

-s SPEC, --spec SPEC

Spec string for which buildcache name is desired

-y SPEC_YAML, --spec-yaml SPEC_YAML

Path to spec yaml file for which buildcache name is desired


spack buildcache save-yaml

spack buildcache save-yaml [-h] [-r ROOT_SPEC] [-s SPECS] [-y YAML_DIR]

Optional arguments

-h, --help

show this help message and exit

-r ROOT_SPEC, --root-spec ROOT_SPEC

Root spec of dependent spec

-s SPECS, --specs SPECS

List of dependent specs for which saved yaml is desired

-y YAML_DIR, --yaml-dir YAML_DIR

Path to directory where spec yamls should be saved


spack cd

cd to spack directories in the shell

spack cd [-h] [-m | -r | -i | -p | -P | -s | -S | -b | -e ENV] ...

More documentation

Positional arguments

spec

spec of package to fetch directory for

Optional arguments

-h, --help

show this help message and exit

-m, --module-dir

spack python module directory

-r, --spack-root

spack installation root

-i, --install-dir

install prefix for spec (spec need not be installed)

-p, --package-dir

directory enclosing a spec's package.py file

-P, --packages

top-level packages directory for Spack

-s, --stage-dir

stage directory for a spec

-S, --stages

top level stage directory

-b, --build-dir

checked out or expanded source directory for a spec (requires it to be staged first)

-e ENV, --env ENV

location of an environment managed by spack


spack checksum

checksum available versions of a package

spack checksum [-h] [--keep-stage] package ...

More documentation

Positional arguments

パッケージ

package to checksum versions for

versions

versions to generate checksums for

Optional arguments

-h, --help

show this help message and exit

--keep-stage

don't clean up staging area when command completes


spack clean

remove temporary build files and/or downloaded archives

spack clean [-hsdmpa] ...

More documentation

Positional arguments

specs

removes the build stages and tarballs for specs

Optional arguments

-h, --help

show this help message and exit

-s, --stage

remove all temporary build stages (default)

-d, --downloads

remove cached downloads

-m, --misc-cache

remove long-lived caches, like the virtual package index

-p, --python-cache

remove .pyc, .pyo files and __pycache__ folders

-a, --all

equivalent to -sdmp


spack clone

create a new installation of spack in another prefix

spack clone [-h] [-r REMOTE] prefix

Positional arguments

prefix

name of prefix where we should install spack

Optional arguments

-h, --help

show this help message and exit

-r REMOTE, --remote REMOTE

name of the remote to clone from


spack commands

list available spack commands

spack commands [-h] [--format {subcommands,rst,names}] [--header FILE] [--update FILE] ...

Positional arguments

rst_files

list of rst files to search for _cmd-spack-<cmd> cross-refs

Optional arguments

-h, --help

show this help message and exit

--format {subcommands,rst,names}

format to be used to print the output (default: names)

--header FILE

prepend contents of FILE to the output (useful for rst format)

--update FILE

write output to the specified file, if any command is newer


spack compiler

manage compilers

spack compiler [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack compiler find

spack compiler find [-h] [--scope {defaults,system,site,user}[/PLATFORM]] ...

More documentation

Positional arguments

add_paths

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack compiler remove

spack compiler remove [-ha] [--scope {defaults,system,site,user}[/PLATFORM]] compiler_spec

Positional arguments

compiler_spec

Optional arguments

-h, --help

show this help message and exit

-a, --all

remove ALL compilers that match spec

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack compiler list

spack compiler list [-h] [--scope {defaults,system,site,user}[/PLATFORM]]

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read from


spack compiler info

spack compiler info [-h] [--scope {defaults,system,site,user}[/PLATFORM]] compiler_spec

More documentation

Positional arguments

compiler_spec

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read from


spack compilers

list available compilers

spack compilers [-h] [--scope {defaults,system,site,user}[/PLATFORM]]

More documentation

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read/modify


spack concretize

concretize an environment and write a lockfile

spack concretize [-hf]

Optional arguments

-h, --help

show this help message and exit

-f, --force

Re-concretize even if already concretized.


spack config

get and set configuration options

spack config [-h] [--scope {defaults,system,site,user}[/PLATFORM]] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read/modify

Subcommands


spack config get

spack config get [-h] [SECTION]

More documentation

Positional arguments

SECTION

configuration section to print. options: %(choices)s

Optional arguments

-h, --help

show this help message and exit


spack config blame

spack config blame [-h] SECTION

More documentation

Positional arguments

SECTION

configuration section to print. options: %(choices)s

Optional arguments

-h, --help

show this help message and exit


spack config edit

spack config edit [-h] [--print-file] [SECTION]

Positional arguments

SECTION

configuration section to edit. options: %(choices)s

Optional arguments

-h, --help

show this help message and exit

--print-file

print the file name that would be edited


spack configure

stage and configure a package but do not install

spack configure [-hv] ...

Positional arguments

パッケージ

spec of the package to install

Optional arguments

-h, --help

show this help message and exit

-v, --verbose

print additional output during builds


spack create

create a new package file

spack create [-hf] [--keep-stage] [-n NAME] [-t TEMPLATE] [-r REPO] [-N NAMESPACE] [url]

More documentation

Positional arguments

url

url of package archive

Optional arguments

-h, --help

show this help message and exit

--keep-stage

don't clean up staging area when command completes

-n NAME, --name NAME

name of the package to create

-t TEMPLATE, --template TEMPLATE

build system template to use. options: %(choices)s

-r REPO, --repo REPO

path to a repository where the package should be created

-N NAMESPACE, --namespace NAMESPACE

specify a namespace for the package. must be the namespace of a repository registered with Spack

-f, --force

overwrite any existing package file with the same name


spack deactivate

deactivate a package extension

spack deactivate [-hfa] [-v VIEW] ...

More documentation

Positional arguments

spec

spec of package extension to deactivate

Optional arguments

-h, --help

show this help message and exit

-f, --force

run deactivation even if spec is NOT currently activated

-v VIEW, --view VIEW

the view to operate on

-a, --all

deactivate all extensions of an extendable package, or deactivate an extension AND its dependencies


spack debug

debugging commands for troubleshooting Spack

spack debug [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack debug create-db-tarball

spack debug create-db-tarball [-h]

Optional arguments

-h, --help

show this help message and exit


spack dependencies

show dependencies of a package

spack dependencies [-hitV] ...

Positional arguments

spec

spec or package name

Optional arguments

-h, --help

show this help message and exit

-i, --installed

List installed dependencies of an installed spec, instead of possible dependencies of a package.

-t, --transitive

show all transitive dependencies

-V, --no-expand-virtuals

do not expand virtual dependencies


spack dependents

show packages that depend on another

spack dependents [-hit] ...

Positional arguments

spec

spec or package name

Optional arguments

-h, --help

show this help message and exit

-i, --installed

List installed dependents of an installed spec, instead of possible dependents of a package.

-t, --transitive

Show all transitive dependents.


spack diy

do-it-yourself: build from an existing source directory

spack diy [-hinq] [-j JOBS] [-d SOURCE_PATH] [--keep-prefix] [--skip-patch] [--clean | --dirty] ...

Positional arguments

spec

specs to use for install. must contain package AND version

Optional arguments

-h, --help

show this help message and exit

-j JOBS, --jobs JOBS

explicitly set number of parallel jobs

-d SOURCE_PATH, --source-path SOURCE_PATH

path to source directory. defaults to the current directory

-i, --ignore-dependencies

don't try to install dependencies of requested packages

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

--keep-prefix

do not remove the install prefix if installation fails

--skip-patch

skip patching for the DIY build

-q, --quiet

do not display verbose build output while installing

--clean

unset harmful variables in the build environment (default)

--dirty

preserve user environment in the spack build environment (danger!)


spack docs

open spack documentation in a web browser

spack docs [-h]

Optional arguments

-h, --help

show this help message and exit


spack edit

open package files in $EDITOR

spack edit [-h] [-b | -c | -d | -t | -m | -r REPO | -N NAMESPACE] [name]

More documentation

Positional arguments

name

name of package to edit

Optional arguments

-h, --help

show this help message and exit

-b, --build-system

Edit the build system with the supplied name.

-c, --command

edit the command with the supplied name

-d, --docs

edit the docs with the supplied name

-t, --test

edit the test with the supplied name

-m, --module

edit the main spack module with the supplied name

-r REPO, --repo REPO

path to repo to edit package in

-N NAMESPACE, --namespace NAMESPACE

namespace of package to edit


spack env

manage virtual environments

spack env [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack env activate

spack env activate [-hdp] [--sh | --csh] [-v | -V] env

Positional arguments

env

name of environment to activate

Optional arguments

-h, --help

show this help message and exit

--sh

print sh commands to activate the environment

--csh

print csh commands to activate the environment

-v, --with-view

update PATH etc. with associated view

-V, --without-view

do not update PATH etc. with associated view

-d, --dir

force spack to treat env as a directory, not a name

-p, --prompt

decorate the command line prompt when activating


spack env deactivate

spack env deactivate [-h] [--sh | --csh]

Optional arguments

-h, --help

show this help message and exit

--sh

print sh commands to deactivate the environment

--csh

print csh commands to deactivate the environment


spack env create

spack env create [-hd] [--without-view | --with-view WITH_VIEW] ENV [envfile]

Positional arguments

ENV

name of environment to create

envfile

optional init file; can be spack.yaml or spack.lock

Optional arguments

-h, --help

show this help message and exit

-d, --dir

create an environment in a specific directory

--without-view

do not maintain a view for this environment

--with-view WITH_VIEW

specify that this environment should maintain a view at the specified path (by default the view is maintained in the environment directory)


spack env remove

spack env remove [-hy] ENV [ENV ...]

Positional arguments

ENV

environment(s) to remove

Optional arguments

-h, --help

show this help message and exit

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack env list

spack env list [-h]

Optional arguments

-h, --help

show this help message and exit


spack env status

spack env status [-h]

Optional arguments

-h, --help

show this help message and exit


spack env loads

spack env loads [-hr] [-m {tcl,lmod}] [--input-only] [-p PREFIX] [-x EXCLUDE] [env]

Positional arguments

env

name of env to generate loads file for

Optional arguments

-h, --help

show this help message and exit

-m {tcl,lmod}, --module-type {tcl,lmod}

type of module system to generate loads for

--input-only

generate input for module command (instead of a shell script)

-p PREFIX, --prefix PREFIX

prepend to module names when issuing module load commands

-x EXCLUDE, --exclude EXCLUDE

exclude package from output; may be specified multiple times

-r, --dependencies

recursively traverse spec dependencies


spack env view

spack env view [-h] {regenerate,enable,disable} [view_path]

Positional arguments

{regenerate,enable,disable}

action to take for the environment's view

view_path

when enabling a view, optionally set the path manually

Optional arguments

-h, --help

show this help message and exit


spack extensions

list extensions for package

spack extensions [-h] [-l | -p | -d] [-s TYPE] [-v VIEW] ...

More documentation

Positional arguments

spec

spec of package to list extensions for

Optional arguments

-h, --help

show this help message and exit

-l, --long

show dependency hashes as well as versions

-p, --paths

show paths to extension install directories

-d, --deps

show full dependency DAG of extensions

-s TYPE, --show TYPE

one of packages, installed, activated, all

-v VIEW, --view VIEW

the view to operate on


spack fetch

fetch archives for packages

spack fetch [-hnmD] ...

More documentation

Positional arguments

パッケージ

specs of packages to fetch

Optional arguments

-h, --help

show this help message and exit

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

-m, --missing

fetch only missing (not yet installed) dependencies

-D, --dependencies

also fetch all dependencies


spack find

list and search installed packages

spack find [-hlLcfumvMN] [-s | -p | -d] [-t TAGS] [--show-full-compiler] [-x | -X] [--start-date START_DATE]
       [--end-date END_DATE]
       ...

More documentation

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

-s, --short

show only specs (default)

-p, --paths

show paths to package install directories

-d, --deps

show full dependency DAG of installed packages

-l, --long

show dependency hashes as well as versions

-L, --very-long

show full dependency hashes as well as versions

-t TAGS, --tags TAGS

filter a package query by tags

-c, --show-concretized

show concretized specs in an environment

-f, --show-flags

show spec compiler flags

--show-full-compiler

show full compiler specs

-x, --explicit

show only specs that were installed explicitly

-X, --implicit

show only specs that were installed as dependencies

-u, --unknown

show only specs Spack does not have a package for

-m, --missing

show missing dependencies as well as installed specs

-v, --variants

show variants in output (can be long)

-M, --only-missing

show only missing dependencies

-N, --namespace

show fully qualified package names

--start-date START_DATE

earliest date of installation [YYYY-MM-DD]

--end-date END_DATE

latest date of installation [YYYY-MM-DD]


spack flake8

runs source code style checks on Spack. requires flake8

spack flake8 [-hkaorU] [-b BASE] ...

Positional arguments

files

specific files to check

Optional arguments

-h, --help

show this help message and exit

-b BASE, --base BASE

select base branch for collecting list of modified files

-k, --keep-temp

do not delete temporary directory where flake8 runs. use for debugging, to see filtered files

-a, --all

check all files, not just changed files

-o, --output

send filtered files to stdout as well as temp files

-r, --root-relative

print root-relative paths (default: cwd-relative)

-U, --no-untracked

exclude untracked files from checks


spack gpg

handle GPG actions for spack

spack gpg [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack gpg verify

spack gpg verify [-h] package [signature]

Positional arguments

パッケージ

the package to verify

signature

the signature file

Optional arguments

-h, --help

show this help message and exit


spack gpg trust

spack gpg trust [-h] keyfile

Positional arguments

keyfile

add a key to the trust store

Optional arguments

-h, --help

show this help message and exit


spack gpg untrust

spack gpg untrust [-h] [--signing] keys [keys ...]

Positional arguments

keys

remove keys from the trust store

Optional arguments

-h, --help

show this help message and exit

--signing

allow untrusting signing keys


spack gpg sign

spack gpg sign [-h] [--output DEST] [--key KEY] [--clearsign] package

Positional arguments

パッケージ

the package to sign

Optional arguments

-h, --help

show this help message and exit

--output DEST

the directory to place signatures

--key KEY

the key to use for signing

--clearsign

if specified, create a clearsign signature


spack gpg create

spack gpg create [-h] [--comment COMMENT] [--expires EXPIRATION] [--export DEST] name email

Positional arguments

name

the name to use for the new key

email

the email address to use for the new key

Optional arguments

-h, --help

show this help message and exit

--comment COMMENT

a description for the intended use of the key

--expires EXPIRATION

when the key should expire

--export DEST

export the public key to a file


spack gpg list

spack gpg list [-h] [--trusted] [--signing]

Optional arguments

-h, --help

show this help message and exit

--trusted

list trusted keys

--signing

list keys which may be used for signing


spack gpg init

spack gpg init [-h]

Optional arguments

-h, --help

show this help message and exit

--from DIR

==SUPPRESS==


spack gpg export

spack gpg export [-h] location [keys [keys ...]]

Positional arguments

location

where to export keys

keys

the keys to export; all secret keys if unspecified

Optional arguments

-h, --help

show this help message and exit


spack graph

generate graphs of package dependency relationships

spack graph [-hnsi] [-a | -d] [-t DEPTYPE] ...

More documentation

Positional arguments

specs

specs of packages to graph

Optional arguments

-h, --help

show this help message and exit

-a, --ascii

draw graph as ascii to stdout (default)

-d, --dot

generate graph in dot format and print to stdout

-n, --normalize

skip concretization; only print normalized spec

-s, --static

use static information from packages, not dynamic spec info

-i, --installed

graph all installed specs in dot format (implies --dot)

-t DEPTYPE, --deptype DEPTYPE

comma-separated list of deptypes to traverse. default=build,link,run,test


spack help

get help on spack and its commands

spack help [-ha] [--spec] help_command]

More documentation

Positional arguments

help_command

command to get help on

Optional arguments

-h, --help

show this help message and exit

-a, --all

print all available commands

--spec

print all available commands


spack info

get detailed information on a particular package

spack info [-h] PACKAGE

More documentation

Positional arguments

PACKAGE

name of package to get info for

Optional arguments

-h, --help

show this help message and exit


spack install

build and install packages

spack install [-hInvy] [--only {package,dependencies}] [-j JOBS] [--overwrite] [--keep-prefix] [--keep-stage]
          [--dont-restage] [--use-cache | --no-cache] [--show-log-on-error] [--source] [--fake] [--only-concrete]
          [-f SPEC_YAML_FILE] [--clean | --dirty] [--test {root,all} | --run-tests]
          [--log-format {None,junit,cdash}] [--log-file LOG_FILE] [--cdash-upload-url CDASH_UPLOAD_URL]
          [--cdash-build CDASH_BUILD] [--cdash-site CDASH_SITE]
          [--cdash-track CDASH_TRACK | --cdash-buildstamp CDASH_BUILDSTAMP]
          ...

More documentation

Positional arguments

パッケージ

spec of the package to install

Optional arguments

-h, --help

show this help message and exit

--only {package,dependencies}

select the mode of installation. the default is to install the package along with all its dependencies. alternatively one can decide to install only the package or only the dependencies

-j JOBS, --jobs JOBS

explicitly set number of parallel jobs

-I, --install-status

show install status of packages. packages can be: installed [+], missing and needed by an installed package [-], or not installed (no annotation)

--overwrite

reinstall an existing spec, even if it has dependents

--keep-prefix

don't remove the install prefix if installation fails

--keep-stage

don't remove the build stage if installation succeeds

--dont-restage

if a partial install is detected, don't delete prior state

--use-cache

check for pre-built Spack packages in mirrors (default)

--no-cache

do not check for pre-built Spack packages in mirrors

--show-log-on-error

print full build log to stderr if build fails

--source

install source files in prefix

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

-v, --verbose

display verbose build output while installing

--fake

fake install for debug purposes.

--only-concrete

(with environment) only install already concretized specs

-f SPEC_YAML_FILE, --file SPEC_YAML_FILE

install from file. Read specs to install from .yaml files

--clean

unset harmful variables in the build environment (default)

--dirty

preserve user environment in the spack build environment (danger!)

--test {root,all}

If 'root' is chosen, run package tests during installation for top-level packages (but skip tests for dependencies). if 'all' is chosen, run package tests during installation for all packages. If neither are chosen, don't run tests for any packages.

--run-tests

run package tests during installation (same as --test=all)

--log-format {None,junit,cdash}

format to be used for log files

--log-file LOG_FILE

filename for the log file. if not passed a default will be used

--cdash-upload-url CDASH_UPLOAD_URL

CDash URL where reports will be uploaded

--cdash-build CDASH_BUILD

The name of the build that will be reported to CDash. Defaults to spec of the package to install.

--cdash-site CDASH_SITE

The site name that will be reported to CDash. Defaults to current system hostname.

--cdash-track CDASH_TRACK

Results will be reported to this group on CDash. Defaults to Experimental.

--cdash-buildstamp CDASH_BUILDSTAMP

Instead of letting the CDash reporter prepare the buildstamp which, when combined with build name, site and project, uniquely identifies the build, provide this argument to identify the build yourself. Format: %%Y%%m%%d-%%H%%M-[cdash-track]

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack license

list and check license headers on files in spack

spack license [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack license list-files

spack license list-files [-h]

Optional arguments

-h, --help

show this help message and exit


spack license verify

spack license verify [-h] [--root ROOT]

Optional arguments

-h, --help

show this help message and exit

--root ROOT

scan a different prefix for license issues


spack list

list and search available packages

spack list [-hd] [--format {name_only,rst,html}] [--update FILE] [-t TAGS] ...

More documentation

Positional arguments

filter

optional case-insensitive glob patterns to filter results

Optional arguments

-h, --help

show this help message and exit

-d, --search-description

filtering will also search the description for a match

--format {name_only,rst,html}

format to be used to print the output [default: name_only]

--update FILE

write output to the specified file, if any package is newer

-t TAGS, --tags TAGS

filter a package query by tags


spack load

add package to environment using module load

spack load [-hr] ...

More documentation

Positional arguments

spec

spec of package to load with modules

Optional arguments

-h, --help

show this help message and exit

-r, --dependencies

recursively traverse spec dependencies


spack location

print out locations of packages and spack directories

spack location [-h] [-m | -r | -i | -p | -P | -s | -S | -b | -e ENV] ...

More documentation

Positional arguments

spec

spec of package to fetch directory for

Optional arguments

-h, --help

show this help message and exit

-m, --module-dir

spack python module directory

-r, --spack-root

spack installation root

-i, --install-dir

install prefix for spec (spec need not be installed)

-p, --package-dir

directory enclosing a spec's package.py file

-P, --packages

top-level packages directory for Spack

-s, --stage-dir

stage directory for a spec

-S, --stages

top level stage directory

-b, --build-dir

checked out or expanded source directory for a spec (requires it to be staged first)

-e ENV, --env ENV

location of an environment managed by spack


spack log-parse

filter errors and warnings from build logs

spack log-parse [-hp] [--show SHOW] [-c CONTEXT] [-w WIDTH] [-j JOBS] file

Positional arguments

file

a log file containing build output, or - for stdin

Optional arguments

-h, --help

show this help message and exit

--show SHOW

comma-separated list of what to show; options: errors, warnings

-c CONTEXT, --context CONTEXT

lines of context to show around lines of interest

-p, --profile

print out a profile of time spent in regexes during parse

-w WIDTH, --width WIDTH

wrap width: auto-size to terminal by default; 0 for no wrap

-j JOBS, --jobs JOBS

number of jobs to parse log file (default: 1 for short logs, ncpus for long logs)


spack mirror

manage mirrors (source and binary)

spack mirror [-hn] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

Subcommands


spack mirror create

spack mirror create [-hD] [-d DIRECTORY] [-f FILE] [-n VERSIONS_PER_SPEC] ...

More documentation

Positional arguments

specs

specs of packages to put in mirror

Optional arguments

-h, --help

show this help message and exit

-d DIRECTORY, --directory DIRECTORY

directory in which to create mirror

-f FILE, --file FILE

file with specs of packages to put in mirror

-D, --dependencies

also fetch all dependencies

-n VERSIONS_PER_SPEC, --versions-per-spec VERSIONS_PER_SPEC

the number of versions to fetch for each spec


spack mirror add

spack mirror add [-h] [--scope {defaults,system,site,user}[/PLATFORM]] name url

More documentation

Positional arguments

name

mnemonic name for mirror

url

url of mirror directory from 'spack mirror create'

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack mirror remove

spack mirror remove [-h] [--scope {defaults,system,site,user}[/PLATFORM]] name

More documentation

Positional arguments

name

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack mirror list

spack mirror list [-h] [--scope {defaults,system,site,user}[/PLATFORM]]

More documentation

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read from


spack module

manipulate module files

spack module [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack module dotkit

spack module dotkit [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack module dotkit refresh
spack module dotkit refresh [-hy] [--delete-tree] [--upstream-modules] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--delete-tree

delete the module file tree before refresh

--upstream-modules

generate modules for packages installed upstream

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module dotkit find
spack module dotkit find [-hr] [--full-path] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--full-path

display full path to module file

-r, --dependencies

recursively traverse spec dependencies


spack module dotkit rm
spack module dotkit rm [-hy] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module dotkit loads
spack module dotkit loads [-hr] [--input-only] [-p PREFIX] [-x EXCLUDE] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--input-only

generate input for module command (instead of a shell script)

-p PREFIX, --prefix PREFIX

prepend to module names when issuing module load commands

-x EXCLUDE, --exclude EXCLUDE

exclude package from output; may be specified multiple times

-r, --dependencies

recursively traverse spec dependencies


spack module lmod

spack module lmod [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack module lmod refresh
spack module lmod refresh [-hy] [--delete-tree] [--upstream-modules] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--delete-tree

delete the module file tree before refresh

--upstream-modules

generate modules for packages installed upstream

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module lmod find
spack module lmod find [-hr] [--full-path] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--full-path

display full path to module file

-r, --dependencies

recursively traverse spec dependencies


spack module lmod rm
spack module lmod rm [-hy] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module lmod loads
spack module lmod loads [-hr] [--input-only] [-p PREFIX] [-x EXCLUDE] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--input-only

generate input for module command (instead of a shell script)

-p PREFIX, --prefix PREFIX

prepend to module names when issuing module load commands

-x EXCLUDE, --exclude EXCLUDE

exclude package from output; may be specified multiple times

-r, --dependencies

recursively traverse spec dependencies


spack module lmod setdefault
spack module lmod setdefault [-h] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit


spack module tcl

spack module tcl [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack module tcl refresh
spack module tcl refresh [-hy] [--delete-tree] [--upstream-modules] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--delete-tree

delete the module file tree before refresh

--upstream-modules

generate modules for packages installed upstream

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module tcl find
spack module tcl find [-hr] [--full-path] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--full-path

display full path to module file

-r, --dependencies

recursively traverse spec dependencies


spack module tcl rm
spack module tcl rm [-hy] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

-y, --yes-to-all

assume "yes" is the answer to every confirmation request


spack module tcl loads
spack module tcl loads [-hr] [--input-only] [-p PREFIX] [-x EXCLUDE] ...

Positional arguments

constraint

constraint to select a subset of installed packages

Optional arguments

-h, --help

show this help message and exit

--input-only

generate input for module command (instead of a shell script)

-p PREFIX, --prefix PREFIX

prepend to module names when issuing module load commands

-x EXCLUDE, --exclude EXCLUDE

exclude package from output; may be specified multiple times

-r, --dependencies

recursively traverse spec dependencies


spack patch

patch expanded archive sources in preparation for install

spack patch [-hn] ...

More documentation

Positional arguments

パッケージ

specs of packages to stage

Optional arguments

-h, --help

show this help message and exit

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)


spack pkg

query packages associated with particular git revisions

spack pkg [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack pkg add

spack pkg add [-h] ...

Positional arguments

パッケージ

names of packages to add to git repo

Optional arguments

-h, --help

show this help message and exit


spack pkg list

spack pkg list [-h] [rev]

Positional arguments

rev

revision to list packages for

Optional arguments

-h, --help

show this help message and exit


spack pkg diff

spack pkg diff [-h] [rev1] [rev2]

Positional arguments

rev1

revision to compare against

rev2

revision to compare to rev1 (default is HEAD)

Optional arguments

-h, --help

show this help message and exit


spack pkg added

spack pkg added [-h] [rev1] [rev2]

Positional arguments

rev1

revision to compare against

rev2

revision to compare to rev1 (default is HEAD)

Optional arguments

-h, --help

show this help message and exit


spack pkg removed

spack pkg removed [-h] [rev1] [rev2]

Positional arguments

rev1

revision to compare against

rev2

revision to compare to rev1 (default is HEAD)

Optional arguments

-h, --help

show this help message and exit


spack providers

list packages that provide a particular virtual package

spack providers [-h] [virtual_package [virtual_package ...]]

More documentation

Positional arguments

virtual_package

find packages that provide this virtual package

Optional arguments

-h, --help

show this help message and exit


spack pydoc

run pydoc from within spack

spack pydoc [-h] entity

Positional arguments

entity

run pydoc help on entity

Optional arguments

-h, --help

show this help message and exit


spack python

launch an interpreter as spack would launch a command

spack python [-h] [-c PYTHON_COMMAND] ...

More documentation

Positional arguments

python_args

file to run plus arguments

Optional arguments

-h, --help

show this help message and exit

-c PYTHON_COMMAND

command to execute


spack reindex

rebuild Spack's package database

spack reindex [-h]

Optional arguments

-h, --help

show this help message and exit


spack release-jobs

generate release build set as .gitlab-ci.yml

spack release-jobs [-hp] [-s SPEC_SET] [-m MIRROR_URL] [-o OUTPUT_FILE] [-t SHARED_RUNNER_TAG] [-k SIGNING_KEY]
               [-c CDASH_URL] [--resolve-deps-locally] [--specs-deps-output SPECS_DEPS_OUTPUT]
               ...

Positional arguments

specs

These positional arguments are generally for internal use. The --spec-set argument should be used to identify a yaml file describing the set of release specs to include in the .gitlab-ci.yml file.

Optional arguments

-h, --help

show this help message and exit

-s SPEC_SET, --spec-set SPEC_SET

path to release spec-set yaml file

-m MIRROR_URL, --mirror-url MIRROR_URL

url of binary mirror where builds should be pushed

-o OUTPUT_FILE, --output-file OUTPUT_FILE

path to output file to write

-t SHARED_RUNNER_TAG, --shared-runner-tag SHARED_RUNNER_TAG

tag to add to jobs for shared runner selection

-k SIGNING_KEY, --signing-key SIGNING_KEY

hash of gpg key to use for package signing

-c CDASH_URL, --cdash-url CDASH_URL

Base url of CDash instance jobs should communicate with

-p, --print-summary

Print summary of staged jobs to standard output

--resolve-deps-locally

Use only the current machine to concretize specs, instead of iterating over items in os-container-mapping.yaml and using docker run. Assumes the current machine architecure is listed in the os-container-mapping.yaml config file.

--specs-deps-output SPECS_DEPS_OUTPUT

A file path to which spec deps should be written. This argument is generally for internal use, and should not be provided by end-users under normal conditions.


spack remove

remove specs from an environment

spack remove [-haf] ...

Positional arguments

specs

specs to be removed

Optional arguments

-h, --help

show this help message and exit

-a, --all

remove all specs from (clear) the environment

-f, --force

remove concretized spec (if any) immediately


spack repo

manage package source repositories

spack repo [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack repo create

spack repo create [-h] directory [namespace]

Positional arguments

directory

directory to create the repo in

namespace

namespace to identify packages in the repository. defaults to the directory name

Optional arguments

-h, --help

show this help message and exit


spack repo list

spack repo list [-h] [--scope {defaults,system,site,user}[/PLATFORM]]

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to read from


spack repo add

spack repo add [-h] [--scope {defaults,system,site,user}[/PLATFORM]] path

Positional arguments

path

path to a Spack package repository directory

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack repo remove

spack repo remove [-h] [--scope {defaults,system,site,user}[/PLATFORM]] path_or_namespace

Positional arguments

path_or_namespace

path or namespace of a Spack package repository

Optional arguments

-h, --help

show this help message and exit

--scope {defaults,system,site,user}[/PLATFORM]

configuration scope to modify


spack resource

list downloadable resources (tarballs, repos, patches, etc.)

spack resource [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack resource list

spack resource list [-h] [--only-hashes]

Optional arguments

-h, --help

show this help message and exit

--only-hashes

only print sha256 hashes of resources


spack resource show

spack resource show [-h] hash

Positional arguments

hash

Optional arguments

-h, --help

show this help message and exit


spack restage

revert checked out package source code

spack restage [-h] ...

More documentation

Positional arguments

パッケージ

specs of packages to restage

Optional arguments

-h, --help

show this help message and exit


spack setup

create a configuration script and module, but don't build

spack setup [-hinv] [--clean | --dirty] ...

Positional arguments

spec

specs to use for install. must contain package AND version

Optional arguments

-h, --help

show this help message and exit

-i, --ignore-dependencies

do not try to install dependencies of requested packages

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

-v, --verbose

display verbose build output while installing

--clean

unset harmful variables in the build environment (default)

--dirty

preserve user environment in the spack build environment (danger!)


spack spec

show what would be installed, given a spec

spack spec [-hlLIyNt] [-c {nodes,edges,paths}] ...

More documentation

Positional arguments

specs

specs of packages

Optional arguments

-h, --help

show this help message and exit

-l, --long

show dependency hashes as well as versions

-L, --very-long

show full dependency hashes as well as versions

-I, --install-status

show install status of packages. packages can be: installed [+], missing and needed by an installed package [-], or not installed (no annotation)

-y, --yaml

print concrete spec as YAML

-c {nodes,edges,paths}, --cover {nodes,edges,paths}

how extensively to traverse the DAG (default: nodes)

-N, --namespaces

show fully qualified package names

-t, --types

show dependency types


spack stage

expand downloaded archive in preparation for install

spack stage [-hn] [-p PATH] ...

More documentation

Positional arguments

specs

specs of packages to stage

Optional arguments

-h, --help

show this help message and exit

-n, --no-checksum

do not use checksums to verify downloaded files (unsafe)

-p PATH, --path PATH

path to stage package, does not add to spack tree


spack test

run spack's unit tests

spack test [-hH] [-l | -L] [--extension EXTENSION] ...

More documentation

Positional arguments

tests

list of tests to run (will be passed to pytest -k)

Optional arguments

-h, --help

show this help message and exit

-H, --pytest-help

print full pytest help message, showing advanced options

-l, --list

list basic test names

-L, --long-list

list the entire hierarchy of tests

--extension EXTENSION

run test for a given Spack extension


spack uninstall

remove installed packages

spack uninstall [-hfRya] ...

More documentation

Positional arguments

パッケージ

specs of packages to uninstall

Optional arguments

-h, --help

show this help message and exit

-f, --force

remove regardless of whether other packages or environments depend on this one

-R, --dependents

also uninstall any packages that depend on the ones given via command line

-y, --yes-to-all

assume "yes" is the answer to every confirmation request

-a, --all

USE CAREFULLY. Remove ALL installed packages that match each supplied spec. i.e., if you uninstall --all libelf, ALL versions of libelf are uninstalled. If no spec is supplied, all installed packages will be uninstalled. If used in an environment, all packages in the environment will be uninstalled.


spack unload

remove package from environment using module unload

spack unload [-h] ...

Positional arguments

spec

spec of package to unload with modules

Optional arguments

-h, --help

show this help message and exit


spack unuse

remove package from environment using dotkit

spack unuse [-h] ...

Positional arguments

spec

spec of package to unuse with dotkit

Optional arguments

-h, --help

show this help message and exit


spack upload-s3

temporary command to upload buildcaches to 's3.spack.io'

spack upload-s3 [-h] SUBCOMMAND ...

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack upload-s3 spec

spack upload-s3 spec [-h] [-s SPEC] [-y SPEC_YAML] [-b BASE_DIR] [-e ENDPOINT_URL]

Optional arguments

-h, --help

show this help message and exit

-s SPEC, --spec SPEC

Spec to upload

-y SPEC_YAML, --spec-yaml SPEC_YAML

Path to spec yaml file containing spec to upload

-b BASE_DIR, --base-dir BASE_DIR

Path to root of buildcaches

-e ENDPOINT_URL, --endpoint-url ENDPOINT_URL

URL of mirror


spack upload-s3 index

spack upload-s3 index [-h] [-e ENDPOINT_URL]

Optional arguments

-h, --help

show this help message and exit

-e ENDPOINT_URL, --endpoint-url ENDPOINT_URL

URL of mirror


spack url

debugging tool for url parsing

spack url [-h] SUBCOMMAND ...

More documentation

Optional arguments

-h, --help

show this help message and exit

Subcommands


spack url parse

spack url parse [-hs] url

Positional arguments

url

url to parse

Optional arguments

-h, --help

show this help message and exit

-s, --spider

spider the source page for versions


spack url list

spack url list [-hce] [-n | -N | -v | -V]

Optional arguments

-h, --help

show this help message and exit

-c, --color

color the parsed version and name in the urls shown (versions will be cyan, name red)

-e, --extrapolation

color the versions used for extrapolation as well (additional versions will be green, names magenta)

-n, --incorrect-name

only list urls for which the name was incorrectly parsed

-N, --correct-name

only list urls for which the name was correctly parsed

-v, --incorrect-version

only list urls for which the version was incorrectly parsed

-V, --correct-version

only list urls for which the version was correctly parsed


spack url summary

spack url summary [-h]

Optional arguments

-h, --help

show this help message and exit


spack url stats

spack url stats [-h]

Optional arguments

-h, --help

show this help message and exit


spack use

add package to environment using dotkit

spack use [-hr] ...

Positional arguments

spec

spec of package to use with dotkit

Optional arguments

-h, --help

show this help message and exit

-r, --dependencies

recursively traverse spec dependencies


spack versions

list available versions of a package

spack versions [-hs] PACKAGE

More documentation

Positional arguments

PACKAGE

package to list versions for

Optional arguments

-h, --help

show this help message and exit

-s, --safe-only

only list safe versions of the package


spack view

project packages to a compact naming scheme on the filesystem.

spack view [-hv] [-e EXCLUDE] [-d {true,false,yes,no}] ACTION ...

More documentation

Optional arguments

-h, --help

show this help message and exit

-v, --verbose

If not verbose only warnings/errors will be printed.

-e EXCLUDE, --exclude EXCLUDE

exclude packages with names matching the given regex pattern

-d {true,false,yes,no}, --dependencies {true,false,yes,no}

Link/remove/list dependencies.

Subcommands


spack view remove

spack view remove [-ha] [--no-remove-dependents] path [spec [spec ...]]

Positional arguments

path

path to file system view directory

spec

seed specs of the packages to view

Optional arguments

-h, --help

show this help message and exit

--no-remove-dependents

Do not remove dependents of specified specs.

-a, --all

act on all specs in view


パッケージ一覧

This is a list of things you can install using Spack. It is automatically generated based on the packages in the latest Spack release.

Spack currently has 3217 mainline packages:

abinit multiverso r-blockmodeling
abyss mummer r-bookdown
accfft mumps r-boot
ack munge r-brew
activeharmony muparser r-broom
acts-core muscle r-bsgenome
adept-utils muse r-bumphunter
adios muster r-c50
adios2 mvapich2 r-cairo
adlbx mxml r-callr
adol-c mxnet r-car
aegean mysql r-caret
aida nag r-caroline
albany nalu r-category
albert nalu-wind r-catools
alglib namd r-cdcfluview
allinea-reports nano r-cellranger
allpaths-lg nanoflann r-checkmate
alquimia nanopb r-checkpoint
alsa-lib nasm r-chemometrics
aluminum nauty r-chron
amg ncbi-magicblast r-circlize
amg2013 ncbi-rmblastn r-class
amp ncbi-toolkit r-classint
ampliconnoise nccl r-cli
amrex nccmp r-clipr
amrvis ncdu r-cluster
andi ncftp r-clustergeneration
angsd ncl r-clusterprofiler
ant nco r-cner
antlr ncurses r-coda
ants ncview r-codetools
aoflagger ndiff r-coin
aom nek5000 r-colorspace
ape nekbone r-combinat
aperture-photometry nekcem r-commonmark
apex nektar r-complexheatmap
apple-libunwind nektools r-compositions
applewmproto neovim r-construct
appres nest r-convevol
apr netcdf r-corhmm
apr-util netcdf-cxx r-corpcor
aragorn netcdf-cxx4 r-corrplot
archer netcdf-fortran r-covr
argobots netgauge r-cowplot
argp-standalone netgen r-crayon
argtable netlib-lapack r-crosstalk
arlecore netlib-scalapack r-crul
arm-forge netlib-xblas r-ctc
armadillo nettle r-cubature
arpack-ng neuron r-cubist
arrow nextflow r-curl
ascent nfft r-data-table
asciidoc nghttp2 r-dbi
asciidoctor nginx r-dbplyr
aspa ngmlr r-delayedarray
aspcud ninja r-deldir
aspect ninja-fortran r-dendextend
aspell nix r-deoptim
aspell6-de nlohmann-json r-deoptimr
aspell6-en nlopt r-desc
aspell6-es nmap r-deseq
aspera-cli nnvm r-deseq2
assimp node-js r-desolve
astra notmuch r-devtools
astral npb r-diagrammer
astyle npm r-dicekriging
at-spi2-atk npth r-dichromat
at-spi2-core nseg r-diffusionmap
atk nspr r-digest
atlas ntpoly r-diptest
atom-dft numactl r-dirichletmultinomial
atompaw numdiff r-dismo
atop nut r-diversitree
augustus nvptx-tools r-dnacopy
autoconf nwchem r-do-db
autodock-vina nyancat r-domc
autofact ocaml r-doparallel
autogen occa r-dorng
automaded oce r-dose
automake oclint r-downloader
axel oclock r-dplyr
axl octave r-dt
bamdst octave-optim r-dtw
bamtools octave-splines r-dygraphs
bamutil octave-struct r-dynamictreecut
barrnap octopus r-e1071
bash of-adios-write r-edger
bash-completion of-catalyst r-ellipse
bats of-precice r-emmli
bazel omega-h r-energy
bbcp ompss r-ensembldb
bbmap ompt-openmp r-ergm
bc oniguruma r-evaluate
bcftools ont-albacore r-expint
bcl2fastq2 opa-psm2 r-expm
bdftopcf opam r-factoextra
bdw-gc opari2 r-factominer
bear openbabel r-fansi
beast-tracer openblas r-fastcluster
beast1 opencoarrays r-fastmatch
beast2 opencv r-ff
bedops openexr r-fftwtools
bedtools2 openfast r-fgsea
beforelight openfoam-com r-filehash
benchmark openfoam-org r-findpython
berkeley-db openfst r-fit-models
bertini opengl r-flashclust
bib2xhtml openglu r-flexclust
bigreqsproto openimageio r-flexmix
binutils openjdk r-fnn
bioawk openjpeg r-forcats
biobloom openkim-models r-foreach
biopieces openmc r-forecast
bismark openmpi r-foreign
bison opennurbs r-formatr
bitmap openpa r-formula
blasr openpmd-api r-fpc
blasr-libcpp openscenegraph r-fracdiff
blast-legacy openslide r-futile-logger
blast-plus openspeedshop r-futile-options
blast2go openspeedshop-utils r-gamlss
blat openssh r-gamlss-data
blaze openssl r-gamlss-dist
blis opium r-gbm
bliss optional-lite r-gcrma
blitz opus r-gdalutils
bmake orca r-gdata
bmi orfm r-gdsfmt
bml orthofiller r-geiger
bohrium orthofinder r-genefilter
bolt orthomcl r-genelendatabase
bookleaf-cpp osmctools r-geneplotter
boost osu-micro-benchmarks r-genie3
boostmplcartesianproduct otf r-genomeinfodb
bowtie otf2 r-genomeinfodbdata
bowtie2 p4est r-genomicalignments
boxlib p7zip r-genomicfeatures
bpp-core pacbio-daligner r-genomicranges
bpp-phyl pacbio-damasker r-gensa
bpp-seq pacbio-dazz-db r-geomorph
bpp-suite pacbio-dextractor r-geonames
bracken packmol r-geoquery
braker pacvim r-geor
branson pagit r-geosphere
breakdancer pagmo r-getopt
breseq pal r-getoptlong
bridger paml r-ggally
brigand panda r-ggbio
brotli pandaseq r-ggdendro
bsseeker2 pango r-ggjoy
bucky pangomm r-ggmap
bumpversion papi r-ggplot2
busco papyrus r-ggpubr
butter paradiseo r-ggrepel
bwa parallel r-ggridges
bwtool parallel-netcdf r-ggsci
byobu paraver r-ggvis
bzip2 paraview r-gistr
c-blosc parmetis r-git2r
c-lime parmgridgen r-glimma
cabana parquet r-glmnet
caffe parsimonator r-globaloptions
cairo parsplice r-glue
cairomm partitionfinder r-gmodels
caliper pasta r-gmp
callpath patch r-go-db
camellia patchelf r-googlevis
candle-benchmarks pathfinder r-goplot
cantera pax-utils r-gosemsim
canu pbbam r-goseq
cap3 pbmpi r-gostats
capstone pbsuite r-gplots
cardioid pcma r-graph
cares pcre r-gridbase
casacore pcre2 r-gridextra
cask pdf2svg r-gseabase
casper pdftk r-gss
catalyst pdsh r-gsubfn
catch pdt r-gtable
cbench pegtl r-gtools
cblas pennant r-gtrellis
cbtf percept r-gviz
cbtf-argonavis perl r-haven
cbtf-argonavis-gui perl-algorithm-diff r-hexbin
cbtf-krell perl-app-cmd r-highr
cbtf-lanl perl-array-utils r-hmisc
ccache perl-b-hooks-endofscope r-hms
ccfits perl-bio-perl r-hoardr
cctools perl-bit-vector r-htmltable
cdbfasta perl-cairo r-htmltools
cdd perl-capture-tiny r-htmlwidgets
cddlib perl-carp-clan r-httpcode
cdecimal perl-cgi r-httpuv
cdhit perl-class-data-inheritable r-httr
cdo perl-class-inspector r-hwriter
ceed perl-class-load r-hypergraph
cereal perl-class-load-xs r-ica
ceres-solver perl-clone r-igraph
cfitsio perl-clone-choose r-illuminaio
cgal perl-compress-raw-bzip2 r-impute
cgm perl-compress-raw-zlib r-influencer
cgns perl-config-general r-inline
channelflow perl-contextual-return r-interactivedisplaybase
chapel perl-cpan-meta-check r-ipred
charliecloud perl-data-dumper r-iranges
charmpp perl-data-optlist r-irdisplay
chatterbug perl-data-stag r-irkernel
check perl-dbd-mysql r-irlba
chlorop perl-dbd-sqlite r-isdparser
chombo perl-dbfile r-iso
chrpath perl-dbi r-iterators
circos perl-devel-cycle r-janitor
cistem perl-devel-globaldestruction r-jaspar2018
citcoms perl-devel-overloadinfo r-jomo
cityhash perl-devel-stacktrace r-jpeg
clamr perl-digest-md5 r-jsonlite
clapack perl-dist-checkconflicts r-kegg-db
claw perl-encode-locale r-kegggraph
cleaveland4 perl-eval-closure r-keggrest
cleverleaf perl-exception-class r-kernlab
clfft perl-exporter-tiny r-kernsmooth
clhep perl-extutils-config r-kknn
clingo perl-extutils-depends r-knitr
cln perl-extutils-helpers r-ks
cloc perl-extutils-installpaths r-labeling
cloog perl-extutils-makemaker r-lambda-r
cloverleaf perl-extutils-pkgconfig r-laplacesdemon
cloverleaf3d perl-file-copy-recursive r-lars
clp perl-file-homedir r-lattice
clustalo perl-file-listing r-latticeextra
clustalw perl-file-pushd r-lava
cmake perl-file-sharedir-install r-lazyeval
cmocka perl-file-slurp-tiny r-leaflet
cmor perl-file-slurper r-leaps
cnmem perl-file-which r-learnbayes
cnpy perl-font-ttf r-lhs
cntk perl-gd r-limma
cntk1bitsgd perl-gd-graph r-lme4
cnvnator perl-gd-text r-lmtest
codar-cheetah perl-gdgraph-histogram r-locfit
codes perl-graph r-log4r
coevp perl-graph-readwrite r-loo
cohmm perl-hash-merge r-lpsolve
coinhsl perl-html-parser r-lsei
colm perl-html-tagset r-lubridate
colordiff perl-http-cookies r-magic
comd perl-http-daemon r-magrittr
commons-lang perl-http-date r-makecdfenv
commons-lang3 perl-http-message r-maldiquant
commons-logging perl-http-negotiate r-manipulatewidget
compiz perl-inline r-mapproj
compositeproto perl-inline-c r-maps
conduit perl-intervaltree r-maptools
connect-proxy perl-io-compress r-markdown
constype perl-io-html r-mass
converge perl-io-sessiondata r-matr
coreutils perl-io-socket-ssl r-matrix
corset perl-io-string r-matrixmodels
cosmomc perl-json r-matrixstats
cosp2 perl-libwww-perl r-mclust
cotter perl-list-moreutils r-mcmcglmm
cp2k perl-log-log4perl r-mco
cppad perl-logger-simple r-mda
cppcheck perl-lwp r-memoise
cppgsl perl-lwp-mediatypes r-mergemaid
cpprestsdk perl-lwp-protocol-https r-methodss3
cppunit perl-math-bezier r-mgcv
cppzmq perl-math-cdf r-mgraster
cpu-features perl-math-cephes r-mice
cpuinfo perl-math-matrixreal r-mime
cquery perl-math-round r-minfi
cram perl-math-vecstat r-miniui
cryptopp perl-module-build r-minqa
cscope perl-module-build-tiny r-misc3d
csdp perl-module-implementation r-mitml
ctffind perl-module-runtime r-mixtools
cub perl-module-runtime-conflicts r-mlbench
cube perl-moose r-mlinterfaces
cubelib perl-mozilla-ca r-mlr
cubew perl-mro-compat r-mlrmbo
cuda perl-namespace-clean r-mmwrweek
cuda-memtest perl-net-http r-mnormt
cudnn perl-net-scp-expect r-modelmetrics
cufflinks perl-net-ssleay r-modelr
cups perl-number-format r-modeltools
curl perl-object-insideout r-mpm
cvs perl-package-deprecationmanager r-msnbase
czmq perl-package-stash r-multcomp
dakota perl-package-stash-xs r-multicool
daligner perl-padwalker r-multitaper
damageproto perl-parallel-forkmanager r-multtest
damaris perl-params-util r-munsell
damselfly perl-params-validate r-mvtnorm
darshan-runtime perl-parse-recdescent r-mzid
darshan-util perl-pdf-api2 r-mzr
dash perl-pegex r-nanotime
datamash perl-perl4-corelibs r-ncbit
dataspaces perl-perl6-slurp r-ncdf4
davix perl-perlio-gzip r-network
dbcsr perl-perlio-utf8-strict r-networkd3
dbus perl-readonly r-nleqslv
dcmtk perl-regexp-common r-nlme
dd4hep perl-scalar-list-utils r-nloptr
dealii perl-scalar-util-numeric r-nmf
dealii-parameter-gui perl-set-intspan r-nnet
deconseq-standalone perl-soap-lite r-nnls
dejagnu perl-star-fusion r-nor1mix
delly2 perl-statistics-basic r-nortest
denovogear perl-statistics-descriptive r-np
dftfe perl-statistics-pca r-numderiv
dia perl-sub-exporter r-oligoclasses
dialign-tx perl-sub-exporter-progressive r-oo
diamond perl-sub-identify r-openssl
diffsplice perl-sub-install r-optparse
diffutils perl-sub-name r-org-hs-eg-db
direnv perl-sub-uplevel r-organismdbi
discovar perl-svg r-packrat
discovardenovo perl-swissknife r-pacman
dislin perl-task-weaken r-paleotree
diy perl-term-readkey r-pamr
dlpack perl-test-cleannamespaces r-pan
dmd perl-test-deep r-parallelmap
dmlc-core perl-test-differences r-paramhelpers
dmtcp perl-test-exception r-party
dmxproto perl-test-fatal r-partykit
docbook-xml perl-test-memory-cycle r-pathview
docbook-xsl perl-test-most r-pbapply
dos2unix perl-test-needs r-pbdzmq
dotnet-core-sdk perl-test-requires r-pbkrtest
double-conversion perl-test-requiresinternet r-pcamethods
doxygen perl-test-warn r-pcapp
draco perl-test-warnings r-permute
dri2proto perl-text-csv r-pfam-db
dri3proto perl-text-diff r-phangorn
ds perl-text-format r-phantompeakqualtools
dsdp perl-text-simpletable r-phyloseq
dsrc perl-text-soundex r-phylostratr
dtcmp perl-text-unidecode r-phytools
dyninst perl-time-hires r-picante
dysco perl-time-piece r-pillar
ea-utils perl-try-tiny r-pkgbuild
easybuild perl-uri r-pkgconfig
ebms perl-uri-escape r-pkgload
eccodes perl-version r-pkgmaker
ecflow perl-want r-plogr
eclipse-gcj-parser perl-www-robotrules r-plot3d
ecp-io-sdk perl-xml-parser r-plotly
ecp-proxy-apps perl-xml-parser-lite r-plotrix
ecp-viz-sdk perl-xml-simple r-pls
ed perl-yaml r-plyr
editline perl-yaml-libyaml r-pmcmr
editres petsc r-png
eigen pexsi r-popgenome
elasticsearch pfft r-popvar
elemental pflotran r-powerlaw
elfutils pfunit r-prabclus
elk pgdspider r-praise
elmer-fem pgi r-preprocesscore
elpa pgmath r-prettyunits
elsd phantompeakqualtools r-processx
elsdc phast r-prodlim
emacs phasta r-progress
ember phist r-protgenerics
emboss phrap-crossmatch-swat r-proto
encodings phred r-proxy
energyplus phylip r-pryr
entrezdirect phyluce r-ps
environment-modules picard r-psych
eospac picsar r-ptw
eqr picsarlite r-purrr
er pidx r-qtl
erfa pigz r-quadprog
erne pilon r-quantmod
es pindel r-quantreg
esmf piranha r-quantro
essl pism r-qvalue
ethminer pixman r-r6
etsf-io pkg-config r-randomfields
everytrace pkgconf r-randomfieldsutils
everytrace-example planck-likelihood r-randomforest
evieext plasma r-ranger
exabayes platypus r-rappdirs
examinimd plink r-raster
exampm plplot r-rbgl
exasp2 plumed r-rbokeh
exchanger pmdk r-rcolorbrewer
exmcutils pmgr-collective r-rcpp
exodusii pmix r-rcpparmadillo
exonerate pnfft r-rcppblaze
expat pngwriter r-rcppcctz
expect pnmpi r-rcppcnpy
express poamsa r-rcppeigen
extrae pocl r-rcppprogress
exuberant-ctags polymake r-rcurl
eztrace poppler r-rda
f18 poppler-data r-readr
f90cache porta r-readxl
fabtests portage r-registry
falcon portcullis r-rematch
faodel postgresql r-reordercluster
fast-global-file-status ppl r-reportingtools
fasta pplacer r-repr
fastjar prank r-reprex
fastmath precice r-reshape
fastme presentproto r-reshape2
fastphase preseq r-rex
fastq-screen price r-rgdal
fastqc primer3 r-rgenoud
fastqvalidator prinseq-lite r-rgeos
fasttree printproto r-rgl
fastx-toolkit prng r-rgooglemaps
fenics probconsrna r-rgraphviz
fermi prodigal r-rhdf5
fermikit proj r-rhmmer
fermisciencetools protobuf r-rhtslib
ferret proxymngr r-rinside
ffmpeg pruners-ninja r-rjags
fftw ps-lite r-rjava
figtree psi4 r-rjson
fimpute pslib r-rjsonio
findutils psm r-rlang
fio psmc r-rmarkdown
fish pstreams r-rminer
fixesproto pugixml r-rmpfr
flac pumi r-rmpi
flang pv r-rmysql
flann pvm r-rngtools
flash pxz r-rnoaa
flatbuffers py-3to2 r-robust
flatcc py-4suite-xml r-robustbase
flecsale py-abipy r-rocr
flecsi py-adios r-rodbc
flex py-advancedhtmlparser r-rots
flint py-affine r-roxygen2
flit py-alabaster r-rpart
fltk py-alembic r-rpart-plot
flux-core py-apache-libcloud r-rpostgresql
flux-sched py-apipkg r-rprojroot
fluxbox py-appdirs r-rrblup
fmt py-appnope r-rrcov
foam-extend py-apscheduler r-rrpp
folly py-argcomplete r-rsamtools
font-adobe-100dpi py-argparse r-rsnns
font-adobe-75dpi py-ase r-rsolnp
font-adobe-utopia-100dpi py-asn1crypto r-rsqlite
font-adobe-utopia-75dpi py-astroid r-rstan
font-adobe-utopia-type1 py-astropy r-rstantools
font-alias py-async-generator r-rstudioapi
font-arabic-misc py-atomicwrites r-rtracklayer
font-bh-100dpi py-attrs r-rtsne
font-bh-75dpi py-autopep8 r-runit
font-bh-lucidatypewriter-100dpi py-avro r-rvcheck
font-bh-lucidatypewriter-75dpi py-avro-json-serializer r-rvest
font-bh-ttf py-babel r-rzmq
font-bh-type1 py-backcall r-s4vectors
font-bitstream-100dpi py-backports-abc r-samr
font-bitstream-75dpi py-backports-functools-lru-cache r-sandwich
font-bitstream-speedo py-backports-shutil-get-terminal-size r-scales
font-bitstream-type1 py-backports-ssl-match-hostname r-scatterplot3d
font-cronyx-cyrillic py-basemap r-sdmtools
font-cursor-misc py-bcbio-gff r-segmented
font-daewoo-misc py-beautifulsoup4 r-selectr
font-dec-misc py-binwalk r-seqinr
font-ibm-type1 py-biom-format r-seqlogo
font-isas-misc py-biomine r-seurat
font-jis-misc py-biopython r-sf
font-micro-misc py-bitarray r-sfsmisc
font-misc-cyrillic py-bitstring r-shape
font-misc-ethiopic py-black r-shiny
font-misc-meltho py-bleach r-shinydashboard
font-misc-misc py-blessings r-shortread
font-mutt-misc py-bokeh r-siggenes
font-schumacher-misc py-boltons r-simpleaffy
font-screen-cyrillic py-bottleneck r-sm
font-sony-misc py-breakseq2 r-smoof
font-sun-misc py-breathe r-sn
font-util py-brian r-snow
font-winitzki-cyrillic py-brian2 r-snowfall
font-xfree86-type1 py-bsddb3 r-snprelate
fontcacheproto py-bx-python r-som
fontconfig py-cartopy r-somaticsignatures
fontsproto py-cclib r-sourcetools
fonttosfnt py-cdat-lite r-sp
fp16 py-cdo r-sparsem
fpc py-certifi r-spatial
fqtrim py-cffi r-spdep
fr-hit py-cftime r-speedglm
freebayes py-chardet r-spem
freeglut py-checkm-genome r-splancs
freetype py-cheetah r-splitstackshape
freexl py-click r-sqldf
fseq py-click-plugins r-squash
fsl py-cligj r-sseq
fslsfonts py-cloudpickle r-stanheaders
fstobdf py-cogent r-statmod
fstrack py-colorama r-statnet-common
ftgl py-colormath r-stringi
funhpc py-configparser r-stringr
fyba py-counter r-strucchange
fzf py-coverage r-subplex
g4abla py-cpuinfo r-summarizedexperiment
g4emlow py-crispresso r-survey
g4ensdfstate py-crossmap r-survival
g4ndl py-cryptography r-sva
g4neutronxs py-csvkit r-tarifx
g4photonevaporation py-current r-taxizedb
g4pii py-cutadapt r-tclust
g4radioactivedecay py-cvxopt r-tensora
g4realsurface py-cycler r-testit
g4saiddata py-cython r-testthat
g4tendl py-dask r-tfbstools
gapbs py-dateutil r-tfmpvalue
gapcloser py-dbf r-th-data
gapfiller py-decorator r-threejs
gasnet py-deeptools r-tibble
gatk py-dendropy r-tidycensus
gaudi py-descartes r-tidyr
gaussian py-dill r-tidyselect
gawk py-discover r-tidyverse
gblocks py-dlcpar r-tiff
gcc py-docopt r-tigris
gccmakedep py-docutils r-timedate
gccxml py-doxypy r-tmixclust
gconf py-doxypypy r-topgo
gcta py-dryscrape r-triebeard
gdal py-dxchange r-trimcluster
gdb py-dxfile r-truncnorm
gdbm py-easybuild-easyblocks r-trust
gdk-pixbuf py-easybuild-easyconfigs r-tseries
gdl py-easybuild-framework r-tsne
geant4 py-edffile r-ttr
geant4-data py-editdistance r-udunits2
gearshifft py-elasticsearch r-units
gemmlowp py-elephant r-urltools
genemark-et py-emcee r-utf8
genomefinisher py-entrypoints r-utils
genometools py-enum34 r-uuid
geopm py-epydoc r-variantannotation
geos py-espresso r-varselrf
gettext py-espressopp r-vcd
gflags py-et-xmlfile r-vegan
ghost py-eventlet r-vfs
ghostscript py-execnet r-vgam
ghostscript-fonts py-fastaindex r-vipor
giflib py-fasteners r-viridis
ginkgo py-faststructure r-viridislite
git py-filelock r-visnetwork
git-fat-git py-fiona r-vsn
git-imerge py-fiscalyear r-webshot
git-lfs py-flake8 r-wgcna
gl2ps py-flake8-polyfill r-whisker
glew py-flask r-withr
glfmultiples py-flask-compress r-xde
glib py-flask-socketio r-xgboost
glibmm py-flexx r-xlconnect
glimmer py-fn r-xlconnectjars
glm py-fparser r-xlsx
global py-funcsigs r-xlsxjars
globalarrays py-functools32 r-xmapbridge
globus-toolkit py-future r-xml
glog py-futures r-xml2
gloo py-fypp r-xnomial
glpk py-gdbgui r-xtable
glproto py-genders r-xts
glvis py-genshi r-xvector
gmake py-geopandas r-yaml
gmap-gsnap py-gevent r-yapsa
gmime py-git-review r-yaqcaffy
gmodel py-git2 r-yarn
gmp py-gnuplot r-zlibbioc
gmsh py-goatools r-zoo
gmt py-gpaw r3d
gmtsar py-graphviz racon
gnat py-greenlet raft
gnu-prolog py-griddataformats ragel
gnupg py-guidata raja
gnuplot py-guiqwt randfold
gnutls py-h5glance random123
go py-h5py randrproto
go-bootstrap py-hdfs range-v3
gobject-introspection py-hepdata-validator rankstr
googletest py-hpccm rapidjson
gotcha py-html2text ravel
gource py-html5lib raxml
gperf py-htseq ray
gperftools py-httpbin rclone
gpgme py-hypothesis rdma-core
gplates py-idna rdp-classifier
grackle py-igraph re2c
gradle py-illumina-utils readfq
grandr py-imageio readline
graph500 py-imagesize recon
graphicsmagick py-iminuit recordproto
graphlib py-importlib redis
graphmap py-invoke redset
graphviz py-ipaddress redundans
grass py-ipdb regcm
grib-api py-ipykernel relax
grnboost py-ipython relion
groff py-ipython-genutils rempi
gromacs py-ipywidgets rename
gsl py-isort rendercheck
gslib py-itsdangerous renderproto
gtkmm py-jdcal repeatmasker
gtkorvo-atl py-jedi repeatmodeler
gtkorvo-cercs-env py-jinja2 repeatscout
gtkorvo-dill py-joblib resourceproto
gtkorvo-enet py-jprops revbayes
gtkplus py-jpype rgb
gts py-jsonschema rhash
guidance py-junit-xml rlwrap
guile py-jupyter-client rmats
gurobi py-jupyter-console rmlab
h5hut py-jupyter-core rna-seqc
h5part py-jupyter-notebook rngstreams
h5utils py-jupyterhub rocksdb
h5z-zfp py-keras rockstar
hacckernels py-keras-applications root
hadoop py-keras-preprocessing rose
halc py-kiwisolver ross
hapcut2 py-kmodes routino
hapdip py-lark-parser rpcsvc-proto
haploview py-latexcodec rr
harfbuzz py-lazy rsbench
harminv py-lazy-object-proxy rsem
hc py-lazy-property rstart
hdf py-lazyarray rsync
hdf5 py-libconf rtags
hdf5-blosc py-libensemble rtax
help2man py-line-profiler ruby
henson py-linecache2 ruby-gnuplot
hepmc py-lit ruby-narray
heppdt py-llvmlite ruby-ronn
hic-pro py-lmfit ruby-rubyinline
highfive py-localcider ruby-svn2git
highwayhash py-locket ruby-terminal-table
hiop py-lockfile rust
hisat2 py-logilab-common rust-bindgen
hisea py-lrudict sabre
hmmer py-luigi saga-gis
homer py-lxml sailfish
hoomd-blue py-lzstring salmon
hpccg py-m2r sambamba
hpctoolkit py-macholib samblaster
hpcviewer py-machotools samrai
hpgmg py-macs2 samtools
hpl py-maestrowf sandbox
hpx py-mako sas
hpx5 py-mappy satsuma2
hsakmt py-markdown savanna
hstr py-markupsafe saws
htop py-matplotlib sbt
htslib py-mccabe scala
httpie py-mdanalysis scalasca
hub py-meep scallop
hugo py-memory-profiler scalpel
hunspell py-merlin scan-for-matches
hwloc py-metasv scons
hybpiper py-methylcode scorec-core
hydra py-mg-rast-tools scorep
hydrogen py-misopy scotch
hyphy py-mistune scr
hypre py-mock screen
i3 py-modred scripts
ibm-java py-moltemplate scrnsaverproto
ibmisc py-mongo sctk
iceauth py-monotonic sdl2
icedtea py-monty sdl2-image
icet py-more-itertools sdsl-lite
ico py-mpi4py seacas
icu4c py-mpmath sed
id3lib py-multiprocess sentieon-genomics
idba py-multiqc seqan
igraph py-munch seqprep
igvtools py-mx seqtk
ilmbase py-mxnet serf
image-magick py-myhdl sessreg
imake py-mysql-connector setxkbmap
imp py-mysqldb1 sga
impute2 py-natsort shapeit
infernal py-nbconvert shared-mime-info
inputproto py-nbformat shiny-server
intel py-neo shocklibs
intel-daal py-nestle shoremap
intel-gpu-tools py-netcdf4 shortbred
intel-ipp py-netifaces shortstack
intel-mkl py-networkx showfont
intel-mkl-dnn py-nose shuffile
intel-mpi py-nosexcover sickle
intel-parallel-studio py-numba siesta
intel-pin py-numexpr signalp
intel-tbb py-numexpr3 signify
intel-xed py-numpy silo
intltool py-numpydoc simgrid
ior py-olefile simplemoc
iozone py-onnx simul
iperf2 py-ont-fast5-api simulationio
iperf3 py-openpmd-validator singularity
ipopt py-openpyxl singularity-legacy
isaac py-openslide-python sirius
isaac-server py-opentuner skilion-onedrive
isl py-ordereddict sl
itstool py-oset slate
itsx py-owslib sleef
jackcess py-packaging slepc
jags py-palettable slurm
jansson py-pandas smalt
jasper py-paramiko smof
jbigkit py-partd smproxy
jchronoss py-pathlib2 snakemake
jdk py-pathos snap
jellyfish py-pathspec snap-berkeley
jemalloc py-patsy snap-korf
jmol py-pauvre snappy
jq py-pbr snbone
json-c py-pep8-naming sniffles
json-cwx py-perf snpeff
json-fortran py-performance snphylo
json-glib py-periodictable snptest
jsoncpp py-petsc4py soap2
judy py-pexpect soapdenovo-trans
julia py-phonopy soapdenovo2
k8 py-pickleshare soapindel
kahip py-picrust soapsnp
kaiju py-pil sofa-c
kaks-calculator py-pillow somatic-sniper
kaldi py-pint sortmerna
kallisto py-pip sosflow
karma py-pipits sowing
kbproto py-pkgconfig sox
kdiff3 py-plotly spades
kealib py-pluggy span-lite
kentutils py-ply spark
kibana py-pmw sparsehash
kim-api py-poster sparta
kitty py-pox spdlog
kmergenie py-ppft spectrum-mpi
kokkos py-prettytable speex
kraken py-progress spglib
krb5 py-progressbar2 sph2pipe
krims py-projectq spherepack
kripke py-prometheus-client spindle
kvasir-mpl py-prompt-toolkit spm
kvtree py-protobuf spot
ladot py-psutil sqlite
laghos py-psyclone sqlitebrowser
lammps py-psycopg2 squashfs
last py-ptyprocess squid
lastz py-pudb sra-toolkit
latte py-py ssht
launchmon py-py2bit sspace-longread
lazyten py-py2cairo sspace-standard
lbann py-py2neo sst-core
lbxproxy py-py4j sst-dumpi
lbzip2 py-pyani sst-macro
lcals py-pyarrow stacks
lcms py-pyasn1 staden-io-lib
ldc py-pybedtools star
ldc-bootstrap py-pybigwig star-ccm-plus
legion py-pybind11 startup-notification
lemon py-pybtex stat
leveldb py-pybtex-docutils stata
lftp py-pycairo stc
libaec py-pycares steps
libaio py-pychecker stow
libapplewm py-pycodestyle strace
libarchive py-pycparser stream
libassuan py-pycrypto strelka
libatomic-ops py-pycurl stress
libbeagle py-pydatalog string-view-lite
libbeato py-pydispatcher stringtie
libbsd py-pydot structure
libbson py-pydv strumpack
libcanberra py-pyelftools sublime-text
libcap py-pyepsg subread
libceed py-pyfaidx subversion
libcerf py-pyfasta suite-sparse
libcheck py-pyfftw sumaclust
libcint py-pyflakes sundials
libcircle py-pygdbmi superlu
libconfig py-pygments superlu-dist
libcroco py-pygobject superlu-mt
libctl py-pygpu supernova
libdivsufsort py-pygresql sw4lite
libdmx py-pygtk swap-assembler
libdrm py-pylint swarm
libdwarf py-pymatgen swfft
libeatmydata py-pyminifier swiftsim
libedit py-pymol swig
libelf py-pympler symengine
libemos py-pymysql sympol
libepoxy py-pynio sz
libev py-pynn tabix
libevent py-pyodbc talass
libevpath py-pypar talloc
libfabric py-pyparsing tantan
libffi py-pypeflow tar
libffs py-pyprof2html targetp
libfontenc py-pyproj task
libfs py-pyqi taskd
libgcrypt py-pyqt tasmanian
libgd py-pyrad tassel
libgeotiff py-pyrosar tau
libgit2 py-pysam tcl
libgpg-error py-pyscaf tcl-itcl
libgpuarray py-pyserial tcl-tcllib
libgridxc py-pyshp tcl-tclxml
libgtextutils py-pyside tclap
libharu py-pysocks tcoffee
libhio py-pyspark tcptrace
libiberty py-pysqlite tcsh
libice py-pytables tealeaf
libiconv py-pytest templight
libidn2 py-pytest-cov templight-tools
libint py-pytest-flake8 tetgen
libjpeg py-pytest-httpbin tethex
libjpeg-turbo py-pytest-mock texinfo
libksba py-pytest-runner texlive
liblbxutil py-pytest-xdist tfel
liblockfile py-pythia the-platinum-searcher
libmatheval py-python-daemon the-silver-searcher
libmaxminddb py-python-engineio thornado-mini
libmesh py-python-gitlab thrift
libmng py-python-htmlgen thrust
libmongoc py-python-levenshtein tig
libmonitor py-python-socketio time
libnbc py-python-utils tinyxml
libnl py-pythonqwt tinyxml2
libnova py-pytorch tioga
libnsl py-pytz tk
libogg py-pyutilib tldd
liboldx py-pyvcf tmalign
libpcap py-pywavelets tmhmm
libpciaccess py-pyyaml tmux
libpfm4 py-qtawesome tmuxinator
libpipeline py-qtconsole tophat
libplist py-qtpy tppred
libpmemobj-cpp py-quantities tracer
libpng py-quast transabyss
libpsl py-queryablelist transdecoder
libpthread-stubs py-radical-utils transposome
libquo py-ranger transset
librom py-rasterio trapproto
libseccomp py-readme-renderer tree
libsharp py-regex treesub
libshm py-reportlab trf
libsigcpp py-requests triangle
libsigsegv py-requests-toolbelt trilinos
libsm py-restview trilinos-catalyst-ioss-adapter
libsodium py-rope trimal
libspatialindex py-rpy2 trimgalore
libspatialite py-rsa trimmomatic
libsplash py-rseqc trinity
libssh py-rtree trinotate
libssh2 py-saga-python trnascan-se
libsvm py-scandir turbine
libszip py-scientificpython turbomole
libtasn1 py-scikit-image tut
libtermkey py-scikit-learn twm
libtiff py-scikit-optimize tycho2
libtirpc py-scipy typhon
libtool py-scoop typhonio
libunistring py-seaborn uberftp
libunwind py-send2trash ucx
libusb py-setuptools udunits2
libusbmuxd py-setuptools-git ufo-core
libuuid py-setuptools-scm ufo-filters
libuv py-sfepy umpire
libvdwxc py-sh unblur
libvorbis py-shapely uncrustify
libvterm py-shiboken unibilium
libwebsockets py-simplegeneric unifycr
libwindowswm py-simplejson unison
libx11 py-singledispatch units
libxau py-sip unixodbc
libxaw py-six unuran
libxaw3d py-slepc4py unzip
libxc py-slurm-pipeline usearch
libxcb py-sncosmo util-linux
libxcomposite py-snowballstemmer util-macros
libxcursor py-snuggs uuid
libxdamage py-spatialist uvw
libxdmcp py-spectra valgrind
libxevie py-spefile vampirtrace
libxext py-spglib vardictjava
libxfixes py-sphinx varscan
libxfont py-sphinx-bootstrap-theme vc
libxfont2 py-sphinx-rtd-theme vcftools
libxfontcache py-sphinxautomodapi vcsh
libxft py-sphinxcontrib-bibtex vdt
libxi py-sphinxcontrib-programoutput vecgeom
libxinerama py-sphinxcontrib-websupport veclibfort
libxkbcommon py-spyder vegas2
libxkbfile py-spykeutils veloc
libxkbui py-sqlalchemy velvet
libxml2 py-statsmodels verilator
libxmu py-stevedore verrou
libxp py-storm videoproto
libxpm py-subprocess32 viennarna
libxpresent py-symengine viewres
libxprintapputil py-symfit vigra
libxprintutil py-sympy vim
libxrandr py-tabulate virtualgl
libxrender py-tappy visit
libxres py-tblib vizglow
libxscrnsaver py-terminado vmatch
libxshmfence py-testinfra voropp
libxslt py-tetoolkit votca-csg
libxsmm py-texttable votca-ctp
libxstream py-theano votca-tools
libxt py-tifffile votca-xtp
libxtrap py-toml vpfft
libxtst py-tomopy vpic
libxv py-toolz vsearch
libxvmc py-tornado vt
libxxf86dga py-tqdm vtk
libxxf86misc py-traceback2 vtkh
libxxf86vm py-traitlets vtkm
libyaml py-treehash wannier90
libyogrt py-tuiview warpx
libzip py-twisted wcslib
lighttpd py-typing wget
likwid py-typing-extensions wgsim
linkphase3 py-tzlocal windowswmproto
linux-headers py-udunits wireshark
listres py-umi-tools wordnet
llvm py-unicycler workrave
llvm-openmp-ompt py-unittest2 wt
lm-sensors py-unittest2py3k wtdbg2
lmdb py-urllib3 wx
lmod py-urwid wxpropgrid
lndir py-vcversioner x11perf
log4cplus py-virtualenv xapian-core
log4cxx py-virtualenv-clone xauth
loki py-virtualenvwrapper xbacklight
lordec py-vsc-base xbiff
lrslib py-vsc-install xbitmaps
lrzip py-wcsaxes xbraid
lsof py-wcwidth xcalc
ltrace py-webencodings xcb-demo
lua py-webkit-server xcb-proto
lua-bitlib py-weblogo xcb-util
lua-jit py-werkzeug xcb-util-cursor
lua-lpeg py-whatshap xcb-util-errors
lua-luafilesystem py-wheel xcb-util-image
lua-luaposix py-widgetsnbextension xcb-util-keysyms
lua-mpack py-wrapt xcb-util-renderutil
luit py-xarray xcb-util-wm
lulesh py-xattr xcb-util-xrm
lumpy-sv py-xdot xclip
lwgrp py-xenv xclipboard
lwm2 py-xlrd xclock
lz4 py-xlsxwriter xcmiscproto
lzma py-xmlrunner xcmsdb
lzo py-xopen xcompmgr
m4 py-xpyb xconsole
macsio py-xvfbwrapper xcursor-themes
mad-numdiff py-yamlreader xcursorgen
mafft py-yapf xdbedizzy
magics py-yt xditview
magma py-ytopt xdm
makedepend py-zmq xdpyinfo
mallocmc py-zope-event xdriinfo
man-db py-zope-interface xedit
manta pythia6 xerces-c
mapserver python xeus
maq qbank xev
margo qbox xextproto
mariadb qca xeyes
mariadb-c-client qhull xf86bigfontproto
masa qjson xf86dga
masurca qmcpack xf86dgaproto
matio qmd-progress xf86driproto
matlab qorts xf86miscproto
maven qrupdate xf86rushproto
maverick qt xf86vidmodeproto
mawk qt-creator xfd
mbedtls qtgraph xfindproxy
mc qthreads xfontsel
mcl quantum-espresso xfs
mdtest quinoa xfsinfo
med qwt xfwp
meep r xgamma
mefit r-a4 xgboost
megadock r-a4base xgc
megahit r-a4classif xhmm
memaxes r-a4core xhost
meme r-a4preproc xineramaproto
memkind r-a4reporting xinit
memsurfer r-abadata xinput
meraculous r-abaenrichment xios
mercurial r-abind xkbcomp
mercury r-absseq xkbdata
mesa r-acde xkbevd
mesa-glu r-acepack xkbprint
meshkit r-acgh xkbutils
meson r-acme xkeyboard-config
mesquite r-ada xkill
metabat r-adabag xload
metaphysicl r-ade4 xlogo
metis r-adegenet xlsatoms
mfem r-adsplit xlsclients
mgis r-aer xlsfonts
microbiomeutil r-affxparser xmag
migrate r-affy xman
minced r-affycomp xmessage
mindthegap r-affycompatible xmh
miniaero r-affycontam xmlf90
miniamr r-affycoretools xmlto
miniasm r-affydata xmodmap
miniconda2 r-affyexpress xmore
miniconda3 r-affyilm xorg-cf-files
minife r-affyio xorg-docs
minighost r-affypdnn xorg-gtest
minigmg r-affyplm xorg-server
minimap2 r-affyqcreport xorg-sgml-doctools
minimd r-affyrnadegradation xphelloworld
miniqmc r-agdex xplor-nih
minisign r-agilp xplsprinters
minismac2d r-agimicrorna xpr
minitri r-aims xprehashprinterlist
minivite r-aldex2 xprop
minixyce r-allelicimbalance xproto
minuit r-alpine xproxymanagementprotocol
mira r-als xqilla
mirdeep2 r-alsace xrandr
mitofates r-altcdfenvs xrdb
mitos r-amap xrefresh
mixcr r-ampliqueso xrootd
mkfontdir r-analysispageserver xrx
mkfontscale r-anaquin xsbench
mlhka r-aneufinder xscope
mmg r-aneufinderdata xsd
moab r-animation xsdk
modern-wheel r-annaffy xsdktrilinos
mofem-cephas r-annotate xset
mofem-fracture-module r-annotationdbi xsetmode
mofem-minimal-surface-equation r-annotationfilter xsetpointer
mofem-users-modules r-annotationforge xsetroot
molcas r-annotationhub xsimd
mongo-cxx-driver r-ape xsm
mono r-argparse xstdcmap
mosh r-assertthat xtensor
mothur r-backports xtensor-python
motif r-bamsignals xterm
motioncor2 r-base64 xtl
mount-point-attributes r-base64enc xtrans
mozjs r-bayesm xtrap
mpark-variant r-bbmisc xts
mpc r-beanplot xvidtune
mpdecimal r-bfast xvinfo
mpe2 r-bfastspatial xwd
mpest r-bglr xwininfo
mpfr r-bh xwud
mpibash r-biasedurn xxhash
mpiblast r-bibtex xz
mpich r-bindr yajl
mpifileutils r-bindrcpp yambo
mpilander r-biobase yaml-cpp
mpileaks r-biocgenerics yara
mpip r-biocinstaller yasm
mpir r-biocparallel yorick
mpix-launch-swift r-biocstyle z3
mrbayes r-biom-utils zeromq
mrnet r-biomart zfp
mrtrix3 r-biomformat zip
mscgen r-biostrings zlib
msgpack-c r-biovizbase zoltan
mshadow r-bit zsh
msmc r-bit64 zstd
multitail r-bitops None
multitime r-blob None

abinit

Homepage:
Spack package:
Versions:
8.8.2, 8.6.3, 8.2.2, 8.0.8b
Build Dependencies:
blas, lapack, mpi, scalapack, fftw, netcdf-fortran, hdf5, libxc
Link Dependencies:
blas, lapack, mpi, scalapack, fftw, netcdf-fortran, hdf5, libxc
Description:
ABINIT is a package whose main program allows one to find the total energy, charge density and electronic structure of systems made of electrons and nuclei (molecules and periodic solids) within Density Functional Theory (DFT), using pseudopotentials and a planewave or wavelet basis. ABINIT also includes options to optimize the geometry according to the DFT forces and stresses, or to perform molecular dynamics simulations using these forces, or to generate dynamical matrices, Born effective charges, and dielectric tensors, based on Density-Functional Perturbation Theory, and many more properties. Excited states can be computed within the Many-Body Perturbation Theory (the GW approximation and the Bethe-Salpeter equation), and Time- Dependent Density Functional Theory (for molecules). In addition to the main ABINIT code, different utility programs are provided.

abyss

Homepage:
Spack package:
Versions:
2.1.4, 2.0.2, 1.5.2
Build Dependencies:
autoconf, automake, mpi, boost, sparsehash, sqlite, libtool
Link Dependencies:
mpi, boost, sparsehash, sqlite, libtool
Run Dependencies:
bwa
Description:
ABySS is a de novo, parallel, paired-end sequence assembler that is designed for short reads. The single-processor version is useful for assembling genomes up to 100 Mbases in size.

accfft

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cuda, cmake, fftw, parallel-netcdf
Link Dependencies:
cuda, fftw, parallel-netcdf
Description:
AccFFT extends existing FFT libraries for CUDA-enabled Graphics Processing Units (GPUs) to distributed memory clusters

ack

Homepage:
Spack package:
Versions:
2.22, 2.18, 2.16, 2.14
Build Dependencies:
perl
Link Dependencies:
perl
Description:
ack 2.14 is a tool like grep, optimized for programmers. Designed for programmers with large heterogeneous trees of source code, ack is written purely in portable Perl 5 and takes advantage of the power of Perl's regular expressions.

activeharmony

Homepage:
Spack package:
Versions:
4.5
Description:
Active Harmony: a framework for auto-tuning (the automated search for values to improve the performance of a target application).

acts-core

Homepage:
Spack package:
Versions:
develop, 0.8.2, 0.8.1, 0.8.0
Build Dependencies:
cmake, boost, eigen, root, dd4hep
Link Dependencies:
boost, root, dd4hep
Description:
A Common Tracking Software (ACTS) This project contains an experiment- independent set of track reconstruction tools. The main philosophy is to provide high-level track reconstruction modules that can be used for any tracking detector. The description of the tracking detector's geometry is optimized for efficient navigation and quick extrapolation of tracks. Converters for several common geometry description languages exist. Having a highly performant, yet largely customizable implementation of track reconstruction algorithms was a primary objective for the design of this toolset. Additionally, the applicability to real-life HEP experiments plays major role in the development process. Apart from algorithmic code, this project also provides an event data model for the description of track parameters and measurements. Key features of this project include: tracking geometry description which can be constructed from TGeo, DD4Hep, or GDML input, simple and efficient event data model, performant and highly flexible algorithms for track propagation and fitting, basic seed finding algorithms.

adept-utils

Homepage:
Spack package:
Versions:
1.0.1, 1.0
Build Dependencies:
cmake, boost, mpi
Link Dependencies:
boost, mpi
Description:
Utility libraries for LLNL performance tools.

adios

Homepage:
Spack package:
Versions:
develop, 1.13.1, 1.13.0, 1.12.0, 1.11.1, 1.11.0, 1.10.0, 1.9.0
Build Dependencies:
autoconf, automake, m4, libtool, python, mpi, zlib, bzip2, szip, sz, zfp, lz4, c-blosc, hdf5, netcdf, libevpath, dataspaces
Link Dependencies:
mpi, zlib, bzip2, szip, sz, zfp, lz4, c-blosc, hdf5, netcdf, libevpath, dataspaces
Description:
The Adaptable IO System (ADIOS) provides a simple, flexible way for scientists to describe the data in their code that may need to be written, read, or processed outside of the running simulation.

adios2

Homepage:
Spack package:
Versions:
develop, 2.3.1, 2.2.0, 2.1.0, 2.0.0
Build Dependencies:
cmake, pkgconfig, mpi, zeromq, hdf5, adios, bzip2, zfp, python, py-numpy, py-mpi4py
Link Dependencies:
mpi, zeromq, hdf5, adios, bzip2, zfp, python
Run Dependencies:
python, py-numpy, py-mpi4py
Description:
Next generation of ADIOS developed in the Exascale Computing Program

adlbx

Homepage:
Spack package:
Versions:
0.9.1, 0.8.0
Build Dependencies:
exmcutils, mpi
Link Dependencies:
exmcutils, mpi
Description:
ADLB/X: Master-worker library + work stealing and data dependencies

adol-c

Homepage:
Spack package:
Versions:
develop, 2.6.3, 2.6.2, 2.6.1, 2.5.2
Build Dependencies:
automake, autoconf, libtool, m4, boost
Link Dependencies:
boost
Description:
A package for the automatic differentiation of first and higher derivatives of vector functions in C and C++ programs by operator overloading.

aegean

Homepage:
Spack package:
Versions:
0.15.2
Build Dependencies:
genometools
Link Dependencies:
genometools
Description:
The AEGeAn Toolkit is designed for the Analysis and Evaluation of Genome Annotations. The toolkit includes a variety of analysis programs as well as a C library whose API provides access to AEGeAn's core functions and data structures.

aida

Homepage:
Spack package:
Versions:
3.2.1
Description:
Abstract Interfaces for Data Analysis

albany

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpi, trilinos
Link Dependencies:
mpi, trilinos
Description:
Albany is an implicit, unstructured grid, finite element code for the solution and analysis of multiphysics problems. The Albany repository on the GitHub site contains hundreds of regression tests and examples that demonstrate the code's capabilities on a wide variety of problems including fluid mechanics, solid mechanics (elasticity and plasticity), ice-sheet flow, quantum device modeling, and many other applications.

albert

Homepage:
Spack package:
Versions:
4.0a_opt4
Build Dependencies:
readline
Link Dependencies:
readline
Description:
Albert is an interactive program to assist the specialist in the study of nonassociative algebra.

alglib

Homepage:
Spack package:
Versions:
3.11.0
Description:
ALGLIB is a cross-platform numerical analysis and data processing library.

allinea-reports

Homepage:
Spack package:
Versions:
6.0.4
Description:
Allinea Performance Reports are the most effective way to characterize and understand the performance of HPC application runs. One single-page HTML report elegantly answers a range of vital questions for any HPC site

allpaths-lg

Homepage:
Spack package:
Versions:
52488
Description:
ALLPATHS-LG is our original short read assembler and it works on both small and large (mammalian size) genomes.

alquimia

Homepage:
Spack package:
Versions:
develop, xsdk-0.4.0, xsdk-0.3.0, xsdk-0.2.0
Build Dependencies:
cmake, mpi, hdf5, pflotran, petsc
Link Dependencies:
mpi, hdf5, pflotran, petsc
Description:
Alquimia is an interface that exposes the capabilities of mature geochemistry codes such as CrunchFlow and PFLOTRAN

alsa-lib

Homepage:
Spack package:
Versions:
1.1.4.1
Description:
The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI functionality to the Linux operating system. alsa-lib contains the user space library that developers compile ALSA applications against.

aluminum

Homepage:
Spack package:
Versions:
master, 0.2.1, 0.2, 0.1
Build Dependencies:
cmake, cuda, mpi, nccl, hwloc, ninja
Link Dependencies:
cuda, mpi, nccl, hwloc
Description:
Aluminum provides a generic interface to high-performance communication libraries, with a focus on allreduce algorithms. Blocking and non- blocking algorithms and GPU-aware algorithms are supported. Aluminum also contains custom implementations of select algorithms to optimize for certain situations.

amg

Homepage:
Spack package:
Versions:
develop, 1.2, 1.1, 1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
AMG is a parallel algebraic multigrid solver for linear systems arising from problems on unstructured grids. The driver provided with AMG builds linear systems for various 3-dimensional problems.

amg2013

Homepage:
Spack package:
Versions:
master
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
AMG2013 is a parallel algebraic multigrid solver for linear systems arising from problems on unstructured grids. It has been derived directly from the BoomerAMG solver in the hypre library, a large linear solver library that is being developed in the Center for Applied Scientific Computing (CASC) at LLNL.

amp

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, blas, lapack, boost, petsc, trilinos, hdf5, silo, zlib, mpi
Link Dependencies:
blas, lapack, boost, petsc, trilinos, hdf5, silo, zlib, mpi
Description:
The Advanced Multi-Physics (AMP) package is an open source parallel object-oriented computational framework that is designed with single and multi-domain multi-physics applications in mind. AMP can be used to build powerful and flexible multi-physics simulation algorithms from lightweight operator, solver, linear algebra, material database, discretization, and meshing components. The AMP design is meant to enable existing investments in application codes to be leveraged without having to adopt dramatically different data structures while developing new computational science applications. Application components are represented as discrete mathematical operators that only require a minimal interface and through operator composition the incremental development of complex parallel applications is enabled. AMP is meant to allow application domain scientists, computer scientists and mathematicians to simulate, collaborate, and conduct research on various aspects of massively parallel simulation algorithms.

ampliconnoise

Homepage:
Spack package:
Versions:
1.29
Build Dependencies:
mpi, gsl
Link Dependencies:
mpi, gsl
Description:
AmpliconNoise is a collection of programs for the removal of noise from 454 sequenced PCR amplicons.

amrex

Homepage:
Spack package:
Versions:
develop, 18.10.1, 18.10, 18.09.1
Build Dependencies:
cmake, mpi, sundials, python
Link Dependencies:
mpi, sundials
Description:
AMReX is a publicly available software framework designed for building massively parallel block- structured adaptive mesh refinement (AMR) applications.

amrvis

Homepage:
Spack package:
Versions:
master
Build Dependencies:
gmake, mpi, libsm, libice, libxpm, libx11, libxt, libxext, motif, flex, bison
Link Dependencies:
mpi, libsm, libice, libxpm, libx11, libxt, libxext, motif, flex, bison
Description:
Amrvis is a visualization package specifically designed to read and display output and profiling data from codes built on the AMReX framework.

andi

Homepage:
Spack package:
Versions:
0.10
Build Dependencies:
m4, autoconf, automake, libtool, gsl, libdivsufsort
Link Dependencies:
gsl, libdivsufsort
Description:
andi is used for for estimating the evolutionary distance between closely related genomes.

angsd

Homepage:
Spack package:
Versions:
0.921, 0.919
Build Dependencies:
htslib
Link Dependencies:
htslib
Description:
Angsd is a program for analysing NGS data. The software can handle a number of different input types from mapped reads to imputed genotype probabilities. Most methods take genotype uncertainty into account instead of basing the analysis on called genotypes. This is especially useful for low and medium depth data.

ant

Homepage:
Spack package:
Versions:
1.10.0, 1.9.9, 1.9.8, 1.9.7, 1.9.6
Build Dependencies:
java
Link Dependencies:
java
Description:
Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other

antlr

Homepage:
Spack package:
Versions:
2.7.7
Build Dependencies:
python, java
Link Dependencies:
python
Run Dependencies:
java
Description:
ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files. It's widely used to build languages, tools, and frameworks. From a grammar, ANTLR generates a parser that can build and walk parse trees.

ants

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
cmake
Description:
ANTs extracts information from complex datasets that include imaging. Paired with ANTsR (answer), ANTs is useful for managing, interpreting and visualizing multidimensional data. ANTs is popularly considered a state-of-the-art medical image registration and segmentation toolkit. ANTs depends on the Insight ToolKit (ITK), a widely used medical image processing library to which ANTs developers contribute.

aoflagger

Homepage:
Spack package:
Versions:
2.10.0
Build Dependencies:
cmake, casacore, fftw, boost, libxml2, lapack, cfitsio
Link Dependencies:
casacore, fftw, boost, libxml2, lapack, cfitsio
Description:
RFI detector and quality analysis for astronomical radio observations.

aom

Homepage:
Spack package:
Versions:
v1.0.0-errata1
Build Dependencies:
cmake, yasm
Link Dependencies:
yasm
Description:
Alliance for Open Media AOM AV1 Codec Library

ape

Homepage:
Spack package:
Versions:
2.2.1
Build Dependencies:
gsl, libxc
Link Dependencies:
gsl, libxc
Description:
A tool for generating atomic pseudopotentials within a Density- Functional Theory framework

aperture-photometry

Homepage:
Spack package:
Versions:
2.7.2
Build Dependencies:
java
Link Dependencies:
java
Description:
Aperture Photometry Tool APT is software for astronomical research

apex

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
cmake, binutils, boost, activeharmony, ompt-openmp
Link Dependencies:
binutils, boost, activeharmony, ompt-openmp
Description:
Autonomic Performance Environment for eXascale (APEX).

apple-libunwind

Homepage:
Spack package:
Description:
Placeholder package for Apple's analogue to non-GNU libunwind

applewmproto

Homepage:
Spack package:
Versions:
1.4.2
Build Dependencies:
pkgconfig, util-macros
Description:
Apple Rootless Window Management Extension. This extension defines a protcol that allows X window managers to better interact with the Mac OS X Aqua user interface when running X11 in a rootless mode.

appres

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libx11, libxt, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxt
Description:
The appres program prints the resources seen by an application (or subhierarchy of an application) with the specified class and instance names. It can be used to determine which resources a particular program will load.

apr

Homepage:
Spack package:
Versions:
1.6.2, 1.5.2
Description:
Apache portable runtime.

apr-util

Homepage:
Spack package:
Versions:
1.6.0, 1.5.4
Build Dependencies:
apr, expat, libiconv, openssl, gdbm, postgresql, sqlite, unixodbc
Link Dependencies:
apr, expat, libiconv, openssl, gdbm, postgresql, sqlite, unixodbc
Description:
Apache Portable Runtime Utility

aragorn

Homepage:
Spack package:
Versions:
1.2.38, 1.2.36
Description:
ARAGORN, a program to detect tRNA genes and tmRNA genes in nucleotide sequences.

archer

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
cmake, llvm, ninja, llvm-openmp-ompt
Link Dependencies:
llvm, llvm-openmp-ompt
Description:
ARCHER, a data race detection tool for large OpenMP applications.

argobots

Homepage:
Spack package:
Versions:
develop, 1.0rc1, 1.0b1, 1.0a1
Build Dependencies:
m4, autoconf, automake, libtool, valgrind
Link Dependencies:
valgrind
Description:
Argobots, which was developed as a part of the Argo project, is a lightweight runtime system that supports integrated computation and data movement with massive concurrency. It will directly leverage the lowest- level constructs in the hardware and OS: lightweight notification mechanisms, data movement engines, memory mapping, and data placement strategies. It consists of an execution model and a memory model.

argp-standalone

Homepage:
Spack package:
Versions:
1.3
Description:
Standalone version of the argp interface from glibc for parsing unix- style arguments.

argtable

Homepage:
Spack package:
Versions:
2-13
Description:
Argtable is an ANSI C library for parsing GNU style command line options with a minimum of fuss.

arlecore

Homepage:
Spack package:
Versions:
3.5.2.2
Build Dependencies:
r
Run Dependencies:
r
Description:
An Integrated Software for Population Genetics Data Analysis

arm-forge

Homepage:
Spack package:
Versions:
19.0.4-linux-ubuntu16.04-x86_64, 19.0.4-linux-ubuntu16.04-aarch64, 19.0.4-linux-ubuntu14.04-x86_64, 19.0.4-linux-sles15-x86_64, 19.0.4-linux-sles12-x86_64, 19.0.4-linux-sles12-aarch64, 19.0.4-linux-sles11-x86_64, 19.0.4-linux-rhel7-x86_64, 19.0.4-linux-rhel7-ppc64le, 19.0.4-linux-rhel7-aarch64, 19.0.4-linux-rhel6-x86_64, 19.0.3-linux-ubuntu16.04-x86_64, 19.0.3-linux-ubuntu16.04-aarch64, 19.0.3-linux-ubuntu14.04-x86_64, 19.0.3-linux-sles12-x86_64, 19.0.3-linux-sles12-aarch64, 19.0.3-linux-sles11-x86_64, 19.0.3-linux-rhel7-x86_64, 19.0.3-linux-rhel7-ppc64le, 19.0.3-linux-rhel7-aarch64, 19.0.3-linux-rhel6-x86_64
Description:
Arm Forge is the complete toolsuite for software development - with everything needed to debug, profile, optimize, edit and build C, C++ and Fortran applications on Linux for high performance - from single threads through to complex parallel HPC codes with MPI, OpenMP, threads or CUDA.

armadillo

Homepage:
Spack package:
Versions:
8.100.1, 7.950.1, 7.900.1, 7.500.0, 7.200.2, 7.200.1
Build Dependencies:
cmake, arpack-ng, blas, lapack, superlu, hdf5
Link Dependencies:
arpack-ng, blas, lapack, superlu, hdf5
Description:
Armadillo is a high quality linear algebra library (matrix maths) for the C++ language, aiming towards a good balance between speed and ease of use.

arpack-ng

Homepage:
Spack package:
Versions:
develop, 3.7.0, 3.6.3, 3.6.2, 3.6.0, 3.5.0, 3.4.0, 3.3.0
Build Dependencies:
blas, lapack, automake, autoconf, libtool, cmake, mpi
Link Dependencies:
blas, lapack, mpi
Description:
ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems. Important Features: * Reverse Communication Interface. * Single and Double Precision Real Arithmetic Versions for Symmetric, Non-symmetric, Standard or Generalized Problems. * Single and Double Precision Complex Arithmetic Versions for Standard or Generalized Problems. * Routines for Banded Matrices - Standard or Generalized Problems. * Routines for The Singular Value Decomposition. * Example driver routines that may be used as templates to implement numerous Shift-Invert strategies for all problem types, data types and precision. This project is a joint project between Debian, Octave and Scilab in order to provide a common and maintained version of arpack. Indeed, no single release has been published by Rice university for the last few years and since many software (Octave, Scilab, R, Matlab...) forked it and implemented their own modifications, arpack-ng aims to tackle this by providing a common repository and maintained versions. arpack-ng is replacing arpack almost everywhere.

arrow

Homepage:
Spack package:
Versions:
0.12.1, 0.11.0, 0.9.0, 0.8.0
Build Dependencies:
cmake, boost, flatbuffers, python, py-numpy, rapidjson, snappy, zlib, zstd
Link Dependencies:
boost, flatbuffers, python, py-numpy, rapidjson, snappy, zlib, zstd
Description:
A cross-language development platform for in-memory data. This package contains the C++ bindings.

ascent

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, conduit, python, py-numpy, mpi, py-mpi4py, vtkh, mfem, adios, py-sphinx
Link Dependencies:
conduit, python, mpi, py-mpi4py, vtkh, mfem, adios
Run Dependencies:
py-numpy
Description:
Ascent is an open source many-core capable lightweight in situ visualization and analysis infrastructure for multi-physics HPC simulations.

asciidoc

Homepage:
Spack package:
Versions:
8.6.9
Build Dependencies:
libxml2, libxslt, docbook-xml, docbook-xsl
Link Dependencies:
libxml2, libxslt, docbook-xml, docbook-xsl
Description:
A presentable text document format for writing articles, UNIX man pages and other small to medium sized documents.

asciidoctor

Homepage:
Spack package:
Versions:
1.5.8
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
Modern asciidoc tool based on ruby

aspa

Homepage:
Spack package:
Versions:
master
Build Dependencies:
lapack, blas, mpi, hdf5
Link Dependencies:
lapack, blas, mpi, hdf5
Description:
A fundamental premise in ExMatEx is that scale-bridging performed in heterogeneous MPMD materials science simulations will place important demands upon the exascale ecosystem that need to be identified and quantified.

aspcud

Homepage:
Spack package:
Versions:
1.9.4
Build Dependencies:
cmake, boost, re2c, clingo
Link Dependencies:
clingo
Description:
Aspcud: Package dependency solver Aspcud is a solver for package dependencies. A package universe and a request to install, remove, or upgrade packages have to be encoded in the CUDF format. Such a CUDF document can then be passed to aspcud along with an optimization criteria to obtain a solution to the given package problem.

aspect

Homepage:
Spack package:
Versions:
develop, 2.0.1, 2.0.0
Build Dependencies:
cmake, dealii, dealii-parameter-gui
Link Dependencies:
dealii, dealii-parameter-gui
Description:
Parallel, extendible finite element code to simulate convection in the Earth's mantle and elsewhere.

aspell

Homepage:
Spack package:
Versions:
0.60.6.1
Description:
GNU Aspell is a Free and Open Source spell checker designed to eventually replace Ispell.

aspell6-de

Homepage:
Spack package:
Versions:
6-de-20030222-1
Build Dependencies:
aspell
Link Dependencies:
aspell
Description:
German (de) dictionary for aspell.

aspell6-en

Homepage:
Spack package:
Versions:
2017.01.22-0
Build Dependencies:
aspell
Link Dependencies:
aspell
Description:
English (en) dictionary for aspell.

aspell6-es

Homepage:
Spack package:
Versions:
1.11-2
Build Dependencies:
aspell
Link Dependencies:
aspell
Description:
Spanish (es) dictionary for aspell.

aspera-cli

Homepage:
Spack package:
Versions:
3.7.7
Description:
The Aspera CLI client for the Fast and Secure Protocol (FASP).

assimp

Homepage:
Spack package:
Versions:
4.0.1
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
Open Asset Import Library (Assimp) is a portable Open Source library to import various well-known 3D model formats in a uniform manner.

astra

Homepage:
Spack package:
Versions:
2016-11-30
Description:
A Space Charge Tracking Algorithm.

astral

Homepage:
Spack package:
Versions:
5.6.1, 4.10.7
Build Dependencies:
java, zip
Run Dependencies:
java
Description:
ASTRAL is a tool for estimating an unrooted species tree given a set of unrooted gene trees.

astyle

Homepage:
Spack package:
Versions:
3.1, 3.0.1, 2.06, 2.05.1, 2.04
Description:
A Free, Fast, and Small Automatic Formatter for C, C++, C++/CLI, Objective-C, C#, and Java Source Code.

at-spi2-atk

Homepage:
Spack package:
Versions:
2.26.2, 2.26.1
Build Dependencies:
meson, ninja, pkgconfig, at-spi2-core, atk
Link Dependencies:
at-spi2-core, atk
Description:
The At-Spi2 Atk package contains a library that bridges ATK to At-Spi2 D-Bus service.

at-spi2-core

Homepage:
Spack package:
Versions:
2.28.0
Build Dependencies:
meson, ninja, glib, dbus, gettext, libx11, libxi, libxtst, recordproto, inputproto, fixesproto, pkgconfig, python
Link Dependencies:
glib, dbus, gettext, libx11, libxi
Description:
The At-Spi2 Core package provides a Service Provider Interface for the Assistive Technologies available on the GNOME platform and a library against which applications can be linked.

atk

Homepage:
Spack package:
Versions:
2.30.0, 2.28.1, 2.20.0, 2.14.0
Build Dependencies:
meson, glib, gettext, pkgconfig, gobject-introspection
Link Dependencies:
glib, gettext, gobject-introspection
Description:
ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and control running applications.

atlas

Homepage:
Spack package:
Versions:
3.11.39, 3.11.34, 3.10.3, 3.10.2
Description:
Automatically Tuned Linear Algebra Software, generic shared ATLAS is an approach for the automatic generation and optimization of numerical software. Currently ATLAS supplies optimized versions for the complete set of linear algebra kernels known as the Basic Linear Algebra Subroutines (BLAS), and a subset of the linear algebra routines in the LAPACK library.

atom-dft

Homepage:
Spack package:
Versions:
4.2.6
Build Dependencies:
libgridxc, xmlf90
Link Dependencies:
libgridxc, xmlf90
Description:
ATOM is a program for DFT calculations in atoms and pseudopotential generation.

atompaw

Homepage:
Spack package:
Versions:
4.0.0.13, 3.1.0.3
Build Dependencies:
lapack, blas, libxc
Link Dependencies:
lapack, blas, libxc
Description:
A Projector Augmented Wave (PAW) code for generating atom-centered functions. Official website: http://pwpaw.wfu.edu User's guide: ~/doc/atompaw-usersguide.pdf

atop

Homepage:
Spack package:
Versions:
2.2-3
Build Dependencies:
zlib, ncurses
Link Dependencies:
zlib, ncurses
Description:
Atop is an ASCII full-screen performance monitor for Linux

augustus

Homepage:
Spack package:
Versions:
3.3.2, 3.3.1, 3.3, 3.2.3
Build Dependencies:
bamtools, gsl, boost, zlib, htslib, bcftools, samtools, tabix, curl
Link Dependencies:
bamtools, gsl, boost, zlib, htslib, bcftools, samtools, tabix, curl
Description:
AUGUSTUS is a program that predicts genes in eukaryotic genomic sequences

autoconf

Homepage:
Spack package:
Versions:
2.69, 2.62, 2.59, 2.13
Build Dependencies:
m4, perl
Run Dependencies:
m4, perl
Description:
Autoconf -- system configuration part of autotools

autodock-vina

Homepage:
Spack package:
Versions:
1_1_2
Build Dependencies:
boost
Link Dependencies:
boost
Description:
AutoDock Vina is an open-source program for doing molecular docking

autofact

Homepage:
Spack package:
Versions:
3_4
Run Dependencies:
perl, perl-bio-perl, perl-io-string, perl-lwp, blast-legacy
Description:
An Automatic Functional Annotation and Classification Tool

autogen

Homepage:
Spack package:
Versions:
5.18.12
Build Dependencies:
pkgconfig, guile, libxml2
Link Dependencies:
guile, libxml2
Description:
AutoGen is a tool designed to simplify the creation and maintenance of programs that contain large amounts of repetitious text. It is especially valuable in programs that have several blocks of text that must be kept synchronized.

automaded

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
cmake, mpi, boost, callpath
Link Dependencies:
mpi, boost, callpath
Description:
AutomaDeD (Automata-based Debugging for Dissimilar parallel tasks) is a tool for automatic diagnosis of performance and correctness problems in MPI applications. It creates control-flow models of each MPI process and, when a failure occurs, these models are leveraged to find the origin of problems automatically. MPI calls are intercepted (using wrappers) to create the models. When an MPI application hangs, AutomaDeD creates a progress-dependence graph that helps finding the process (or group of processes) that caused the hang.

automake

Homepage:
Spack package:
Versions:
1.16.1, 1.15.1, 1.15, 1.14.1, 1.13.4, 1.11.6
Build Dependencies:
autoconf, perl
Run Dependencies:
perl
Description:
Automake -- make file builder part of autotools

axel

Homepage:
Spack package:
Versions:
2.16.1
Build Dependencies:
m4, autoconf, automake, libtool, pkgconfig, gettext, openssl
Link Dependencies:
gettext, openssl
Description:
Axel is a light command line download accelerator for Linux and Unix

axl

Homepage:
Spack package:
Versions:
master, 0.1.1
Build Dependencies:
cmake, kvtree
Link Dependencies:
kvtree
Description:
Asynchronous transfer library

bamdst

Homepage:
Spack package:
Versions:
master
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Bamdst is a a lightweight bam file depth statistical tool.

bamtools

Homepage:
Spack package:
Versions:
2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.0, 2.2.3
Build Dependencies:
cmake
Link Dependencies:
zlib
Description:
C++ API & command-line toolkit for working with BAM data.

bamutil

Homepage:
Spack package:
Versions:
1.0.13
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
bamUtil is a repository that contains several programs that perform operations on SAM/BAM files. All of these programs are built into a single executable, bam.

barrnap

Homepage:
Spack package:
Versions:
0.8, 0.7, 0.6
Run Dependencies:
hmmer
Description:
Barrnap predicts the location of ribosomal RNA genes in genomes.

bash

Homepage:
Spack package:
Versions:
5.0, 4.4.12, 4.4, 4.3
Build Dependencies:
ncurses, readline
Link Dependencies:
ncurses, readline
Description:
The GNU Project's Bourne Again SHell.

bash-completion

Homepage:
Spack package:
Versions:
develop, 2.7, 2.3
Build Dependencies:
automake, autoconf, libtool
Run Dependencies:
bash
Description:
Programmable completion functions for bash.

bats

Homepage:
Spack package:
Versions:
0.4.0
Description:
Bats is a TAP-compliant testing framework for Bash.

bazel

Homepage:
Spack package:
Versions:
0.17.2, 0.16.1, 0.15.0, 0.14.1, 0.13.0, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.0, 0.4.5, 0.4.4, 0.3.1, 0.3.0, 0.2.3, 0.2.2b, 0.2.2
Build Dependencies:
java, zip
Link Dependencies:
java, zip
Run Dependencies:
java
Description:
Bazel is Google's own build tool

bbcp

Homepage:
Spack package:
Versions:
git
Build Dependencies:
zlib, openssl
Link Dependencies:
zlib, openssl
Description:
Securely and quickly copy data from source to target

bbmap

Homepage:
Spack package:
Versions:
37.36
Build Dependencies:
java
Link Dependencies:
java
Description:
Short read aligner for DNA and RNA-seq data.

bc

Homepage:
Spack package:
Versions:
1.07
Build Dependencies:
ed, texinfo
Description:
bc is an arbitrary precision numeric processing language. Syntax is similar to C, but differs in many substantial areas. It supports interactive execution of statements.

bcftools

Homepage:
Spack package:
Versions:
1.9, 1.8, 1.7, 1.6, 1.4, 1.3.1, 1.2
Build Dependencies:
libzip, htslib
Link Dependencies:
libzip, htslib
Description:
BCFtools is a set of utilities that manipulate variant calls in the Variant Call Format (VCF) and its binary counterpart BCF. All commands work transparently with both VCFs and BCFs, both uncompressed and BGZF- compressed.

bcl2fastq2

Homepage:
Spack package:
Versions:
2.20.0.422, 2.19.1.403, 2.18.0.12, 2.17.1.14
Build Dependencies:
boost, cmake, libxml2, libxslt, libgcrypt, zlib
Link Dependencies:
boost, cmake, libxml2, libxslt, libgcrypt, zlib
Description:
The bcl2fastq2 Conversion Software converts base call (BCL) files from a sequencing run into FASTQ files.

bdftopcf

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libxfont, pkgconfig, xproto, fontsproto, util-macros
Link Dependencies:
libxfont
Description:
bdftopcf is a font compiler for the X server and font server. Fonts in Portable Compiled Format can be read by any architecture, although the file is structured to allow one particular architecture to read them directly without reformatting. This allows fast reading on the appropriate machine, but the files are still portable (but read more slowly) on other machines.

bdw-gc

Homepage:
Spack package:
Versions:
8.0.0, 7.6.0, 7.4.4
Build Dependencies:
libatomic-ops
Link Dependencies:
libatomic-ops
Description:
The Boehm-Demers-Weiser conservative garbage collector is a garbage collecting replacement for C malloc or C++ new.

bear

Homepage:
Spack package:
Versions:
2.2.0, 2.0.4
Build Dependencies:
cmake, python
Link Dependencies:
python
Description:
Bear is a tool that generates a compilation database for clang tooling from non-cmake build systems.

beast-tracer

Homepage:
Spack package:
Versions:
1.7.1
Build Dependencies:
ant, java
Run Dependencies:
java
Description:
Tracer is a graphical tool for visualization and diagnostics of MCMC output.

beast1

Homepage:
Spack package:
Versions:
1.10.4, 1.10.0, 1.8.4
Build Dependencies:
libbeagle
Link Dependencies:
libbeagle
Run Dependencies:
java, libbeagle
Description:
BEAST is a cross-platform program for Bayesian analysis of molecular sequences using MCMC.

beast2

Homepage:
Spack package:
Versions:
2.5.2, 2.4.6
Build Dependencies:
java
Link Dependencies:
java
Description:
BEAST is a cross-platform program for Bayesian inference using MCMC of molecular sequences. It is entirely orientated towards rooted, time- measured phylogenies inferred using strict or relaxed molecular clock models. It can be used as a method of reconstructing phylogenies but is also a framework for testing evolutionary hypotheses without conditioning on a single tree topology.

bedops

Homepage:
Spack package:
Versions:
2.4.35, 2.4.34, 2.4.30
Description:
BEDOPS is an open-source command-line toolkit that performs highly efficient and scalable Boolean and other set operations, statistical calculations, archiving, conversion and other management of genomic data of arbitrary scale.

bedtools2

Homepage:
Spack package:
Versions:
2.27.1, 2.27.0, 2.26.0, 2.25.0, 2.23.0
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Collectively, the bedtools utilities are a swiss-army knife of tools for a wide-range of genomics analysis tasks. The most widely-used tools enable genome arithmetic: that is, set theory on the genome.

beforelight

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, libxscrnsaver, libxt, pkgconfig, util-macros
Link Dependencies:
libx11, libxscrnsaver, libxt
Description:
The beforelight program is a sample implementation of a screen saver for X servers supporting the MIT-SCREEN-SAVER extension. It is only recommended for use as a code sample, as it does not include features such as screen locking or configurability.

benchmark

Homepage:
Spack package:
Versions:
develop, 1.4.0, 1.3.0, 1.2.0, 1.1.0, 1.0.0
Build Dependencies:
cmake
Description:
A microbenchmark support library

berkeley-db

Homepage:
Spack package:
Versions:
6.2.32, 6.1.29, 6.0.35, 5.3.28
Description:
Oracle Berkeley DB

bertini

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
flex, bison, gmp, mpfr, mpi
Link Dependencies:
gmp, mpfr, mpi
Description:
Bertini is a general-purpose solver, written in C, that was created for research about polynomial continuation. It solves for the numerical solution of systems of polynomial equations using homotopy continuation.

bib2xhtml

Homepage:
Spack package:
Versions:
3.0-15-gf506
Description:
bib2xhtml is a program that converts BibTeX files into HTML.

bigreqsproto

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
pkgconfig, util-macros
Description:
Big Requests Extension. This extension defines a protocol to enable the use of requests that exceed 262140 bytes in length.

binutils

Homepage:
Spack package:
Versions:
2.31.1, 2.29.1, 2.28, 2.27, 2.26, 2.25.1, 2.25, 2.24, 2.23.2, 2.20.1
Build Dependencies:
zlib, gettext, m4, bison
Link Dependencies:
zlib, gettext
Description:
GNU binutils, which contain the linker, assembler, objdump and others

bioawk

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
zlib, bison
Link Dependencies:
zlib
Description:
Bioawk is an extension to Brian Kernighan's awk, adding the support of several common biological data formats, including optionally gzip'ed BED, GFF, SAM, VCF, FASTA/Q and TAB-delimited formats with column names.

biobloom

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
boost, sdsl-lite, sparsehash, zlib
Link Dependencies:
boost, sdsl-lite, sparsehash, zlib
Description:
BioBloom Tools (BBT) provides the means to create filters for a given reference and then to categorize sequences.

bismark

Homepage:
Spack package:
Versions:
0.19.0, 0.18.2
Run Dependencies:
bowtie2, perl, samtools
Description:
A tool to map bisulfite converted sequence reads and determine cytosine methylation states

bison

Homepage:
Spack package:
Versions:
3.0.5, 3.0.4, 2.7
Build Dependencies:
diffutils, m4, perl, help2man
Run Dependencies:
m4
Description:
Bison is a general-purpose parser generator that converts an annotated context-free grammar into a deterministic LR or generalized LR (GLR) parser employing LALR(1) parser tables.

bitmap

Homepage:
Spack package:
Versions:
1.0.8
Build Dependencies:
libx11, libxmu, libxaw, libxt, xbitmaps, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxmu, libxaw, libxt
Description:
bitmap, bmtoa, atobm - X bitmap (XBM) editor and converter utilities.

blasr

Homepage:
Spack package:
Versions:
5.3.1
Build Dependencies:
ncurses, hdf5, htslib, zlib, boost, pbbam, blasr-libcpp, python
Link Dependencies:
ncurses, hdf5, htslib, zlib, boost, pbbam, blasr-libcpp
Description:
The PacBio long read aligner.

blasr-libcpp

Homepage:
Spack package:
Versions:
5.3.1
Build Dependencies:
pbbam, hdf5, python
Link Dependencies:
pbbam, hdf5
Description:
Blasr_libcpp is a library used by blasr and other executables such as samtoh5, loadPulses for analyzing PacBio sequences.

blast-legacy

Homepage:
Spack package:
Versions:
2.2.26
Build Dependencies:
tcsh
Description:
Legacy NCBI BLAST distribution -- no longer supported. Contains older programs including `blastall'

blast-plus

Homepage:
Spack package:
Versions:
2.9.0, 2.8.1, 2.7.1, 2.6.0, 2.2.30
Build Dependencies:
jpeg, libpng, freetype, gnutls, openssl, zlib, bzip2, lzo, pcre, python, perl, lmdb
Link Dependencies:
jpeg, libpng, freetype, gnutls, openssl, zlib, bzip2, lzo, pcre, python, perl, lmdb
Description:
Basic Local Alignment Search Tool.

blast2go

Homepage:
Spack package:
Versions:
5.2.5
Build Dependencies:
bash, java
Run Dependencies:
blast-plus
Description:
Blast2GO is a bioinformatics platform for high-quality functional annotation and analysis of genomic datasets.

blat

Homepage:
Spack package:
Versions:
35
Build Dependencies:
libpng
Link Dependencies:
libpng
Description:
BLAT (BLAST-like alignment tool) is a pairwise sequence alignment algorithm.

blaze

Homepage:
Spack package:
Versions:
3.4, 3.3, 3.2, 3.1, 3.0, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.5, 1.4, 1.3, 1.2, 1.1, 1.0
Description:
Blaze is an open-source, high-performance C++ math library for dense and sparse arithmetic. With its state-of-the-art Smart Expression Template implementation Blaze combines the elegance and ease of use of a domain- specific language with HPC-grade performance, making it one of the most intuitive and fastest C++ math libraries available.

blis

Homepage:
Spack package:
Versions:
develop, 0.4.0, 0.3.2, 0.3.1, 0.3.0, 0.2.2
Build Dependencies:
python
Run Dependencies:
python
Description:
BLIS is a portable software framework for instantiating high-performance BLAS-like dense linear algebra libraries. The framework was designed to isolate essential kernels of computation that, when optimized, immediately enable optimized implementations of most of its commonly used and computationally intensive operations. BLIS is written in ISO C99 and available under a new/modified/3-clause BSD license. While BLIS exports a new BLAS-like API, it also includes a BLAS compatibility layer which gives application developers access to BLIS implementations via traditional BLAS routine calls. An object-based API unique to BLIS is also available.

bliss

Homepage:
Spack package:
Versions:
0.73
Build Dependencies:
gmp, libtool
Link Dependencies:
gmp
Description:
bliss: A Tool for Computing Automorphism Groups and Canonical Labelings of Graphs

blitz

Homepage:
Spack package:
Versions:
1.0.1, 1.0.0
Description:
N-dimensional arrays for C++

bmake

Homepage:
Spack package:
Versions:
20180512, 20171207
Description:
Portable version of NetBSD make(1).

bmi

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
autoconf
Description:
a communications framework and network abstraction layer

bml

Homepage:
Spack package:
Versions:
develop, 1.3.0, 1.2.3, 1.2.2, 1.1.0
Build Dependencies:
cmake, blas, lapack, mpi
Link Dependencies:
blas, lapack, mpi
Description:
The basic matrix library (bml) is a collection of various matrix data formats (in dense and sparse) and their associated algorithms for basic matrix operations.

bohrium

Homepage:
Spack package:
Versions:
develop, 0.9.1, 0.9.0
Build Dependencies:
cuda, cmake, python, boost, opencl, netlib-lapack, blas, opencv, py-numpy, swig, py-cython, zlib
Link Dependencies:
cuda, python, boost, opencl, netlib-lapack, blas, opencv, zlib
Run Dependencies:
py-numpy
Test Dependencies:
python, py-numpy
Description:
Library for automatic acceleration of array operations

bolt

Homepage:
Spack package:
Versions:
1.0b1
Build Dependencies:
cmake
Description:
BOLT targets a high-performing OpenMP implementation, especially specialized for fine-grain parallelism. Unlike other OpenMP implementations, BOLT utilizes a lightweight threading model for its underlying threading mechanism. It currently adopts Argobots, a new holistic, low-level threading and tasking runtime, in order to overcome shortcomings of conventional OS-level threads. The current BOLT implementation is based on the OpenMP runtime in LLVM, and thus it can be used with LLVM/Clang, Intel OpenMP compiler, and GCC.

bookleaf-cpp

Homepage:
Spack package:
Versions:
develop, 2.0.2, 2.0.1, 2.0
Build Dependencies:
cmake, caliper, parmetis, silo, typhon, mpi, yaml-cpp
Link Dependencies:
caliper, parmetis, silo, typhon, mpi, yaml-cpp
Description:
BookLeaf is a 2D unstructured hydrodynamics mini-app.

boost

Homepage:
Spack package:
Versions:
develop, 1.70.0, 1.69.0, 1.68.0, 1.67.0, 1.66.0, 1.65.1, 1.65.0, 1.64.0, 1.63.0, 1.62.0, 1.61.0, 1.60.0, 1.59.0, 1.58.0, 1.57.0, 1.56.0, 1.55.0, 1.54.0, 1.53.0, 1.52.0, 1.51.0, 1.50.0, 1.49.0, 1.48.0, 1.47.0, 1.46.1, 1.46.0, 1.45.0, 1.44.0, 1.43.0, 1.42.0, 1.41.0, 1.40.0, 1.39.0, 1.38.0, 1.37.0, 1.36.0, 1.35.0, 1.34.1, 1.34.0
Build Dependencies:
icu4c, python, mpi, bzip2, zlib, py-numpy
Link Dependencies:
icu4c, python, mpi, bzip2, zlib
Run Dependencies:
py-numpy
Description:
Boost provides free peer-reviewed portable C++ source libraries, emphasizing libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful, and usable across a broad spectrum of applications. The Boost license encourages both commercial and non-commercial use.

boostmplcartesianproduct

Homepage:
Spack package:
Versions:
20161205
Description:
Cartesian_product is an extension to the Boost.MPL library and as such requires a version of the Boost libraries on your system.

bowtie

Homepage:
Spack package:
Versions:
1.2.2_p1, 1.2.2, 1.2.1.1, 1.2.1, 1.2.0, 1.2
Build Dependencies:
tbb, zlib
Link Dependencies:
tbb, zlib
Description:
Bowtie is an ultrafast, memory-efficient short read aligner for short DNA sequences (reads) from next-gen sequencers.

bowtie2

Homepage:
Spack package:
Versions:
2.3.5, 2.3.4.1, 2.3.1, 2.3.0, 2.2.5
Build Dependencies:
tbb, readline, zlib
Link Dependencies:
tbb, readline, zlib
Run Dependencies:
perl, python
Description:
Bowtie 2 is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences

boxlib

Homepage:
Spack package:
Versions:
16.12.2
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
BoxLib, a software framework for massively parallel block-structured adaptive mesh refinement (AMR) codes.

bpp-core

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
cmake
Description:
Bio++ core library.

bpp-phyl

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
cmake, bpp-core, bpp-seq
Link Dependencies:
bpp-core, bpp-seq
Description:
Bio++ phylogeny library.

bpp-seq

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
cmake, bpp-core
Link Dependencies:
bpp-core
Description:
Bio++ seq library.

bpp-suite

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
cmake, texinfo, bpp-core, bpp-seq, bpp-phyl
Link Dependencies:
bpp-core, bpp-seq, bpp-phyl
Description:
BppSuite is a suite of ready-to-use programs for phylogenetic and sequence analysis.

bracken

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
perl, python, perl-exporter-tiny, perl-list-moreutils, perl-parallel-forkmanager
Link Dependencies:
perl, python, perl-exporter-tiny, perl-list-moreutils, perl-parallel-forkmanager
Description:
Bracken (Bayesian Reestimation of Abundance with KrakEN) is a highly accurate statistical method that computes the abundance of species in DNA sequences from a metagenomics sample.

braker

Homepage:
Spack package:
Versions:
2.1.0, 1.11
Build Dependencies:
perl, perl-scalar-util-numeric, perl-parallel-forkmanager, perl-file-which, augustus, genemark-et, bamtools, samtools
Link Dependencies:
augustus, genemark-et, bamtools, samtools
Run Dependencies:
perl, perl-scalar-util-numeric, perl-parallel-forkmanager, perl-file-which
Description:
BRAKER is a pipeline for unsupervised RNA-Seq-based genome annotation that combines the advantages of GeneMark-ET and AUGUSTUS

branson

Homepage:
Spack package:
Versions:
develop, 1.01, 0.82, 0.81, 0.8
Build Dependencies:
cmake, mpi, boost, metis, parmetis
Link Dependencies:
mpi, boost, metis, parmetis
Description:
Branson's purpose is to study different algorithms for parallel Monte Carlo transport. Currently it contains particle passing and mesh passing methods for domain decomposition.

breakdancer

Homepage:
Spack package:
Versions:
master, 1.4.5
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Run Dependencies:
perl-statistics-descriptive, perl-math-cdf, perl-gd-graph, perl-gdgraph-histogram, perl-list-moreutils, perl-exporter-tiny
Description:
BreakDancer-1.3.6, released under GPLv3, is a perl/Cpp package that provides genome-wide detection of structural variants from next generation paired-end sequencing reads. It includes two complementary programs. BreakDancerMax predicts five types of structural variants: insertions, deletions, inversions, inter- and intra-chromosomal translocations from next-generation short paired-end sequencing reads using read pairs that are mapped with unexpected separation distances or orientation. BreakDancerMini focuses on detecting small indels (usually between 10bp and 100bp) using normally mapped read pairs..

breseq

Homepage:
Spack package:
Versions:
0.33.2, 0.33.1, 0.31.1
Build Dependencies:
autoconf, automake, libtool, m4, zlib
Run Dependencies:
bedtools2, r
Description:
breseq is a computational pipeline for finding mutations relative to a reference sequence in short-read DNA re-sequencing data for haploid microbial-sized genomes.

bridger

Homepage:
Spack package:
Versions:
2014-12-01
Build Dependencies:
boost
Link Dependencies:
boost
Run Dependencies:
perl
Description:
Bridger : An Efficient De novo Transcriptome Assembler For RNA-Seq Data

brigand

Homepage:
Spack package:
Versions:
master, 1.3.0, 1.2.0, 1.1.0, 1.0.0
Description:
Brigand Meta-programming library

brotli

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
cmake
Description:
Brotli is a generic-purpose lossless compression algorithm

bsseeker2

Homepage:
Spack package:
Versions:
2.1.8, 2.1.5, 2.1.2
Build Dependencies:
python, py-pysam
Run Dependencies:
python, py-pysam
Description:
A versatile aligning pipeline for bisulfite sequencing data.

bucky

Homepage:
Spack package:
Versions:
1.4.4
Description:
BUCKy is a free program to combine molecular data from multiple loci. BUCKy estimates the dominant history of sampled individuals, and how much of the genome supports each relationship, using Bayesian concordance analysis.

bumpversion

Homepage:
Spack package:
Versions:
0.5.3, 0.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Version-bump your software with a single command.

busco

Homepage:
Spack package:
Versions:
3.0.1, 2.0.1
Build Dependencies:
python, blast-plus, hmmer, augustus
Link Dependencies:
python, blast-plus, hmmer, augustus
Run Dependencies:
python
Description:
Assesses genome assembly and annotation completeness with Benchmarking Universal Single-Copy Orthologs

butter

Homepage:
Spack package:
Versions:
0.3.3
Build Dependencies:
perl, samtools, bowtie
Link Dependencies:
samtools, bowtie
Run Dependencies:
perl
Description:
butter: Bowtie UTilizing iTerative placEment of Repetitive small rnas. A wrapper for bowtie to produce small RNA-seq alignments where multimapped small RNAs tend to be placed near regions of confidently high density.

bwa

Homepage:
Spack package:
Versions:
0.7.17, 0.7.16a, 0.7.15, 0.7.13, 0.7.12
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Burrow-Wheeler Aligner for pairwise alignment between DNA sequences.

bwtool

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
libbeato
Link Dependencies:
libbeato
Description:
bwtool is a command-line utility for bigWig files.

byobu

Homepage:
Spack package:
Versions:
5.127, 5.125, 5.123
Build Dependencies:
tmux
Run Dependencies:
tmux
Description:
Byobu: Text-based window manager and terminal multiplexer.

bzip2

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
diffutils
Description:
bzip2 is a freely available, patent free high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), whilst being around twice as fast at compression and six times faster at decompression.

c-blosc

Homepage:
Spack package:
Versions:
1.16.3, 1.15.0, 1.12.1, 1.11.1, 1.9.2, 1.9.1, 1.9.0, 1.8.1, 1.8.0
Build Dependencies:
cmake, snappy, zlib, zstd, lz4
Link Dependencies:
snappy, zlib, zstd, lz4
Description:
Blosc, an extremely fast, multi-threaded, meta-compressor library

c-lime

Homepage:
Spack package:
Versions:
2-3-9
Description:
LIME (which can stand for Lattice QCD Interchange Message Encapsulation or more generally, Large Internet Message Encapsulation) is a simple packaging scheme for combining records containing ASCII and/or binary data.

cabana

Homepage:
Spack package:
Versions:
develop, 0.1.0-rc0, 0.1.0
Build Dependencies:
cmake, kokkos
Link Dependencies:
kokkos
Description:
The Exascale Co-Design Center for Particle Applications Toolkit

caffe

Homepage:
Spack package:
Versions:
1.0, rc5, rc4, rc3, rc2
Build Dependencies:
cmake, boost, cuda, blas, protobuf, glog, gflags, hdf5, opencv, leveldb, lmdb, python, py-numpy, matlab
Link Dependencies:
boost, cuda, blas, protobuf, glog, gflags, hdf5, opencv, leveldb, lmdb, python, matlab
Run Dependencies:
py-numpy
Description:
Caffe is a deep learning framework made with expression, speed, and modularity in mind. It is developed by the Berkeley Vision and Learning Center (BVLC) and by community contributors.

cairo

Homepage:
Spack package:
Versions:
1.16.0, 1.14.12, 1.14.8, 1.14.0
Build Dependencies:
libx11, libxext, libxrender, libxcb, python, libpng, glib, pixman, freetype, pkgconfig, fontconfig
Link Dependencies:
libx11, libxext, libxrender, libxcb, libpng, glib, pixman, freetype, fontconfig
Description:
Cairo is a 2D graphics library with support for multiple output devices.

cairomm

Homepage:
Spack package:
Versions:
1.6.4, 1.6.2
Build Dependencies:
cairo, libsigcpp
Link Dependencies:
cairo, libsigcpp
Description:
Cairomm is a C++ wrapper for the cairo graphics library.

caliper

Homepage:
Spack package:
Versions:
master, 2.0.1, 1.9.1, 1.9.0, 1.8.0, 1.7.0
Build Dependencies:
cmake, gotcha, dyninst, papi, libpfm4, mpi, unwind, sosflow, python
Link Dependencies:
gotcha, dyninst, papi, libpfm4, mpi, unwind, sosflow
Description:
Caliper is a program instrumentation and performance measurement framework. It provides data collection mechanisms and a source-code annotation API for a variety of performance engineering use cases, e.g., performance profiling, tracing, monitoring, and auto-tuning.

callpath

Homepage:
Spack package:
Versions:
1.0.4, 1.0.2, 1.0.1
Build Dependencies:
cmake, libdwarf, dyninst, adept-utils, mpi
Link Dependencies:
elf, libdwarf, dyninst, adept-utils, mpi
Description:
Library for representing callpaths consistently in distributed-memory performance tools.

camellia

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, trilinos, moab, hdf5, mpi
Link Dependencies:
trilinos, moab, hdf5, mpi
Description:
Camellia: user-friendly MPI-parallel adaptive finite element package, with support for DPG and other hybrid methods, built atop Trilinos.

candle-benchmarks

Homepage:
Spack package:
Versions:
0.1, 0.0
Build Dependencies:
python, py-theano, py-keras, py-matplotlib, py-tqdm, py-scikit-learn, opencv, py-mdanalysis, py-mpi4py, py-h5py, py-requests
Link Dependencies:
python, opencv
Run Dependencies:
py-theano, py-keras, py-matplotlib, py-tqdm, py-scikit-learn, py-mdanalysis, py-mpi4py, py-h5py, py-requests
Description:
ECP-CANDLE Benchmarks

cantera

Homepage:
Spack package:
Versions:
2.3.0, 2.2.1
Build Dependencies:
scons, fmt, googletest, eigen, boost, sundials, blas, lapack, python, py-cython, py-numpy, py-scipy, py-3to2, py-unittest2, py-unittest2py3k, matlab
Link Dependencies:
fmt, googletest, eigen, boost, sundials, blas, lapack, python, matlab
Run Dependencies:
py-numpy, py-scipy, py-3to2, py-unittest2, py-unittest2py3k
Description:
Cantera is a suite of object-oriented software tools for problems involving chemical kinetics, thermodynamics, and/or transport processes.

canu

Homepage:
Spack package:
Versions:
1.8, 1.7.1, 1.7, 1.5
Run Dependencies:
gnuplot, jdk, perl
Description:
A single molecule sequence assembler for genomes large and small.

cap3

Homepage:
Spack package:
Versions:
2015-02-11
Description:
CAP3 is DNA Sequence Assembly Program

capstone

Homepage:
Spack package:
Versions:
4.0.1
Build Dependencies:
cmake
Description:
Capstone is a lightweight multi-platform, multi-architecture disassembly framework.

cardioid

Homepage:
Spack package:
Versions:
develop, elecfem
Build Dependencies:
cmake, blas, lapack, mpi, cuda, mfem, perl
Link Dependencies:
blas, lapack, mpi, cuda, mfem
Description:
Cardiac simulation suite.

cares

Homepage:
Spack package:
Versions:
develop, 1.13.0
Build Dependencies:
cmake
Description:
c-ares: A C library for asynchronous DNS requests

casacore

Homepage:
Spack package:
Versions:
2.4.1
Build Dependencies:
cmake, flex, bison, blas, lapack, cfitsio, wcslib, fftw, sofa-c, hdf5, ncurses, python, boost, py-numpy
Link Dependencies:
blas, lapack, cfitsio, wcslib, fftw, sofa-c, hdf5, ncurses, python, boost, py-numpy
Description:
A suite of c++ libraries for radio astronomy data processing.

cask

Homepage:
Spack package:
Versions:
0.8.1, 0.7.4
Build Dependencies:
emacs
Run Dependencies:
emacs
Description:
Cask is a project management tool for Emacs Lisp to automate the package development cycle; development, dependencies, testing, building, packaging and more.

casper

Homepage:
Spack package:
Versions:
0.8.2
Build Dependencies:
jellyfish, boost
Link Dependencies:
jellyfish, boost
Description:
CASPER (Context-Aware Scheme for Paired-End Read) is state-of-the art merging tool in terms of accuracy and robustness. Using this sophisticated merging method, we could get elongated reads from the forward and reverse reads.

catalyst

Homepage:
Spack package:
Versions:
5.5.2, 5.5.1, 5.5.0, 5.4.1, 5.4.0, 5.3.0, 5.2.0, 5.1.2, 5.0.1, 4.4.0
Build Dependencies:
cmake, git, mpi, python, gl, mesa, glx
Link Dependencies:
mpi, python, gl, mesa, glx
Run Dependencies:
python
Description:
Catalyst is an in situ use case library, with an adaptable application programming interface (API), that orchestrates the alliance between simulation and analysis and/or visualization tasks.

catch

Homepage:
Spack package:
Versions:
2.6.1, 2.6.0, 2.5.0, 2.4.0, 2.3.0, 2.2.1, 2.1.0, 2.0.1, 1.12.1, 1.12.0, 1.11.0, 1.10.0, 1.9.7, 1.9.6, 1.9.5, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9.0, 1.8.2, 1.8.1, 1.8.0, 1.7.2, 1.7.1, 1.7.0, 1.6.1, 1.6.0, 1.5.9, 1.5.0, 1.4.0, 1.3.5, 1.3.0
Build Dependencies:
cmake
Description:
Catch tests

cbench

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
mpi, blas, lapack, fftw
Link Dependencies:
mpi, blas, lapack, fftw
Description:
Cbench is intended as a relatively straightforward toolbox of tests, benchmarks, applications, utilities, and framework to hold them together with the goal to facilitate scalable testing, benchmarking, and analysis of a Linux parallel compute cluster.

cblas

Homepage:
Spack package:
Versions:
2015-06-06
Build Dependencies:
blas
Link Dependencies:
blas
Description:
The BLAS (Basic Linear Algebra Subprograms) are routines that provide standard building blocks for performing basic vector and matrix operations.

cbtf

Homepage:
Spack package:
Versions:
develop, 1.9.3, 1.9.2, 1.9.1.2, 1.9.1.1, 1.9.1.0
Build Dependencies:
cmake, boost, mrnet, xerces-c, libxml2
Link Dependencies:
boost, mrnet, xerces-c, libxml2
Description:
CBTF project contains the base code for CBTF that supports creating components, component networks and the support to connect these components and component networks into sequential and distributed network tools.

cbtf-argonavis

Homepage:
Spack package:
Versions:
develop, 1.9.3, 1.9.2, 1.9.1.2, 1.9.1.1, 1.9.1.0
Build Dependencies:
cmake, boost, mrnet, cbtf, libmonitor, papi, cbtf-krell, cuda
Link Dependencies:
elf, boost, mrnet, cbtf, libmonitor, papi, cbtf-krell, cuda
Description:
CBTF Argo Navis project contains the CUDA collector and supporting libraries that was done as a result of a DOE SBIR grant.

cbtf-argonavis-gui

Homepage:
Spack package:
Versions:
develop, 1.3.0.0
Build Dependencies:
qt, cmake, boost, mrnet, cbtf, cbtf-krell, cbtf-argonavis, cuda, openspeedshop-utils, xerces-c, graphviz, qtgraph
Link Dependencies:
qt, boost, mrnet, cbtf, cbtf-krell, cbtf-argonavis, cuda, openspeedshop-utils, xerces-c, graphviz, qtgraph
Description:
CBTF Argo Navis GUI project contains the GUI that views OpenSpeedShop performance information by loading in the Sqlite database files.

cbtf-krell

Homepage:
Spack package:
Versions:
develop, 1.9.3, 1.9.2, 1.9.1.2, 1.9.1.1, 1.9.1.0
Build Dependencies:
cmake, binutils, boost, dyninst, mrnet, xerces-c, cbtf, libmonitor, libunwind, papi, llvm-openmp-ompt, openmpi, mpich, mpich2, mvapich2, mvapich, mpt, python, gotcha
Link Dependencies:
binutils, boost, dyninst, mrnet, xerces-c, cbtf, libmonitor, libunwind, papi, llvm-openmp-ompt, openmpi, mpich, mpich2, mvapich2, mvapich, mpt, gotcha
Run Dependencies:
mrnet, cbtf, python
Description:
CBTF Krell project contains the Krell Institute contributions to the CBTF project. These contributions include many performance data collectors and support libraries as well as some example tools that drive the data collection at HPC levels of scale.

cbtf-lanl

Homepage:
Spack package:
Versions:
develop, 1.9.3, 1.9.2, 1.9.1.2, 1.9.1.1, 1.9.1.0
Build Dependencies:
cmake, mrnet, xerces-c, cbtf, cbtf-krell
Link Dependencies:
mrnet, xerces-c, cbtf, cbtf-krell
Description:
CBTF LANL project contains a memory tool and data center type system command monitoring tool.

ccache

Homepage:
Spack package:
Versions:
3.3.4, 3.3.3, 3.3.2, 3.3.1, 3.3, 3.2.9
Build Dependencies:
gperf, libxslt, zlib
Link Dependencies:
gperf, libxslt, zlib
Description:
ccache is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again.

ccfits

Homepage:
Spack package:
Versions:
2.5, 2.4
Build Dependencies:
cfitsio
Link Dependencies:
cfitsio
Description:
CCfits is an object oriented interface to the cfitsio library. It is designed to make the capabilities of cfitsio available to programmers working in C++. It is written in ANSI C++ and implemented using the C++ Standard Library with namespaces, exception handling, and member template functions.

cctools

Homepage:
Spack package:
Versions:
6.1.1
Build Dependencies:
openssl, perl, python, readline, swig, zlib
Link Dependencies:
openssl, readline, swig, zlib
Run Dependencies:
perl, python
Description:
The Cooperative Computing Tools (cctools) enable large scale distributed computations to harness hundreds to thousands of machines from clusters, clouds, and grids.

cdbfasta

Homepage:
Spack package:
Versions:
2017-03-16
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Fast indexing and retrieval of fasta records from flat file databases

cdd

Homepage:
Spack package:
Versions:
0.61a
Build Dependencies:
libtool
Description:
The program cdd+ (cdd, respectively) is a C++ (ANSI C) implementation of the Double Description Method [MRTT53] for generating all vertices (i.e. extreme points) and extreme rays of a general convex polyhedron given by a system of linear inequalities

cddlib

Homepage:
Spack package:
Versions:
0.94h
Build Dependencies:
gmp, libtool
Link Dependencies:
gmp
Description:
The C-library cddlib is a C implementation of the Double Description Method of Motzkin et al. for generating all vertices (i.e. extreme points) and extreme rays of a general convex polyhedron in R^d given by a system of linear inequalities

cdecimal

Homepage:
Spack package:
Versions:
2.3
Description:
cdecimal is a fast drop-in replacement for the decimal module in Python's standard library.

cdhit

Homepage:
Spack package:
Versions:
4.8.1, 4.6.8
Build Dependencies:
perl
Run Dependencies:
perl
Description:
CD-HIT is a very widely used program for clustering and comparing protein or nucleotide sequences.

cdo

Homepage:
Spack package:
Versions:
1.9.7rc2, 1.9.6, 1.9.5, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9.0, 1.8.2, 1.7.2
Build Dependencies:
pkgconfig, netcdf, hdf5, grib-api, eccodes, szip, udunits2, libxml2, proj, curl, fftw, magics, libuuid
Link Dependencies:
netcdf, hdf5, grib-api, eccodes, szip, udunits2, libxml2, proj, curl, fftw, magics, libuuid
Description:
CDO is a collection of command line Operators to manipulate and analyse Climate and NWP model Data.

ceed

Homepage:
Spack package:
Versions:
2.0.0, 1.0.0
Build Dependencies:
libceed, occa, nek5000, nektools, gslib, nekbone, nekcem, petsc, hpgmg, magma, pumi, mfem, laghos, hypre, suite-sparse
Link Dependencies:
libceed, occa, nek5000, nektools, gslib, nekbone, nekcem, petsc, hpgmg, magma, pumi, mfem, laghos, hypre, suite-sparse
Description:
Ceed is a collection of benchmarks, miniapps, software libraries and APIs for efficient high-order finite element and spectral element discretizations for exascale applications developed in the Department of Energy (DOE) and partially supported by the Exascale Computing Project (ECP). This is a Spack bundle package that installs the CEED software components.

cereal

Homepage:
Spack package:
Versions:
1.2.2, 1.2.1, 1.2.0, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.9.1
Build Dependencies:
cmake
Description:
cereal is a header-only C++11 serialization library. cereal takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. cereal was designed to be fast, light-weight, and easy to extend - it has no external dependencies and can be easily bundled with other code or used standalone.

ceres-solver

Homepage:
Spack package:
Versions:
1.12.0
Build Dependencies:
cmake, eigen, lapack, glog
Link Dependencies:
eigen, lapack, glog
Description:
Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. It can be used to solve Non- linear Least Squares problems with bounds constraints and general unconstrained optimization problems. It is a mature, feature rich, and performant library that has been used in production at Google since 2010.

cfitsio

Homepage:
Spack package:
Versions:
3.450, 3.420, 3.410, 3.370
Build Dependencies:
bzip2
Link Dependencies:
bzip2
Description:
CFITSIO is a library of C and Fortran subroutines for reading and writing data files in FITS (Flexible Image Transport System) data format.

cgal

Homepage:
Spack package:
Versions:
4.13, 4.12, 4.11, 4.9.1, 4.9, 4.7, 4.6.3
Build Dependencies:
cmake, boost, gmp, mpfr, zlib, qt
Link Dependencies:
boost, gmp, mpfr, zlib, qt
Description:
The Computational Geometry Algorithms Library (CGAL) is a C++ library that aims to provide easy access to efficient and reliable algorithms in computational geometry. CGAL is used in various areas needing geometric computation, such as geographic information systems, computer aided design, molecular biology, medical imaging, computer graphics, and robotics.

cgm

Homepage:
Spack package:
Versions:
16.0, 13.1.1, 13.1.0, 13.1
Build Dependencies:
mpi, oce
Link Dependencies:
mpi, oce
Description:
The Common Geometry Module, Argonne (CGMA) is a code library which provides geometry functionality used for mesh generation and other applications.

cgns

Homepage:
Spack package:
Versions:
develop, master, 3.4.0, 3.3.1, 3.3.0
Build Dependencies:
cmake, hdf5, mpi
Link Dependencies:
hdf5, mpi
Description:
The CFD General Notation System (CGNS) provides a general, portable, and extensible standard for the storage and retrieval of computational fluid dynamics (CFD) analysis data.

channelflow

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, eigen, fftw, mpi, hdf5, netcdf, boost
Link Dependencies:
eigen, fftw, mpi, hdf5, netcdf, boost
Description:
Channelflow is a software system for numerical analysis of the incompressible fluid flow in channel geometries, written in C++.

chapel

Homepage:
Spack package:
Versions:
1.19.0, 1.18.0
Description:
Chapel is a modern programming language that is parallel, productive, portable, scalable and open-source.

charliecloud

Homepage:
Spack package:
Versions:
0.9.9, 0.9.8, 0.9.7, 0.9.6, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.2.4
Description:
Lightweight user-defined software stacks for HPC.

charmpp

Homepage:
Spack package:
Versions:
develop, 6.9.0, 6.8.2, 6.8.1, 6.8.0, 6.7.1, 6.7.0, 6.6.1, 6.6.0, 6.5.1
Build Dependencies:
mpi, papi, cuda, automake, autoconf
Link Dependencies:
mpi, papi, cuda, automake, autoconf
Description:
Charm++ is a parallel programming framework in C++ supported by an adaptive runtime system, which enhances user productivity and allows programs to run portably from small multicore computers (your laptop) to the largest supercomputers.

chatterbug

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
mpi, scorep
Link Dependencies:
mpi, scorep
Description:
A suite of communication-intensive proxy applications that mimic commonly found communication patterns in HPC codes. These codes can be used as synthetic codes for benchmarking, or for trace generation using Score-P / OTF2.

check

Homepage:
Spack package:
Versions:
0.10.0
Description:
Check is a unit testing framework for C. It features a simple interface for defining unit tests, putting little in the way of the developer. Tests are run in a separate address space, so both assertion failures and code errors that cause segmentation faults or other signals can be caught. Test results are reportable in the following: Subunit, TAP, XML, and a generic logging format.

chlorop

Homepage:
Spack package:
Versions:
1.1
Run Dependencies:
awk
Description:
Chlorop predicts the presence of chloroplast transit peptides in protein sequences and the location of potential cTP cleavage sites. You will need to obtain the tarball by visiting the URL and completing the form. You can then either run spack install with the tarball in the directory, or add it to a mirror. You will need to set the CHLOROTMP environment variable to the full path of the directory you want chlorop to use as a temporary directory.

chombo

Homepage:
Spack package:
Versions:
develop, 3.2
Build Dependencies:
blas, lapack, gmake, mpi, hdf5
Link Dependencies:
blas, lapack, mpi, hdf5
Description:
The Chombo package provides a set of tools for implementing finite difference and finite-volume methods for the solution of partial differential equations on block-structured adaptively refined logically rectangular (i.e. Cartesian) grids.

chrpath

Homepage:
Spack package:
Versions:
0.16
Description:
chrpath: Modifies the dynamic library load path (rpath and runpath) of compiled programs and libraries.

cistem

Homepage:
Spack package:
Versions:
1.0.0-beta
Build Dependencies:
wx, fftw
Link Dependencies:
wx, fftw
Description:
cisTEM is user-friendly software to process cryo-EM images of macromolecular complexes and obtain high-resolution 3D reconstructions from them.

citcoms

Homepage:
Spack package:
Versions:
3.3.1, 3.2.0
Build Dependencies:
mpi, zlib, exchanger, py-pythia, hc, cuda, hdf5
Link Dependencies:
mpi, zlib, exchanger, hc, cuda, hdf5
Run Dependencies:
py-pythia
Description:
CitcomS is a finite element code designed to solve compressible thermochemical convection problems relevant to Earth's mantle.

cityhash

Homepage:
Spack package:
Versions:
master, 2013-07-31
Description:
CityHash, a family of hash functions for strings.

clamr

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, mpi, mpe
Link Dependencies:
cmake, mpi, mpe
Description:
The CLAMR code is a cell-based adaptive mesh refinement (AMR) mini-app developed as a testbed for hybrid algorithm development using MPI and OpenCL GPU code.

clapack

Homepage:
Spack package:
Versions:
3.2.1
Build Dependencies:
atlas
Link Dependencies:
atlas
Description:
CLAPACK is a f2c'ed version of LAPACK. The CLAPACK library was built using a Fortran to C conversion utility called f2c. The entire Fortran 77 LAPACK library is run through f2c to obtain C code, and then modified to improve readability. CLAPACK's goal is to provide LAPACK for someone who does not have access to a Fortran compiler.

claw

Homepage:
Spack package:
Versions:
1.2.1, 1.2.0, 1.1.0
Build Dependencies:
cmake, java, ant, libxml2, bison
Link Dependencies:
java, ant, libxml2, bison
Description:
CLAW Compiler targets performance portability problem in climate and weather application written in Fortran. From a single source code, it generates architecture specific code decorated with OpenMP or OpenACC

cleaveland4

Homepage:
Spack package:
Versions:
4.4
Build Dependencies:
perl, perl-math-cdf, bowtie, viennarna, r, samtools
Link Dependencies:
bowtie, viennarna, samtools
Run Dependencies:
perl, perl-math-cdf, r
Description:
CleaveLand4: Analysis of degradome data to find sliced miRNA and siRNA targets

cleverleaf

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, samrai, hdf5, boost
Link Dependencies:
samrai, hdf5, boost
Description:
CleverLeaf is a hydrodynamics mini-app that extends CloverLeaf with Adaptive Mesh Refinement using the SAMRAI toolkit from Lawrence Livermore National Laboratory. The primary goal of CleverLeaf is to evaluate the application of AMR to the Lagrangian-Eulerian hydrodynamics scheme used by CloverLeaf.

clfft

Homepage:
Spack package:
Versions:
2.12.2
Build Dependencies:
cmake, opencl, boost
Link Dependencies:
opencl, boost
Description:
a software library containing FFT functions written in OpenCL

clhep

Homepage:
Spack package:
Versions:
2.4.1.0, 2.4.0.4, 2.4.0.2, 2.4.0.1, 2.4.0.0, 2.3.4.6, 2.3.4.5, 2.3.4.4, 2.3.4.3, 2.3.4.2, 2.3.3.2, 2.3.3.1, 2.3.3.0, 2.3.2.2, 2.3.1.1, 2.3.1.0, 2.3.0.0, 2.2.0.8, 2.2.0.5, 2.2.0.4
Build Dependencies:
cmake
Description:
CLHEP is a C++ Class Library for High Energy Physics.

clingo

Homepage:
Spack package:
Versions:
5.2.2
Build Dependencies:
cmake, doxygen, python
Link Dependencies:
python
Description:
Clingo: A grounder and solver for logic programs Clingo is part of the Potassco project for Answer Set Programming (ASP). ASP offers a simple and powerful modeling language to describe combinatorial problems as logic programs. The clingo system then takes such a logic program and computes answer sets representing solutions to the given problem.

cln

Homepage:
Spack package:
Versions:
1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.2, 1.2.1, 1.2.0
Build Dependencies:
autoconf, automake, libtool, m4
Description:
CLN is a library for efficient computations with all kinds of numbers in arbitrary precision. It features number classes for unlimited length integers, rationals, arbitrary precision floating point numbers and much more.

cloc

Homepage:
Spack package:
Versions:
1.80, 1.74
Build Dependencies:
perl
Link Dependencies:
perl
Description:
Count, or compute differences of, physical lines of source code in the given files (may be archives such as compressed tarballs or zip files) and/or recursively below the given directories.

cloog

Homepage:
Spack package:
Versions:
0.18.1, 0.18.0, 0.17.0
Build Dependencies:
gmp, isl
Link Dependencies:
gmp, isl
Description:
CLooG is a free software and library to generate code for scanning Z-polyhedra. That is, it finds a code (e.g. in C, FORTRAN...) that reaches each integral point of one or more parameterized polyhedra.

cloverleaf

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
mpi, cuda
Link Dependencies:
mpi, cuda
Description:
Proxy Application. CloverLeaf is a miniapp that solves the compressible Euler equations on a Cartesian grid, using an explicit, second-order accurate method.

cloverleaf3d

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. CloverLeaf3D is 3D version of the CloverLeaf mini- app. CloverLeaf is a mini-app that solves the compressible Euler equations on a Cartesian grid, using an explicit, second-order accurate method.

clp

Homepage:
Spack package:
Versions:
1.16.11
Description:
Clp (Coin-or linear programming) is an open-source linear programming solver written in C++.

clustalo

Homepage:
Spack package:
Versions:
1.2.4
Build Dependencies:
argtable
Link Dependencies:
argtable
Description:
Clustal Omega: the last alignment program you'll ever need.

clustalw

Homepage:
Spack package:
Versions:
2.1
Description:
Multiple alignment of nucleic acid and protein sequences.

cmake

Homepage:
Spack package:
Versions:
3.14.4, 3.14.3, 3.14.2, 3.14.1, 3.14.0, 3.13.4, 3.13.3, 3.13.2, 3.13.1, 3.13.0, 3.12.4, 3.12.3, 3.12.2, 3.12.1, 3.12.0, 3.11.4, 3.11.3, 3.11.2, 3.11.1, 3.11.0, 3.10.3, 3.10.2, 3.10.1, 3.10.0, 3.9.6, 3.9.4, 3.9.0, 3.8.2, 3.8.1, 3.8.0, 3.7.2, 3.7.1, 3.6.1, 3.6.0, 3.5.2, 3.5.1, 3.5.0, 3.4.3, 3.4.0, 3.3.1, 3.1.0, 3.0.2, 2.8.10.2
Build Dependencies:
curl, expat, zlib, bzip2, xz, libarchive, libuv, rhash, qt, python, py-sphinx, openssl, ncurses, gnutls
Link Dependencies:
curl, expat, zlib, bzip2, xz, libarchive, libuv, rhash, qt, openssl, ncurses, gnutls
Description:
A cross-platform, open-source build system. CMake is a family of tools designed to build, test and package software.

cmocka

Homepage:
Spack package:
Versions:
1.1.1, 1.1.0, 1.0.1
Build Dependencies:
cmake
Description:
Unit-testing framework in pure C

cmor

Homepage:
Spack package:
Versions:
3.3.0, 3.2.0, 3.1.2
Build Dependencies:
uuid, netcdf, udunits2, hdf5, python, py-numpy
Link Dependencies:
uuid, netcdf, udunits2, hdf5, python
Run Dependencies:
py-numpy
Description:
Climate Model Output Rewriter is used to produce CF-compliant netCDF files. The structure of the files created by the library and the metadata they contain fulfill the requirements of many of the climate community's standard model experiments.

cnmem

Homepage:
Spack package:
Versions:
git
Build Dependencies:
cmake
Description:
CNMem mempool for CUDA devices

cnpy

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake
Description:
cnpy: library to read/write .npy and .npz files in C/C++.

cntk

Homepage:
Spack package:
Versions:
master, 2.0
Build Dependencies:
libzip, openblas, mpi, boost, protobuf, kaldi, opencv, cuda, cub, cudnn, nccl, cntk1bitsgd, multiverso
Link Dependencies:
libzip, openblas, mpi, boost, protobuf, kaldi, opencv, cuda, cub, cudnn, nccl, cntk1bitsgd, multiverso
Description:
The Microsoft Cognitive Toolkit is a unified deep-learning toolkit that describes neural networks as a series of computational steps via a directed graph.

cntk1bitsgd

Homepage:
Spack package:
Versions:
master, c8b77d
Description:
CNTK1bitSGD is the header-only 1-bit stochastic gradient descent (1bit- SGD) library for the Computational Network Toolkit (CNTK).

cnvnator

Homepage:
Spack package:
Versions:
0.3.3
Build Dependencies:
samtools, htslib, root, bzip2, curl, lzma, zlib
Link Dependencies:
samtools, htslib, root, bzip2, curl, lzma, zlib
Description:
A tool for CNV discovery and genotyping from depth-of-coverage by mapped reads.

codar-cheetah

Homepage:
Spack package:
Versions:
develop, 0.1
Build Dependencies:
python, savanna
Link Dependencies:
savanna
Run Dependencies:
python
Description:
CODAR Cheetah: The CODAR Experiment Harness for Exascale science applications.

codes

Homepage:
Spack package:
Versions:
develop, 1.1.0, 1.0.0
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, bison, flex, mpi, ross, sst-dumpi
Link Dependencies:
mpi, ross, sst-dumpi
Description:
CO-Design of multi-layer Exascale Storage (CODES) simulation framework

coevp

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
mpi, silo, flann, lapack
Link Dependencies:
mpi, silo, flann, lapack
Description:
CoEVP is a scale-bridging proxy application for embedded viscoplasticity applications. It is created and maintained by The Exascale Co-Design Center for Materials in Extreme Environments (ExMatEx). The code is intended to serve as a vehicle for co-design by allowing others to extend and/or reimplement it as needed to test performance of new architectures, programming models, etc. Due to the size and complexity of the studied models, as well as restrictions on distribution, the currently available LULESH proxy application provides the coarse-scale model implementation and the ASPA proxy application provides the adaptive sampling support.

cohmm

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
gnuplot
Link Dependencies:
gnuplot
Description:
An anticipated important use-case for next-generation supercomputing is multiscale modeling, in which continuum equations for large-scale material deformation are augmented with high-fidelity, fine-scale simulations that provide constitutive data on demand.

coinhsl

Homepage:
Spack package:
Versions:
2015.06.23, 2014.01.17, 2014.01.10
Build Dependencies:
blas
Link Dependencies:
blas
Description:
CoinHSL is a collection of linear algebra libraries (KB22, MA27, MA28, MA54, MA57, MA64, MA77, MA86, MA97, MC19, MC34, MC64, MC68, MC69, MC78, MC80, OF01, ZB01, ZB11) bundled for use with IPOPT and other applications that use these HSL routines. Note: CoinHSL is licensed software. You will need to request a license from Research Councils UK and download a .tar.gz archive of CoinHSL yourself. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

colm

Homepage:
Spack package:
Versions:
0.12.0
Description:
Colm Programming Language Colm is a programming language designed for the analysis and transformation of computer languages. Colm is influenced primarily by TXL. It is in the family of program transformation languages.

colordiff

Homepage:
Spack package:
Versions:
1.0.18
Build Dependencies:
perl
Link Dependencies:
perl
Description:
Colorful diff utility.

comd

Homepage:
Spack package:
Versions:
develop, 1.1
Build Dependencies:
mpi, graphviz
Link Dependencies:
mpi, graphviz
Description:
CoMD is a reference implementation of classical molecular dynamics algorithms and workloads as used in materials science. It is created and maintained by The Exascale Co-Design Center for Materials in Extreme Environments (ExMatEx). The code is intended to serve as a vehicle for co-design by allowing others to extend and/or reimplement it as needed to test performance of new architectures, programming models, etc. New versions of CoMD will be released to incorporate the lessons learned from the co-design process.

commons-lang

Homepage:
Spack package:
Versions:
2.6, 2.4
Build Dependencies:
jdk
Link Dependencies:
jdk
Run Dependencies:
java
Description:
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods. Lang provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, concurrency, creation and serialization and System properties. Additionally it contains basic enhancements to java.util.Date and a series of utilities dedicated to help with building methods, such as hashCode, toString and equals.

commons-lang3

Homepage:
Spack package:
Versions:
3.7
Build Dependencies:
jdk
Link Dependencies:
jdk
Run Dependencies:
java
Description:
The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods. Lang provides a host of helper utilities for the java.lang API, notably String manipulation methods, basic numerical methods, object reflection, concurrency, creation and serialization and System properties. Additionally it contains basic enhancements to java.util.Date and a series of utilities dedicated to help with building methods, such as hashCode, toString and equals.

commons-logging

Homepage:
Spack package:
Versions:
1.2, 1.1.3, 1.1.1
Build Dependencies:
jdk
Link Dependencies:
jdk
Run Dependencies:
java
Description:
When writing a library it is very useful to log information. However there are many logging implementations out there, and a library cannot impose the use of a particular one on the overall application that the library is a part of. The Logging package is an ultra-thin bridge between different logging implementations. A library that uses the commons-logging API can be used with any logging implementation at runtime. Commons-logging comes with support for a number of popular logging implementations, and writing adapters for others is a reasonably simple task.

compiz

Homepage:
Spack package:
Versions:
0.7.8
Build Dependencies:
libxcb, libxcomposite, libxfixes, libxdamage, libxrandr, libxinerama, libice, libsm, libxml2, libxslt, libxrender, libpng, glib, gconf
Link Dependencies:
libxcb, libxcomposite, libxfixes, libxdamage, libxrandr, libxinerama, libice, libsm, libxml2, libxslt, libxrender, libpng, glib, gconf
Description:
compiz - OpenGL window and compositing manager. Compiz is an OpenGL compositing manager that use GLX_EXT_texture_from_pixmap for binding redirected top-level windows to texture objects. It has a flexible plug- in system and it is designed to run well on most graphics hardware.

compositeproto

Homepage:
Spack package:
Versions:
0.4.2
Build Dependencies:
pkgconfig, util-macros
Description:
Composite Extension. This package contains header files and documentation for the composite extension. Library and server implementations are separate.

conduit

Homepage:
Spack package:
Versions:
master, 0.4.0, 0.3.1, 0.3.0, 0.2.1, 0.2.0
Build Dependencies:
cmake, python, py-numpy, hdf5, silo, adios, mpi, py-sphinx, doxygen
Link Dependencies:
python, hdf5, silo, adios, mpi, doxygen
Run Dependencies:
py-numpy
Description:
Conduit is an open source project from Lawrence Livermore National Laboratory that provides an intuitive model for describing hierarchical scientific data in C++, C, Fortran, and Python. It is used for data coupling between packages in-core, serialization, and I/O tasks.

connect-proxy

Homepage:
Spack package:
Versions:
1.105
Description:
`connect.c` is a simple relaying command to make network connection via SOCKS and https proxy

constype

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
pkgconfig, util-macros
Description:
constype prints on the standard output the Sun code for the type of display that the specified device is. It was originally written for SunOS, but has been ported to other SPARC OS'es and to Solaris on both SPARC & x86.

converge

Homepage:
Spack package:
Versions:
2.4.10, 2.3.23, 2.2.0, 2.1.0, 2.0.0
Build Dependencies:
mpi, openmpi
Link Dependencies:
mpi, openmpi
Description:
CONVERGE is a revolutionary computational fluid dynamics (CFD) program that eliminates the grid generation bottleneck from the simulation process. CONVERGE was developed by engine simulation experts and is straightforward to use for both engine and non-engine simulations. Unlike many CFD programs, CONVERGE automatically generates a perfectly orthogonal, structured grid at runtime based on simple, user-defined grid control parameters. This grid generation method completely eliminates the need to manually generate a grid. In addition, CONVERGE offers many other features to expedite the setup process and to ensure that your simulations are as computationally efficient as possible.

coreutils

Homepage:
Spack package:
Versions:
8.29, 8.26, 8.23
Description:
The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.

corset

Homepage:
Spack package:
Versions:
1.06
Description:
Corset is a command-line software program to go from a de novo transcriptome assembly to gene-level counts.

cosmomc

Homepage:
Spack package:
Versions:
2016.11, 2016.06
Build Dependencies:
python, mpi, planck-likelihood, py-matplotlib, py-numpy, py-pandas, py-scipy, py-six
Link Dependencies:
python, mpi, planck-likelihood
Run Dependencies:
python, py-matplotlib, py-numpy, py-pandas, py-scipy, py-six
Description:
CosmoMC is a Fortran 2008 Markov-Chain Monte-Carlo (MCMC) engine for exploring cosmological parameter space, together with Fortran and python code for analysing Monte-Carlo samples and importance sampling (plus a suite of scripts for building grids of runs, plotting and presenting results).

cosp2

Homepage:
Spack package:
Versions:
master
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. CoSP2 represents a sparse linear algebra parallel algorithm for calculating the density matrix in electronic tructure theory. The algorithm is based on a recursive second-order Fermi- Operator expansion method (SP2) and is tailored for density functional based tight-binding calculations of non-metallic systems.

cotter

Homepage:
Spack package:
Versions:
master, 20190205
Build Dependencies:
cmake, erfa, pal, aoflagger
Link Dependencies:
erfa, pal, aoflagger
Description:
Andre Offringa's cotter pre-processing pipeline.

cp2k

Homepage:
Spack package:
Versions:
develop, 6.1, 5.1, 4.1, 3.0
Build Dependencies:
python, fftw, openblas, lapack, intel-mkl, libxsmm, pkgconfig, libint, libxc, mpi, scalapack, elpa, plumed, pexsi, sirius, json-fortran, wannier90
Link Dependencies:
fftw, openblas, lapack, intel-mkl, libxsmm, mpi, scalapack, elpa, plumed, pexsi, sirius, json-fortran
Description:
CP2K is a quantum chemistry and solid state physics software package that can perform atomistic simulations of solid state, liquid, molecular, periodic, material, crystal, and biological systems

cppad

Homepage:
Spack package:
Versions:
develop, 20170114
Build Dependencies:
cmake
Description:
A Package for Differentiation of C++ Algorithms.

cppcheck

Homepage:
Spack package:
Versions:
1.87, 1.81, 1.78, 1.72, 1.68
Run Dependencies:
py-pygments
Description:
A tool for static C/C++ code analysis.

cppgsl

Homepage:
Spack package:
Versions:
develop, 2.0.0, 1.0.0
Build Dependencies:
cmake
Description:
C++ Guideline Support Library

cpprestsdk

Homepage:
Spack package:
Versions:
2.9.1
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

cppunit

Homepage:
Spack package:
Versions:
1.14.0, 1.13.2
Description:
Obsolete Unit testing framework for C++

cppzmq

Homepage:
Spack package:
Versions:
develop, 4.3.0, 4.2.2
Build Dependencies:
cmake, zeromq
Link Dependencies:
zeromq
Description:
C++ binding for 0MQ

cpu-features

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake
Description:
A cross platform C99 library to get cpu features at runtime.

cpuinfo

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake
Description:
cpuinfo is a library to detect essential for performance optimization information about host CPU.

cquery

Homepage:
Spack package:
Versions:
v20180823
Build Dependencies:
cmake, llvm
Link Dependencies:
llvm
Description:
a C++ header-only library for Nearest Neighbor (NN) search wih KD-trees.

cram

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
cmake, python, mpi
Link Dependencies:
python, mpi
Description:
Cram runs many small MPI jobs inside one large MPI job.

cryptopp

Homepage:
Spack package:
Versions:
7.0.0, 6.1.0, 6.0.0, 5.6.5, 5.6.4, 5.6.3, 5.6.2, 5.6.1
Build Dependencies:
gmake
Description:
Crypto++ is an open-source C++ library of cryptographic schemes. The library supports a number of different cryptography algorithms, including authenticated encryption schemes (GCM, CCM), hash functions (SHA-1, SHA2), public-key encryption (RSA, DSA), and a few obsolete/historical encryption algorithms (MD5, Panama).

cscope

Homepage:
Spack package:
Versions:
15.8b
Build Dependencies:
ncurses, flex, bison, pkgconfig
Link Dependencies:
ncurses
Description:
Cscope is a developer's tool for browsing source code.

csdp

Homepage:
Spack package:
Versions:
6.1.1
Build Dependencies:
atlas
Link Dependencies:
atlas
Description:
CSDP is a library of routines that implements a predictor corrector variant of the semidefinite programming algorithm of Helmberg, Rendl, Vanderbei, and Wolkowicz

ctffind

Homepage:
Spack package:
Versions:
4.1.8
Build Dependencies:
wx, fftw
Link Dependencies:
wx, fftw
Description:
Fast and accurate defocus estimation from electron micrographs.

cub

Homepage:
Spack package:
Versions:
1.7.1, 1.6.4, 1.4.1
Description:
CUB is a C++ header library of cooperative threadblock primitives and other utilities for CUDA kernel programming.

cube

Homepage:
Spack package:
Versions:
4.4.3, 4.4.2, 4.4, 4.3.5, 4.3.4, 4.3.3, 4.2.3
Build Dependencies:
cubelib, pkgconfig, dbus, zlib, qt
Link Dependencies:
cubelib, dbus, zlib, qt
Description:
Cube the profile viewer for Score-P and Scalasca profiles. It displays a multi-dimensional performance space consisting of the dimensions: - performance metric - call path - system resource

cubelib

Homepage:
Spack package:
Versions:
4.4.3, 4.4.2, 4.4
Build Dependencies:
pkgconfig, zlib
Link Dependencies:
zlib
Description:
Component of CubeBundle: General purpose C++ library and tools

cubew

Homepage:
Spack package:
Versions:
4.4.2, 4.4.1, 4.4
Build Dependencies:
pkgconfig, zlib
Link Dependencies:
zlib
Description:
Component of CubeBundle: High performance C Writer library

cuda

Homepage:
Spack package:
Versions:
10.0.130, 9.2.88, 9.1.85, 9.0.176, 8.0.61, 8.0.44, 7.5.18, 6.5.14
Description:
CUDA is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). Note: This package does not currently install the drivers necessary to run CUDA. These will need to be installed manually. See: https://docs.nvidia.com/cuda/ for details.

cuda-memtest

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, cuda
Link Dependencies:
cuda
Description:
Maintained and updated fork of cuda_memtest. original homepage: http://sourceforge.net/projects/cudagpumemtest . This software tests GPU memory for hardware errors and soft errors using CUDA or OpenCL.

cudnn

Homepage:
Spack package:
Versions:
7.5.1-10.1-x86_64, 7.5.1-10.1-ppc64le, 7.5.1-10.0-x86_64, 7.5.1-10.0-ppc64le, 7.5.0-10.1-x86_64, 7.5.0-10.1-ppc64le, 7.5.0-10.0-x86_64, 7.5.0-10.0-ppc64le, 7.3.0, 7.2.1, 6.0, 5.1
Build Dependencies:
cuda
Link Dependencies:
cuda
Description:
NVIDIA cuDNN is a GPU-accelerated library of primitives for deep neural networks

cups

Homepage:
Spack package:
Versions:
2.2.3
Build Dependencies:
gnutls
Link Dependencies:
gnutls
Description:
CUPS is the standards-based, open source printing system developed by Apple Inc. for macOS and other UNIX-like operating systems. CUPS uses the Internet Printing Protocol (IPP) to support printing to local and network printers. This provides the core CUPS libraries, not a complete CUPS install.

curl

Homepage:
Spack package:
Versions:
7.63.0, 7.60.0, 7.59.0, 7.56.0, 7.54.0, 7.53.1, 7.52.1, 7.50.3, 7.50.2, 7.50.1, 7.49.1, 7.47.1, 7.46.0, 7.45.0, 7.44.0, 7.43.0, 7.42.1
Build Dependencies:
openssl, zlib, nghttp2, libssh2, libssh, krb5
Link Dependencies:
openssl, zlib, nghttp2, libssh2, libssh, krb5
Description:
cURL is an open source command line tool and library for transferring data with URL syntax

cvs

Homepage:
Spack package:
Versions:
1.12.13
Description:
CVS a very traditional source control system

czmq

Homepage:
Spack package:
Versions:
4.1.1, 4.0.2, 3.0.2
Build Dependencies:
libtool, automake, autoconf, pkgconfig, libuuid, zeromq
Link Dependencies:
libuuid, zeromq
Description:
A C interface to the ZMQ library

dakota

Homepage:
Spack package:
Versions:
6.9, 6.3
Build Dependencies:
cmake, netlib-lapack, blas, mpi, python, boost
Link Dependencies:
netlib-lapack, blas, mpi, python, boost
Description:
The Dakota toolkit provides a flexible, extensible interface between analysis codes and iterative systems analysis methods. Dakota contains algorithms for: - optimization with gradient and non gradient-based methods; - uncertainty quantification with sampling, reliability, stochastic - expansion, and epistemic methods; - parameter estimation with nonlinear least squares methods; - sensitivity/variance analysis with design of experiments and - parameter study methods. These capabilities may be used on their own or as components within advanced strategies such as hybrid optimization, surrogate-based optimization, mixed integer nonlinear programming, or optimization under uncertainty.

daligner

Homepage:
Spack package:
Versions:
1.0
Description:
Daligner: The Dazzler "Overlap" Module.

damageproto

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
pkgconfig, util-macros
Description:
X Damage Extension. This package contains header files and documentation for the X Damage extension. Library and server implementations are separate.

damaris

Homepage:
Spack package:
Versions:
master, 1.3.1
Build Dependencies:
cmake, mpi, boost, xsd, xerces-c, hdf5, catalyst, visit
Link Dependencies:
mpi, boost, xsd, xerces-c, hdf5, catalyst, visit
Description:
Damaris is a middleware for I/O and in situ analytics targeting large- scale, MPI-based HPC simulations.

damselfly

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
cmake
Description:
Damselfly is a model-based parallel network simulator.

darshan-runtime

Homepage:
Spack package:
Versions:
develop, 3.1.7, 3.1.6, 3.1.0, 3.0.0
Build Dependencies:
mpi, zlib
Link Dependencies:
mpi, zlib
Description:
Darshan (runtime) is a scalable HPC I/O characterization tool designed to capture an accurate picture of application I/O behavior, including properties such as patterns of access within files, with minimum overhead. DarshanRuntime package should be installed on systems where you intend to instrument MPI applications.

darshan-util

Homepage:
Spack package:
Versions:
develop, 3.1.7, 3.1.6, 3.1.0, 3.0.0
Build Dependencies:
zlib, bzip2
Link Dependencies:
zlib, bzip2
Run Dependencies:
bzip2
Description:
Darshan (util) is collection of tools for parsing and summarizing log files produced by Darshan (runtime) instrumentation. This package is typically installed on systems (front-end) where you intend to analyze log files produced by Darshan (runtime).

dash

Homepage:
Spack package:
Versions:
0.5.9.1
Build Dependencies:
autoconf, automake, libtool, m4
Link Dependencies:
libedit
Description:
The Debian Almquist Shell.

datamash

Homepage:
Spack package:
Versions:
1.3, 1.1.0, 1.0.7, 1.0.6, 1.0.5
Description:
GNU datamash is a command-line program which performs basic numeric, textual and statistical operations on input textual data files.

dataspaces

Homepage:
Spack package:
Versions:
develop, 1.6.2
Build Dependencies:
m4, automake, autoconf, libtool, mpi
Link Dependencies:
mpi
Description:
an extreme scale data management framework.

davix

Homepage:
Spack package:
Versions:
0.6.8
Build Dependencies:
cmake, pkgconfig, libxml2, libuuid, openssl
Link Dependencies:
libxml2, libuuid, openssl
Description:
High-performance file management over WebDAV/HTTP.

dbcsr

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, blas, lapack, mpi, py-fypp
Link Dependencies:
blas, lapack, mpi, py-fypp
Description:
Distributed Block Compressed Sparse Row matrix library.

dbus

Homepage:
Spack package:
Versions:
1.12.8, 1.11.2, 1.9.0, 1.8.8, 1.8.6, 1.8.4, 1.8.2
Build Dependencies:
pkgconfig, expat, glib
Link Dependencies:
expat, glib
Description:
D-Bus is a message bus system, a simple way for applications to talk to one another. D-Bus supplies both a system daemon (for events such new hardware device printer queue ) and a per-user-login-session daemon (for general IPC needs among user applications). Also, the message bus is built on top of a general one-to-one message passing framework, which can be used by any two applications to communicate directly (without going through the message bus daemon).

dcmtk

Homepage:
Spack package:
Versions:
3.6.3, 3.6.2
Build Dependencies:
cmake, openssl, zlib, libtiff, libpng, libxml2, libiconv
Link Dependencies:
openssl, zlib, libtiff, libpng, libxml2, libiconv
Description:
DCMTK is a collection of libraries and applications implementing large parts of the DICOM standard.

dd4hep

Homepage:
Spack package:
Versions:
develop, 1.10.0
Build Dependencies:
cmake, root, boost, xerces-c, geant4
Link Dependencies:
root, boost, xerces-c, geant4
Description:
DD4hep is a software framework for providing a complete solution for full detector description (geometry, materials, visualization, readout, alignment, calibration, etc.) for the full experiment life cycle (detector concept development, detector optimization, construction, operation). It offers a consistent description through a single source of detector information for simulation, reconstruction, analysis, etc. It distributed under the LGPLv3 License.

dealii

Homepage:
Spack package:
Versions:
develop, 9.1.0, 9.0.1, 9.0.0, 8.5.1, 8.5.0, 8.4.2, 8.4.1, 8.4.0, 8.3.0, 8.2.1, 8.1.0
Build Dependencies:
cuda, cmake, blas, boost, bzip2, lapack, suite-sparse, tbb, zlib, mpi, adol-c, arpack-ng, assimp, doxygen, graphviz, ginkgo, gmsh, gsl, hdf5, metis, muparser, nanoflann, netcdf, netcdf-cxx, oce, p4est, petsc, python, scalapack, slepc, sundials, symengine, trilinos
Link Dependencies:
cuda, blas, boost, bzip2, lapack, suite-sparse, tbb, zlib, mpi, adol-c, arpack-ng, assimp, doxygen, graphviz, ginkgo, gsl, hdf5, metis, muparser, nanoflann, netcdf, netcdf-cxx, oce, p4est, petsc, python, scalapack, slepc, sundials, symengine, trilinos
Run Dependencies:
gmsh
Description:
C++ software library providing well-documented tools to build finite element codes for a broad variety of PDEs.

dealii-parameter-gui

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, qt
Link Dependencies:
qt
Description:
A qt based graphical user interface for editing deal.II .prm parameter files.

deconseq-standalone

Homepage:
Spack package:
Versions:
0.4.3
Build Dependencies:
perl
Link Dependencies:
perl
Description:
The DeconSeq tool can be used to automatically detect and efficiently remove sequence contaminations from genomic and metagenomic datasets.

dejagnu

Homepage:
Spack package:
Versions:
1.6, 1.4.4
Build Dependencies:
expect, tcl
Link Dependencies:
expect, tcl
Description:
DejaGnu is a framework for testing other programs. Its purpose is to provide a single front end for all tests.

delly2

Homepage:
Spack package:
Versions:
2017-08-03
Build Dependencies:
htslib, boost, bcftools
Link Dependencies:
htslib, boost, bcftools
Description:
Delly2 is an integrated structural variant prediction method that can discover, genotype and visualize deletions, tandem duplications, inversions and translocations at single-nucleotide resolution in short- read massively parallel sequencing data..

denovogear

Homepage:
Spack package:
Versions:
1.1.1, 1.1.0
Build Dependencies:
cmake, boost, htslib, eigen
Description:
DeNovoGear is a software package to detect de novo mutations using next- generation sequencing data. It supports the analysis of many differential experimental designs and uses advanced statistical models to reduce the false positve rate.

dftfe

Homepage:
Spack package:
Versions:
0.6.0, 0.5.2, 0.5.1, 0.5.0
Build Dependencies:
cmake, mpi, dealii, scalapack, alglib, libxc, spglib, libxml2
Link Dependencies:
mpi, dealii, scalapack, alglib, libxc, spglib, libxml2
Description:
Real-space DFT calculations using Finite Elements

dia

Homepage:
Spack package:
Versions:
0.97.3
Build Dependencies:
intltool, gettext, pkgconfig, gtkplus, libxslt, python, swig, libsm, libuuid, libxinerama, libxrender, libxml2, freetype
Link Dependencies:
gtkplus, libxslt, python, swig, libsm, libuuid, libxinerama, libxrender, libxml2, freetype
Description:
Dia is a program for drawing structured diagrams.

dialign-tx

Homepage:
Spack package:
Versions:
1.0.2
Description:
DIALIGN-TX: greedy and progressive approaches for segment-based multiple sequence alignment

diamond

Homepage:
Spack package:
Versions:
0.9.23, 0.9.22, 0.9.21, 0.9.20, 0.9.19, 0.9.14, 0.8.38, 0.8.26
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Description:
DIAMOND is a sequence aligner for protein and translated DNA searches, designed for high performance analysis of big sequence data.

diffsplice

Homepage:
Spack package:
Versions:
0.1.2beta, 0.1.1
Description:
A novel tool for discovering and quantitating alternative splicing variants present in an RNA-seq dataset, without relying on annotated transcriptome or pre-determined splice pattern.

diffutils

Homepage:
Spack package:
Versions:
3.7, 3.6
Description:
GNU Diffutils is a package of several programs related to finding differences between files.

direnv

Homepage:
Spack package:
Versions:
2.11.3
Build Dependencies:
go
Description:
direnv is an environment switcher for the shell.

discovar

Homepage:
Spack package:
Versions:
52488
Description:
DISCOVAR is a variant caller and small genome assembler.

discovardenovo

Homepage:
Spack package:
Versions:
52488
Build Dependencies:
samtools, jemalloc
Link Dependencies:
samtools, jemalloc
Description:
DISCOVAR de novo is a large (and small) de novo genome assembler. It quickly generates highly accurate and complete assemblies using the same single library data as used by DISCOVAR. It currently doesn't support variant calling, for that, please use DISCOVAR instead.

dislin

Homepage:
Spack package:
Versions:
11.1.linux.i586_64, 11.0.linux.i586_64
Build Dependencies:
motif, gl, glx
Link Dependencies:
motif, gl, glx
Description:
DISLIN is a high level and easy to use graphics library for displaying data as curves, bar graphs, pie charts, 3D-colour plots, surfaces, contours and maps.

diy

Homepage:
Spack package:
Versions:
master, 3.5.0
Build Dependencies:
cmake
Description:
Data-parallel out-of-core library

dlpack

Homepage:
Spack package:
Versions:
master
Description:
DLPack is an RFC for common tensor and operator guidelines in deep learning systems.

dmd

Homepage:
Spack package:
Versions:
2.081.1
Build Dependencies:
openssl, curl
Link Dependencies:
openssl, curl
Description:
DMD is the reference compiler for the D programming language.

dmlc-core

Homepage:
Spack package:
Versions:
master, 20170508
Build Dependencies:
cmake
Description:
DMLC-Core is the backbone library to support all DMLC projects, offers the bricks to build efficient and scalable distributed machine learning libraries.

dmtcp

Homepage:
Spack package:
Versions:
2.5.2
Description:
DMTCP (Distributed MultiThreaded Checkpointing) transparently checkpoints a single-host or distributed computation in user-space -- with no modifications to user code or to the O/S.

dmxproto

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
pkgconfig, util-macros
Description:
Distributed Multihead X (DMX) Extension. This extension defines a protocol for clients to access a front-end proxy X server that controls multiple back-end X servers making up a large display.

docbook-xml

Homepage:
Spack package:
Versions:
4.5
Description:
Docbook DTD XML files.

docbook-xsl

Homepage:
Spack package:
Versions:
1.79.2
Build Dependencies:
docbook-xml
Link Dependencies:
docbook-xml
Description:
DocBook XSLT 1.0 Stylesheets.

dos2unix

Homepage:
Spack package:
Versions:
7.3.4
Description:
DOS/Mac to Unix and vice versa text file format converter.

dotnet-core-sdk

Homepage:
Spack package:
Versions:
2.1.300
Description:
The .NET Core SDK is a powerful development environment to write applications for all types of infrastructure.

double-conversion

Homepage:
Spack package:
Versions:
2.0.1, 2.0.0, 1.1.5, 1.1.4, 1.1.3
Build Dependencies:
cmake
Description:
This project (double-conversion) provides binary-decimal and decimal- binary routines for IEEE doubles. The library consists of efficient conversion routines that have been extracted from the V8 JavaScript engine. The code has been refactored and improved so that it can be used more easily in other projects. There is extensive documentation in src/double-conversion.h. Other examples can be found in test/cctest/test-conversions.cc.

doxygen

Homepage:
Spack package:
Versions:
1.8.15, 1.8.14, 1.8.12, 1.8.11, 1.8.10
Build Dependencies:
cmake, flex, bison
Run Dependencies:
graphviz
Description:
Doxygen is the de facto standard tool for generating documentation from annotated C++ sources, but it also supports other popular programming languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D..

draco

Homepage:
Spack package:
Versions:
develop, 7_1_0, 6_25_0, 6_23_0, 6_22_0, 6_21_0, 6_20_1, 6_20_0
Build Dependencies:
cmake, mpi, random123, gsl, python, lapack, eospac, parmetis, qt, superlu-dist
Run Dependencies:
mpi, python, numdiff, qt
Description:
Draco is an object-oriented component library geared towards numerically intensive, radiation (particle) transport applications built for parallel computing hardware. It consists of semi-independent packages and a robust build system.

dri2proto

Homepage:
Spack package:
Versions:
2.8
Build Dependencies:
pkgconfig, util-macros
Description:
Direct Rendering Infrastructure 2 Extension. This extension defines a protocol to securely allow user applications to access the video hardware without requiring data to be passed through the X server.

dri3proto

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
pkgconfig, util-macros
Description:
Direct Rendering Infrastructure 3 Extension. This extension defines a protocol to securely allow user applications to access the video hardware without requiring data to be passed through the X server.

ds

Homepage:
Spack package:
Versions:
9.8.0
Build Dependencies:
autoconf, automake, m4, libtool, libx11, libxml2, libxslt, openssl, tcl, tcl-tclxml, tk
Link Dependencies:
libx11, libxml2, libxslt, openssl, tcl, tcl-tclxml, tk
Description:
SAOImage DS9 is an astronomical imaging and data visualization application.

dsdp

Homepage:
Spack package:
Versions:
5.8
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
The DSDP software is a free open source implementation of an interior- point method for semidefinite programming. It provides primal and dual solutions, exploits low-rank structure and sparsity in the data, and has relatively low memory requirements for an interior-point method. It allows feasible and infeasible starting points and provides approximate certificates of infeasibility when no feasible solution exists.

dsrc

Homepage:
Spack package:
Versions:
2.0.2
Description:
DNA Sequence Reads Compression is an application designed for compression of data files containing reads from DNA sequencing in FASTQ format.

dtcmp

Homepage:
Spack package:
Versions:
1.1.0, 1.0.3
Build Dependencies:
mpi, lwgrp
Link Dependencies:
mpi, lwgrp
Description:
The Datatype Comparison Library provides comparison operations and parallel sort algorithms for MPI applications.

dyninst

Homepage:
Spack package:
Versions:
develop, 10.1.0, 10.0.0, 9.3.2, 9.3.0, 9.2.0, 9.1.0, 8.2.1
Build Dependencies:
cmake, boost, libiberty, libdwarf, tbb
Link Dependencies:
boost, libiberty, elf, libdwarf, tbb
Description:
API for dynamic binary instrumentation. Modify programs while they are executing without recompiling, re-linking, or re-executing.

dysco

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
cmake, casacore, gsl, boost
Link Dependencies:
casacore, gsl, boost
Description:
Dysco is a compressing storage manager for Casacore mearement sets.

ea-utils

Homepage:
Spack package:
Versions:
1.04.807
Build Dependencies:
subversion, zlib, gsl, bamtools, perl
Link Dependencies:
subversion, zlib, gsl, bamtools
Description:
Command-line tools for processing biological sequencing data. Barcode demultiplexing, adapter trimming, etc. Primarily written to support an Illumina based pipeline - but should work with any FASTQs.

easybuild

Homepage:
Spack package:
Versions:
3.1.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-easybuild-framework, py-easybuild-easyblocks, py-easybuild-easyconfigs
Description:
EasyBuild is a software build and installation framework for (scientific) software on HPC systems.

ebms

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
This is a miniapp for the Energy Banding Monte Carlo (EBMC) neutron transportation simulation code. It is adapted from a similar miniapp provided by Andrew Siegel, whose algorithm is described in [1], where only one process in a compute node is used, and the compute nodes are divided into memory nodes and tracking nodes. Memory nodes do not participate in particle tracking. Obviously, there is a lot of resource waste in this design.

eccodes

Homepage:
Spack package:
Versions:
2.5.0, 2.2.0
Build Dependencies:
cmake, netcdf, openjpeg, jasper, libpng, libaec, python, py-numpy
Link Dependencies:
netcdf, openjpeg, jasper, libpng, libaec, python
Run Dependencies:
python, py-numpy
Description:
ecCodes is a package developed by ECMWF for processing meteorological data in GRIB (1/2), BUFR (3/4) and GTS header formats.

ecflow

Homepage:
Spack package:
Versions:
4.11.1
Build Dependencies:
cmake, boost, qt
Link Dependencies:
boost, qt
Description:
ecFlow is a work flow package that enables users to run a large number of programs (with dependencies on each other and on time) in a controlled environment. It provides tolerance for hardware and software failures, combined with good restart capabilities.

eclipse-gcj-parser

Homepage:
Spack package:
Versions:
4.8
Description:
GCJ requires the Eclipse Java parser, but does not ship with it. This builds that parser into an executable binary, thereby making GCJ work.

ecp-io-sdk

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
cmake, hdf5, adios2, parallel-netcdf, veloc, unifycr, darshan-runtime, darshan-util, mercury
Link Dependencies:
hdf5, adios2, parallel-netcdf, veloc, unifycr, darshan-runtime, darshan-util, mercury
Description:
ECP I/O Services SDK

ecp-proxy-apps

Homepage:
Spack package:
Versions:
2.1, 2.0, 1.1, 1.0
Build Dependencies:
amg, miniamr, ember, miniqmc, minivite, picsarlite, thornado-mini, candle-benchmarks, laghos, macsio, sw4lite, xsbench, examinimd, nekbone, swfft, minife, minitri, comd
Link Dependencies:
amg, miniamr, ember, miniqmc, minivite, picsarlite, thornado-mini, candle-benchmarks, laghos, macsio, sw4lite, xsbench, examinimd, nekbone, swfft, minife, minitri, comd
Description:
This is a collection of packages that represents the official suite of DOE/ECP proxy applications. This is a Spack bundle package that installs the ECP proxy application suite.

ecp-viz-sdk

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
cmake, paraview, catalyst, vtkm, ascent, visit, zfp, sz
Link Dependencies:
paraview, catalyst, vtkm, ascent, visit, zfp, sz
Description:
ECP Viz & Analysis SDK

ed

Homepage:
Spack package:
Versions:
1.4
Description:
GNU ed is a line-oriented text editor. It is used to create, display, modify and otherwise manipulate text files, both interactively and via shell scripts.

editline

Homepage:
Spack package:
Versions:
1.16.0
Build Dependencies:
autoconf, automake, libtool, m4, ncurses
Link Dependencies:
ncurses
Description:
A readline() replacement for UNIX without termcap (ncurses)

editres

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libxaw, libx11, libxt, libxmu, pkgconfig, util-macros
Link Dependencies:
libxaw, libx11, libxt, libxmu
Description:
Dynamic resource editor for X Toolkit applications.

eigen

Homepage:
Spack package:
Versions:
3.3.7, 3.3.5, 3.3.4, 3.3.3, 3.3.1, 3.2.10, 3.2.9, 3.2.8, 3.2.7
Build Dependencies:
cmake, metis, scotch, fftw, suite-sparse, mpfr, gmp
Link Dependencies:
metis, scotch, fftw, suite-sparse, mpfr, gmp
Description:
Eigen is a C++ template library for linear algebra matrices, vectors, numerical solvers, and related algorithms.

elasticsearch

Homepage:
Spack package:
Versions:
6.4.0, 6.2.4
Run Dependencies:
jdk
Description:
Elasticsearch is a search engine based on Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.

elemental

Homepage:
Spack package:
Versions:
develop, 0.87.7, 0.87.6
Build Dependencies:
cmake, blas, openblas, intel-mkl, veclibfort, essl, lapack, netlib-lapack, metis, mpi, scalapack, python, gmp, mpc, mpfr
Link Dependencies:
blas, openblas, intel-mkl, veclibfort, essl, lapack, netlib-lapack, metis, mpi, scalapack, python, gmp, mpc, mpfr
Description:
Elemental: Distributed-memory dense and sparse-direct linear algebra and optimization library.

elfutils

Homepage:
Spack package:
Versions:
0.176, 0.175, 0.174, 0.173, 0.170, 0.168, 0.163
Build Dependencies:
gettext, m4
Link Dependencies:
bzip2, xz, zlib, gettext
Description:
elfutils is a collection of various binary tools such as eu-objdump, eu- readelf, and other utilities that allow you to inspect and manipulate ELF files. Refer to Table 5.Tools Included in elfutils for Red Hat Developer for a complete list of binary tools that are distributed with the Red Hat Developer Toolset version of elfutils.

elk

Homepage:
Spack package:
Versions:
3.3.17
Build Dependencies:
blas, lapack, fftw, mpi, libxc
Link Dependencies:
blas, lapack, fftw, mpi, libxc
Description:
An all-electron full-potential linearised augmented-plane wave (FP-LAPW) code with many advanced features.

elmer-fem

Homepage:
Spack package:
Versions:
8.4
Build Dependencies:
cmake, mpi, netcdf-fortran, blas, lapack, mumps, hypre, trilinos, zoltan, lua
Link Dependencies:
mpi, netcdf-fortran, blas, lapack, mumps, hypre, trilinos, zoltan, lua
Description:
Elmer is an open source multiphysical simulation software. It includes physical models of fluid dynamics, structural mechanics, electromagnetics, heat transfer and acoustics.

elpa

Homepage:
Spack package:
Versions:
2018.05.001.rc1, 2017.11.001, 2017.05.003, 2017.05.002, 2016.11.001.pre, 2016.05.004, 2016.05.003, 2015.11.001
Build Dependencies:
mpi, blas, lapack, scalapack
Link Dependencies:
mpi, blas, lapack, scalapack
Description:
Eigenvalue solvers for Petaflop-Applications (ELPA)

elsd

Homepage:
Spack package:
Versions:
master
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
ELSD: Ellipse and Line Segment Detector

elsdc

Homepage:
Spack package:
Versions:
master
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
ELSDc: Ellipse and Line Segment Detector, with Continuous validation.

emacs

Homepage:
Spack package:
Versions:
26.1, 25.3, 25.2, 25.1, 24.5
Build Dependencies:
pkgconfig, ncurses, pcre, zlib, libtiff, libpng, libxpm, giflib, libx11, libxaw, gtkplus, gnutls
Link Dependencies:
ncurses, pcre, zlib, libtiff, libpng, libxpm, giflib, libx11, libxaw, gtkplus, gnutls
Description:
The Emacs programmable text editor.

ember

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Ember Communication Pattern Library The Ember suite provides communication patterns in a simplified setting (simplified by the removal of application calculations, control flow, etc.).

emboss

Homepage:
Spack package:
Versions:
6.6.0
Build Dependencies:
libxpm, libgd, postgresql
Link Dependencies:
libxpm, libgd, postgresql
Description:
EMBOSS is a free Open Source software analysis package specially developed for the needs of the molecular biology (e.g. EMBnet) user community

encodings

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org encodings font.

energyplus

Homepage:
Spack package:
Versions:
8.9.0
Description:
EnergyPlus is a whole building energy simulation program that engineers, architects, and researchers use to model both energy consumption for heating, cooling, ventilation, lighting and plug and process loads and water use in buildings

entrezdirect

Homepage:
Spack package:
Versions:
10.7.20190114
Run Dependencies:
perl, perl-html-parser, perl-libwww-perl, perl-lwp-protocol-https, perl-http-message, perl-xml-simple
Description:
Entrez Direct (EDirect) provides access to the NCBI's suite of interconnected databases (publication, sequence, structure, gene, variation, expression, etc.) from a UNIX terminal window.

environment-modules

Homepage:
Spack package:
Versions:
4.2.4, 4.2.3, 4.2.2, 4.2.1, 4.2.0, 4.1.4, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.0, 3.2.10
Build Dependencies:
tcl
Link Dependencies:
tcl
Run Dependencies:
tcl
Description:
The Environment Modules package provides for the dynamic modification of a user's environment via module files.

eospac

Homepage:
Spack package:
Versions:
6.4.0beta.4, 6.4.0beta.3, 6.4.0beta.2, 6.4.0beta.1, 6.4.0, 6.3.1
Description:
A collection of C routines that can be used to access the Sesame data library.

eqr

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
autoconf, automake, libtool, m4, mpi, r-rinside, r-rcpp, r, tcl, swig
Link Dependencies:
mpi, r-rinside, r-rcpp, r, tcl, swig
Description:
EMEWS Queues for R (EQ/R) Installs EQ/R.

er

Homepage:
Spack package:
Versions:
master, 0.0.3
Build Dependencies:
cmake, mpi, kvtree, redset, shuffile
Link Dependencies:
mpi, kvtree, redset, shuffile
Description:
Encoding and redundancy on a file set

erfa

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
m4, autoconf, automake, libtool
Description:
ERFA(Essential Routines for Fundamental Astronomy) is a C library containing key algorithms for astronomy.

erne

Homepage:
Spack package:
Versions:
2.1.1
Build Dependencies:
boost, openmpi
Link Dependencies:
boost
Run Dependencies:
boost, openmpi
Description:
The Extended Randomized Numerical alignEr using BWT

es

Homepage:
Spack package:
Versions:
0.9.1
Build Dependencies:
readline
Link Dependencies:
readline
Description:
Es is an extensible shell. The language was derived from the Plan 9 shell, rc, and was influenced by functional programming languages, such as Scheme, and the Tcl embeddable programming language. This implementation is derived from Byron Rakitzis's public domain implementation of rc.

esmf

Homepage:
Spack package:
Versions:
7.0.1
Build Dependencies:
zlib, libxml2, mpi, lapack, netcdf, netcdf-fortran, parallel-netcdf, xerces-c
Link Dependencies:
zlib, libxml2, mpi, lapack, netcdf, netcdf-fortran, parallel-netcdf, xerces-c
Test Dependencies:
perl
Description:
The Earth System Modeling Framework (ESMF) is high-performance, flexible software infrastructure for building and coupling weather, climate, and related Earth science applications. The ESMF defines an architecture for composing complex, coupled modeling systems and includes data structures and utilities for developing individual models.

essl

Homepage:
Spack package:
Description:
IBM's Engineering and Scientific Subroutine Library (ESSL).

ethminer

Homepage:
Spack package:
Versions:
0.12.0
Build Dependencies:
cmake, python, boost, json-c, curl, zlib, cuda, mesa
Link Dependencies:
python, boost, json-c, curl, zlib, cuda, mesa
Description:
The ethminer is an Ethereum GPU mining worker.

etsf-io

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
netcdf-fortran, hdf5
Link Dependencies:
netcdf-fortran, hdf5
Description:
ETSF_IO is a library implementing the Nanoquanta/ETSF file format specifications. ETSF_IO enables an architecture-independent exchange of crystallographic data, electronic wavefunctions, densities and potentials, as well as spectroscopic data. It is meant to be used by quantum-physical and quantum-chemical applications relying upon Density Functional Theory (DFT).

everytrace

Homepage:
Spack package:
Versions:
develop, 0.2.2
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Get stack trace EVERY time a program exits.

everytrace-example

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, everytrace, openmpi
Link Dependencies:
everytrace, openmpi
Description:
Get stack trace EVERY time a program exits.

evieext

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
pkgconfig, util-macros
Description:
Extended Visual Information Extension (XEVIE). This extension defines a protocol for a client to determine information about core X visuals beyond what the core protocol provides.

exabayes

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
ExaBayes is a software package for Bayesian tree inference. It is particularly suitable for large-scale analyses on computer clusters.

examinimd

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
kokkos, mpi
Link Dependencies:
kokkos, mpi
Description:
ExaMiniMD is a proxy application and research vehicle for particle codes, in particular Molecular Dynamics (MD). Compared to previous MD proxy apps (MiniMD, COMD), its design is significantly more modular in order to allow independent investigation of different aspects. To achieve that the main components such as force calculation, communication, neighbor list construction and binning are derived classes whose main functionality is accessed via virtual functions. This allows a developer to write a new derived class and drop it into the code without touching much of the rest of the application.

exampm

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake
Description:
Exascale Material Point Method (MPM) Mini-App

exasp2

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
bml, blas, lapack, mpi
Link Dependencies:
bml, blas, lapack, mpi
Description:
ExaSP2 is a reference implementation of typical linear algebra algorithms and workloads for a quantum molecular dynamics (QMD) electronic structure code. The algorithm is based on a recursive second- order Fermi-Operator expansion method (SP2) and is tailored for density functional based tight-binding calculations of material systems. The SP2 algorithm variants are part of the Los Alamos Transferable Tight-binding for Energetics (LATTE) code, based on a matrix expansion of the Fermi operator in a recursive series of generalized matrix-matrix multiplications. It is created and maintained by Co-Design Center for Particle Applications (CoPA). The code is intended to serve as a vehicle for co-design by allowing others to extend and/or reimplement as needed to test performance of new architectures, programming models, etc.

exchanger

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
python, py-merlin, py-pythia
Run Dependencies:
python, py-pythia
Description:
Exchanger is a package containing several C++ base classes. These classes, when customized for a solver, can provide communication channels between solvers. This packaged is used by CitcomS for solver coupling.

exmcutils

Homepage:
Spack package:
Versions:
0.5.6
Description:
ExM C-Utils: Generic C utility library for ADLB/X and Swift/T

exodusii

Homepage:
Spack package:
Versions:
master, 2016-08-09
Build Dependencies:
cmake, mpi, netcdf
Link Dependencies:
mpi, netcdf
Description:
Exodus II is a C++/Fortran library developed to store and retrieve data for finite element analyses. It's used for preprocessing (problem definition), postprocessing (results visualization), and data transfer between codes. An Exodus II data file is a random access, machine independent, binary file that is written and read via C, C++, or Fortran API routines.

exonerate

Homepage:
Spack package:
Versions:
2.4.0
Build Dependencies:
pkgconfig, glib
Link Dependencies:
glib
Description:
Pairwise sequence alignment of DNA and proteins

expat

Homepage:
Spack package:
Versions:
2.2.5, 2.2.2, 2.2.0
Build Dependencies:
libbsd
Link Dependencies:
libbsd
Description:
Expat is an XML parser library written in C.

expect

Homepage:
Spack package:
Versions:
5.45
Build Dependencies:
tcl, automake, autoconf, libtool, m4
Link Dependencies:
tcl
Description:
Expect is a tool for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc.

express

Homepage:
Spack package:
Versions:
1.5.2, 1.5.1
Build Dependencies:
cmake, boost, bamtools, zlib
Link Dependencies:
boost, bamtools, zlib
Description:
eXpress is a streaming tool for quantifying the abundances of a set of target sequences from sampled subsequences.

extrae

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
mpi, dyninst, libunwind, boost, libdwarf, papi, libxml2, gettext, binutils
Link Dependencies:
mpi, dyninst, libunwind, boost, libdwarf, papi, elf, libxml2, gettext, binutils
Description:
Extrae is the package devoted to generate tracefiles which can be analyzed later by Paraver. Extrae is a tool that uses different interposition mechanisms to inject probes into the target application so as to gather information regarding the application performance. The Extrae instrumentation package can instrument the MPI programin model, and the following parallel programming models either alone or in conjunction with MPI : OpenMP, CUDA, OpenCL, pthread, OmpSs

exuberant-ctags

Homepage:
Spack package:
Versions:
5.8
Description:
The canonical ctags generator

eztrace

Homepage:
Spack package:
Versions:
1.1-8
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
EZTrace is a tool to automatically generate execution traces of HPC applications.

f18

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, llvm
Link Dependencies:
llvm
Description:
F18 is a front-end for Fortran intended to replace the existing front- end in the Flang compiler

f90cache

Homepage:
Spack package:
Versions:
0.99
Description:
f90cache is a compiler cache. It acts as a caching pre-processor to Fortran compilers, using the -E compiler switch and a hash to detect when a compilation can be satisfied from cache. This often results in a great speedup in common compilations.

fabtests

Homepage:
Spack package:
Versions:
1.6.0, 1.5.3
Build Dependencies:
libfabric
Link Dependencies:
libfabric
Description:
Fabtests provides a set of examples that uses libfabric. DEPRECATED. Fabtests has merged with the libfabric git repo.

falcon

Homepage:
Spack package:
Versions:
2017-05-30
Build Dependencies:
python, py-networkx
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-pypeflow, py-networkx, pacbio-dazz-db, pacbio-daligner, pacbio-dextractor, pacbio-damasker
Description:
Falcon: a set of tools for fast aligning long reads for consensus and assembly. The Falcon tool kit is a set of simple code collection which I use for studying efficient assembly algorithm for haploid and diploid genomes. It has some back-end code implemented in C for speed and some simple front-end written in Python for convenience.

faodel

Homepage:
Spack package:
Versions:
1.1811.2, 1.1811.1, 1.1803.1
Build Dependencies:
cmake, mpi, boost, hdf5, libfabric, googletest
Link Dependencies:
mpi, boost, hdf5, libfabric
Description:
Flexible, Asynchronous, Object Data-Exchange Libraries

fast-global-file-status

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
mrnet, mount-point-attributes, mpi
Link Dependencies:
mrnet, mount-point-attributes, mpi
Description:
provides a scalable mechanism to retrieve such information of a file, including its degree of distribution or replication and consistency.

fasta

Homepage:
Spack package:
Versions:
36.3.8g
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
The FASTA programs find regions of local or global similarity between Protein or DNA sequences, either by searching Protein or DNA databases, or by identifying local duplications within a sequence. Other programs provide information on the statistical significance of an alignment. Like BLAST, FASTA can be used to infer functional and evolutionary relationships between sequences as well as help identify members of gene families.

fastjar

Homepage:
Spack package:
Versions:
0.98
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Fastjar is a version of Sun's 'jar' utility, written entirely in C.

fastmath

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
amrex, chombo, hypre, mpi, arpack-ng, petsc, phasta, pumi, sundials, superlu-dist, trilinos, zoltan
Link Dependencies:
amrex, chombo, hypre, mpi, arpack-ng, petsc, phasta, pumi, sundials, superlu-dist, trilinos, zoltan
Description:
FASTMath is a suite of ~15 numerical libraries frequently used together in various SciDAC and CSE applications. The suite includes discretization libraries for structured, AMR and unstructured grids as well as solver libraries for ODE's, Time Integrators, Iterative, Non- Linear, and Direct Solvers.

fastme

Homepage:
Spack package:
Versions:
2.1.5.1
Build Dependencies:
autoconf, automake, libtool, m4
Description:
FastME is a distance based phylogeny reconstruction program that works on distance matrices and, as of v2.0, sequence data.

fastphase

Homepage:
Spack package:
Versions:
2016-03-30
Description:
Software for haplotype reconstruction, and estimating missing genotypes from population data.

fastq-screen

Homepage:
Spack package:
Versions:
0.11.2
Build Dependencies:
bowtie, bowtie2, bwa, samtools
Link Dependencies:
bowtie, bowtie2, bwa, samtools
Run Dependencies:
perl, perl-gd-graph
Description:
FastQ Screen allows you to screen a library of sequences in FastQ format against a set of sequence databases so you can see if the composition of the library matches with what you expect.

fastqc

Homepage:
Spack package:
Versions:
0.11.7, 0.11.5, 0.11.4
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
java
Description:
A quality control tool for high throughput sequence data.

fastqvalidator

Homepage:
Spack package:
Versions:
2017-01-10
Description:
The fastQValidator validates the format of fastq files.

fasttree

Homepage:
Spack package:
Versions:
2.1.10
Description:
FastTree infers approximately-maximum-likelihood phylogenetic trees from alignments of nucleotide or protein sequences. FastTree can handle alignments with up to a million of sequences in a reasonable amount of time and memory.

fastx-toolkit

Homepage:
Spack package:
Versions:
0.0.14
Build Dependencies:
libgtextutils
Link Dependencies:
libgtextutils
Description:
The FASTX-Toolkit is a collection of command line tools for Short-Reads FASTA/FASTQ files preprocessing.

fenics

Homepage:
Spack package:
Versions:
2016.1.0, 1.6.0, 1.5.0
Build Dependencies:
cmake, python, eigen, boost, mpi, hdf5, parmetis, scotch, petsc, slepc, trilinos, vtk, suite-sparse, qt, py-ply, py-six, py-numpy, py-sympy, swig, py-setuptools, py-sphinx
Link Dependencies:
python, eigen, boost, mpi, hdf5, parmetis, scotch, petsc, slepc, trilinos, vtk, suite-sparse, qt
Run Dependencies:
py-ply, py-six, py-numpy, py-sympy, swig
Description:
FEniCS is organized as a collection of interoperable components that together form the FEniCS Project. These components include the problem- solving environment DOLFIN, the form compiler FFC, the finite element tabulator FIAT, the just-in-time compiler Instant, the code generation interface UFC, the form language UFL and a range of additional components.

fermi

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
zlib
Link Dependencies:
zlib
Run Dependencies:
perl
Description:
A WGS de novo assembler based on the FMD-index for large genomes.

fermikit

Homepage:
Spack package:
Versions:
2017-11-7
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
De novo assembly based variant calling pipeline for Illumina short reads

fermisciencetools

Homepage:
Spack package:
Versions:
11r5p3
Description:
The Fermi Science Tools consists of the basic tools necessary to analyze Fermi data. This is the binary version for Linux x86_64 with libc-2.17.

ferret

Homepage:
Spack package:
Versions:
6.96
Build Dependencies:
hdf5, netcdf, netcdf-fortran, readline, zlib
Link Dependencies:
hdf5, netcdf, netcdf-fortran, readline, zlib
Description:
Ferret is an interactive computer visualization and analysis environment designed to meet the needs of oceanographers and meteorologists analyzing large and complex gridded data sets.

ffmpeg

Homepage:
Spack package:
Versions:
4.1.1, 4.1, 3.2.4
Build Dependencies:
yasm, aom
Link Dependencies:
yasm, aom
Description:
FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video.

fftw

Homepage:
Spack package:
Versions:
3.3.8, 3.3.7, 3.3.6-pl2, 3.3.5, 3.3.4, 2.1.5
Build Dependencies:
mpi, automake, autoconf, libtool
Link Dependencies:
mpi
Description:
FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST). We believe that FFTW, which is free software, should become the FFT library of choice for most applications.

figtree

Homepage:
Spack package:
Versions:
1.4.3
Run Dependencies:
java
Description:
FigTree is designed as a graphical viewer of phylogenetic trees and as a program for producing publication-ready figures. As with most of my programs, it was written for my own needs so may not be as polished and feature-complete as a commercial program. In particular it is designed to display summarized and annotated trees produced by BEAST.

fimpute

Homepage:
Spack package:
Versions:
2014-01
Description:
FImpute uses an overlapping sliding window approach to efficiently exploit relationships or haplotype similarities between target and reference individuals.

findutils

Homepage:
Spack package:
Versions:
4.6.0, 4.4.2, 4.4.1, 4.4.0, 4.2.33, 4.2.32, 4.2.31, 4.2.30, 4.2.29, 4.2.28, 4.2.27, 4.2.26, 4.2.25, 4.2.23, 4.2.20, 4.2.18, 4.2.15, 4.1.20, 4.1
Build Dependencies:
autoconf, automake, libtool, m4, texinfo
Description:
The GNU Find Utilities are the basic directory searching utilities of the GNU operating system.

fio

Homepage:
Spack package:
Versions:
2.19
Build Dependencies:
gtkplus, cairo, libaio, py-sphinx
Link Dependencies:
gtkplus, cairo, libaio
Description:
Flexible I/O Tester.

fish

Homepage:
Spack package:
Versions:
3.0.0, 2.7.1, 2.7.0, 2.2.0
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
fish is a smart and user-friendly command line shell for OS X, Linux, and the rest of the family.

fixesproto

Homepage:
Spack package:
Versions:
5.0
Build Dependencies:
pkgconfig, util-macros
Description:
X Fixes Extension. The extension makes changes to many areas of the protocol to resolve issues raised by application interaction with core protocol mechanisms that cannot be adequately worked around on the client side of the wire.

flac

Homepage:
Spack package:
Versions:
1.3.2, 1.3.1, 1.3.0
Build Dependencies:
libvorbis, id3lib
Link Dependencies:
libvorbis, id3lib
Description:
Encoder/decoder for the Free Lossless Audio Codec

flang

Homepage:
Spack package:
Versions:
develop, 20180921, 20180612
Build Dependencies:
cmake, llvm, pgmath
Link Dependencies:
llvm, pgmath
Description:
Flang is a Fortran compiler targeting LLVM.

flann

Homepage:
Spack package:
Versions:
1.9.1, 1.8.5, 1.8.4, 1.8.1, 1.8.0
Build Dependencies:
cmake, python, py-numpy, matlab, cuda, mpi, hdf5, boost, latex
Link Dependencies:
python, cuda, mpi, hdf5, boost, latex
Run Dependencies:
py-numpy, matlab
Test Dependencies:
hdf5, gtest
Description:
FLANN is a library for performing fast approximate nearest neighbor searches in high dimensional spaces. It contains a collection of algorithms we found to work best for nearest neighbor search and a system for automatically choosing the best algorithm and optimum parameters depending on the dataset. FLANN is written in C++ and contains bindings for the following languages: C, MATLAB and Python.

flash

Homepage:
Spack package:
Versions:
1.2.11
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
FLASH (Fast Length Adjustment of SHort reads) is a very fast and accurate software tool to merge paired-end reads from next-generation sequencing experiments.

flatbuffers

Homepage:
Spack package:
Versions:
1.10.0, 1.9.0, 1.8.0
Build Dependencies:
cmake
Description:
Memory Efficient Serialization Library

flatcc

Homepage:
Spack package:
Versions:
master, 0.5.2, 0.5.1, 0.5.0, 0.4.3, 0.4.2, 0.4.1
Build Dependencies:
cmake
Description:
FlatBuffers C Compiler (flatcc), a memory-efficient serialization library, is implemented as a standalone tool instead of extending Googles flatc compiler in order to have a pure portable C library implementation of the schema compiler that is designed to fail graciously on abusive input in long running processes. It is also believed a C version may help provide schema parsing to other language interfaces that find interfacing with C easier than C++.

flecsale

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, pkgconfig, flecsi, python, openssl, boost, exodusii
Link Dependencies:
flecsi, python, openssl, boost, exodusii
Description:
Flecsale is an ALE code based on FleCSI

flecsi

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpi, gasnet, legion, boost, metis, parmetis, caliper, gotcha, graphviz
Link Dependencies:
cmake, mpi, gasnet, legion, boost, metis, parmetis, caliper, gotcha, graphviz
Description:
FleCSI is a compile-time configurable framework designed to support multi-physics application development. As such, FleCSI attempts to provide a very general set of infrastructure design patterns that can be specialized and extended to suit the needs of a broad variety of solver and data requirements. Current support includes multi-dimensional mesh topology, mesh geometry, and mesh adjacency information, n-dimensional hashed-tree data structures, graph partitioning interfaces,and dependency closures.

flex

Homepage:
Spack package:
Versions:
2.6.4, 2.6.3, 2.6.1, 2.6.0, 2.5.39
Build Dependencies:
bison, gettext, help2man, m4, autoconf, automake, libtool
Description:
Flex is a tool for generating scanners.

flint

Homepage:
Spack package:
Versions:
develop, 2.5.2, 2.4.5
Build Dependencies:
autoconf, gmp, mpfr
Link Dependencies:
gmp, mpfr
Description:
FLINT (Fast Library for Number Theory).

flit

Homepage:
Spack package:
Versions:
2.0-alpha.1
Run Dependencies:
python, py-numpy, py-matplotlib, py-toml
Description:
Floating-point Litmus Tests (FLiT) is a C++ test infrastructure for detecting variability in floating-point code caused by variations in compiler code generation, hardware and execution environments.

fltk

Homepage:
Spack package:
Versions:
1.3.3
Build Dependencies:
libx11
Link Dependencies:
libx11
Description:
FLTK (pronounced "fulltick") is a cross-platform C++ GUI toolkit for UNIX/Linux (X11), Microsoft Windows, and MacOS X. FLTK provides modern GUI functionality without the bloat and supports 3D graphics via OpenGL and its built-in GLUT emulation. FLTK is designed to be small and modular enough to be statically linked, but works fine as a shared library. FLTK also includes an excellent UI builder called FLUID that can be used to create applications in minutes.

flux-core

Homepage:
Spack package:
Versions:
master, 0.11.0, 0.10.0, 0.9.0, 0.8.0
Build Dependencies:
zeromq, czmq, hwloc, lua, lua-luaposix, munge, python, py-cffi, py-six, py-pyyaml, py-jsonschema, jansson, pkgconfig, yaml-cpp, lz4, py-pylint, asciidoc, autoconf, automake, libtool
Link Dependencies:
zeromq, czmq, hwloc, lua, lua-luaposix, munge, python, jansson, pkgconfig, yaml-cpp, lz4
Run Dependencies:
lua, python, py-cffi, py-six, py-pyyaml, py-jsonschema
Description:
A next-generation resource manager (pre-alpha)

flux-sched

Homepage:
Spack package:
Versions:
master, 0.7.0, 0.6.0, 0.5.0, 0.4.0
Build Dependencies:
boost, py-pyyaml, libxml2, yaml-cpp, libuuid, pkgconfig, flux-core, autoconf, automake, libtool
Link Dependencies:
boost, py-pyyaml, libxml2, yaml-cpp, libuuid, pkgconfig, flux-core
Run Dependencies:
flux-core
Description:
A scheduler for flux-core (pre-alpha)

fluxbox

Homepage:
Spack package:
Versions:
1.3.7
Build Dependencies:
pkgconfig, freetype, libxrender, libxext, expat, libx11
Link Dependencies:
freetype, libxrender, libxext, expat, libx11
Description:
Fluxbox is a windowmanager for X that was based on the Blackbox 0.61.1 code. It is very light on resources and easy to handle but yet full of features to make an easy, and extremely fast, desktop experience.

fmt

Homepage:
Spack package:
Versions:
5.2.1, 5.2.0, 5.1.0, 5.0.0, 4.1.0, 4.0.0, 3.0.2, 3.0.1, 3.0.0
Build Dependencies:
cmake
Description:
fmt (formerly cppformat) is an open-source formatting library. It can be used as a safe alternative to printf or as a fast alternative to C++ IOStreams.

foam-extend

Homepage:
Spack package:
Versions:
4.0, 3.2, 3.1, 3.0
Build Dependencies:
mpi, python, zlib, flex, cmake, scotch, metis, parmetis, parmgridgen, paraview
Link Dependencies:
mpi, python, zlib, scotch, metis, parmetis, paraview
Description:
The Extend Project is a fork of the OpenFOAM opensource library for Computational Fluid Dynamics (CFD). This offering is not approved or endorsed by OpenCFD Ltd, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM trademark.

folly

Homepage:
Spack package:
Versions:
2017.06.05.00, 2016.11.14.00, 2016.11.07.00, 2016.10.31.00, 2016.10.24.00, 2016.10.17.00
Build Dependencies:
m4, autoconf, automake, libtool, pkgconfig, boost, gflags, glog, double-conversion, libevent
Link Dependencies:
boost, gflags, glog, double-conversion, libevent
Description:
Folly (acronymed loosely after Facebook Open Source Library) is a library of C++11 components designed with practicality and efficiency in mind. Folly contains a variety of core library components used extensively at Facebook. In particular, it's often a dependency of Facebook's other open source C++ efforts and place where those projects can share code.

font-adobe-100dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org adobe-100dpi font.

font-adobe-75dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org adobe-75dpi font.

font-adobe-utopia-100dpi

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org adobe-utopia-100dpi font.

font-adobe-utopia-75dpi

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org adobe-utopia-75dpi font.

font-adobe-utopia-type1

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Description:
X.org adobe-utopia-type1 font.

font-alias

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org alias font.

font-arabic-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org arabic-misc font.

font-bh-100dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-100dpi font.

font-bh-75dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-75dpi font.

font-bh-lucidatypewriter-100dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-lucidatypewriter-100dpi font.

font-bh-lucidatypewriter-75dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-lucidatypewriter-75dpi font.

font-bh-ttf

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-ttf font.

font-bh-type1

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bh-type1 font.

font-bitstream-100dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bitstream-100dpi font.

font-bitstream-75dpi

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bitstream-75dpi font.

font-bitstream-speedo

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bitstream-speedo font.

font-bitstream-type1

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org bitstream-type1 font.

font-cronyx-cyrillic

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org cronyx-cyrillic font.

font-cursor-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org cursor-misc font.

font-daewoo-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org daewoo-misc font.

font-dec-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org dec-misc font.

font-ibm-type1

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org ibm-type1 font.

font-isas-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org isas-misc font.

font-jis-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org jis-misc font.

font-micro-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org micro-misc font.

font-misc-cyrillic

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org misc-cyrillic font.

font-misc-ethiopic

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org misc-ethiopic font.

font-misc-meltho

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org misc-meltho font.

font-misc-misc

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org misc-misc font.

font-mutt-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org mutt-misc font.

font-schumacher-misc

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org schumacher-misc font.

font-screen-cyrillic

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org screen-cyrillic font.

font-sony-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org sony-misc font.

font-sun-misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org sun-misc font.

font-util

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
pkgconfig, util-macros
Description:
X.Org font package creation/installation utilities.

font-winitzki-cyrillic

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
font-util, fontconfig, mkfontdir, bdftopcf, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org winitzki-cyrillic font.

font-xfree86-type1

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
font-util, fontconfig, mkfontdir, mkfontscale, pkgconfig, util-macros
Link Dependencies:
font-util
Description:
X.org xfree86-type1 font.

fontcacheproto

Homepage:
Spack package:
Versions:
0.1.3
Description:
X.org FontcacheProto protocol headers.

fontconfig

Homepage:
Spack package:
Versions:
2.12.3, 2.12.1, 2.11.1
Build Dependencies:
freetype, gperf, libxml2, pkgconfig, font-util
Link Dependencies:
freetype, libxml2, font-util
Description:
Fontconfig is a library for configuring/customizing font access

fontsproto

Homepage:
Spack package:
Versions:
2.1.3
Build Dependencies:
pkgconfig, util-macros
Description:
X Fonts Extension.

fonttosfnt

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
freetype, libfontenc, xproto, pkgconfig, util-macros
Link Dependencies:
freetype, libfontenc
Description:
Wrap a bitmap font in a sfnt (TrueType) wrapper.

fp16

Homepage:
Spack package:
Versions:
master
Description:
FP16 is a header-only library for conversion to/from half-precision floating point formats

fpc

Homepage:
Spack package:
Versions:
3.0.2
Description:
Free Pascal is a 32, 64 and 16 bit professional Pascal compiler.

fqtrim

Homepage:
Spack package:
Versions:
0.9.7
Description:
fqtrim is a versatile stand-alone utility that can be used to trim adapters, poly-A tails, terminal unknown bases (Ns) and low quality 3' regions in reads from high-throughput next-generation sequencing machines.

fr-hit

Homepage:
Spack package:
Versions:
0.7.1-2013-02-20
Build Dependencies:
perl, python
Link Dependencies:
perl, python
Description:
An efficient algorithm for fragment recruitment for next generation sequences against microbial reference genomes.

freebayes

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Description:
Bayesian haplotype-based genetic polymorphism discovery and genotyping.

freeglut

Homepage:
Spack package:
Versions:
3.0.0
Build Dependencies:
cmake, gl, glu, libx11, libxrandr, libxi, xrandr, inputproto
Link Dependencies:
gl, glu, libx11, libxrandr, libxi, xrandr, inputproto
Description:
FreeGLUT is a free-software/open-source alternative to the OpenGL Utility Toolkit (GLUT) library

freetype

Homepage:
Spack package:
Versions:
2.9.1, 2.7.1, 2.7, 2.5.3
Build Dependencies:
libpng, bzip2, pkgconfig
Link Dependencies:
libpng, bzip2
Description:
FreeType is a freely available software library to render fonts. It is written in C, designed to be small, efficient, highly customizable, and portable while capable of producing high-quality output (glyph images) of most vector and bitmap font formats.

freexl

Homepage:
Spack package:
Versions:
1.0.5
Description:
FreeXL is an open source library to extract valid data from within an Excel (.xls) spreadsheet.

fseq

Homepage:
Spack package:
Versions:
1.84
Build Dependencies:
java
Run Dependencies:
java
Description:
F-Seq: A Feature Density Estimator for High-Throughput Sequence Tags

fsl

Homepage:
Spack package:
Versions:
5.0.10
Build Dependencies:
python, expat, libx11, glu, zlib, libpng, boost, sqlite
Link Dependencies:
expat, libx11, glu, zlib, libpng, boost, sqlite
Run Dependencies:
python
Description:
FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI brain imaging data. Note: A manual download is required for FSL. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

fslsfonts

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libfs, xproto, pkgconfig, util-macros
Link Dependencies:
libfs
Description:
fslsfonts produces a list of fonts served by an X font server.

fstobdf

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libx11, libfs, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libfs
Description:
The fstobdf program reads a font from a font server and prints a BDF file on the standard output that may be used to recreate the font. This is useful in testing servers, debugging font metrics, and reproducing lost BDF files.

fstrack

Homepage:
Spack package:
Versions:
0.5.3.092918
Build Dependencies:
gmt, netcdf
Link Dependencies:
gmt, netcdf
Description:
Package with tools to analyze symmetry components of elastic tensors, predict synthetic waveforms and compute automated shear wave splitting along ray paths, and to track finite strain and predict LPO from mantle flow given on GMT/netcdf grds.

ftgl

Homepage:
Spack package:
Versions:
2.1.3-rc5, 2.1.2
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, gl, glu, freetype, doxygen
Link Dependencies:
gl, glu, freetype
Description:
Library to use arbitrary fonts in OpenGL applications.

funhpc

Homepage:
Spack package:
Versions:
develop, 1.3.0, 1.2.0, 1.1.1, 1.1.0, 1.0.0, 0.1.1, 0.1.0
Build Dependencies:
cmake, cereal, googletest, hwloc, jemalloc, mpi, qthreads
Link Dependencies:
cereal, googletest, hwloc, jemalloc, mpi, qthreads
Description:
FunHPC: Functional HPC Programming

fyba

Homepage:
Spack package:
Versions:
4.1.1
Build Dependencies:
autoconf, automake, libtool, m4
Description:
OpenFYBA is the source code release of the FYBA library, distributed by the National Mapping Authority of Norway (Statens kartverk) to read and write files in the National geodata standard format SOSI.

fzf

Homepage:
Spack package:
Versions:
0.17.5, 0.17.4, 0.17.3, 0.17.1, 0.17.0-2, 0.17.0, 0.16.11, 0.16.10, 0.16.9, 0.16.8
Build Dependencies:
go
Link Dependencies:
go
Description:
fzf is a general-purpose command-line fuzzy finder.

g4abla

Homepage:
Spack package:
Versions:
3.1, 3.0
Description:
Geant4 data for nuclear shell effects in INCL/ABLA hadronic mode

g4emlow

Homepage:
Spack package:
Versions:
7.3, 6.50
Description:
Geant4 data files for low energy electromagnetic processes.

g4ensdfstate

Homepage:
Spack package:
Versions:
2.2, 2.1
Description:
Geant4 data for nuclides properties

g4ndl

Homepage:
Spack package:
Versions:
4.5
Description:
Geant4 Neutron data files with thermal cross sections

g4neutronxs

Homepage:
Spack package:
Versions:
1.4
Description:
Geant4 data for evaluated neutron cross-sections on natural composition of elements

g4photonevaporation

Homepage:
Spack package:
Versions:
5.2, 4.3.2
Description:
Geant4 data for photon evaporation

g4pii

Homepage:
Spack package:
Versions:
1.3
Description:
Geant4 data for shell ionisation cross-sections

g4radioactivedecay

Homepage:
Spack package:
Versions:
5.2, 5.1.1
Description:
Geant4 data files for radio-active decay hadronic processes

g4realsurface

Homepage:
Spack package:
Versions:
2.1.1, 2.1, 1.0
Description:
Geant4 data for measured optical surface reflectance

g4saiddata

Homepage:
Spack package:
Versions:
1.1
Description:
Geant4 data from evaluated cross-sections in SAID data-base

g4tendl

Homepage:
Spack package:
Versions:
1.3.2, 1.3
Description:
Geant4 data for incident particles [optional]

gapbs

Homepage:
Spack package:
Versions:
1.0
Description:
The GAP Benchmark Suite is intended to help graph processing research by standardizing evaluations. Fewer differences between graph processing evaluations will make it easier to compare different research efforts and quantify improvements. The benchmark not only specifies graph kernels, input graphs, and evaluation methodologies, but it also provides an optimized baseline implementation (this repo). These baseline implementations are representative of state-of-the-art performance, and thus new contributions should outperform them to demonstrate an improvement.

gapcloser

Homepage:
Spack package:
Versions:
1.12-r6
Description:
The GapCloser is designed to close the gaps emerging during the scaffolding process

gapfiller

Homepage:
Spack package:
Versions:
1.10
Build Dependencies:
perl
Run Dependencies:
perl
Description:
GapFiller is a stand-alone program for closing gaps within pre-assembled scaffolds. Note: A manual download is required for GapFiller. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

gasnet

Homepage:
Spack package:
Versions:
2019.3.0, 1.32.0, 1.30.0, 1.28.2, 1.28.0, 1.24.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
GASNet is a language-independent, low-level networking layer that provides network-independent, high-performance communication primitives tailored for implementing parallel global address space SPMD languages and libraries such as UPC, Co-Array Fortran, SHMEM, Cray Chapel, and Titanium.

gatk

Homepage:
Spack package:
Versions:
4.1.0.0, 4.0.12.0, 4.0.11.0, 4.0.8.1, 4.0.4.0, 3.8-1, 3.8-0
Run Dependencies:
java, python, r
Description:
Genome Analysis Toolkit Variant Discovery in High-Throughput Sequencing Data

gaussian

Homepage:
Spack package:
Versions:
09
Description:
Gaussian is a computer program for computational chemistry

gawk

Homepage:
Spack package:
Versions:
4.1.4
Build Dependencies:
gettext, libsigsegv, readline, mpfr, gmp
Link Dependencies:
gettext, libsigsegv, readline, mpfr, gmp
Description:
If you are like many computer users, you would frequently like to make changes in various text files wherever certain patterns appear, or extract data from parts of certain lines while discarding the rest. To write a program to do this in a language such as C or Pascal is a time- consuming inconvenience that may take many lines of code. The job is easy with awk, especially the GNU implementation: gawk. The awk utility interprets a special-purpose programming language that makes it possible to handle simple data-reformatting jobs with just a few lines of code.

gblocks

Homepage:
Spack package:
Versions:
0.91b
Description:
Gblocks is a computer program written in ANSI C language that eliminates poorly aligned positions and divergent regions of an alignment of DNA or protein sequences

gcc

Homepage:
Spack package:
Versions:
develop, 9.1.0, 8.3.0, 8.2.0, 8.1.0, 7.4.0, 7.3.0, 7.2.0, 7.1.0, 6.5.0, 6.4.0, 6.3.0, 6.2.0, 6.1.0, 5.5.0, 5.4.0, 5.3.0, 5.2.0, 5.1.0, 4.9.4, 4.9.3, 4.9.2, 4.9.1, 4.8.5, 4.8.4, 4.7.4, 4.6.4, 4.5.4
Build Dependencies:
gmp, mpfr, mpc, isl, zlib, gnat, binutils, zip, cuda
Link Dependencies:
gmp, mpfr, mpc, isl, zlib, gnat, binutils, cuda
Test Dependencies:
dejagnu, expect, tcl, autogen, guile
Description:
The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages.

gccmakedep

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
pkgconfig
Description:
X.org gccmakedep utilities.

gccxml

Homepage:
Spack package:
Versions:
develop, latest
Build Dependencies:
cmake
Description:
gccxml dumps an XML description of C++ source code using an extension of the GCC C++ compiler.

gconf

Homepage:
Spack package:
Versions:
3.2.6
Build Dependencies:
glib, libxml2
Link Dependencies:
glib, libxml2
Description:
GConf is a system for storing application preferences.

gcta

Homepage:
Spack package:
Versions:
1.91.2beta_mac, 1.91.2beta
Description:
GCTA (Genome-wide Complex Trait Analysis) was originally designed to estimate the proportion of phenotypic variance explained by all genome- wide SNPs for complex traits (the GREML method), and has subsequently extended for many other analyses to better understand the genetic architecture of complex traits. GCTA currently supports the following analyses.

gdal

Homepage:
Spack package:
Versions:
2.4.1, 2.4.0, 2.3.3, 2.3.2, 2.3.1, 2.3.0, 2.1.2, 2.0.2, 1.11.5
Build Dependencies:
python, gmake, pkgconfig, libtiff, libgeotiff, json-c, libtool, zlib, libiconv, xz, zstd, postgresql, cfitsio, libpng, jpeg, giflib, fyba, hdf, hdf5, kealib, netcdf, jasper, openjpeg, xerces-c, expat, unixodbc, curl, libxml2, sqlite, pcre, geos, qhull, opencl, poppler, proj, perl, py-setuptools, py-numpy, java, armadillo, cryptopp, openssl
Link Dependencies:
python, libtiff, libgeotiff, json-c, zlib, libiconv, xz, zstd, postgresql, cfitsio, libpng, jpeg, giflib, fyba, hdf, hdf5, kealib, netcdf, jasper, openjpeg, xerces-c, expat, unixodbc, curl, libxml2, sqlite, pcre, geos, qhull, opencl, poppler, proj, java, armadillo, cryptopp, openssl
Run Dependencies:
python, perl, py-numpy, java, jackcess
Description:
GDAL (Geospatial Data Abstraction Library) is a translator library for raster and vector geospatial data formats that is released under an X/MIT style Open Source license by the Open Source Geospatial Foundation. As a library, it presents a single raster abstract data model and vector abstract data model to the calling application for all supported formats. It also comes with a variety of useful command line utilities for data translation and processing.

gdb

Homepage:
Spack package:
Versions:
8.2.1, 8.2, 8.1, 8.0.1, 8.0, 7.12.1, 7.11, 7.10.1, 7.10, 7.9.1, 7.9, 7.8.2
Build Dependencies:
texinfo, python, xz
Link Dependencies:
python, xz
Description:
GDB, the GNU Project debugger, allows you to see what is going on 'inside' another program while it executes -- or what another program was doing at the moment it crashed.

gdbm

Homepage:
Spack package:
Versions:
1.18.1, 1.14.1, 1.13, 1.12, 1.11, 1.10, 1.9.1, 1.9
Build Dependencies:
readline
Link Dependencies:
readline
Description:
GNU dbm (or GDBM, for short) is a library of database functions that use extensible hashing and work similar to the standard UNIX dbm. These routines are provided to a programmer needing to create and manipulate a hashed database.

gdk-pixbuf

Homepage:
Spack package:
Versions:
2.38.0, 2.31.2
Build Dependencies:
meson, ninja, shared-mime-info, pkgconfig, libxslt, docbook-xsl, gettext, glib, jpeg, libpng, zlib, libtiff, gobject-introspection
Link Dependencies:
gettext, glib, jpeg, libpng, zlib, libtiff, gobject-introspection
Description:
The Gdk Pixbuf is a toolkit for image loading and pixel buffer manipulation. It is used by GTK+ 2 and GTK+ 3 to load and manipulate images. In the past it was distributed as part of GTK+ 2 but it was split off into a separate package in preparation for the change to GTK+ 3.

gdl

Homepage:
Spack package:
Versions:
0.9.8
Build Dependencies:
cmake, python, graphicsmagick, hdf, hdf5, libx11, plplot, proj, py-numpy, wx, eigen, fftw, gsl, jpeg, libice, libsm, libxinerama, libxxf86vm, netcdf, pslib, readline
Link Dependencies:
python, graphicsmagick, hdf, hdf5, libx11, plplot, proj, wx, eigen, fftw, gsl, jpeg, libice, libsm, libxinerama, libxxf86vm, netcdf, pslib, readline
Run Dependencies:
python, py-numpy
Description:
A free and open-source IDL/PV-WAVE compiler. GNU Data Language (GDL) is a free/libre/open source incremental compiler compatible with IDL and to some extent with PV-WAVE.

geant4

Homepage:
Spack package:
Versions:
10.04, 10.03.p03
Build Dependencies:
cmake, xerces-c, clhep, vecgeom, expat, zlib, gl, glx, libx11, libxmu, motif, qt, geant4-data
Link Dependencies:
xerces-c, clhep, vecgeom, expat, zlib, gl, glx, libx11, libxmu, motif, qt, geant4-data
Description:
Geant4 is a toolkit for the simulation of the passage of particles through matter. Its areas of application include high energy, nuclear and accelerator physics, as well as studies in medical and space science.

geant4-data

Homepage:
Spack package:
Versions:
10.04, 10.03.p03
Build Dependencies:
g4abla, g4emlow, g4ndl, g4neutronxs, g4saiddata, g4ensdfstate, g4photonevaporation, g4pii, g4radioactivedecay, g4realsurface, g4tendl
Link Dependencies:
g4abla, g4emlow, g4ndl, g4neutronxs, g4saiddata, g4ensdfstate, g4photonevaporation, g4pii, g4radioactivedecay, g4realsurface, g4tendl
Description:
An umbrella package to hold Geant4 data packages

gearshifft

Homepage:
Spack package:
Versions:
0.2.1-lw
Build Dependencies:
cmake, boost, cuda, opencl, clfft, fftw
Link Dependencies:
boost, cuda, opencl, clfft, fftw
Description:
Benchmark Suite for Heterogenuous FFT Implementations

gemmlowp

Homepage:
Spack package:
Versions:
a6f29d9ac
Description:
Google low-precision matrix multiplication library

genemark-et

Homepage:
Spack package:
Versions:
4.38, 4.33
Build Dependencies:
perl
Run Dependencies:
perl
Description:
Gene Prediction in Bacteria, archaea, Metagenomes and Metatranscriptomes. When downloaded this file is named the same for all versions. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

genomefinisher

Homepage:
Spack package:
Versions:
1.4
Run Dependencies:
java
Description:
GFinisher is an application tools for refinement and finalization of prokaryotic genomes assemblies using the bias of GC Skew to identify assembly errors and organizes the contigs/scaffolds with genomes references.

genometools

Homepage:
Spack package:
Versions:
1.5.9
Build Dependencies:
perl, cairo, pango
Link Dependencies:
cairo, pango
Run Dependencies:
perl
Description:
genometools is a free collection of bioinformatics tools (in the realm of genome informatics) combined into a single binary named gt.

geopm

Homepage:
Spack package:
Versions:
develop, master, 1.0.0-rc2, 1.0.0-rc1, 0.6.1, 0.6.0, 0.5.1, 0.5.0, 0.4.0, 0.3.0
Build Dependencies:
m4, automake, autoconf, libtool, ruby-ronn, doxygen, numactl, mpi, hwloc, json-c
Link Dependencies:
numactl, mpi, hwloc, json-c
Run Dependencies:
py-pandas, py-numpy, py-natsort, py-matplotlib
Description:
GEOPM is an extensible power management framework targeting HPC. The GEOPM package provides libgeopm, libgeopmpolicy and applications geopmctl and geopmpolicy, as well as tools for postprocessing. GEOPM is designed to be extended for new control algorithms and new hardware power management features via its plugin infrastructure. Note: GEOPM interfaces with hardware using Model Specific Registers (MSRs). For propper usage make sure MSRs are made available directly or via the msr- safe kernel module by your administrator.

geos

Homepage:
Spack package:
Versions:
3.6.2, 3.6.1, 3.6.0, 3.5.1, 3.5.0, 3.4.3, 3.4.2, 3.4.1, 3.4.0, 3.3.9, 3.3.8, 3.3.7, 3.3.6, 3.3.5, 3.3.4, 3.3.3
Build Dependencies:
ruby, python, swig
Link Dependencies:
ruby, python
Description:
GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology Suite (JTS). As such, it aims to contain the complete functionality of JTS in C++. This includes all the OpenGIS Simple Features for SQL spatial predicate functions and spatial operators, as well as specific JTS enhanced topology functions.

gettext

Homepage:
Spack package:
Versions:
0.19.8.1, 0.19.7
Build Dependencies:
ncurses, libxml2, tar, bzip2, xz, libunistring
Link Dependencies:
ncurses, libxml2, tar, bzip2, xz, libunistring
Run Dependencies:
xz
Description:
GNU internationalization (i18n) and localization (l10n) library.

gflags

Homepage:
Spack package:
Versions:
2.1.2
Build Dependencies:
cmake
Description:
The gflags package contains a C++ library that implements commandline flags processing. It includes built-in support for standard types such as string and the ability to define flags in the source file in which they are used. Online documentation available at: https://gflags.github.io/gflags/

ghost

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cuda, cmake, hwloc, blas, mpi, scotch, zoltan
Link Dependencies:
cuda, cmake, hwloc, blas, mpi, scotch, zoltan
Description:
GHOST: a General, Hybrid and Optimized Sparse Toolkit. This library provides highly optimized building blocks for implementing sparse iterative eigenvalue and linear solvers multi- and manycore clusters and on heterogenous CPU/GPU machines. For an iterative solver library using these kernels, see the phist package.

ghostscript

Homepage:
Spack package:
Versions:
9.26, 9.21, 9.18
Build Dependencies:
pkgconfig, freetype, jpeg, lcms, libpng, libtiff, zlib, libxext, gtkplus
Link Dependencies:
freetype, jpeg, lcms, libpng, libtiff, zlib, libxext, gtkplus
Description:
An interpreter for the PostScript language and for PDF.

ghostscript-fonts

Homepage:
Spack package:
Versions:
8.11
Description:
Ghostscript Fonts

giflib

Homepage:
Spack package:
Versions:
5.1.4
Description:
The GIFLIB project maintains the giflib service library, which has been pulling images out of GIFs since 1989.

ginkgo

Homepage:
Spack package:
Versions:
develop, master, 1.0.0
Build Dependencies:
cuda, cmake
Link Dependencies:
cuda
Description:
High-performance linear algebra library for manycore systems, with a focus on sparse solution of linear systems.

git

Homepage:
Spack package:
Versions:
2.21.0, 2.20.1, 2.19.2, 2.19.1, 2.18.0, 2.17.1, 2.17.0, 2.15.1, 2.14.1, 2.13.0, 2.12.2, 2.12.1, 2.12.0, 2.11.1, 2.11.0, 2.9.3, 2.9.2, 2.9.1, 2.9.0, 2.8.4, 2.8.3, 2.8.2, 2.8.1, 2.8.0, 2.7.3, 2.7.1
Build Dependencies:
curl, expat, gettext, libiconv, openssl, pcre, perl, zlib, autoconf, automake, libtool, m4, tk
Link Dependencies:
curl, expat, gettext, libiconv, openssl, pcre, perl, zlib, tk
Description:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

git-fat-git

Homepage:
Spack package:
Versions:
2018-08-21
Run Dependencies:
python, git, rsync
Description:
Simple way to handle fat files without committing them to git, supports synchronization using rsync

git-imerge

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0
Build Dependencies:
python, py-argparse, git
Link Dependencies:
python, py-argparse, git
Description:
git-imerge: Incremental merge & rebase for git Perform a merge between two branches incrementally. If conflicts are encountered, figure out exactly which pairs of commits conflict, and present the user with one pairwise conflict at a time for resolution. git-imerge has two primary design goals: * Reduce the pain of resolving merge conflicts to its unavoidable minimum, by finding and presenting the smallest possible conflicts: those between the changes introduced by one commit from each branch. * Allow a merge to be saved, tested, interrupted, published, and collaborated on while it is in progress.

git-lfs

Homepage:
Spack package:
Versions:
2.7.2, 2.7.1, 2.7.0, 2.6.1
Build Dependencies:
go
Run Dependencies:
git
Description:
Git LFS is a system for managing and versioning large files in association with a Git repository. Instead of storing the large files within the Git repository as blobs, Git LFS stores special "pointer files" in the repository, while storing the actual file contents on a Git LFS server.

gl2ps

Homepage:
Spack package:
Versions:
1.3.9
Build Dependencies:
cmake, freeglut, gl, libice, libsm, libxau, libxdamage, libxdmcp, libxext, libxfixes, libxi, libxmu, libxt, libxxf86vm, libxcb, libdrm, expat, libpng, zlib, texlive
Link Dependencies:
freeglut, gl, libice, libsm, libxau, libxdamage, libxdmcp, libxext, libxfixes, libxi, libxmu, libxt, libxxf86vm, libxcb, libdrm, expat, libpng, zlib
Description:
GL2PS is a C library providing high quality vector output for any OpenGL application.

glew

Homepage:
Spack package:
Versions:
2.0.0
Build Dependencies:
cmake, gl
Link Dependencies:
gl
Description:
The OpenGL Extension Wrangler Library.

glfmultiples

Homepage:
Spack package:
Versions:
2010-06-16
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
glfMultiples is a GLF-based variant caller for next-generation sequencing data. It takes a set of GLF format genotype likelihood files as input and generates a VCF-format set of variant calls as output.

glib

Homepage:
Spack package:
Versions:
2.56.3, 2.56.2, 2.56.1, 2.56.0, 2.55.1, 2.53.1, 2.49.7, 2.49.4, 2.48.1, 2.42.1
Build Dependencies:
pkgconfig, libffi, zlib, gettext, perl, python, pcre, util-linux, libiconv
Link Dependencies:
libffi, zlib, gettext, pcre, util-linux, libiconv
Run Dependencies:
perl, python
Description:
GLib provides the core application building blocks for libraries and applications written in C. The GLib package contains a low-level libraries useful for providing data structure handling for C, portability wrappers and interfaces for such runtime functionality as an event loop, threads, dynamic loading and an object system.

glibmm

Homepage:
Spack package:
Versions:
2.19.3, 2.16.0, 2.4.8
Build Dependencies:
libsigcpp, glib
Link Dependencies:
libsigcpp, glib
Description:
Glibmm is a C++ wrapper for the glib library.

glimmer

Homepage:
Spack package:
Versions:
3.02b
Description:
Glimmer is a system for finding genes in microbial DNA, especially the genomes of bacteria, archaea, and viruses.

glm

Homepage:
Spack package:
Versions:
0.9.7.1
Build Dependencies:
cmake
Description:
OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification

global

Homepage:
Spack package:
Versions:
6.5
Build Dependencies:
exuberant-ctags, ncurses
Link Dependencies:
ncurses
Run Dependencies:
exuberant-ctags
Description:
The Gnu Global tagging system

globalarrays

Homepage:
Spack package:
Versions:
5.7, 5.6.5, 5.6.4, 5.6.3, 5.6.2, 5.6.1, 5.6
Build Dependencies:
mpi, blas, lapack, scalapack
Link Dependencies:
mpi, blas, lapack, scalapack
Description:
Global Arrays (GA) is a Partitioned Global Address Space (PGAS) programming model. It provides primitives for one-sided communication (Get, Put, Accumulate) and Atomic Operations (read increment). It supports blocking and non-blocking primtives, and supports location consistency.

globus-toolkit

Homepage:
Spack package:
Versions:
6.0.1506371041, 6.0.1493989444
Build Dependencies:
pkgconfig, openssl
Link Dependencies:
openssl
Description:
The Globus Toolkit is an open source software toolkit used for building grids

glog

Homepage:
Spack package:
Versions:
0.3.5, 0.3.4, 0.3.3
Build Dependencies:
gflags, cmake
Link Dependencies:
gflags, cmake
Description:
C++ implementation of the Google logging module.

gloo

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake
Description:
Gloo is a collective communications library.

glpk

Homepage:
Spack package:
Versions:
4.65, 4.61, 4.57
Build Dependencies:
gmp
Link Dependencies:
gmp
Description:
The GLPK (GNU Linear Programming Kit) package is intended for solving large-scale linear programming (LP), mixed integer programming (MIP), and other related problems. It is a set of routines written in ANSI C and organized in the form of a callable library.

glproto

Homepage:
Spack package:
Versions:
1.4.17
Build Dependencies:
pkgconfig, util-macros
Description:
OpenGL Extension to the X Window System. This extension defines a protocol for the client to send 3D rendering commands to the X server.

glvis

Homepage:
Spack package:
Versions:
develop, 3.4, 3.3, 3.2, 3.1
Build Dependencies:
mfem, gl, glu, libx11, libpng, libtiff, freetype, fontconfig
Link Dependencies:
mfem, gl, glu, libx11, libpng, libtiff, freetype, fontconfig
Description:
GLVis: an OpenGL tool for visualization of FEM meshes and functions

gmake

Homepage:
Spack package:
Versions:
4.2.1, 4.0
Build Dependencies:
gettext, guile
Link Dependencies:
gettext, guile
Description:
GNU Make is a tool which controls the generation of executables and other non-source files of a program from the program's source files.

gmap-gsnap

Homepage:
Spack package:
Versions:
2019-05-12, 2019-02-15, 2018-07-04, 2018-03-25, 2018-02-12, 2017-06-16, 2014-12-28
Build Dependencies:
zlib, bzip2
Link Dependencies:
zlib, bzip2
Description:
GMAP: A Genomic Mapping and Alignment Program for mRNA and EST Sequences, and GSNAP: Genomic Short-read Nucleotide Alignment Program

gmime

Homepage:
Spack package:
Versions:
2.6.23
Build Dependencies:
glib, libgpg-error
Link Dependencies:
glib, libgpg-error
Description:
GMime is a C/C++ library which may be used for the creation and parsing of messages using the Multipurpose Internet Mail Extension (MIME).

gmodel

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
cmake
Description:
Gmsh model generation library Gmodel is a C++11 library that implements a minimal CAD kernel based on the .geo format used by the Gmsh mesh generation code, and is designed to make it easier for users to quickly construct CAD models for Gmsh.

gmp

Homepage:
Spack package:
Versions:
6.1.2, 6.1.1, 6.1.0, 6.0.0a, 6.0.0, 5.1.3, 4.3.2
Build Dependencies:
autoconf, automake, libtool, m4
Description:
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.

gmsh

Homepage:
Spack package:
Versions:
develop, 4.2.2, 4.0.0, 3.0.6, 3.0.1, 2.16.0, 2.15.0, 2.12.0
Build Dependencies:
cmake, blas, lapack, gmp, mpi, fltk, hdf5, netgen, oce, petsc, slepc, tetgen, zlib, metis
Link Dependencies:
blas, lapack, gmp, mpi, fltk, hdf5, netgen, oce, petsc, slepc, tetgen, zlib, metis
Description:
Gmsh is a free 3D finite element grid generator with a built-in CAD engine and post-processor. Its design goal is to provide a fast, light and user-friendly meshing tool with parametric input and advanced visualization capabilities. Gmsh is built around four modules: geometry, mesh, solver and post-processing. The specification of any input to these modules is done either interactively using the graphical user interface or in ASCII text files using Gmsh's own scripting language.

gmt

Homepage:
Spack package:
Versions:
5.4.4, 4.5.9
Build Dependencies:
ghostscript, subversion, cmake, netcdf, curl, pcre, gdal, fftw, lapack, blas
Link Dependencies:
ghostscript, subversion, netcdf, curl, pcre, gdal, fftw, lapack, blas
Test Dependencies:
graphicsmagick
Description:
GMT (Generic Mapping Tools) is an open source collection of about 80 command-line tools for manipulating geographic and Cartesian data sets (including filtering, trend fitting, gridding, projecting, etc.) and producing PostScript illustrations ranging from simple x-y plots via contour maps to artificially illuminated surfaces and 3D perspective views.

gmtsar

Homepage:
Spack package:
Versions:
5.6
Build Dependencies:
cmake, gmt
Link Dependencies:
gmt
Description:
GMTSAR is an open source (GNU General Public License) InSAR processing system designed for users familiar with Generic Mapping Tools (GMT).

gnat

Homepage:
Spack package:
Versions:
2016
Description:
The GNAT Ada compiler. Ada is a modern programming language designed for large, long-lived applications - and embedded systems in particular - where reliability and efficiency are essential.

gnu-prolog

Homepage:
Spack package:
Versions:
1.4.4
Description:
A free Prolog compiler with constraint solving over finite domains.

gnupg

Homepage:
Spack package:
Versions:
2.2.15, 2.2.3, 2.1.21
Build Dependencies:
libgcrypt, libassuan, libksba, libgpg-error, npth
Link Dependencies:
libgcrypt, libassuan, libksba, libgpg-error, npth
Description:
GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880

gnuplot

Homepage:
Spack package:
Versions:
5.2.5, 5.2.2, 5.2.0, 5.0.7, 5.0.6, 5.0.5, 5.0.1
Build Dependencies:
readline, pkgconfig, libxpm, libiconv, libcerf, libgd, cairo, wx, pango, libx11, qt
Link Dependencies:
readline, libxpm, libiconv, libcerf, libgd, cairo, wx, pango, libx11, qt
Description:
Gnuplot is a portable command-line driven graphing utility for Linux, OS/2, MS Windows, OSX, VMS, and many other platforms. The source code is copyrighted but freely distributed (i.e., you don't have to pay for it). It was originally created to allow scientists and students to visualize mathematical functions and data interactively, but has grown to support many non-interactive uses such as web scripting. It is also used as a plotting engine by third-party applications like Octave. Gnuplot has been supported and under active development since 1986

gnutls

Homepage:
Spack package:
Versions:
3.6.7.1, 3.5.19, 3.5.13, 3.5.10, 3.5.9, 3.3.9
Build Dependencies:
nettle, libidn2, zlib, gettext, pkgconfig
Link Dependencies:
nettle, libidn2, zlib, gettext
Description:
GnuTLS is a secure communications library implementing the SSL, TLS and DTLS protocols and technologies around them. It provides a simple C language application programming interface (API) to access the secure communications protocols as well as APIs to parse and write X.509, PKCS #12, OpenPGP and other required structures. It is aimed to be portable and efficient with focus on security and interoperability.

go

Homepage:
Spack package:
Versions:
1.11.5, 1.11.4, 1.11.2, 1.11.1, 1.11, 1.10.3, 1.10.2, 1.10.1, 1.9.5, 1.9.2, 1.9.1, 1.9, 1.8.3, 1.8.1, 1.8, 1.7.5, 1.7.4, 1.6.4
Build Dependencies:
git, go-bootstrap
Link Dependencies:
git
Run Dependencies:
git
Description:
The golang compiler and build environment

go-bootstrap

Homepage:
Spack package:
Versions:
1.4-bootstrap-20171003, 1.4-bootstrap-20170531, 1.4-bootstrap-20161024
Build Dependencies:
git
Link Dependencies:
git
Run Dependencies:
git
Description:
Old C-bootstrapped go to bootstrap real go

gobject-introspection

Homepage:
Spack package:
Versions:
1.56.1, 1.49.2, 1.48.0
Build Dependencies:
glib, python, cairo, bison, flex, pkgconfig, sed
Link Dependencies:
glib, python, cairo
Description:
The GObject Introspection is used to describe the program APIs and collect them in a uniform, machine readable format.Cairo is a 2D graphics library with support for multiple output

googletest

Homepage:
Spack package:
Versions:
1.8.1, 1.8.0, 1.7.0, 1.6.0
Build Dependencies:
cmake
Description:
Google test framework for C++. Also called gtest.

gotcha

Homepage:
Spack package:
Versions:
develop, master, 1.0.2, 0.0.2
Build Dependencies:
cmake
Description:
C software library for shared library function wrapping, enables tools to intercept calls into shared libraries

gource

Homepage:
Spack package:
Versions:
0.44
Build Dependencies:
automake, autoconf, libtool, glm, pkgconfig, freetype, pcre, boost, glew, jpeg, libpng, sdl2, sdl2-image
Link Dependencies:
freetype, pcre, boost, glew, jpeg, libpng, sdl2, sdl2-image
Description:
Software version control visualization.

gperf

Homepage:
Spack package:
Versions:
3.0.4
Description:
GNU gperf is a perfect hash function generator. For a given list of strings, it produces a hash function and hash table, in form of C or C++ code, for looking up a value depending on the input string. The hash function is perfect, which means that the hash table has no collisions, and the hash table lookup needs a single string comparison only.

gperftools

Homepage:
Spack package:
Versions:
2.7, 2.4, 2.3
Build Dependencies:
unwind
Link Dependencies:
unwind
Description:
Google's fast malloc/free implementation, especially for multi-threaded applications. Contains tcmalloc, heap-checker, heap-profiler, and cpu- profiler.

gpgme

Homepage:
Spack package:
Versions:
1.12.0
Build Dependencies:
libgpg-error, libassuan
Description:
GPGME is the standard library to access GnuPG functions from programming languages.

gplates

Homepage:
Spack package:
Versions:
2.1.0, 2.0.0
Build Dependencies:
cmake, ninja, qt, qwt, glu, glew, gdal, cgal, proj, boost, python
Link Dependencies:
qt, qwt, glu, glew, gdal, cgal, proj, boost, python
Description:
GPlates is desktop software for the interactive visualisation of plate- tectonics. GPlates offers a novel combination of interactive plate- tectonic reconstructions, geographic information system (GIS) functionality and raster data visualisation. GPlates enables both the visualisation and the manipulation of plate-tectonic reconstructions and associated data through geological time.

grackle

Homepage:
Spack package:
Versions:
3.1, 3.0, 2.2, 2.0.1
Build Dependencies:
libtool, mpi, hdf5
Link Dependencies:
libtool, mpi, hdf5
Description:
Grackle is a chemistry and radiative cooling library for astrophysical simulations with interfaces for C, C++, and Fortran codes. It is a generalized and trimmed down version of the chemistry network of the Enzo simulation code

gradle

Homepage:
Spack package:
Versions:
4.8.1, 3.4, 3.3, 3.2.1, 3.2, 3.1, 3.0, 2.14.1, 2.14, 2.13, 2.12, 2.11, 2.10, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2.1, 2.2, 2.1, 2.0, 1.12, 1.11, 1.10, 1.9, 1.8, 1.5, 1.4, 1.3, 1.2, 1.1, 1.0, 0.9.2, 0.9.1, 0.9, 0.8, 0.7
Build Dependencies:
java
Link Dependencies:
java
Description:
Gradle is an open source build automation system that builds upon the concepts of Apache Ant and Apache Maven and introduces a Groovy-based domain-specific language (DSL) instead of the XML form used by Apache Maven for declaring the project configuration. Gradle uses a directed acyclic graph ("DAG") to determine the order in which tasks can be run.

grandr

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
gtkplus, gconf, xrandr
Link Dependencies:
gtkplus, gconf, xrandr
Description:
RandR user interface using GTK+ libraries.

graph500

Homepage:
Spack package:
Versions:
3.0.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Graph500 reference implementations.

graphicsmagick

Homepage:
Spack package:
Versions:
1.3.29
Build Dependencies:
bzip2, ghostscript, ghostscript-fonts, graphviz, jasper, jpeg, lcms, libice, libpng, libsm, libtiff, libtool, libxml2, xz, zlib
Link Dependencies:
bzip2, ghostscript, ghostscript-fonts, graphviz, jasper, jpeg, lcms, libice, libpng, libsm, libtiff, libtool, libxml2, xz, zlib
Description:
GraphicsMagick is the swiss army knife of image processing. Provides a robust and efficient collection of tools and libraries which support reading, writing, and manipulating an image in over 88 major formats including important formats like DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM, and TIFF.

graphlib

Homepage:
Spack package:
Versions:
3.0.0, 2.0.0
Build Dependencies:
cmake
Description:
Library to create, manipulate, and export graphs Graphlib.

graphmap

Homepage:
Spack package:
Versions:
0.3.0
Description:
A highly sensitive and accurate mapper for long, error-prone reads

graphviz

Homepage:
Spack package:
Versions:
2.40.1
Build Dependencies:
swig, java, python, cairo, pango, freetype, glib, fontconfig, libpng, zlib, libgd, gts, expat, ghostscript, qt, gtkplus, pkgconfig, automake, autoconf, bison, flex, libtool
Link Dependencies:
java, python, cairo, pango, freetype, glib, fontconfig, libpng, zlib, libgd, gts, expat, ghostscript, qt, gtkplus
Description:
Graph Visualization Software

grass

Homepage:
Spack package:
Versions:
7.6.1, 7.4.4, 7.4.3, 7.4.2, 7.4.1, 7.4.0
Build Dependencies:
gmake, zlib, flex, bison, proj, gdal, python, libx11, libtiff, libpng, postgresql, mariadb, sqlite, gl, fftw, blas, lapack, cairo, freetype, readline, opencl, bzip2, netcdf, geos
Link Dependencies:
zlib, proj, gdal, libx11, libtiff, libpng, postgresql, mariadb, sqlite, gl, fftw, blas, lapack, cairo, freetype, readline, opencl, bzip2, netcdf, geos
Run Dependencies:
python
Description:
GRASS GIS (Geographic Resources Analysis Support System), is a free and open source Geographic Information System (GIS) software suite used for geospatial data management and analysis, image processing, graphics and maps production, spatial modeling, and visualization.

grib-api

Homepage:
Spack package:
Versions:
1.24.0, 1.21.0, 1.17.0, 1.16.0
Build Dependencies:
cmake, netcdf, openjpeg, jasper, libpng, libaec, python, py-numpy
Link Dependencies:
netcdf, openjpeg, jasper, libpng, libaec, python
Run Dependencies:
python, py-numpy
Description:
The ECMWF GRIB API is an application program interface accessible from C, FORTRAN and Python programs developed for encoding and decoding WMO FM-92 GRIB edition 1 and edition 2 messages.

grnboost

Homepage:
Spack package:
Versions:
2017-10-9
Build Dependencies:
sbt, java
Run Dependencies:
java, xgboost, spark
Description:
GRNBoost is a library built on top of Apache Spark that implements a scalable strategy for gene regulatory network (GRN) inference. See https://github.com/aertslab/GRNBoost/blob/master/docs/user_guide.md for the user guide. The location of xgboost4j-<version>.jar and GRNBoost.jar are set to $XGBOOST_JAR and $GRNBOOST_JAR. Path to xgboost4j-<version>.jar is also added to CLASSPATH.

groff

Homepage:
Spack package:
Versions:
1.22.3
Build Dependencies:
gawk, gmake, sed, ghostscript
Link Dependencies:
ghostscript
Description:
Groff (GNU troff) is a typesetting system that reads plain text mixed with formatting commands and produces formatted output. Output may be PostScript or PDF, html, or ASCII/UTF8 for display at the terminal.

gromacs

Homepage:
Spack package:
Versions:
develop, 2019.2, 2019.1, 2019, 2018.4, 2018.3, 2018.2, 2018.1, 2018, 2016.5, 2016.4, 2016.3, 5.1.5, 5.1.4, 5.1.2
Build Dependencies:
cmake, mpi, plumed, fftw, cuda
Link Dependencies:
mpi, plumed, fftw, cuda
Description:
GROMACS (GROningen MAchine for Chemical Simulations) is a molecular dynamics package primarily designed for simulations of proteins, lipids and nucleic acids. It was originally developed in the Biophysical Chemistry department of University of Groningen, and is now maintained by contributors in universities and research centers across the world. GROMACS is one of the fastest and most popular software packages available and can run on CPUs as well as GPUs. It is free, open source released under the GNU General Public License. Starting from version 4.6, GROMACS is released under the GNU Lesser General Public License.

gsl

Homepage:
Spack package:
Versions:
2.5, 2.4, 2.3, 2.2.1, 2.1, 2.0, 1.16
Description:
The GNU Scientific Library (GSL) is a numerical library for C and C++ programmers. It is free software under the GNU General Public License. The library provides a wide range of mathematical routines such as random number generators, special functions and least-squares fitting. There are over 1000 functions in total with an extensive test suite.

gslib

Homepage:
Spack package:
Versions:
1.0.3, 1.0.2, 1.0.1, 1.0.0
Build Dependencies:
mpi, blas
Link Dependencies:
mpi, blas
Description:
Highly scalable Gather-scatter code with AMG and XXT solvers

gtkmm

Homepage:
Spack package:
Versions:
2.19.7, 2.19.6, 2.19.4, 2.19.2, 2.17.11, 2.17.1, 2.16.0, 2.4.11
Build Dependencies:
glibmm, atk, gtkplus, pangomm, cairomm
Link Dependencies:
glibmm, atk, gtkplus, pangomm, cairomm
Description:
Gtkmm is the official C++ interface for the popular GUI library GTK+.

gtkorvo-atl

Homepage:
Spack package:
Versions:
develop, 2.2, 2.1
Build Dependencies:
cmake, gtkorvo-cercs-env
Link Dependencies:
gtkorvo-cercs-env
Description:
Libatl provides a library for the creation and manipulation of lists of name/value pairs using an efficient binary representation.

gtkorvo-cercs-env

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
cmake
Description:
A utility library used by some GTkorvo packages.

gtkorvo-dill

Homepage:
Spack package:
Versions:
develop, 2.4, 2.1
Build Dependencies:
cmake
Description:
DILL provides instruction-level code generation, register allocation and simple optimizations for generating executable code directly into memory regions for immediate use.

gtkorvo-enet

Homepage:
Spack package:
Versions:
1.3.14, 1.3.13
Description:
ENet reliable UDP networking library. This is a downstream branch of lsalzman's ENet. This version has expanded the client ID to handle more clients. The original is at http://github.com/lsalzman/enet.

gtkplus

Homepage:
Spack package:
Versions:
3.20.10, 2.24.32, 2.24.31, 2.24.25
Build Dependencies:
pkgconfig, atk, gdk-pixbuf, glib, shared-mime-info, pango, cairo, gobject-introspection, libepoxy, libxi, inputproto, fixesproto, at-spi2-atk, gettext
Link Dependencies:
atk, gdk-pixbuf, glib, shared-mime-info, pango, cairo, gobject-introspection, libepoxy, libxi, inputproto, fixesproto, at-spi2-atk, gettext
Description:
The GTK+ 2 package contains libraries used for creating graphical user interfaces for applications.

gts

Homepage:
Spack package:
Versions:
121130
Build Dependencies:
glib
Link Dependencies:
glib
Description:
GTS stands for the GNU Triangulated Surface Library. It is an Open Source Free Software Library intended to provide a set of useful functions to deal with 3D surfaces meshed with interconnected triangles. The source code is available free of charge under the Free Software LGPL license. The code is written entirely in C with an object-oriented approach based mostly on the design of GTK+. Careful attention is paid to performance related issues as the initial goal of GTS is to provide a simple and efficient library to scientists dealing with 3D computational surface meshes.

guidance

Homepage:
Spack package:
Versions:
2.02
Build Dependencies:
perl, perl-bio-perl, ruby, prank, clustalw, mafft, muscle
Link Dependencies:
ruby, prank, clustalw, mafft, muscle
Run Dependencies:
perl, perl-bio-perl
Description:
Guidance: Accurate detection of unreliable alignment regions accounting for the uncertainty of multiple parameters.

guile

Homepage:
Spack package:
Versions:
2.2.0, 2.0.14, 2.0.11
Build Dependencies:
gmp, gettext, libtool, libunistring, bdw-gc, libffi, readline, pkgconfig
Link Dependencies:
gmp, gettext, libtool, libunistring, bdw-gc, libffi, readline
Description:
Guile is the GNU Ubiquitous Intelligent Language for Extensions, the official extension language for the GNU operating system.

gurobi

Homepage:
Spack package:
Versions:
7.5.2
Description:
The Gurobi Optimizer was designed from the ground up to be the fastest, most powerful solver available for your LP, QP, QCP, and MIP (MILP, MIQP, and MIQCP) problems. Note: Gurobi is licensed software. You will need to create an account on the Gurobi homepage and download Gurobi Optimizer yourself. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html Please set the path to licence file with the following command (for bash) export GRB_LICENSE_FILE=/path/to/gurobi/license/. See section 4 in $GUROBI_HOME/docs/quickstart_linux.pdf for more details.

h5hut

Homepage:
Spack package:
Versions:
1.99.13
Build Dependencies:
mpi, hdf5
Link Dependencies:
mpi, hdf5
Description:
H5hut (HDF5 Utility Toolkit). High-Performance I/O Library for Particle- based Simulations.

h5part

Homepage:
Spack package:
Versions:
1.6.6
Build Dependencies:
mpi, hdf5
Link Dependencies:
mpi, hdf5
Description:
Portable High Performance Parallel Data Interface to HDF5

h5utils

Homepage:
Spack package:
Versions:
1.12.1
Build Dependencies:
hdf5, libpng, octave, hdf, libmatheval
Link Dependencies:
hdf5, libpng, octave, hdf, libmatheval
Description:
h5utils is a set of utilities for visualization and conversion of scientific data in the free, portable HDF5 format.

h5z-zfp

Homepage:
Spack package:
Versions:
develop, 0.8.0, 0.7.0
Build Dependencies:
hdf5, zfp
Link Dependencies:
hdf5, zfp
Description:
A highly flexible floating point and integer compression plugin for the HDF5 library using ZFP compression.

hacckernels

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake
Description:
HACCKernels: A Benchmark for HACC's Particle Force Kernels. The Hardware/Hybrid Accelerated Cosmology Code (HACC), a cosmology N-body- code framework, is designed to run efficiently on diverse computing architectures and to scale to millions of cores and beyond.

hadoop

Homepage:
Spack package:
Versions:
3.1.1, 2.9.0
Run Dependencies:
java
Description:
The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.

halc

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
dos2unix
Run Dependencies:
blasr, lordec, python
Description:
HALC is software that makes error correction for long reads with high throughput.

hapcut2

Homepage:
Spack package:
Versions:
2017-07-10
Description:
HapCUT2 is a maximum-likelihood-based tool for assembling haplotypes from DNA sequence reads, designed to 'just work' with excellent speed and accuracy.

hapdip

Homepage:
Spack package:
Versions:
2018.02.20
Run Dependencies:
k8
Description:
The CHM1-NA12878 benchmark for single-sample SNP/INDEL calling from WGS Illumina data.

haploview

Homepage:
Spack package:
Versions:
4.1
Build Dependencies:
java
Run Dependencies:
java
Description:
Haploview is designed to simplify and expedite the process of haplotype analysis.

harfbuzz

Homepage:
Spack package:
Versions:
2.3.1, 2.1.3, 1.9.0, 1.4.6, 0.9.37
Build Dependencies:
pkgconfig, glib, icu4c, freetype, cairo, zlib
Link Dependencies:
glib, icu4c, freetype, cairo, zlib
Description:
The Harfbuzz package contains an OpenType text shaping engine.

harminv

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
Harminv is a free program (and accompanying library) to solve the problem of harmonic inversion - given a discrete-time, finite-length signal that consists of a sum of finitely-many sinusoids (possibly exponentially decaying) in a given bandwidth, it determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.

hc

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
gmt, netcdf
Link Dependencies:
gmt, netcdf
Description:
HC is a global mantle circulation solver following Hager & O'Connell (1981) which can compute velocities, tractions, and geoid for simple density distributions and plate velocities.

hdf

Homepage:
Spack package:
Versions:
4.2.13, 4.2.12, 4.2.11
Build Dependencies:
jpeg, szip, zlib, bison, flex
Link Dependencies:
jpeg, szip, zlib
Description:
HDF4 (also known as HDF) is a library and multi-object file format for storing and managing data between machines.

hdf5

Homepage:
Spack package:
Versions:
develop, 1.10.5, 1.10.4, 1.10.3, 1.10.2, 1.10.1, 1.10.0-patch1, 1.10.0, 1.8.21, 1.8.19, 1.8.18, 1.8.17, 1.8.16, 1.8.15, 1.8.14, 1.8.13, 1.8.12, 1.8.10
Build Dependencies:
autoconf, automake, libtool, m4, mpi, numactl, szip, zlib
Link Dependencies:
mpi, numactl, szip, zlib
Description:
HDF5 is a data model, library, and file format for storing and managing data. It supports an unlimited variety of datatypes, and is designed for flexible and efficient I/O and for high volume and complex data.

hdf5-blosc

Homepage:
Spack package:
Versions:
master
Build Dependencies:
c-blosc, hdf5, libtool
Link Dependencies:
c-blosc, hdf5
Description:
Blosc filter for HDF5

help2man

Homepage:
Spack package:
Versions:
1.47.8, 1.47.4
Build Dependencies:
gettext, perl
Run Dependencies:
perl
Description:
help2man produces simple manual pages from the '--help' and '--version' output of other commands.

henson

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpi, python
Link Dependencies:
mpi, python
Description:
Cooperative multitasking for in situ processing.

hepmc

Homepage:
Spack package:
Versions:
3.0.0, 2.06.09, 2.06.08, 2.06.07, 2.06.06, 2.06.05
Build Dependencies:
cmake
Description:
The HepMC package is an object oriented, C++ event record for High Energy Physics Monte Carlo generators and simulation.

heppdt

Homepage:
Spack package:
Versions:
3.04.01, 3.04.00, 3.03.02, 3.03.01, 3.03.00, 2.06.01
Description:
The HepPID library contains translation methods for particle ID's to and from various Monte Carlo generators and the PDG standard numbering scheme. We realize that the generators adhere closely to the standard, but there are occasional differences.

hic-pro

Homepage:
Spack package:
Versions:
2.10.0
Build Dependencies:
bowtie2, samtools, python, r, py-numpy, py-scipy, py-pysam, py-bx-python, r-rcolorbrewer, r-ggplot2
Link Dependencies:
bowtie2, samtools, python, r
Run Dependencies:
py-numpy, py-scipy, py-pysam, py-bx-python, r-rcolorbrewer, r-ggplot2
Description:
HiC-Pro is a package designed to process Hi-C data, from raw fastq files (paired-end Illumina data) to the normalized contact maps

highfive

Homepage:
Spack package:
Versions:
1.5, 1.2, 1.1, 1.0
Build Dependencies:
cmake, boost, hdf5
Link Dependencies:
boost, hdf5
Description:
HighFive - Header only C++ HDF5 interface

highwayhash

Homepage:
Spack package:
Versions:
dfcb97
Description:
Strong (well-distributed and unpredictable) hashes: - Portable implementation of SipHash - HighwayHash, a 5x faster SIMD hash with security claims

hiop

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
cmake, mpi, lapack, blas
Link Dependencies:
mpi, lapack, blas
Description:
HiOp is an optimization solver for solving certain mathematical optimization problems expressed as nonlinear programming problems. HiOp is a lightweight HPC solver that leverages application's existing data parallelism to parallelize the optimization iterations by using specialized linear algebra kernels.

hisat2

Homepage:
Spack package:
Versions:
2.1.0
Description:
HISAT2 is a fast and sensitive alignment program for mapping next- generation sequencing reads (whole-genome, transcriptome, and exome sequencing data) against the general human population (as well as against a single reference genome).

hisea

Homepage:
Spack package:
Versions:
2017.12.26
Build Dependencies:
boost
Link Dependencies:
boost
Description:
HISEA is an efficient all-vs-all long read aligner for SMRT sequencing data. Its algorithm is designed to produce highest alignment sensitivity among others.

hmmer

Homepage:
Spack package:
Versions:
3.2.1, 3.1b2, 3.0, 2.4i, 2.3.2, 2.3.1
Build Dependencies:
mpi, gsl
Link Dependencies:
mpi, gsl
Description:
HMMER is used for searching sequence databases for sequence homologs, and for making sequence alignments. It implements methods using probabilistic models called profile hidden Markov models (profile HMMs).

homer

Homepage:
Spack package:
Versions:
4.9.1
Build Dependencies:
perl
Run Dependencies:
perl, r-biocgenerics, r-biocparallel, r-edger, r-deseq2
Description:
Software for motif discovery and next generation sequencing analysis

hoomd-blue

Homepage:
Spack package:
Versions:
develop, 2.2.2, 2.1.6
Build Dependencies:
cmake, python, py-numpy, pkgconfig, mpi, cuda, doxygen
Link Dependencies:
python, mpi, cuda
Run Dependencies:
py-numpy
Description:
HOOMD-blue is a general-purpose particle simulation toolkit. It scales from a single CPU core to thousands of GPUs. You define particle initial conditions and interactions in a high-level python script. Then tell HOOMD-blue how you want to execute the job and it takes care of the rest. Python job scripts give you unlimited flexibility to create custom initialization routines, control simulation parameters, and perform in situ analysis.

hpccg

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. Intended to be the 'best approximation to an unstructured implicit finite element or finite volume application in 800 lines or fewer.'

hpctoolkit

Homepage:
Spack package:
Versions:
develop, 2018.12.28, 2018.11.05
Build Dependencies:
binutils, boost, bzip2, dyninst, elfutils, intel-tbb, libdwarf, libmonitor, libunwind, xerces-c, xz, zlib, intel-xed, papi, libpfm4, mpi
Link Dependencies:
binutils, boost, bzip2, dyninst, elfutils, intel-tbb, libdwarf, libmonitor, libunwind, xerces-c, xz, zlib, intel-xed, papi, libpfm4, mpi
Description:
HPCToolkit is an integrated suite of tools for measurement and analysis of program performance on computers ranging from multicore desktop systems to the nation's largest supercomputers. By using statistical sampling of timers and hardware performance counters, HPCToolkit collects accurate measurements of a program's work, resource consumption, and inefficiency and attributes them to the full calling context in which they occur.

hpcviewer

Homepage:
Spack package:
Versions:
2019.04, 2019.02
Build Dependencies:
java
Run Dependencies:
java
Description:
Binary distribution of hpcviewer and hpctraceviewer for the Rice HPCToolkit (Linux x86_64, ppc64 and ppc64le). Note: hpctoolkit databases are platform independent, so you don't need to install hpctoolkit to run the viewers and it's common to run hpcrun and hpcviewer on different machines.

hpgmg

Homepage:
Spack package:
Versions:
develop, 0.4, 0.3, a0a5510df23b
Build Dependencies:
petsc, mpi, cuda, python
Link Dependencies:
petsc, mpi, cuda
Description:
HPGMG implements full multigrid (FMG) algorithms using finite-volume and finite-element methods. Different algorithmic variants adjust the arithmetic intensity and architectural properties that are tested. These FMG methods converge up to discretization error in one F-cycle, thus may be considered direct solvers. An F-cycle visits the finest level a total of two times, the first coarsening (8x smaller) 4 times, the second coarsening 6 times, etc.

hpl

Homepage:
Spack package:
Versions:
2.3, 2.2
Build Dependencies:
mpi, blas
Link Dependencies:
mpi, blas
Description:
HPL is a software package that solves a (random) dense linear system in double precision (64 bits) arithmetic on distributed-memory computers. It can thus be regarded as a portable as well as freely available implementation of the High Performance Computing Linpack Benchmark.

hpx

Homepage:
Spack package:
Versions:
1.2.1, 1.2.0, 1.1.0, 1.0.0
Build Dependencies:
cuda, cmake, boost, hwloc, python, pkgconfig, git, gperftools, jemalloc, tbb, apex, papi, valgrind
Link Dependencies:
cuda, boost, hwloc, gperftools, jemalloc, tbb, apex, papi, valgrind
Run Dependencies:
python
Test Dependencies:
python
Description:
C++ runtime system for parallel and distributed applications.

hpx5

Homepage:
Spack package:
Versions:
4.1.0, 4.0.0, 3.1.0, 2.0.0, 1.3.0, 1.2.0, 1.1.0, 1.0.0
Build Dependencies:
autoconf, automake, hwloc, jemalloc, libtool, m4, metis, mpi, opencl, pkgconfig
Link Dependencies:
hwloc, jemalloc, metis, mpi, opencl
Description:
The HPX-5 Runtime System. HPX-5 (High Performance ParalleX) is an open source, portable, performance-oriented runtime developed at CREST (Indiana University). HPX-5 provides a distributed programming model allowing programs to run unmodified on systems from a single SMP to large clusters and supercomputers with thousands of nodes. HPX-5 supports a wide variety of Intel and ARM platforms. It is being used by a broad range of scientific applications enabling scientists to write code that performs and scales better than contemporary runtimes.

hsakmt

Homepage:
Spack package:
Versions:
1.0.0
Description:
hsakmt is a thunk library that provides a userspace interface to amdkfd (AMD's HSA Linux kernel driver). It is the HSA equivalent of libdrm.

hstr

Homepage:
Spack package:
Versions:
1.22
Build Dependencies:
autoconf, automake, libtool, m4, ncurses, readline
Link Dependencies:
ncurses, readline
Description:
hstr(hh) is a shell history suggest box for Bash and Zsh, which enables easy viewing, searching and using your command history.

htop

Homepage:
Spack package:
Versions:
2.2.0, 2.0.2
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
htop is an interactive text-mode process viewer for Unix systems.

htslib

Homepage:
Spack package:
Versions:
1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3.1, 1.2
Build Dependencies:
zlib, bzip2, xz, m4, autoconf, automake, libtool
Link Dependencies:
zlib, bzip2, xz, m4, autoconf, automake, libtool
Description:
C library for high-throughput sequencing data formats.

httpie

Homepage:
Spack package:
Versions:
0.9.9, 0.9.8
Build Dependencies:
python, py-setuptools, py-pygments, py-requests, py-pysocks, py-argparse
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-pygments, py-requests, py-pysocks, py-argparse
Description:
Modern command line HTTP client.

hub

Homepage:
Spack package:
Versions:
head, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 1.12.4
Build Dependencies:
go
Link Dependencies:
go
Description:
The github git wrapper

hugo

Homepage:
Spack package:
Versions:
0.53
Build Dependencies:
go
Description:
The world's fastest framework for building websites.

hunspell

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
autoconf, automake, libtool, m4
Description:
The most popular spellchecking library (sez the author...).

hwloc

Homepage:
Spack package:
Versions:
2.0.2, 2.0.1, 2.0.0, 1.11.11, 1.11.10, 1.11.9, 1.11.8, 1.11.7, 1.11.6, 1.11.5, 1.11.4, 1.11.3, 1.11.2, 1.11.1, 1.9
Build Dependencies:
pkgconfig, cuda, gl, libpciaccess, libxml2, cairo, numactl
Link Dependencies:
cuda, gl, libpciaccess, libxml2, cairo, numactl
Description:
The Hardware Locality (hwloc) software project. The Portable Hardware Locality (hwloc) software package provides a portable abstraction (across OS, versions, architectures, ...) of the hierarchical topology of modern architectures, including NUMA memory nodes, sockets, shared caches, cores and simultaneous multithreading. It also gathers various system attributes such as cache and memory information as well as the locality of I/O devices such as network interfaces, InfiniBand HCAs or GPUs. It primarily aims at helping applications with gathering information about modern computing hardware so as to exploit it accordingly and efficiently.

hybpiper

Homepage:
Spack package:
Versions:
1.3.1, 1.2.0
Build Dependencies:
python, py-biopython, exonerate, blast-plus, spades, parallel, bwa, samtools
Link Dependencies:
exonerate, blast-plus, spades, parallel, bwa, samtools
Run Dependencies:
python, py-biopython
Description:
HybPiper was designed for targeted sequence capture, in which DNA sequencing libraries are enriched for gene regions of interest, especially for phylogenetics. HybPiper is a suite of Python scripts that wrap and connect bioinformatics tools in order to extract target sequences from high-throughput DNA sequencing reads

hydra

Homepage:
Spack package:
Versions:
3.2
Description:
Hydra is a process management system for starting parallel jobs. Hydra is designed to natively work with existing launcher daemons (such as ssh, rsh, fork), as well as natively integrate with resource management systems (such as slurm, pbs, sge).

hydrogen

Homepage:
Spack package:
Versions:
develop, 1.1.0, 1.0.1, 1.0, 0.99
Build Dependencies:
cmake, openblas, intel-mkl, veclibfort, essl, netlib-lapack, aluminum, lapack, mpi, scalapack, gmp, mpc, mpfr, cuda, cub, ninja
Link Dependencies:
openblas, intel-mkl, veclibfort, essl, netlib-lapack, aluminum, lapack, mpi, scalapack, gmp, mpc, mpfr, cuda, cub
Description:
Hydrogen: Distributed-memory dense and sparse-direct linear algebra and optimization library. Based on the Elemental library.

hyphy

Homepage:
Spack package:
Versions:
2.3.14
Build Dependencies:
cmake, curl
Link Dependencies:
cmake, curl
Description:
HyPhy: Hypothesis testing using Phylogenies

hypre

Homepage:
Spack package:
Versions:
develop, 2.15.1, 2.15.0, 2.14.0, 2.13.0, 2.12.1, 2.11.2, 2.11.1, 2.10.1, 2.10.0b, xsdk-0.2.0
Build Dependencies:
mpi, blas, lapack, superlu-dist
Link Dependencies:
mpi, blas, lapack, superlu-dist
Description:
Hypre is a library of high performance preconditioners that features parallel multigrid methods for both structured and unstructured grid problems.

i3

Homepage:
Spack package:
Versions:
4.14.1
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, libev, startup-notification, xcb-util-cursor, xcb-util-keysyms, xcb-util-wm, xcb-util-xrm, libxkbcommon, yajl, cairo, pango
Link Dependencies:
libev, startup-notification, xcb-util-cursor, xcb-util-keysyms, xcb-util-wm, xcb-util-xrm, libxkbcommon, yajl, cairo, pango
Description:
i3, improved tiling wm. i3 is a tiling window manager, completely written from scratch. The target platforms are GNU/Linux and BSD operating systems, our code is Free and Open Source Software (FOSS) under the BSD license. i3 is primarily targeted at advanced users and developers.

ibm-java

Homepage:
Spack package:
Versions:
8.0.5.30
Description:
Binary distribution of the IBM Java Software Development Kit for big and little-endian powerpc (power7, 8 and 9).

ibmisc

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
cmake, python, eigen, everytrace, proj, blitz, netcdf-cxx4, udunits2, googletest, py-cython, py-numpy, boost, doxygen
Link Dependencies:
python, eigen, everytrace, proj, blitz, netcdf-cxx4, udunits2, boost
Run Dependencies:
py-cython, py-numpy
Description:
Misc. reusable utilities used by IceBin.

iceauth

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
libice, xproto, pkgconfig, util-macros
Link Dependencies:
libice
Description:
The iceauth program is used to edit and display the authorization information used in connecting with ICE. It operates very much like the xauth program for X11 connection authentication records.

icedtea

Homepage:
Spack package:
Versions:
3.4.0
Build Dependencies:
pkgconfig, gmake, cups, jdk, libx11, xproto, libxext, libxtst, libxi, libxt, libxinerama, libxrender, libxcomposite, libxau, libxdmcp, gtkplus, freetype, wget, giflib, libpng, jpeg, lcms, zlib, alsa-lib
Link Dependencies:
cups, libx11, xproto, libxext, libxtst, libxi, libxt, libxinerama, libxrender, libxcomposite, libxau, libxdmcp, gtkplus, freetype, giflib, libpng, jpeg, lcms, zlib, alsa-lib
Description:
The IcedTea project provides a harness to build the source code from http://openjdk.java.net using Free Software build tools and adds a number of key features to the upstream OpenJDK codebase. IcedTea requires an existing IcedTea or OpenJDK install to build.

icet

Homepage:
Spack package:
Versions:
develop, 2.1.1
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
The Image Composition Engine for Tiles (IceT) is a high-performance sort-last parallel rendering library.

ico

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
ico is a simple animation program that may be used for testing various X11 operations and extensions. It displays a wire-frame rotating polyhedron, with hidden lines removed, or a solid-fill polyhedron with hidden faces removed.

icu4c

Homepage:
Spack package:
Versions:
60.1, 58.2, 57.1
Description:
ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications. ICU4C is the C/C++ interface.

id3lib

Homepage:
Spack package:
Versions:
3.8.3
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Library for manipulating ID3v1 and ID3v2 tags

idba

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
m4, autoconf, automake, libtool
Description:
IDBA is a practical iterative De Bruijn Graph De Novo Assembler for sequence assembly in bioinfomatics.

igraph

Homepage:
Spack package:
Versions:
0.7.1
Build Dependencies:
libxml2
Link Dependencies:
libxml2
Description:
igraph is a library for creating and manipulating graphs.

igvtools

Homepage:
Spack package:
Versions:
2.3.98
Build Dependencies:
java
Link Dependencies:
java
Description:
IGVTools suite of command-line utilities for preprocessing data files

ilmbase

Homepage:
Spack package:
Versions:
2.3.0, 2.2.0, 2.1.0, 2.0.1, 1.0.2, 0.9.0
Description:
OpenEXR ILM Base libraries (high dynamic-range image file format)

image-magick

Homepage:
Spack package:
Versions:
7.0.5-9, 7.0.2-7, 7.0.2-6
Build Dependencies:
jpeg, pango, libtool, libpng, freetype, fontconfig, libtiff, ghostscript, ghostscript-fonts
Link Dependencies:
jpeg, pango, libpng, freetype, fontconfig, libtiff, ghostscript, ghostscript-fonts
Description:
ImageMagick is a software suite to create, edit, compose, or convert bitmap images.

imake

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
xproto, pkgconfig
Description:
The imake build system.

imp

Homepage:
Spack package:
Versions:
2.8.0
Build Dependencies:
cmake, python, swig, boost, hdf5, eigen
Link Dependencies:
python, swig, boost, hdf5, eigen
Description:
IMP, the Integrative Modeling Platform.

impute2

Homepage:
Spack package:
Versions:
2.3.2
Description:
IMPUTE2 is a genotype imputation and haplotype phasing program based on ideas from Howie et al. 2009.

infernal

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Infernal (INFERence of RNA ALignment) is for searching DNA sequence databases for RNA structure and sequence similarities. It is an implementation of a special case of profile stochastic context-free grammars called covariance models (CMs).

inputproto

Homepage:
Spack package:
Versions:
2.3.2
Build Dependencies:
pkgconfig, util-macros
Description:
X Input Extension. This extension defines a protocol to provide additional input devices management such as graphic tablets.

intel

Homepage:
Spack package:
Versions:
19.0.3, 19.0.1, 19.0.0, 18.0.4, 18.0.3, 18.0.2, 18.0.1, 18.0.0, 17.0.7, 17.0.6, 17.0.5, 17.0.4, 17.0.3, 17.0.2, 17.0.1, 17.0.0, 16.0.4, 16.0.3, 16.0.2, 15.0.6, 15.0.1
Description:
Intel Compilers.

intel-daal

Homepage:
Spack package:
Versions:
2019.3.199, 2019.1.144, 2019.0.117, 2018.3.222, 2018.2.199, 2018.1.163, 2018.0.128, 2017.4.239, 2017.3.196, 2017.2.174, 2017.1.132, 2017.0.098, 2016.3.210, 2016.2.181
Description:
Intel Data Analytics Acceleration Library.

intel-gpu-tools

Homepage:
Spack package:
Versions:
1.16
Build Dependencies:
libdrm, libpciaccess, cairo, glib, flex, bison, python, pkgconfig, util-macros
Link Dependencies:
libdrm, libpciaccess, cairo, glib
Description:
Intel GPU Tools is a collection of tools for development and testing of the Intel DRM driver. There are many macro-level test suites that get used against the driver, including xtest, rendercheck, piglit, and oglconform, but failures from those can be difficult to track down to kernel changes, and many require complicated build procedures or specific testing environments to get useful results. Therefore, Intel GPU Tools includes low-level tools and tests specifically for development and testing of the Intel DRM Driver.

intel-ipp

Homepage:
Spack package:
Versions:
2019.3.199, 2019.1.144, 2019.0.117, 2018.4.274, 2018.3.222, 2018.2.199, 2018.1.163, 2018.0.128, 2017.3.196, 2017.2.174, 2017.1.132, 2017.0.098, 9.0.3.210
Description:
Intel Integrated Performance Primitives.

intel-mkl

Homepage:
Spack package:
Versions:
2019.3.199, 2019.1.144, 2019.0.117, 2018.4.274, 2018.3.222, 2018.2.199, 2018.1.163, 2018.0.128, 2017.4.239, 2017.3.196, 2017.2.174, 2017.1.132, 2017.0.098, 11.3.3.210, 11.3.2.181
Description:
Intel Math Kernel Library.

intel-mkl-dnn

Homepage:
Spack package:
Versions:
1.0-pc2, 0.19, 0.18.1, 0.11, 0.10, 0.9
Build Dependencies:
cmake, intel-mkl
Link Dependencies:
intel-mkl
Description:
Intel(R) Math Kernel Library for Deep Neural Networks (Intel(R) MKL- DNN).

intel-mpi

Homepage:
Spack package:
Versions:
2019.3.199, 2019.1.144, 2019.0.117, 2018.4.274, 2018.3.222, 2018.2.199, 2018.1.163, 2018.0.128, 2017.4.239, 2017.3.196, 2017.2.174, 2017.1.132, 5.1.3.223
Description:
Intel MPI

intel-parallel-studio

Homepage:
Spack package:
Versions:
professional.2019.3, professional.2019.1, professional.2019.0, professional.2018.4, professional.2018.3, professional.2018.2, professional.2018.1, professional.2018.0, professional.2017.7, professional.2017.6, professional.2017.5, professional.2017.4, professional.2017.3, professional.2017.2, professional.2017.1, professional.2017.0, professional.2016.4, professional.2016.3, professional.2016.2, professional.2016.1, professional.2016.0, professional.2015.6, professional.2015.1, composer.2019.3, composer.2019.1, composer.2019.0, composer.2018.4, composer.2018.3, composer.2018.2, composer.2018.1, composer.2018.0, composer.2017.7, composer.2017.6, composer.2017.5, composer.2017.4, composer.2017.3, composer.2017.2, composer.2017.1, composer.2017.0, composer.2016.4, composer.2016.3, composer.2016.2, composer.2015.6, composer.2015.1, cluster.2019.3, cluster.2019.2, cluster.2019.1, cluster.2019.0, cluster.2018.4, cluster.2018.3, cluster.2018.2, cluster.2018.1, cluster.2018.0, cluster.2017.7, cluster.2017.6, cluster.2017.5, cluster.2017.4, cluster.2017.3, cluster.2017.2, cluster.2017.1, cluster.2017.0, cluster.2016.4, cluster.2016.3, cluster.2016.2, cluster.2016.1, cluster.2016.0, cluster.2015.6, cluster.2015.1
Description:
Intel Parallel Studio.

intel-pin

Homepage:
Spack package:
Versions:
3.7
Description:
Intel Pin is a dynamic binary instrumentation framework for the IA-32, x86-64 and MIC instruction-set architectures that enables the creation of dynamic program analysis tools.

intel-tbb

Homepage:
Spack package:
Versions:
2019.4, 2019.3, 2019.2, 2019.1, 2019, 2018.6, 2018.5, 2018.4, 2018.3, 2018.2, 2018.1, 2018, 2017.8, 2017.7, 2017.6, 2017.5, 2017.4, 2017.3, 2017.2, 2017.1, 2017, 4.4.6, 4.4.5, 4.4.4, 4.4.3, 4.4.2, 4.4.1, 4.4
Build Dependencies:
cmake
Description:
Widely used C++ template library for task parallelism. Intel Threading Building Blocks (Intel TBB) lets you easily write parallel C++ programs that take full advantage of multicore performance, that are portable and composable, and that have future-proof scalability.

intel-xed

Homepage:
Spack package:
Versions:
develop, 2019.03.01, 2018.02.14
Build Dependencies:
python
Description:
The Intel X86 Encoder Decoder library for encoding and decoding x86 machine instructions (64- and 32-bit). Also includes libxed-ild, a lightweight library for decoding the length of an instruction.

intltool

Homepage:
Spack package:
Versions:
0.51.0
Build Dependencies:
perl-xml-parser, perl
Run Dependencies:
perl-xml-parser, perl
Description:
intltool is a set of tools to centralize translation of many different file formats using GNU gettext-compatible PO files.

ior

Homepage:
Spack package:
Versions:
3.2.0, 3.0.1
Build Dependencies:
autoconf, automake, libtool, m4, mpi, hdf5, parallel-netcdf
Link Dependencies:
mpi, hdf5, parallel-netcdf
Description:
The IOR software is used for benchmarking parallel file systems using POSIX, MPI-IO, or HDF5 interfaces.

iozone

Homepage:
Spack package:
Versions:
3_465
Description:
IOzone is a filesystem benchmark tool. The benchmark generates and measures a variety of file operations. Iozone has been ported to many machines and runs under many operating systems.

iperf2

Homepage:
Spack package:
Versions:
2.0.12
Description:
This code is a continuation based from the no longer maintained iperf 2.0.5 code base. Iperf 2.0.5 is still widely deployed and used by many for testing networks and for qualifying networking products.

iperf3

Homepage:
Spack package:
Versions:
3.6
Description:
The iperf series of tools perform active measurements to determine the maximum achievable bandwidth on IP networks. iperf2 is a separately maintained project.

ipopt

Homepage:
Spack package:
Versions:
3.12.10, 3.12.9, 3.12.8, 3.12.7, 3.12.6, 3.12.5, 3.12.4, 3.12.3, 3.12.2, 3.12.1, 3.12.0
Build Dependencies:
blas, lapack, pkgconfig, mumps, coinhsl, metis
Link Dependencies:
blas, lapack, mumps, coinhsl, metis
Description:
Ipopt (Interior Point OPTimizer, pronounced eye-pea-Opt) is a software package for large-scale nonlinear optimization.

isaac

Homepage:
Spack package:
Versions:
develop, master, 1.4.0, 1.3.3, 1.3.2, 1.3.1, 1.3.0
Build Dependencies:
cmake
Link Dependencies:
jpeg, jansson, boost, cuda, icet, mpi
Description:
In Situ Animation of Accelerated Computations: Header-Only Library

isaac-server

Homepage:
Spack package:
Versions:
develop, master, 1.4.0, 1.3.3, 1.3.2, 1.3.1, 1.3.0
Build Dependencies:
cmake
Link Dependencies:
jpeg, jansson, boost, libwebsockets
Description:
In Situ Animation of Accelerated Computations: Server

isl

Homepage:
Spack package:
Versions:
0.19, 0.18, 0.15, 0.14
Build Dependencies:
gmp
Link Dependencies:
gmp
Description:
isl (Integer Set Library) is a thread-safe C library for manipulating sets and relations of integer points bounded by affine constraints.

itstool

Homepage:
Spack package:
Versions:
2.0.2, 2.0.1, 2.0.0, 1.2.0
Description:
ITS Tool allows you to translate your XML documents with PO files, using rules from the W3C Internationalization Tag Set (ITS) to determine what to translate and how to separate it into PO file messages.

itsx

Homepage:
Spack package:
Versions:
1.0.11
Build Dependencies:
perl, hmmer
Link Dependencies:
hmmer
Run Dependencies:
perl
Description:
Improved software detection and extraction of ITS1 and ITS2 from ribosomal ITS sequences of fungi and other eukaryotes for use in environmental sequencing

jackcess

Homepage:
Spack package:
Versions:
2.1.12, 1.2.14.3
Build Dependencies:
jdk
Link Dependencies:
jdk
Run Dependencies:
java, commons-lang, commons-logging
Description:
Jackcess is a pure Java library for reading from and writing to MS Access databases (currently supporting versions 2000-2016).

jags

Homepage:
Spack package:
Versions:
4.3.0, 4.2.0
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
JAGS is Just Another Gibbs Sampler. It is a program for analysis of Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC) simulation not wholly unlike BUGS

jansson

Homepage:
Spack package:
Versions:
2.9
Build Dependencies:
cmake
Description:
Jansson is a C library for encoding, decoding and manipulating JSON data.

jasper

Homepage:
Spack package:
Versions:
2.0.14, 1.900.1
Build Dependencies:
cmake, jpeg, gl
Link Dependencies:
jpeg, gl
Description:
Library for manipulating JPEG-2000 images

jbigkit

Homepage:
Spack package:
Versions:
2.1, 1.6
Description:
JBIG-Kit is a software implementation of the JBIG1 data compression standard.

jchronoss

Homepage:
Spack package:
Versions:
1.2, 1.1.1, 1.1, 1.0
Build Dependencies:
cmake, libxml2, libwebsockets, libev, ncurses
Link Dependencies:
libxml2, libwebsockets, libev, ncurses
Description:
JCHRONOSS aims to help HPC application testing process to scale as much as the application does.

jdk

Homepage:
Spack package:
Versions:
11.0.2_9, 11.0.1_13, 10.0.2_13, 10.0.1_10, 1.8.0_202, 1.8.0_181-b13, 1.8.0_172-b11, 1.8.0_141-b15, 1.8.0_131-b11, 1.8.0_92-b14, 1.8.0_73-b02, 1.8.0_66-b17, 1.7.0_80-b0
Description:
The Java Development Kit (JDK) released by Oracle Corporation in the form of a binary product aimed at Java developers. Includes a complete JRE plus tools for developing, debugging, and monitoring Java applications.

jellyfish

Homepage:
Spack package:
Versions:
2.2.7, 1.1.11
Build Dependencies:
perl, python
Run Dependencies:
perl, python
Description:
JELLYFISH is a tool for fast, memory-efficient counting of k-mers in DNA.

jemalloc

Homepage:
Spack package:
Versions:
4.5.0, 4.4.0, 4.3.1, 4.2.1, 4.2.0, 4.1.0, 4.0.4
Description:
jemalloc is a general purpose malloc(3) implementation that emphasizes fragmentation avoidance and scalable concurrency support.

jmol

Homepage:
Spack package:
Versions:
14.8.0
Run Dependencies:
java
Description:
Jmol: an open-source Java viewer for chemical structures in 3D with features for chemicals, crystals, materials and biomolecules.

jq

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
oniguruma, bison
Link Dependencies:
oniguruma
Description:
jq is a lightweight and flexible command-line JSON processor.

json-c

Homepage:
Spack package:
Versions:
0.13.1, 0.12.1, 0.11
Build Dependencies:
autoconf
Description:
A JSON implementation in C.

json-cwx

Homepage:
Spack package:
Versions:
0.12
Build Dependencies:
autoconf, automake, libtool, m4
Description:
JSON-C with Extensions

json-fortran

Homepage:
Spack package:
Versions:
7.0.0
Build Dependencies:
cmake
Description:
A Fortran 2008 JSON API

json-glib

Homepage:
Spack package:
Versions:
1.2.8
Build Dependencies:
glib
Link Dependencies:
glib
Description:
JSON-GLib is a library for reading and parsing JSON using GLib and GObject data types and API.

jsoncpp

Homepage:
Spack package:
Versions:
1.7.3
Build Dependencies:
cmake
Test Dependencies:
python
Description:
JsonCpp is a C++ library that allows manipulating JSON values, including serialization and deserialization to and from strings. It can also preserve existing comment in unserialization/serialization steps, making it a convenient format to store user input files.

judy

Homepage:
Spack package:
Versions:
1.0.5
Description:
Judy: General-purpose dynamic array, associative array and hash-trie.

julia

Homepage:
Spack package:
Versions:
master, 0.6.2, 0.5.2, 0.5.1, 0.5.0, 0.4.7, 0.4.6, 0.4.5, 0.4.3, release-0.5, release-0.4
Build Dependencies:
m4, binutils, cmake, curl, git, openssl, python
Link Dependencies:
binutils, cmake, curl, git, openssl, python
Run Dependencies:
hdf5, mpi, py-matplotlib
Description:
The Julia Language: A fresh approach to technical computing

k8

Homepage:
Spack package:
Versions:
0.2.4
Run Dependencies:
zlib
Description:
K8 is a Javascript shell based on Google's V8 Javascript engine.

kahip

Homepage:
Spack package:
Versions:
develop, 2.00
Build Dependencies:
scons, argtable, mpi
Link Dependencies:
argtable, mpi
Description:
KaHIP - Karlsruhe High Quality Partitioning - is a family of graph partitioning programs. It includes KaFFPa (Karlsruhe Fast Flow Partitioner), which is a multilevel graph partitioning algorithm, in its variants Strong, Eco and Fast, KaFFPaE (KaFFPaEvolutionary) which is a parallel evolutionary algorithm that uses KaFFPa to provide combine and mutation operations, as well as KaBaPE which extends the evolutionary algorithm. Moreover, specialized techniques are included to partition road networks (Buffoon), to output a vertex separator from a given partition or techniques geared towards efficient partitioning of social networks.

kaiju

Homepage:
Spack package:
Versions:
1.6.2
Run Dependencies:
perl-io-compress, py-htseq
Description:
Kaiju is a program for the taxonomic classification of high-throughput sequencing reads.

kaks-calculator

Homepage:
Spack package:
Versions:
2.0
Description:
KaKs_Calculator adopts model selection and model averaging to calculate nonsynonymous (Ka) and synonymous (Ks) substitution rates, attempting to include as many features as needed for accurately capturing evolutionary information in protein-coding sequences.

kaldi

Homepage:
Spack package:
Versions:
master, 2018-07-11, 2015-10-07
Build Dependencies:
blas, cuda, openfst
Link Dependencies:
blas, cuda, openfst
Run Dependencies:
sph2pipe, sctk, speex
Description:
Kaldi is a toolkit for speech recognition written in C++ and licensed under the Apache License v2.0. Kaldi is intended for use by speech recognition researchers.

kallisto

Homepage:
Spack package:
Versions:
0.43.1
Build Dependencies:
cmake, zlib, hdf5, mpich
Link Dependencies:
zlib, hdf5, mpich
Description:
kallisto is a program for quantifying abundances of transcripts from RNA-Seq data.

karma

Homepage:
Spack package:
Versions:
1.7.25-common
Build Dependencies:
libx11, libxaw
Run Dependencies:
libx11, libxaw
Description:
Karma is a toolkit for interprocess communications, authentication, encryption, graphics display, user interface and manipulating the Karma network data structure. It contains KarmaLib (the structured libraries and API) and a large number of modules (applications) to perform many standard tasks.

kbproto

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
pkgconfig, util-macros
Description:
X Keyboard Extension. This extension defines a protcol to provide a number of new capabilities and controls for text keyboards.

kdiff3

Homepage:
Spack package:
Versions:
0.9.98
Build Dependencies:
qt
Link Dependencies:
qt
Description:
Compare and merge 2 or 3 files or directories.

kealib

Homepage:
Spack package:
Versions:
develop, 1.4.11, 1.4.10, 1.4.9, 1.4.8, 1.4.7
Build Dependencies:
cmake, hdf5
Link Dependencies:
hdf5
Description:
An HDF5 Based Raster File Format. KEALib provides an implementation of the GDAL data model. The format supports raster attribute tables, image pyramids, meta-data and in-built statistics while also handling very large files and compression throughout. Based on the HDF5 standard, it also provides a base from which other formats can be derived and is a good choice for long term data archiving. An independent software library (libkea) provides complete access to the KEA image format and a GDAL driver allowing KEA images to be used from any GDAL supported software. Development work on this project has been funded by Landcare Research.

kentutils

Homepage:
Spack package:
Versions:
302.1
Build Dependencies:
libpng, openssl, mariadb
Link Dependencies:
libpng, openssl, mariadb
Description:
Jim Kent command line bioinformatic utilities

kibana

Homepage:
Spack package:
Versions:
6.4.0
Run Dependencies:
jdk
Description:
Kibana lets you visualize your Elasticsearch data and navigate the Elastic Stack

kim-api

Homepage:
Spack package:
Versions:
develop, 2.0.2
Build Dependencies:
cmake
Description:
OpenKIM is an online framework for making molecular simulations reliable, reproducible, and portable. Computer implementations of inter- atomic models are archived in OpenKIM, verified for coding integrity, and tested by computing their predictions for a variety of material properties. Models conforming to the KIM application programming interface (API) work seamlessly with major simulation codes that have adopted the KIM API standard. This package provides the kim-api library and supporting utilities. It also provides a small set of example models. To obtain all models archived at https://openkim.org that are compatible with the kim-api package, install and activate the openkim- models pacakge too.

kitty

Homepage:
Spack package:
Versions:
0.12.3, 0.12.2, 0.12.1, 0.12.0, 0.11.3, 0.11.2, 0.11.1, 0.11.0, 0.10.1, 0.10.0
Build Dependencies:
python, harfbuzz, libxkbcommon, zlib, libpng, gl, pkgconfig, py-setuptools, py-sphinx, freetype, fontconfig, xrandr, libxinerama, xineramaproto, libxi, libxcursor, fixesproto, dbus, xkeyboard-config
Link Dependencies:
python, harfbuzz, libxkbcommon, zlib, libpng, gl, freetype, fontconfig, xrandr, libxinerama, xineramaproto, libxi, libxcursor, fixesproto, dbus, xkeyboard-config
Run Dependencies:
python, gl
Description:
fast, featureful, cross-platform, GPU-based terminal emulator

kmergenie

Homepage:
Spack package:
Versions:
1.7044
Build Dependencies:
python, py-setuptools, r, zlib
Link Dependencies:
zlib
Run Dependencies:
python, py-setuptools, r
Description:
KmerGenie estimates the best k-mer length for genome de novo assembly.

kokkos

Homepage:
Spack package:
Versions:
develop, 2.8.00, 2.7.24, 2.7.00, 2.5.00, 2.04.11, 2.04.04, 2.04.00, 2.03.13, 2.03.05, 2.03.00, 2.02.15, 2.02.07
Build Dependencies:
hwloc, qthreads, cuda
Link Dependencies:
hwloc, qthreads, cuda
Description:
Kokkos implements a programming model in C++ for writing performance portable applications targeting all major HPC platforms.

kraken

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
perl, jellyfish
Link Dependencies:
jellyfish
Run Dependencies:
perl
Description:
Kraken is a system for assigning taxonomic labels to short DNA sequences, usually obtained through metagenomic studies.

krb5

Homepage:
Spack package:
Versions:
1.16.1
Build Dependencies:
bison, openssl
Link Dependencies:
openssl
Description:
Network authentication protocol

krims

Homepage:
Spack package:
Versions:
develop, 0.2.1
Build Dependencies:
cmake
Description:
The bucket of Krimskrams every C or C++ project needs

kripke

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Kripke is a simple, scalable, 3D Sn deterministic particle transport proxy/mini app.

kvasir-mpl

Homepage:
Spack package:
Versions:
develop
Description:
Kvasir metaprogramming library

kvtree

Homepage:
Spack package:
Versions:
master, 1.0.2
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
KVTree provides a fully extensible C datastructure modeled after perl hashes.

ladot

Homepage:
Spack package:
Versions:
1.2
Run Dependencies:
perl, graphviz
Test Dependencies:
perl, graphviz, texlive
Description:
Ladot is a script that makes using LaTeX in graphs generated by dot (graphviz) relatively easy.

laghos

Homepage:
Spack package:
Versions:
develop, 2.0, 1.1, 1.0
Build Dependencies:
mfem
Link Dependencies:
mfem
Description:
Laghos (LAGrangian High-Order Solver) is a CEED miniapp that solves the time-dependent Euler equations of compressible gas dynamics in a moving Lagrangian frame using unstructured high-order finite element spatial discretization and explicit high-order time-stepping.

lammps

Homepage:
Spack package:
Versions:
develop, 20181212, 20181207, 20181127, 20181115, 20181109, 20181024, 20181010, 20180918, 20180905, 20180831, 20180822, 20180629, 20180316, 20180222, 20170922, 20170901
Build Dependencies:
cmake, mpi, fftw, voropp, netcdf, blas, lapack, latte, python, hdf5
Link Dependencies:
mpi, fftw, voropp, netcdf, blas, lapack, latte, python, hdf5
Description:
LAMMPS stands for Large-scale Atomic/Molecular Massively Parallel Simulator. This package uses patch releases, not stable release. See https://github.com/spack/spack/pull/5342 for a detailed discussion.

last

Homepage:
Spack package:
Versions:
869
Description:
LAST finds similar regions between sequences, and aligns them. It is designed for comparing large datasets to each other (e.g. vertebrate genomes and/or large numbers of DNA reads).

lastz

Homepage:
Spack package:
Versions:
1.04.00
Description:
LASTZ is a program for aligning DNA sequences, a pairwise aligner.

latte

Homepage:
Spack package:
Versions:
develop, 1.2.1, 1.2.0, 1.1.1, 1.0.1
Build Dependencies:
cmake, blas, lapack, mpi, qmd-progress
Link Dependencies:
blas, lapack, mpi, qmd-progress
Description:
Open source density functional tight binding molecular dynamics.

launchmon

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
autoconf, automake, libtool, libgcrypt, libgpg-error, boost, spectrum-mpi
Link Dependencies:
libgcrypt, libgpg-error, elf, boost, spectrum-mpi
Description:
Software infrastructure that enables HPC run-time tools to co-locate tool daemons with a parallel job.

lazyten

Homepage:
Spack package:
Versions:
develop, 0.4.1
Build Dependencies:
cmake, krims, blas, lapack, armadillo, arpack-ng
Link Dependencies:
krims, blas, lapack, armadillo, arpack-ng
Description:
Lightweight linear algebra library based on lazy matrices

lbann

Homepage:
Spack package:
Versions:
develop, 0.99, 0.98.1, 0.98, 0.97.1, 0.97, 0.96, 0.95, 0.94, 0.93, 0.92, 0.91
Build Dependencies:
cmake, hydrogen, elemental, aluminum, cuda, cudnn, cub, mpi, hwloc, opencv, protobuf, cnpy, nccl, conduit, python, py-setuptools, py-numpy, py-breathe, py-m2r, cereal, ninja
Link Dependencies:
hydrogen, elemental, aluminum, cuda, cudnn, cub, mpi, hwloc, opencv, protobuf, cnpy, nccl, conduit, python, cereal
Run Dependencies:
python, py-argparse, py-configparser, py-graphviz, py-matplotlib, py-numpy, py-onnx, py-pandas, py-texttable
Description:
LBANN: Livermore Big Artificial Neural Network Toolkit. A distributed memory, HPC-optimized, model and data parallel training toolkit for deep neural networks.

lbxproxy

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxext, liblbxutil, libx11, libice, xtrans, xproxymanagementprotocol, bigreqsproto, pkgconfig, util-macros
Link Dependencies:
libxext, liblbxutil, libx11, libice
Description:
lbxproxy accepts client connections, multiplexes them over a single connection to the X server, and performs various optimizations on the X protocol to make it faster over low bandwidth and/or high latency connections. Note that the X server source from X.Org no longer supports the LBX extension, so this program is only useful in connecting to older X servers.

lbzip2

Homepage:
Spack package:
Versions:
2.5
Description:
Multi-threaded compression utility with support for bzip2 compressed file format

lcals

Homepage:
Spack package:
Versions:
1.0.2
Description:
LCALS ("Livermore Compiler Analysis Loop Suite") is a collection of loop kernels based, in part, on historical "Livermore Loops" benchmarks (See the 1986 technical report: "The Livermore Fortran Kernels: A Computer Test of the Numerical Performance Range", by Frank H. McMahon, UCRL-53745.). The suite contains facilities to generate timing statistics and reports.

lcms

Homepage:
Spack package:
Versions:
2.9, 2.8, 2.6
Build Dependencies:
jpeg, libtiff, zlib
Link Dependencies:
jpeg, libtiff, zlib
Description:
Little cms is a color management library. Implements fast transforms between ICC profiles. It is focused on speed, and is portable across several platforms (MIT license).

ldc

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
cmake, llvm, zlib, libconfig, curl, libedit, binutils, ldc-bootstrap
Link Dependencies:
llvm, zlib, libconfig, curl, libedit, binutils, ldc-bootstrap
Run Dependencies:
binutils
Description:
The LDC project aims to provide a portable D programming language compiler with modern optimization and code generation capabilities. LDC is fully Open Source; the parts of the code not taken/adapted from other projects are BSD-licensed (see the LICENSE file for details). Consult the D wiki for further information: http://wiki.dlang.org/LDC

ldc-bootstrap

Homepage:
Spack package:
Versions:
0.17.4
Build Dependencies:
cmake, llvm, zlib, libconfig, curl, libedit, binutils
Link Dependencies:
llvm, zlib, libconfig, curl, libedit, binutils
Description:
The LDC project aims to provide a portable D programming language compiler with modern optimization and code generation capabilities. LDC is fully Open Source; the parts of the code not taken/adapted from other projects are BSD-licensed (see the LICENSE file for details). Consult the D wiki for further information: http://wiki.dlang.org/LDC This old version of the compiler is needed to bootstrap newer ones.

legion

Homepage:
Spack package:
Versions:
develop, 18.05.0, 18.02.0, 17.10.0, 17.08.0, 17.02.0
Build Dependencies:
cmake, gasnet
Link Dependencies:
gasnet
Description:
Legion is a data-centric parallel programming system for writing portable high performance programs targeted at distributed heterogeneous architectures. Legion presents abstractions which allow programmers to describe properties of program data (e.g. independence, locality). By making the Legion programming system aware of the structure of program data, it can automate many of the tedious tasks programmers currently face, including correctly extracting task- and data-level parallelism and moving data around complex memory hierarchies. A novel mapping interface provides explicit programmer controlled placement of data in the memory hierarchy and assignment of tasks to processors in a way that is orthogonal to correctness, thereby enabling easy porting and tuning of Legion applications to new architectures.

lemon

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
cmake
Description:
LEMON stands for Library for Efficient Modeling and Optimization in Networks. It is a C++ template library providing efficient implementations of common data structures and algorithms with focus on combinatorial optimization tasks connected mainly with graphs and networks.

leveldb

Homepage:
Spack package:
Versions:
master, 1.20, 1.18
Build Dependencies:
snappy
Link Dependencies:
snappy
Description:
LevelDB is a fast key-value storage library written at Google that provides an ordered mapping from string keys to string values.

lftp

Homepage:
Spack package:
Versions:
4.8.1, 4.7.7, 4.6.4
Build Dependencies:
expat, libiconv, ncurses, openssl, readline, zlib
Link Dependencies:
expat, libiconv, ncurses, openssl, readline, zlib
Description:
LFTP is a sophisticated file transfer program supporting a number of network protocols (ftp, http, sftp, fish, torrent).

libaec

Homepage:
Spack package:
Versions:
1.0.2, 1.0.1, 1.0.0
Build Dependencies:
cmake
Description:
Libaec provides fast lossless compression of 1 up to 32 bit wide signed or unsigned integers (samples). It implements Golomb-Rice compression method under the BSD license and includes a free drop-in replacement for the SZIP library.

libaio

Homepage:
Spack package:
Versions:
0.3.110
Description:
This is the linux native Asynchronous I/O interface library.

libapplewm

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
libx11, libxext, xextproto, applewmproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
AppleWM is a simple library designed to interface with the Apple-WM extension. This extension allows X window managers to better interact with the Mac OS X Aqua user interface when running X11 in a rootless mode.

libarchive

Homepage:
Spack package:
Versions:
3.3.2, 3.2.1, 3.1.2, 3.1.1, 3.1.0
Build Dependencies:
zlib, bzip2, lz4, xz, lzo, nettle, openssl, libxml2, expat
Link Dependencies:
zlib, bzip2, lz4, xz, lzo, nettle, openssl, libxml2, expat
Description:
libarchive: C library and command-line tools for reading and writing tar, cpio, zip, ISO, and other archive formats.

libassuan

Homepage:
Spack package:
Versions:
2.5.3, 2.4.5, 2.4.3
Build Dependencies:
libgpg-error
Link Dependencies:
libgpg-error
Description:
Libassuan is a small library implementing the so-called Assuan protocol.

libatomic-ops

Homepage:
Spack package:
Versions:
7.6.6, 7.4.4
Description:
This package provides semi-portable access to hardware-provided atomic memory update operations on a number architectures.

libbeagle

Homepage:
Spack package:
Versions:
3.1.2, 2.1.2
Build Dependencies:
cuda, autoconf, automake, libtool, m4, subversion, pkgconfig, java
Link Dependencies:
cuda
Description:
Beagle performs genotype calling, genotype phasing, imputation of ungenotyped markers, and identity-by-descent segment detection.

libbeato

Homepage:
Spack package:
Versions:
master
Description:
libbeato is a C library containing routines for various uses in Genomics, and includes a copy of the freeware portion of the C library from UCSC's Genome Browser Group.

libbsd

Homepage:
Spack package:
Versions:
0.9.1, 0.9.0, 0.8.7, 0.8.6
Description:
This library provides useful functions commonly found on BSD systems, and lacking on others like GNU systems, thus making it easier to port projects with strong BSD origins, without needing to embed the same code over and over again on each project.

libbson

Homepage:
Spack package:
Versions:
1.9.1, 1.8.1, 1.8.0, 1.7.0, 1.6.3, 1.6.2, 1.6.1
Build Dependencies:
autoconf, automake, libtool, m4
Description:
libbson is a library providing useful routines related to building, parsing, and iterating BSON documents.

libcanberra

Homepage:
Spack package:
Versions:
0.30
Build Dependencies:
libxrender, libxext, libx11, libxinerama, libxrandr, libxcursor, libxcomposite, libxdamage, libxfixes, libxcb, libxau, gtkplus, libvorbis, pkgconfig
Link Dependencies:
libxrender, libxext, libx11, libxinerama, libxrandr, libxcursor, libxcomposite, libxdamage, libxfixes, libxcb, libxau, gtkplus, libvorbis
Description:
libcanberra is an implementation of the XDG Sound Theme and Name Specifications, for generating event sounds on free desktops, such as GNOME.

libcap

Homepage:
Spack package:
Versions:
2.25
Description:
Libcap implements the user-space interfaces to the POSIX 1003.1e capabilities available in Linux kernels. These capabilities are a partitioning of the all powerful root privilege into a set of distinct privileges.

libceed

Homepage:
Spack package:
Versions:
develop, 0.4, 0.2, 0.1
Build Dependencies:
cuda, occa, libxsmm
Link Dependencies:
cuda, occa, libxsmm
Description:
The CEED API Library: Code for Efficient Extensible Discretizations.

libcerf

Homepage:
Spack package:
Versions:
1.3
Description:
A self-contained C library providing complex error functions, based on Faddeeva's plasma dispersion function w(z). Also provides Dawson's integral and Voigt's convolution of a Gaussian and a Lorentzian

libcheck

Homepage:
Spack package:
Versions:
0.12.0, 0.11.0, 0.10.0
Build Dependencies:
cmake
Description:
A unit testing framework for C.

libcint

Homepage:
Spack package:
Versions:
3.0.13, 3.0.12, 3.0.11, 3.0.10, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4
Build Dependencies:
cmake, blas, python, py-numpy
Link Dependencies:
blas
Test Dependencies:
python, py-numpy
Description:
Library for analytical Gaussian integrals for quantum chemistry.

libcircle

Homepage:
Spack package:
Versions:
0.2.1-rc.1
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
libcircle provides an efficient distributed queue on a cluster, using self-stabilizing work stealing.

libconfig

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
m4, autoconf, automake, libtool
Description:
C/C++ Configuration File Library

libcroco

Homepage:
Spack package:
Versions:
0.6.12
Build Dependencies:
glib, libxml2
Link Dependencies:
glib, libxml2
Description:
Libcroco is a standalone css2 parsing and manipulation library.

libctl

Homepage:
Spack package:
Versions:
3.2.2
Build Dependencies:
guile
Link Dependencies:
guile
Description:
libctl is a free Guile-based library implementing flexible control files for scientific simulations.

libdivsufsort

Homepage:
Spack package:
Versions:
2.0.1
Build Dependencies:
cmake
Description:
libdivsufsort is a software library that implements a lightweight suffix array construction algorithm.

libdmx

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libx11, libxext, xextproto, dmxproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libdmx - X Window System DMX (Distributed Multihead X) extension library.

libdrm

Homepage:
Spack package:
Versions:
2.4.81, 2.4.75, 2.4.70, 2.4.59, 2.4.33
Build Dependencies:
pkgconfig, libpciaccess, libpthread-stubs
Link Dependencies:
libpciaccess, libpthread-stubs
Description:
A userspace library for accessing the DRM, direct rendering manager, on Linux, BSD and other systems supporting the ioctl interface.

libdwarf

Homepage:
Spack package:
Versions:
20180129, 20160507, 20130729, 20130207, 20130126
Link Dependencies:
elfutils, elf, zlib
Description:
The DWARF Debugging Information Format is of interest to programmers working on compilers and debuggers (and any one interested in reading or writing DWARF information). It was developed by a committee (known as the PLSIG at the time) starting around 1991. Starting around 1991 SGI developed the libdwarf and dwarfdump tools for internal use and as part of SGI IRIX developer tools. Since that time dwarfdump and libdwarf have been shipped (as an executable and archive respectively, not source) with every release of the SGI MIPS/IRIX C compiler.

libeatmydata

Homepage:
Spack package:
Versions:
105
Test Dependencies:
strace
Description:
libeatmydata is a small LD_PRELOAD library designed to (transparently) disable fsync (and friends, like open(O_SYNC)). This has two side- effects: making software that writes data safely to disk a lot quicker and making this software no longer crash safe.

libedit

Homepage:
Spack package:
Versions:
3.1-20170329, 3.1-20160903, 3.1-20150325
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
An autotools compatible port of the NetBSD editline library

libelf

Homepage:
Spack package:
Versions:
0.8.13
Description:
libelf lets you read, modify or create ELF object files in an architecture-independent way. The library takes care of size and endian issues, e.g. you can process a file for SPARC processors on an Intel- based system. Note: libelf is no longer maintained and packages that depend on libelf should migrate to elfutils.

libemos

Homepage:
Spack package:
Versions:
4.5.1, 4.5.0, 4.4.9, 4.4.7, 4.4.2
Build Dependencies:
cmake, eccodes, grib-api, fftw, pkgconfig
Link Dependencies:
eccodes, grib-api, fftw
Description:
The Interpolation library (EMOSLIB) includes Interpolation software and BUFR & CREX encoding/decoding routines.

libepoxy

Homepage:
Spack package:
Versions:
1.4.3, 1.3.1
Build Dependencies:
pkgconfig, meson, gl
Link Dependencies:
meson, gl
Description:
Epoxy is a library for handling OpenGL function pointer management for you.

libev

Homepage:
Spack package:
Versions:
develop, 4.24
Build Dependencies:
autoconf, automake, libtool, m4
Description:
A full-featured and high-performance event loop that is loosely modelled after libevent, but without its limitations and bugs.

libevent

Homepage:
Spack package:
Versions:
2.1.8, 2.0.22, 2.0.21, 2.0.20, 2.0.19, 2.0.18, 2.0.17, 2.0.16, 2.0.15, 2.0.14, 2.0.13, 2.0.12
Build Dependencies:
openssl
Link Dependencies:
openssl
Description:
The libevent API provides a mechanism to execute a callback function when a specific event occurs on a file descriptor or after a timeout has been reached. Furthermore, libevent also support callbacks due to signals or regular timeouts.

libevpath

Homepage:
Spack package:
Versions:
develop, 4.4.0, 4.2.4, 4.2.1, 4.1.2, 4.1.1
Build Dependencies:
cmake, gtkorvo-enet, libffs
Link Dependencies:
gtkorvo-enet, libffs
Description:
EVpath is an event transport middleware layer designed to allow for the easy implementation of overlay networks, with active data processing, routing and management at all points in the overlay. EVPath is designed for high performance systems.

libfabric

Homepage:
Spack package:
Versions:
develop, 1.7.1, 1.7.0, 1.6.2, 1.6.1, 1.6.0, 1.5.3, 1.5.0, 1.4.2
Build Dependencies:
rdma-core, opa-psm2, psm, ucx, m4, autoconf, automake, libtool
Link Dependencies:
rdma-core, opa-psm2, psm, ucx
Description:
The Open Fabrics Interfaces (OFI) is a framework focused on exporting fabric communication services to applications.

libffi

Homepage:
Spack package:
Versions:
3.2.1
Description:
The libffi library provides a portable, high level programming interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run time.

libffs

Homepage:
Spack package:
Versions:
develop, 1.5, 1.1.1, 1.1
Build Dependencies:
cmake, flex, bison, gtkorvo-cercs-env, gtkorvo-atl, gtkorvo-dill
Link Dependencies:
gtkorvo-atl, gtkorvo-dill
Description:
FFS is a middleware library for data communication, including representation, processing and marshaling that preserves the performance of traditional approaches while relaxing the requirement of a priori knowledge and providing complex run-time flexibility.

libfontenc

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
zlib, xproto, pkgconfig, util-macros
Link Dependencies:
zlib
Description:
libfontenc - font encoding library.

libfs

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
xproto, fontsproto, xtrans, pkgconfig, util-macros
Description:
libFS - X Font Service client library. This library is used by clients of X Font Servers (xfs), such as xfsinfo, fslsfonts, and the X servers themselves.

libgcrypt

Homepage:
Spack package:
Versions:
1.8.4, 1.8.1, 1.7.6, 1.6.2
Build Dependencies:
libgpg-error
Link Dependencies:
libgpg-error
Description:
Libgcrypt is a general purpose cryptographic library based on the code from GnuPG. It provides functions for all cryptographic building blocks: symmetric ciphers, hash algorithms, MACs, public key algorithms, large integer functions, random numbers and a lot of supporting functions.

libgd

Homepage:
Spack package:
Versions:
2.2.4, 2.2.3, 2.1.1
Build Dependencies:
autoconf, automake, libtool, m4, gettext, pkgconfig, libiconv, libpng, jpeg, libtiff, fontconfig
Link Dependencies:
libiconv, libpng, jpeg, libtiff, fontconfig
Description:
GD is an open source code library for the dynamic creation of images by programmers. GD is written in C, and "wrappers" are available for Perl, PHP and other languages. GD creates PNG, JPEG, GIF, WebP, XPM, BMP images, among other formats. GD is commonly used to generate charts, graphics, thumbnails, and most anything else, on the fly. While not restricted to use on the web, the most common applications of GD involve website development.

libgeotiff

Homepage:
Spack package:
Versions:
1.4.2
Build Dependencies:
zlib, jpeg, libtiff, proj
Link Dependencies:
zlib, jpeg, libtiff, proj
Description:
GeoTIFF represents an effort by over 160 different remote sensing, GIS, cartographic, and surveying related companies and organizations to establish a TIFF based interchange format for georeferenced raster imagery.

libgit2

Homepage:
Spack package:
Versions:
0.26.0, 0.24.2
Build Dependencies:
cmake, libssh2
Link Dependencies:
libssh2
Description:
libgit2 is a portable, pure C implementation of the Git core methods provided as a re-entrant linkable library with a solid API, allowing you to write native speed custom Git applications in any language which supports C bindings.

libgpg-error

Homepage:
Spack package:
Versions:
1.36, 1.27, 1.21, 1.18
Description:
Libgpg-error is a small library that defines common error values for all GnuPG components. Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry, SmartCard Daemon and possibly more in the future.

libgpuarray

Homepage:
Spack package:
Versions:
0.7.5, 0.7.4, 0.7.3, 0.7.2, 0.7.1, 0.7.0, 0.6.9, 0.6.2, 0.6.1, 0.6.0
Build Dependencies:
cmake, cuda, libcheck
Link Dependencies:
cuda, libcheck
Description:
Make a common GPU ndarray(n dimensions array) that can be reused by all projects that is as future proof as possible, while keeping it easy to use for simple need/quick test.

libgridxc

Homepage:
Spack package:
Versions:
0.7.6
Description:
A library to compute the exchange and correlation energy and potential in spherical (i.e. an atom) or periodic systems.

libgtextutils

Homepage:
Spack package:
Versions:
0.7
Description:
Gordon's Text utils Library.

libharu

Homepage:
Spack package:
Versions:
master, 2.3.0, 2.2.0
Build Dependencies:
libtool, autoconf, automake, libpng, zlib
Link Dependencies:
libpng, zlib
Description:
libharu - free PDF library. Haru is a free, cross platform, open-sourced software library for generating PDF.

libhio

Homepage:
Spack package:
Versions:
1.4.1.3, 1.4.1.2, 1.4.1.1, 1.4.1.0
Build Dependencies:
json-c, bzip2, pkgconfig, mpi, hdf5
Link Dependencies:
json-c, bzip2, mpi, hdf5
Description:
libHIO is a flexible, high-performance parallel IO package developed at LANL. libHIO supports IO to either a conventional PFS or to Cray DataWarp with management of Cray DataWarp space and stage-in and stage- out from and to the PFS.

libiberty

Homepage:
Spack package:
Versions:
2.31.1, 2.30, 2.29.1, 2.28.1
Description:
The libiberty.a library from GNU binutils. Libiberty provides demangling and support functions for the GNU toolchain.

libice

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
xproto, xtrans, pkgconfig, util-macros
Description:
libICE - Inter-Client Exchange Library.

libiconv

Homepage:
Spack package:
Versions:
1.15, 1.14
Description:
GNU libiconv provides an implementation of the iconv() function and the iconv program for character set conversion.

libidn2

Homepage:
Spack package:
Versions:
2.1.1a, 2.1.1, 2.1.0, 2.0.5
Build Dependencies:
libunistring
Link Dependencies:
libunistring
Description:
Libidn2 is a free software implementation of IDNA2008, Punycode and TR46. Its purpose is to encode and decode internationalized domain names.

libint

Homepage:
Spack package:
Versions:
2.4.2, 2.4.1, 2.4.0, 2.2.0, 2.1.0, 1.1.6, 1.1.5
Build Dependencies:
autoconf, automake, libtool, boost, gmp
Link Dependencies:
boost, gmp
Description:
Libint is a high-performance library for computing Gaussian integrals in quantum mechanics.

libjpeg

Homepage:
Spack package:
Versions:
9c, 9b, 9a
Description:
libjpeg is a widely used free library with functions for handling the JPEG image data format. It implements a JPEG codec (encoding and decoding) alongside various utilities for handling JPEG data.

libjpeg-turbo

Homepage:
Spack package:
Versions:
1.5.90, 1.5.3, 1.5.0, 1.3.1
Build Dependencies:
nasm, autoconf, automake, libtool, cmake
Description:
libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to accelerate baseline JPEG compression and decompression. libjpeg is a library that implements JPEG image encoding, decoding and transcoding.

libksba

Homepage:
Spack package:
Versions:
1.3.5
Build Dependencies:
libgpg-error
Link Dependencies:
libgpg-error
Description:
Libksba is a library to make the tasks of working with X.509 certificates, CMS data and related objects more easy.

liblbxutil

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
xextproto, xproto, pkgconfig, util-macros
Description:
liblbxutil - Low Bandwith X extension (LBX) utility routines.

liblockfile

Homepage:
Spack package:
Versions:
1.14
Description:
NFS-safe locking library

libmatheval

Homepage:
Spack package:
Versions:
1.1.11
Build Dependencies:
guile, flex
Link Dependencies:
flex
Description:
GNU libmatheval is a library (callable from C and Fortran) to parse and evaluate symbolic expressions input as text. It supports expressions in any number of variables of arbitrary names, decimal and symbolic constants, basic unary and binary operators, and elementary mathematical functions. In addition to parsing and evaluation, libmatheval can also compute symbolic derivatives and output expressions to strings.

libmaxminddb

Homepage:
Spack package:
Versions:
1.3.2
Description:
C library for the MaxMind DB file format

libmesh

Homepage:
Spack package:
Versions:
1.3.1, 1.3.0, 1.2.1, 1.0.0
Build Dependencies:
boost, eigen, hdf5, mpi, perl, petsc, slepc, tbb, vtk
Link Dependencies:
boost, eigen, hdf5, mpi, perl, petsc, slepc, tbb, vtk
Description:
The libMesh library provides a framework for the numerical simulation of partial differential equations using arbitrary unstructured discretizations on serial and parallel platforms.

libmng

Homepage:
Spack package:
Versions:
2.0.3, 2.0.2
Build Dependencies:
jpeg, zlib, lcms
Link Dependencies:
jpeg, zlib, lcms
Description:
libmng -THE reference library for reading, displaying, writing and examining Multiple-Image Network Graphics. MNG is the animation extension to the popular PNG image-format.

libmongoc

Homepage:
Spack package:
Versions:
1.9.5, 1.9.4, 1.9.3, 1.9.1, 1.8.1, 1.8.0, 1.7.0, 1.6.3, 1.6.2, 1.6.1
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, libbson, openssl, snappy, zlib
Link Dependencies:
libbson, openssl, snappy, zlib
Description:
libmongoc is a client library written in C for MongoDB.

libmonitor

Homepage:
Spack package:
Versions:
master, 2018.07.18, 2013.02.18
Description:
Libmonitor is a library providing callback functions for the begin and end of processes and threads. It provides a layer on which to build process monitoring tools and profilers.

libnbc

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
LibNBC is a prototypic implementation of a nonblocking interface for MPI collective operations. Based on ANSI C and MPI-1, it supports all MPI-1 collective operations in a nonblocking manner. LibNBC is distributed under the BSD license.

libnl

Homepage:
Spack package:
Versions:
3.3.0, 3.2.25
Build Dependencies:
bison, flex, m4
Description:
libnl - Netlink Protocol Library Suite

libnova

Homepage:
Spack package:
Versions:
0.15.0
Build Dependencies:
m4, autoconf, automake, libtool
Link Dependencies:
m4, autoconf, automake, libtool
Description:
"libnova is a general purpose, double precision, Celestial Mechanics, Astrometry and Astrodynamics library.

libnsl

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, gettext, rpcsvc-proto, libtirpc
Link Dependencies:
gettext, rpcsvc-proto, libtirpc
Description:
This library contains the public client interface for NIS(YP) and NIS+ in a IPv6 ready version.

libogg

Homepage:
Spack package:
Versions:
1.3.2
Description:
Ogg is a multimedia container format, and the native file and stream format for the Xiph.org multimedia codecs.

liboldx

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
X version 10 backwards compatibility.

libpcap

Homepage:
Spack package:
Versions:
1.8.1
Build Dependencies:
flex, bison
Description:
libpcap is a portable library in C/C++ for packet capture.

libpciaccess

Homepage:
Spack package:
Versions:
0.13.5, 0.13.4
Build Dependencies:
libtool, pkgconfig, util-macros
Description:
Generic PCI access library.

libpfm4

Homepage:
Spack package:
Versions:
4.10.1, 4.9.0, 4.8.0
Description:
libpfm4 is a userspace library to help setup performance events for use with the perf_events Linux kernel interface.

libpipeline

Homepage:
Spack package:
Versions:
1.4.2
Build Dependencies:
pkgconfig
Test Dependencies:
check
Description:
libpipeline is a C library for manipulating pipelines of subprocesses in a flexible and convenient way.

libplist

Homepage:
Spack package:
Versions:
master, 2.0.0, 1.10, 1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3
Build Dependencies:
autoconf, automake, libtool, pkgconfig
Description:
Library for Apple Binary- and XML-Property Lists.

libpmemobj-cpp

Homepage:
Spack package:
Versions:
develop, 1.6, 1.5.1, 1.5
Build Dependencies:
cmake, pmdk
Link Dependencies:
pmdk
Description:
C++ bindings for libpmemobj (https://github.com/pmem/pmdk)

libpng

Homepage:
Spack package:
Versions:
1.6.34, 1.6.29, 1.6.28, 1.6.27, 1.2.57
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
libpng is the official PNG reference library.

libpsl

Homepage:
Spack package:
Versions:
0.17.0
Build Dependencies:
icu4c, gettext, pkgconfig, python
Link Dependencies:
icu4c
Test Dependencies:
valgrind
Description:
libpsl - C library to handle the Public Suffix List.

libpthread-stubs

Homepage:
Spack package:
Versions:
0.4, 0.3
Description:
The libpthread-stubs package provides weak aliases for pthread functions not provided in libc or otherwise available by default.

libquo

Homepage:
Spack package:
Versions:
develop, 1.3, 1.2.9
Build Dependencies:
mpi, m4, autoconf, automake, libtool
Link Dependencies:
mpi
Description:
QUO (as in "status quo") is a runtime library that aids in accommodating thread-level heterogeneity in dynamic, phased MPI+X applications comprising single- and multi-threaded libraries.

librom

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
lapack, mpi, zlib, libszip, hdf5, perl, graphviz, doxygen, boost
Link Dependencies:
lapack, mpi, zlib, libszip, hdf5, perl, graphviz, doxygen, boost
Description:
libROM: library for computing large-scale reduced order models

libseccomp

Homepage:
Spack package:
Versions:
2.3.3
Build Dependencies:
autoconf, automake, libtool, m4, py-cython
Description:
The main libseccomp repository

libsharp

Homepage:
Spack package:
Versions:
2018-01-17, 1.0.0
Build Dependencies:
autoconf, mpi
Link Dependencies:
mpi
Description:
Libsharp is a code library for spherical harmonic transforms (SHTs) and spin-weighted spherical harmonic transforms, which evolved from the libpsht library.

libshm

Homepage:
Spack package:
Versions:
master
Description:
Libshm is a header library making an easy C++11 access to a shared memory.

libsigcpp

Homepage:
Spack package:
Versions:
2.99.12, 2.9.3, 2.1.1, 2.0.3
Description:
Libsigc++ is a C++ library for typesafe callbacks

libsigsegv

Homepage:
Spack package:
Versions:
2.11, 2.10
Description:
GNU libsigsegv is a library for handling page faults in user mode.

libsm

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libice, xproto, xtrans, pkgconfig, util-macros
Link Dependencies:
libice
Description:
libSM - X Session Management Library.

libsodium

Homepage:
Spack package:
Versions:
1.0.17, 1.0.16, 1.0.15, 1.0.13, 1.0.12, 1.0.11, 1.0.10, 1.0.3, 1.0.2, 1.0.1, 1.0.0, 0.7.1
Description:
Sodium is a modern, easy-to-use software library for encryption, decryption, signatures, password hashing and more.

libspatialindex

Homepage:
Spack package:
Versions:
1.8.5
Build Dependencies:
cmake
Description:
C++ implementation of R*-tree, an MVR-tree and a TPR-tree with C API.

libspatialite

Homepage:
Spack package:
Versions:
4.3.0a
Build Dependencies:
sqlite, proj, geos, freexl
Link Dependencies:
sqlite, proj, geos, freexl
Description:
SpatiaLite is an open source library intended to extend the SQLite core to support fully fledged Spatial SQL capabilities.

libsplash

Homepage:
Spack package:
Versions:
develop, master, 1.7.0, 1.6.0, 1.5.0, 1.4.0, 1.3.1, 1.2.4
Build Dependencies:
cmake, hdf5, mpi
Link Dependencies:
hdf5, mpi
Description:
libSplash aims at developing a HDF5-based I/O library for HPC simulations. It is created as an easy-to-use frontend for the standard HDF5 library with support for MPI processes in a cluster environment. While the standard HDF5 library provides detailed low-level control, libSplash simplifies tasks commonly found in large-scale HPC simulations, such as iterative computations and MPI distributed processes.

libssh

Homepage:
Spack package:
Versions:
0.8.5, 0.7.5
Build Dependencies:
cmake, openssl, zlib
Link Dependencies:
openssl, zlib
Description:
libssh: the SSH library

libssh2

Homepage:
Spack package:
Versions:
1.8.0, 1.7.0, 1.4.3
Build Dependencies:
cmake, openssl, zlib, xz
Link Dependencies:
openssl, zlib, xz
Description:
libssh2 is a client-side C library implementing the SSH2 protocol

libsvm

Homepage:
Spack package:
Versions:
322
Description:
Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression.

libszip

Homepage:
Spack package:
Versions:
2.1.1, 2.1
Description:
Szip is an implementation of the extended-Rice lossless compression algorithm. It provides lossless compression of scientific data, and is provided with HDF software products.

libtasn1

Homepage:
Spack package:
Versions:
4.13, 4.12, 4.10, 4.9, 4.8, 4.7, 4.6, 4.5, 4.4, 4.3, 4.2, 4.1, 4.0
Description:
ASN.1 structure parser library.

libtermkey

Homepage:
Spack package:
Versions:
0.18, 0.17, 0.16, 0.15b, 0.14
Build Dependencies:
libtool, ncurses
Link Dependencies:
ncurses
Description:
Easy keyboard entry processing for terminal programs

libtiff

Homepage:
Spack package:
Versions:
4.0.9, 4.0.8, 4.0.7, 4.0.6, 4.0.3, 3.9.7
Build Dependencies:
jpeg, zlib, xz
Link Dependencies:
jpeg, zlib, xz
Description:
LibTIFF - Tag Image File Format (TIFF) Library and Utilities.

libtirpc

Homepage:
Spack package:
Versions:
1.1.4
Description:
Libtirpc is a port of Suns Transport-Independent RPC library to Linux.

libtool

Homepage:
Spack package:
Versions:
develop, 2.4.6, 2.4.2
Build Dependencies:
m4, autoconf, automake, help2man, xz, texinfo
Description:
libtool -- library building part of autotools.

libunistring

Homepage:
Spack package:
Versions:
0.9.10, 0.9.9, 0.9.8, 0.9.7, 0.9.6
Description:
This library provides functions for manipulating Unicode strings and for manipulating C strings according to the Unicode standard.

libunwind

Homepage:
Spack package:
Versions:
develop, 2018.10.12, 1.3-rc1, 1.2.1, 1.1
Build Dependencies:
autoconf, automake, libtool, m4
Link Dependencies:
xz
Description:
A portable and efficient C programming interface (API) to determine the call-chain of a program.

libusb

Homepage:
Spack package:
Versions:
master, 1.0.22, 1.0.21, 1.0.20
Build Dependencies:
autoconf, automake, libtool
Description:
Library for USB device access.

libusbmuxd

Homepage:
Spack package:
Versions:
master, 1.0.10, 1.0.9
Build Dependencies:
autoconf, automake, libtool, pkgconfig, libplist
Link Dependencies:
libplist
Description:
A client library to multiplex connections from and to iOS devices.

libuuid

Homepage:
Spack package:
Versions:
1.0.3
Description:
Portable uuid C library

libuv

Homepage:
Spack package:
Versions:
1.25.0, 1.10.0, 1.9.0
Build Dependencies:
automake, autoconf, libtool
Description:
Multi-platform library with a focus on asynchronous IO

libvdwxc

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
fftw, mpi, pfft
Link Dependencies:
fftw, mpi, pfft
Description:
Portable C library of density functionals with van der Waals interactions for density functional theory

libvorbis

Homepage:
Spack package:
Versions:
1.3.5
Build Dependencies:
libogg, pkgconfig
Link Dependencies:
libogg
Description:
Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free, general-purpose compressed audio format for mid to high quality (8kHz- 48.0kHz, 16+ bit, polyphonic) audio and music at fixed and variable bitrates from 16 to 128 kbps/channel.

libvterm

Homepage:
Spack package:
Versions:
681
Build Dependencies:
libtool
Description:
An abstract library implementation of a terminal emulator

libwebsockets

Homepage:
Spack package:
Versions:
2.2.1, 2.1.1, 2.1.0, 2.0.3, 1.7.9
Build Dependencies:
cmake, zlib, openssl
Link Dependencies:
zlib, openssl
Description:
C library for lightweight websocket clients and servers.

libwindowswm

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, libxext, xextproto, windowswmproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
WindowsWM - Cygwin/X rootless window management extension. WindowsWM is a simple library designed to interface with the Windows-WM extension. This extension allows X window managers to better interact with the Cygwin XWin server when running X11 in a rootless mode.

libx11

Homepage:
Spack package:
Versions:
1.6.7, 1.6.5, 1.6.3
Build Dependencies:
libxcb, xproto, xextproto, xtrans, kbproto, inputproto, pkgconfig, util-macros, perl
Link Dependencies:
libxcb, xextproto, kbproto
Description:
libX11 - Core X11 protocol client library.

libxau

Homepage:
Spack package:
Versions:
1.0.8
Build Dependencies:
xproto, pkgconfig, util-macros
Link Dependencies:
xproto
Description:
The libXau package contains a library implementing the X11 Authorization Protocol. This is useful for restricting client access to the display.

libxaw

Homepage:
Spack package:
Versions:
1.0.13, 1.0.12
Build Dependencies:
libx11, libxext, libxt, libxmu, libxpm, xproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxt, libxmu, libxpm
Description:
Xaw is the X Athena Widget Set. Xaw is a widget set based on the X Toolkit Intrinsics (Xt) Library.

libxaw3d

Homepage:
Spack package:
Versions:
1.6.2
Build Dependencies:
libx11, libxt, libxmu, libxext, libxpm, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libxmu, libxext, libxpm
Description:
Xaw3d is the X 3D Athena Widget Set. Xaw3d is a widget set based on the X Toolkit Intrinsics (Xt) Library.

libxc

Homepage:
Spack package:
Versions:
4.3.2, 4.2.3, 3.0.0, 2.2.2, 2.2.1
Description:
Libxc is a library of exchange-correlation functionals for density- functional theory.

libxcb

Homepage:
Spack package:
Versions:
1.13, 1.12, 1.11.1, 1.11
Build Dependencies:
libpthread-stubs, libxau, libxdmcp, xcb-proto, pkgconfig, util-macros
Link Dependencies:
libpthread-stubs, libxau, libxdmcp
Description:
The X protocol C-language Binding (XCB) is a replacement for Xlib featuring a small footprint, latency hiding, direct access to the protocol, improved threading support, and extensibility.

libxcomposite

Homepage:
Spack package:
Versions:
0.4.4
Build Dependencies:
libx11, libxfixes, fixesproto, compositeproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxfixes
Description:
libXcomposite - client library for the Composite extension to the X11 protocol.

libxcursor

Homepage:
Spack package:
Versions:
1.1.14
Build Dependencies:
libxrender, libxfixes, libx11, fixesproto, pkgconfig, util-macros
Link Dependencies:
libxrender, libxfixes, libx11
Description:
libXcursor - X Window System Cursor management library.

libxdamage

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libxfixes, libx11, damageproto, fixesproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libxfixes, libx11
Description:
This package contains the library for the X Damage extension.

libxdmcp

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
xproto, pkgconfig, util-macros, libbsd
Link Dependencies:
libbsd
Description:
libXdmcp - X Display Manager Control Protocol library.

libxevie

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxext, xproto, xextproto, evieext, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
Xevie - X Event Interception Extension (XEvIE).

libxext

Homepage:
Spack package:
Versions:
1.3.3
Build Dependencies:
libx11, xproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
libXext - library for common extensions to the X11 protocol.

libxfixes

Homepage:
Spack package:
Versions:
5.0.2
Build Dependencies:
libx11, xproto, fixesproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
This package contains header files and documentation for the XFIXES extension. Library and server implementations are separate.

libxfont

Homepage:
Spack package:
Versions:
1.5.2
Build Dependencies:
libfontenc, freetype, xtrans, xproto, fontsproto, pkgconfig, util-macros
Link Dependencies:
libfontenc, freetype
Description:
libXfont provides the core of the legacy X11 font system, handling the index files (fonts.dir, fonts.alias, fonts.scale), the various font file formats, and rasterizing them. It is used by the X servers, the X Font Server (xfs), and some font utilities (bdftopcf for instance), but should not be used by normal X11 clients. X11 clients access fonts via either the new API's in libXft, or the legacy API's in libX11.

libxfont2

Homepage:
Spack package:
Versions:
2.0.1
Build Dependencies:
libfontenc, freetype, xtrans, xproto, fontsproto, pkgconfig, util-macros
Link Dependencies:
libfontenc, freetype
Description:
libXfont provides the core of the legacy X11 font system, handling the index files (fonts.dir, fonts.alias, fonts.scale), the various font file formats, and rasterizing them. It is used by the X servers, the X Font Server (xfs), and some font utilities (bdftopcf for instance), but should not be used by normal X11 clients. X11 clients access fonts via either the new API's in libXft, or the legacy API's in libX11.

libxfontcache

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, libxext, xextproto, fontcacheproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
Xfontcache - X-TrueType font cache extension client library.

libxft

Homepage:
Spack package:
Versions:
2.3.2
Build Dependencies:
freetype, fontconfig, libx11, libxrender, pkgconfig, util-macros
Link Dependencies:
freetype, fontconfig, libx11, libxrender
Description:
X FreeType library. Xft version 2.1 was the first stand alone release of Xft, a library that connects X applications with the FreeType font rasterization library. Xft uses fontconfig to locate fonts so it has no configuration files.

libxi

Homepage:
Spack package:
Versions:
1.7.6
Build Dependencies:
pkgconfig, libx11, libxext, libxfixes, fixesproto, xproto, xextproto, inputproto
Link Dependencies:
libx11, libxext, libxfixes
Description:
libXi - library for the X Input Extension.

libxinerama

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libx11, libxext, xextproto, xineramaproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXinerama - API for Xinerama extension to X11 Protocol.

libxkbcommon

Homepage:
Spack package:
Versions:
0.8.2, 0.8.0
Build Dependencies:
pkgconfig, bison, util-macros, xkbdata, libxcb
Link Dependencies:
util-macros, xkbdata, libxcb
Description:
xkbcommon is a library to handle keyboard descriptions, including loading them from disk, parsing them and handling their state. It's mainly meant for client toolkits, window systems, and other system applications.

libxkbfile

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
libx11, kbproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
XKB file handling routines.

libxkbui

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
libx11, libxt, libxkbfile, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libxkbfile
Description:
X.org libxkbui library.

libxml2

Homepage:
Spack package:
Versions:
2.9.9, 2.9.8, 2.9.4, 2.9.2, 2.7.8
Build Dependencies:
pkgconfig, libiconv, zlib, xz, python
Link Dependencies:
libiconv, zlib, xz, python
Description:
Libxml2 is the XML C parser and toolkit developed for the Gnome project (but usable outside of the Gnome platform), it is free software available under the MIT License.

libxmu

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
libxt, libxext, libx11, xextproto, pkgconfig, util-macros
Link Dependencies:
libxt, libxext, libx11
Description:
This library contains miscellaneous utilities and is not part of the Xlib standard. It contains routines which only use public interfaces so that it may be layered on top of any proprietary implementation of Xlib or Xt.

libxp

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxext, libxau, xextproto, printproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxau
Description:
libXp - X Print Client Library.

libxpm

Homepage:
Spack package:
Versions:
3.5.12, 3.5.11, 3.5.10, 3.5.9, 3.5.8, 3.5.7
Build Dependencies:
gettext, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
gettext, libx11
Description:
libXpm - X Pixmap (XPM) image file format library.

libxpresent

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
libx11, xproto, presentproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
This package contains header files and documentation for the Present extension. Library and server implementations are separate.

libxprintapputil

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, libxp, libxprintutil, libxau, printproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxp, libxprintutil, libxau
Description:
Xprint application utility routines.

libxprintutil

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, libxp, libxt, libxau, printproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxp, libxt, libxau
Description:
Xprint application utility routines.

libxrandr

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
libx11, libxext, libxrender, randrproto, xextproto, renderproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxrender
Description:
libXrandr - X Resize, Rotate and Reflection extension library.

libxrender

Homepage:
Spack package:
Versions:
0.9.10, 0.9.9
Build Dependencies:
libx11, renderproto, pkgconfig, util-macros
Link Dependencies:
libx11, renderproto
Description:
libXrender - library for the Render Extension to the X11 protocol.

libxres

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
libx11, libxext, xextproto, resourceproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXRes - X-Resource extension client library.

libxscrnsaver

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libx11, libxext, xextproto, scrnsaverproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
XScreenSaver - X11 Screen Saver extension client library

libxshmfence

Homepage:
Spack package:
Versions:
1.3, 1.2
Build Dependencies:
xproto, pkgconfig, util-macros
Description:
libxshmfence - Shared memory 'SyncFence' synchronization primitive. This library offers a CPU-based synchronization primitive compatible with the X SyncFence objects that can be shared between processes using file descriptor passing.

libxslt

Homepage:
Spack package:
Versions:
1.1.33, 1.1.32, 1.1.29, 1.1.28, 1.1.26
Build Dependencies:
pkgconfig, libiconv, libxml2, xz, zlib, libgcrypt, python
Link Dependencies:
libiconv, libxml2, xz, zlib, libgcrypt, python
Description:
Libxslt is the XSLT C library developed for the GNOME project. XSLT itself is a an XML language to define transformation for XML. Libxslt is based on libxml2 the XML C library developed for the GNOME project. It also implements most of the EXSLT set of processor-portable extensions functions and some of Saxon's evaluate and expressions extensions.

libxsmm

Homepage:
Spack package:
Versions:
develop, 1.12.1, 1.12, 1.11, 1.10, 1.9, 1.8.3, 1.8.2, 1.8.1, 1.8, 1.7.1, 1.7, 1.6.6, 1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6, 1.5.2, 1.5.1, 1.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4
Description:
Library targeting Intel Architecture for specialized dense and sparse matrix operations, and deep learning primitives.

libxstream

Homepage:
Spack package:
Versions:
0.9.0
Description:
LIBXSTREAM is a library to work with streams, events, and code regions that are able to run asynchronous while preserving the usual stream conditions.

libxt

Homepage:
Spack package:
Versions:
1.1.5
Build Dependencies:
libsm, libice, libx11, xproto, kbproto, pkgconfig, util-macros
Link Dependencies:
libsm, libice, libx11
Description:
libXt - X Toolkit Intrinsics library.

libxtrap

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, libxt, libxext, trapproto, xextproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libxext
Description:
libXTrap is the Xlib-based client API for the DEC-XTRAP extension. XTrap was a proposed standard extension for X11R5 which facilitated the capturing of server protocol and synthesizing core input events. Digital participated in the X Consortium's xtest working group which chose to evolve XTrap functionality into the XTEST & RECORD extensions for X11R6. As X11R6 was released in 1994, XTrap has now been deprecated for over 15 years, and uses of it should be quite rare.

libxtst

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libx11, libxext, libxi, recordproto, xextproto, inputproto, fixesproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxi
Description:
libXtst provides the Xlib-based client API for the XTEST & RECORD extensions. The XTEST extension is a minimal set of client and server extensions required to completely test the X11 server with no user intervention. This extension is not intended to support general journaling and playback of user actions. The RECORD extension supports the recording and reporting of all core X protocol and arbitrary X extension protocol.

libxv

Homepage:
Spack package:
Versions:
1.0.10
Build Dependencies:
libx11, libxext, xextproto, videoproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXv - library for the X Video (Xv) extension to the X Window System.

libxvmc

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
libx11, libxext, libxv, xextproto, videoproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxv
Description:
X.org libXvMC library.

libxxf86dga

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libx11, libxext, xproto, xextproto, xf86dgaproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXxf86dga - Client library for the XFree86-DGA extension.

libxxf86misc

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxext, xproto, xextproto, xf86miscproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXxf86misc - Extension library for the XFree86-Misc X extension.

libxxf86vm

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libx11, libxext, xproto, xextproto, xf86vidmodeproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
libXxf86vm - Extension library for the XFree86-VidMode X extension.

libyaml

Homepage:
Spack package:
Versions:
master, 0.2.1, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3, 0.1.2, 0.1.1
Build Dependencies:
automake, autoconf, libtool
Link Dependencies:
automake, autoconf, libtool
Description:
A C library for parsing and emitting YAML.

libyogrt

Homepage:
Spack package:
Versions:
1.24, 1.23, 1.22, 1.21, 1.20-7, 1.20-6, 1.20-5, 1.20-4, 1.20-3, 1.20-2
Build Dependencies:
slurm
Link Dependencies:
slurm
Description:
Your One Get Remaining Time Library.

libzip

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
libzip is a C library for reading, creating, and modifying zip archives.

lighttpd

Homepage:
Spack package:
Versions:
1.4.50, 1.4.49
Build Dependencies:
cmake
Description:
a secure, fast, compliant and very flexible web-server

likwid

Homepage:
Spack package:
Versions:
4.3.4, 4.3.3, 4.3.2, 4.3.1, 4.3.0
Build Dependencies:
lua, perl
Link Dependencies:
lua
Run Dependencies:
perl
Description:
Likwid is a simple to install and use toolsuite of command line applications for performance oriented programmers. It works for Intel and AMD processors on the Linux operating system. This version uses the perf_event backend which reduces the feature set but allows user installs. See https://github.com/RRZE- HPC/likwid/wiki/TutorialLikwidPerf#feature-limitations for information.

linkphase3

Homepage:
Spack package:
Versions:
2017-06-14
Description:
Haplotype reconstruction in pedigreed populations.

linux-headers

Homepage:
Spack package:
Versions:
4.9.10
Description:
The Linux kernel headers.

listres

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxaw, libxt, libxmu, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt, libxmu
Description:
The listres program generates a list of X resources for a widget in an X client written using a toolkit based on libXt.

llvm

Homepage:
Spack package:
Versions:
develop, 8.0.0, 7.0.1, 7.0.0, 6.0.1, 6.0.0, 5.0.2, 5.0.1, 5.0.0, 4.0.1, 4.0.0, 3.9.1, 3.9.0, 3.8.1, 3.8.0, 3.7.1, 3.7.0, 3.6.2, 3.5.1, 3.0, flang-develop, flang-20180921, flang-20180612, flang-ppc64le-20180921, flang-ppc64le-20180612
Build Dependencies:
cmake, python, perl-data-dumper, ncurses, swig, libedit, py-six, binutils, gmp, isl
Link Dependencies:
python, ncurses, swig, libedit, py-six, binutils, gmp, isl
Description:
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them. The name "LLVM" itself is not an acronym; it is the full name of the project.

llvm-openmp-ompt

Homepage:
Spack package:
Versions:
3.9.2b2, 3.9.2b, tr6_forwards
Build Dependencies:
cmake, llvm, ninja
Link Dependencies:
llvm
Description:
The OpenMP subproject provides an OpenMP runtime for use with the OpenMP implementation in Clang. This branch includes experimental changes for OMPT, the OpenMP Tools interface

lm-sensors

Homepage:
Spack package:
Versions:
3-4-0, 3-3-5, 3-3-4, 3-3-3, 3-3-2, 3-3-1, 3-3-0, 3-2-0, 3-1-2, 3-1-1
Build Dependencies:
bison, flex
Run Dependencies:
perl
Description:
The lm-sensors package provides user-space support for the hardware monitoring drivers in Linux.

lmdb

Homepage:
Spack package:
Versions:
0.9.22, 0.9.21, 0.9.16
Description:
Symas LMDB is an extraordinarily fast, memory-efficient database we developed for the Symas OpenLDAP Project. With memory-mapped files, it has the read performance of a pure in-memory database while retaining the persistence of standard disk-based databases.

lmod

Homepage:
Spack package:
Versions:
8.1.5, 8.0.9, 7.8.15, 7.8, 7.7.29, 7.7.13, 7.7, 7.6.14, 7.4.11, 7.4.10, 7.4.9, 7.4.8, 7.4.5, 7.4.1, 7.3, 6.4.5, 6.4.1, 6.3.7, 6.0.1
Build Dependencies:
lua, lua-luaposix, lua-luafilesystem, tcl
Link Dependencies:
lua, tcl
Run Dependencies:
lua-luaposix, lua-luafilesystem, tcl
Description:
Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem. Environment Modules provide a convenient way to dynamically change the users' environment through modulefiles. This includes easily adding or removing directories to the PATH environment variable. Modulefiles for Library packages provide environment variables that specify where the library and header files can be found.

lndir

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
xproto, pkgconfig
Description:
lndir - create a shadow directory of symbolic links to another directory tree.

log4cplus

Homepage:
Spack package:
Versions:
2.0.1, 1.2.1, 1.2.0
Build Dependencies:
cmake
Description:
log4cplus is a simple to use C++ logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration.

log4cxx

Homepage:
Spack package:
Versions:
0.10.0
Build Dependencies:
apr-util, apr, zip
Link Dependencies:
apr-util, apr, zip
Description:
A C++ port of Log4j

loki

Homepage:
Spack package:
Versions:
0.1.7
Description:
Loki is a C++ library of designs, containing flexible implementations of common design patterns and idioms.

lordec

Homepage:
Spack package:
Versions:
0.8
Build Dependencies:
boost, cmake
Link Dependencies:
boost
Description:
LoRDEC is a program to correct sequencing errors in long reads from 3rd generation sequencing with high error rate, and is especially intended for PacBio reads.

lrslib

Homepage:
Spack package:
Versions:
6.2, 6.1, 6.0, 5.1, 4.3
Build Dependencies:
gmp, libtool
Link Dependencies:
gmp
Description:
lrslib Ver 6.2 is a self-contained ANSI C implementation of the reverse search algorithm for vertex enumeration/convex hull problems and comes with a choice of three arithmetic packages

lrzip

Homepage:
Spack package:
Versions:
master, 0.630, 0.621, 0.616, 0.615
Build Dependencies:
lzo, zlib, bzip2
Link Dependencies:
lzo, zlib, bzip2
Description:
A compression utility that excels at compressing large files (usually > 10-50 MB). Larger files and/or more free RAM means that the utility will be able to more effectively compress your files (ie: faster / smaller size), especially if the filesize(s) exceed 100 MB. You can either choose to optimise for speed (fast compression / decompression) or size, but not both.

lsof

Homepage:
Spack package:
Versions:
4.89
Description:
Lsof displays information about files open to Unix processes.

ltrace

Homepage:
Spack package:
Versions:
0.7.3
Description:
Ltrace intercepts and records dynamic library calls which are called by an executed process and the signals received by that process. It can also intercept and print the system calls executed by the program.

lua

Homepage:
Spack package:
Versions:
5.3.5, 5.3.4, 5.3.2, 5.3.1, 5.3.0, 5.2.4, 5.2.3, 5.2.2, 5.2.1, 5.2.0, 5.1.5, 5.1.4, 5.1.3
Build Dependencies:
ncurses, readline
Link Dependencies:
ncurses, readline
Run Dependencies:
unzip
Description:
The Lua programming language interpreter and library.

lua-bitlib

Homepage:
Spack package:
Versions:
23
Build Dependencies:
lua
Link Dependencies:
lua
Description:
Lua-jit-like bitwise operations for lua

lua-jit

Homepage:
Spack package:
Versions:
2.0.4
Description:
Flast flexible JITed lua

lua-lpeg

Homepage:
Spack package:
Versions:
0.12.1
Build Dependencies:
lua
Link Dependencies:
lua
Description:
pattern-matching for lua

lua-luafilesystem

Homepage:
Spack package:
Versions:
1_7_0_2, 1_6_3
Build Dependencies:
git, lua
Link Dependencies:
lua
Description:
LuaFileSystem is a Lua library developed to complement the set of functions related to file systems offered by the standard Lua distribution. LuaFileSystem offers a portable way to access the underlying directory structure and file attributes. LuaFileSystem is free software and uses the same license as Lua 5.1

lua-luaposix

Homepage:
Spack package:
Versions:
33.4.0
Build Dependencies:
lua
Link Dependencies:
lua
Description:
Lua posix bindings, including ncurses

lua-mpack

Homepage:
Spack package:
Versions:
1.0.0-0
Build Dependencies:
msgpack-c, lua
Link Dependencies:
msgpack-c, lua
Description:
lua bindings to libmpack

luit

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
libfontenc, libx11, pkgconfig, util-macros
Link Dependencies:
libfontenc, libx11
Description:
Luit is a filter that can be run between an arbitrary application and a UTF-8 terminal emulator such as xterm. It will convert application output from the locale's encoding into UTF-8, and convert terminal input from UTF-8 into the locale's encoding.

lulesh

Homepage:
Spack package:
Versions:
2.0.3
Build Dependencies:
mpi, silo, hdf5
Link Dependencies:
mpi, silo, hdf5
Description:
LULESH is a highly simplified application, hard-coded to only style typical in scientific C or C++ based applications. Hard code to only solve a Sedov blast problem with analytic answer

lumpy-sv

Homepage:
Spack package:
Versions:
0.2.13
Build Dependencies:
htslib
Link Dependencies:
htslib
Description:
A probabilistic framework for structural variant discovery.

lwgrp

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Thie light-weight group library provides process group representations using O(log N) space and time.

lwm2

Homepage:
Spack package:
Versions:
torus
Build Dependencies:
papi, mpi
Link Dependencies:
papi, mpi
Description:
LWM2: Light Weight Measurement Module. This is a PMPI module that can collect a number of time-sliced MPI and POSIX I/O measurements from a program.

lz4

Homepage:
Spack package:
Versions:
1.9.0, 1.8.3, 1.8.1.2, 1.7.5, 1.3.1
Test Dependencies:
valgrind
Description:
LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speed in multiple GB/s per core, typically reaching RAM speed limits on multi-core systems.

lzma

Homepage:
Spack package:
Versions:
4.32.7
Description:
LZMA Utils are legacy data compression software with high compression ratio. LZMA Utils are no longer developed, although critical bugs may be fixed as long as fixing them doesn't require huge changes to the code. Users of LZMA Utils should move to XZ Utils. XZ Utils support the legacy .lzma format used by LZMA Utils, and can also emulate the command line tools of LZMA Utils. This should make transition from LZMA Utils to XZ Utils relatively easy.

lzo

Homepage:
Spack package:
Versions:
2.10, 2.09, 2.08, 2.07, 2.06, 2.05
Description:
Real-time data compression library

m4

Homepage:
Spack package:
Versions:
1.4.18, 1.4.17
Build Dependencies:
libsigsegv
Link Dependencies:
libsigsegv
Description:
GNU M4 is an implementation of the traditional Unix macro processor.

macsio

Homepage:
Spack package:
Versions:
develop, 1.1, 1.0
Build Dependencies:
cmake, json-cwx, mpi, silo, hdf5, exodusii, typhonio, scr
Link Dependencies:
json-cwx, mpi, silo, hdf5, exodusii, typhonio, scr
Description:
A Multi-purpose, Application-Centric, Scalable I/O Proxy Application.

mad-numdiff

Homepage:
Spack package:
Versions:
develop, 20150724
Build Dependencies:
cmake
Description:
compare unformatted text files with numerical content

mafft

Homepage:
Spack package:
Versions:
7.407, 7.221
Description:
MAFFT is a multiple sequence alignment program for unix-like operating systems. It offers a range of multiple alignment methods, L-INS-i (accurate; for alignment of <~200 sequences), FFT-NS-2 (fast; for alignment of <~30,000 sequences), etc.

magics

Homepage:
Spack package:
Versions:
2.34.3, 2.34.1, 2.33.0, 2.32.0, 2.31.0, 2.29.6, 2.29.4, 2.29.0
Build Dependencies:
cmake, pkgconfig, python, perl, perl-xml-parser, proj, boost, expat, zlib, libpng, eccodes, grib-api, netcdf-cxx, pango, libemos, qt, py-numpy, swig
Link Dependencies:
python, proj, boost, expat, zlib, libpng, eccodes, grib-api, netcdf-cxx, pango, libemos, qt
Run Dependencies:
python, py-numpy
Description:
Magics is the latest generation of the ECMWF's Meteorological plotting software MAGICS. Although completely redesigned in C++, it is intended to be as backwards-compatible as possible with the Fortran interface.

magma

Homepage:
Spack package:
Versions:
2.5.1-alpha1, 2.5.0, 2.4.0, 2.3.0, 2.2.0
Build Dependencies:
cmake, blas, lapack, cuda
Link Dependencies:
blas, lapack, cuda
Description:
The MAGMA project aims to develop a dense linear algebra library similar to LAPACK but for heterogeneous/hybrid architectures, starting with current "Multicore+GPU" systems.

makedepend

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
xproto, pkgconfig
Description:
makedepend - create dependencies in makefiles.

mallocmc

Homepage:
Spack package:
Versions:
develop, master, 2.2.0crp, 2.1.0crp, 2.0.1crp, 2.0.0crp, 1.0.2crp
Build Dependencies:
cmake
Link Dependencies:
boost, cuda
Description:
mallocMC: Memory Allocator for Many Core Architectures. This project provides a framework for fast memory managers on many core accelerators. Currently, it supports NVIDIA GPUs of compute capability sm_20 or higher through the ScatterAlloc algorithm. mallocMC is header-only, but requires a few other C++ libraries to be available.

man-db

Homepage:
Spack package:
Versions:
2.7.6.1
Build Dependencies:
autoconf, automake, gettext, libpipeline, flex, gdbm, groff, bzip2, xz
Link Dependencies:
autoconf, automake, gettext, libpipeline, flex, gdbm, groff, bzip2, xz
Run Dependencies:
groff, bzip2, xz
Description:
man-db is an implementation of the standard Unix documentation system accessed using the man command. It uses a Berkeley DB database in place of the traditional flat-text whatis databases.

manta

Homepage:
Spack package:
Versions:
1.5.0, 1.4.0, 1.3.2, 1.3.1, 1.3.0
Build Dependencies:
cmake, boost, python, zlib
Link Dependencies:
zlib
Run Dependencies:
python
Description:
Structural variant and indel caller for mapped sequencing data

mapserver

Homepage:
Spack package:
Versions:
7.2.1
Build Dependencies:
cmake, libpng, freetype, jpeg, zlib, proj, curl, geos, libxml2, gdal, swig, python, ruby, java, perl
Link Dependencies:
libpng, freetype, jpeg, zlib, proj, curl, geos, libxml2, gdal, python, ruby, java, perl
Description:
MapServer is an Open Source geographic data rendering engine written in C. Beyond browsing GIS data, MapServer allows you create "geographic image maps", that is, maps that can direct users to content

maq

Homepage:
Spack package:
Versions:
0.7.1, 0.5.0
Description:
Maq is a software that builds mapping assemblies from short reads generated by the next-generation sequencing machines.

margo

Homepage:
Spack package:
Versions:
develop, 0.4.3
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, mercury, argobots
Link Dependencies:
mercury, argobots
Description:
Argobots bindings to the Mercury RPC API

mariadb

Homepage:
Spack package:
Versions:
10.2.8, 10.1.23, 10.1.14, 5.5.56, 5.5.49
Build Dependencies:
cmake, boost, jemalloc, libaio, libedit, libevent, ncurses, zlib
Link Dependencies:
boost, jemalloc, libaio, libedit, libevent, ncurses, zlib
Description:
MariaDB turns data into structured information in a wide array of applications, ranging from banking to websites. It is an enhanced, drop- in replacement for MySQL. MariaDB is used because it is fast, scalable and robust, with a rich ecosystem of storage engines, plugins and many other tools make it very versatile for a wide variety of use cases.

mariadb-c-client

Homepage:
Spack package:
Versions:
3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.3.1, 2.3.0, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0
Build Dependencies:
cmake, curl, pcre, openssl, zlib
Link Dependencies:
curl, pcre, openssl, zlib
Description:
MariaDB turns data into structured information in a wide array of applications, ranging from banking to websites. It is an enhanced, drop- in replacement for MySQL. MariaDB is used because it is fast, scalable and robust, with a rich ecosystem of storage engines, plugins and many other tools make it very versatile for a wide variety of use cases. This package comprises only the standalone 'C Connector', which enables connections to MariaDB and MySQL servers.

masa

Homepage:
Spack package:
Versions:
master
Build Dependencies:
autoconf, automake, libtool, swig, python, metaphysicl
Link Dependencies:
python, metaphysicl
Description:
MASA (Manufactured Analytical Solution Abstraction) is a library written in C++ (with C, python and Fortran90 interfaces) which provides a suite of manufactured solutions for the software verification of partial differential equation solvers in multiple dimensions.

masurca

Homepage:
Spack package:
Versions:
3.3.1, 3.2.9
Build Dependencies:
perl, boost, zlib
Link Dependencies:
boost, zlib
Run Dependencies:
perl
Description:
MaSuRCA is whole genome assembly software. It combines the efficiency of the de Bruijn graph and Overlap-Layout-Consensus (OLC) approaches.

matio

Homepage:
Spack package:
Versions:
1.5.13, 1.5.12, 1.5.11, 1.5.10, 1.5.9, 1.5.8, 1.5.7, 1.5.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2
Build Dependencies:
zlib, hdf5
Link Dependencies:
zlib, hdf5
Description:
matio is an C library for reading and writing Matlab MAT files

matlab

Homepage:
Spack package:
Versions:
R2018b, R2016b
Description:
MATLAB (MATrix LABoratory) is a multi-paradigm numerical computing environment and fourth-generation programming language. A proprietary programming language developed by MathWorks, MATLAB allows matrix manipulations, plotting of functions and data, implementation of algorithms, creation of user interfaces, and interfacing with programs written in other languages, including C, C++, C#, Java, Fortran and Python. Note: MATLAB is licensed software. You will need to create an account on the MathWorks homepage and download MATLAB yourself. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

maven

Homepage:
Spack package:
Versions:
3.5.0, 3.3.9
Build Dependencies:
java
Link Dependencies:
java
Description:
Apache Maven is a software project management and comprehension tool.

maverick

Homepage:
Spack package:
Versions:
1.0.4
Description:
MavericK is a program for inferring population structure on the basis of genetic information.

mawk

Homepage:
Spack package:
Versions:
1.3.4-20171017, 1.3.4
Description:
mawk is an interpreter for the AWK Programming Language.

mbedtls

Homepage:
Spack package:
Versions:
2.16.1, 2.7.10, 2.3.0, 2.2.1, 2.2.0, 2.1.4, 2.1.3, 1.3.16
Build Dependencies:
cmake, perl
Description:
mbed TLS (formerly known as PolarSSL) makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.

mc

Homepage:
Spack package:
Versions:
4.8.21, 4.8.20
Build Dependencies:
ncurses, pkgconfig, glib, libssh2
Link Dependencies:
ncurses, glib, libssh2
Description:
The GNU Midnight Commander is a visual file manager.

mcl

Homepage:
Spack package:
Versions:
14-137
Description:
The MCL algorithm is short for the Markov Cluster Algorithm, a fast and scalable unsupervised cluster algorithm for graphs (also known as networks) based on simulation of (stochastic) flow in graphs.

mdtest

Homepage:
Spack package:
Versions:
1.9.3
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
mdtest is an MPI-coordinated metadata benchmark test that performs open/stat/close operations on files and directories and then reports the performance.

med

Homepage:
Spack package:
Versions:
3.2.0
Build Dependencies:
cmake, mpi, hdf5
Link Dependencies:
mpi, hdf5
Description:
The MED file format is a specialization of the HDF5 standard.

meep

Homepage:
Spack package:
Versions:
1.3, 1.2.1, 1.1.1
Build Dependencies:
blas, lapack, harminv, guile, libctl, mpi, hdf5, gsl
Link Dependencies:
blas, lapack, harminv, guile, libctl, mpi, hdf5, gsl
Description:
Meep (or MEEP) is a free finite-difference time-domain (FDTD) simulation software package developed at MIT to model electromagnetic systems.

mefit

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
py-numpy, py-htseq, jellyfish, casper
Link Dependencies:
py-numpy, py-htseq, jellyfish, casper
Description:
This pipeline will merge overlapping paired-end reads, calculate merge statistics, and filter reads for quality.

megadock

Homepage:
Spack package:
Versions:
4.0.3
Build Dependencies:
cuda, fftw, mpi
Link Dependencies:
cuda, fftw, mpi
Description:
an ultra-high-performance protein-protein docking for heterogeneous supercomputers

megahit

Homepage:
Spack package:
Versions:
1.1.4, 1.1.3
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
MEGAHIT: An ultra-fast single-node solution for large and complex metagenomics assembly via succinct de Bruijn graph

memaxes

Homepage:
Spack package:
Versions:
0.5
Build Dependencies:
cmake, qt
Link Dependencies:
qt
Description:
MemAxes is a visualizer for sampled memory trace data.

meme

Homepage:
Spack package:
Versions:
4.12.0, 4.11.4
Build Dependencies:
perl, python, mpi, image-magick, perl-xml-parser
Link Dependencies:
zlib, libgcrypt, mpi
Run Dependencies:
perl, python, image-magick, perl-xml-parser
Description:
The MEME Suite allows the biologist to discover novel motifs in collections of unaligned nucleotide or protein sequences, and to perform a wide variety of other motif-based analyses.

memkind

Homepage:
Spack package:
Versions:
1.7.0
Build Dependencies:
autoconf, automake, libtool, m4, numactl
Link Dependencies:
numactl
Description:
The memkind library is a user extensible heap manager built on top of jemalloc which enables control of memory characteristics and a partitioning of the heap between kinds of memory. The kinds of memory are defined by operating system memory policies that have been applied to virtual address ranges. Memory characteristics supported by memkind without user extension include control of NUMA and page size features. The jemalloc non-standard interface has been extended to enable specialized arenas to make requests for virtual memory from the operating system through the memkind partition interface. Through the other memkind interfaces the user can control and extend memory partition features and allocate memory while selecting enabled features.

memsurfer

Homepage:
Spack package:
Versions:
master, 1.0
Build Dependencies:
python, cmake, swig, py-cython, py-numpy, py-pip, eigen, cgal, vtk, hdf5
Link Dependencies:
python, cmake, swig, py-cython, py-numpy, py-pip, eigen, cgal, vtk, hdf5
Run Dependencies:
python
Description:
MemSurfer is a tool to compute and analyze membrane surfaces found in a wide variety of large-scale molecular simulations.

meraculous

Homepage:
Spack package:
Versions:
2.2.5.1, 2.2.4
Build Dependencies:
cmake, perl, boost, gnuplot, perl-log-log4perl
Link Dependencies:
boost, gnuplot
Run Dependencies:
perl, perl-log-log4perl
Description:
Meraculous is a while genome assembler for Next Generation Sequencing data geared for large genomes.

mercurial

Homepage:
Spack package:
Versions:
4.4.1, 4.1.2, 3.9.1, 3.9, 3.8.4, 3.8.3, 3.8.2, 3.8.1
Build Dependencies:
python, py-docutils, py-pygments, py-certifi
Link Dependencies:
python
Run Dependencies:
python, py-pygments, py-certifi
Description:
Mercurial is a free, distributed source control management tool.

mercury

Homepage:
Spack package:
Versions:
master, 1.0.1, 1.0.0, 0.9.0
Build Dependencies:
cmake, bmi, mpi, libfabric, openpa, boost
Link Dependencies:
bmi, mpi, libfabric, openpa, boost
Description:
Mercury is a C library for implementing RPC, optimized for HPC

mesa

Homepage:
Spack package:
Versions:
develop, 19.1.develop, 19.0.develop, 19.0.4, 19.0.3, 19.0.2, 19.0.1, 19.0.0
Build Dependencies:
meson, ninja, binutils, bison, flex, gettext, pkgconfig, python, py-mako, libxml2, zlib, expat, llvm, libx11, libxcb, libxext, glproto
Link Dependencies:
libxml2, zlib, expat, llvm, libx11, libxcb, libxext
Description:
Mesa is an open-source implementation of the OpenGL specification - a system for rendering interactive 3D graphics.

mesa-glu

Homepage:
Spack package:
Versions:
9.0.0
Build Dependencies:
gl
Link Dependencies:
gl
Description:
This package provides the Mesa OpenGL Utility library.

meshkit

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
mpi, netgen, cgm, moab
Link Dependencies:
mpi, netgen, cgm, moab
Description:
MeshKit is an open-source library of mesh generation functionality. Its design philosophy is two-fold: it provides a collection of meshing algorithms for use in real meshing problems, along with other tools commonly needed to support mesh generation

meson

Homepage:
Spack package:
Versions:
0.49.1, 0.49.0, 0.42.0, 0.41.2, 0.41.1
Build Dependencies:
python, py-setuptools, ninja
Link Dependencies:
python
Run Dependencies:
python, ninja
Description:
Meson is a portable open source build system meant to be both extremely fast, and as user friendly as possible.

mesquite

Homepage:
Spack package:
Versions:
2.99, 2.3.0, 2.2.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Mesquite (Mesh Quality Improvement Toolkit) is designed to provide a stand-alone, portable, comprehensive suite of mesh quality improvement algorithms and components that can be used to construct custom quality improvement algorithms. Mesquite provides a robust and effective mesh improvement toolkit that allows both meshing researchers application scientists to benefit from the latest developments in mesh quality control and improvement.

metabat

Homepage:
Spack package:
Versions:
2.12.1, 2.11.2
Build Dependencies:
scons, boost
Run Dependencies:
boost, perl
Description:
MetaBAT, an efficient tool for accurately reconstructing single genomes from complex microbial communities.

metaphysicl

Homepage:
Spack package:
Versions:
0.5.0, 0.3.3, 0.2.0
Build Dependencies:
autoconf, automake, libtool
Description:
Metaprogramming and operator-overloaded classes for numerical simulations.

metis

Homepage:
Spack package:
Versions:
5.1.0, 5.0.2, 4.0.3
Build Dependencies:
cmake
Description:
METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.

mfem

Homepage:
Spack package:
Versions:
develop, 3.4.1-laghos-v2.0, 3.4.0, 3.3.2, 3.3.1-laghos-v1.0, 3.3, 3.2, 3.1
Build Dependencies:
mpi, hypre, metis, blas, lapack, sundials, pumi, suite-sparse, superlu-dist, petsc, mpfr, netcdf, unwind, zlib, gnutls, conduit
Link Dependencies:
mpi, hypre, metis, blas, lapack, sundials, pumi, suite-sparse, superlu-dist, petsc, mpfr, netcdf, unwind, zlib, gnutls, conduit
Description:
Free, lightweight, scalable C++ library for finite element methods.

mgis

Homepage:
Spack package:
Versions:
master, 1.0.1, 1.0, rliv-1.0
Build Dependencies:
cmake, tfel, boost, python
Link Dependencies:
tfel, boost, python
Description:
The MFrontGenericInterfaceSupport project (MGIS) provides helper functions for various solvers to interact with behaviour written using MFront generic interface. MGIS is written in C++. Bindings are provided for C and fortran (2003). A FEniCS binding is also available.

microbiomeutil

Homepage:
Spack package:
Versions:
20110519
Build Dependencies:
perl, blast-plus, cdbfasta
Link Dependencies:
blast-plus, cdbfasta
Run Dependencies:
perl
Description:
Microbiome analysis utilities

migrate

Homepage:
Spack package:
Versions:
3.6.11
Build Dependencies:
autoconf, automake, libtool, m4, openmpi
Link Dependencies:
autoconf, automake, libtool, m4, openmpi
Run Dependencies:
openmpi
Description:
Migrate estimates effective population sizes and past migration rates between n population assuming a migration matrix model with asymmetric migration rates and different subpopulation sizes

minced

Homepage:
Spack package:
Versions:
0.3.2, 0.2.0, 0.1.6
Build Dependencies:
java
Run Dependencies:
java
Description:
MinCED is a program to find Clustered Regularly Interspaced Short Palindromic Repeats (CRISPRs) in full genomes or environmental datasets such as metagenomes, in which sequence size can be anywhere from 100 to 800 bp.

mindthegap

Homepage:
Spack package:
Versions:
2.0.2
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Description:
MindTheGap is a software that performs integrated detection and assembly of genomic insertion variants in NGS read datasets with respect to a reference genome.

miniaero

Homepage:
Spack package:
Versions:
2016-11-11
Build Dependencies:
kokkos
Link Dependencies:
kokkos
Description:
Proxy Application. MiniAero is a mini-application for the evaulation of programming models and hardware for next generation platforms.

miniamr

Homepage:
Spack package:
Versions:
develop, 1.4.3, 1.4.2, 1.4.1, 1.4.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. 3D stencil calculation with Adaptive Mesh Refinement (AMR)

miniasm

Homepage:
Spack package:
Versions:
2018-3-30
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Miniasm is a very fast OLC-based de novo assembler for noisy long reads.

miniconda2

Homepage:
Spack package:
Versions:
4.6.14, 4.5.11, 4.5.4, 4.3.30, 4.3.14, 4.3.11
Description:
The minimalist bootstrap toolset for conda and Python2.

miniconda3

Homepage:
Spack package:
Versions:
4.6.14, 4.5.11, 4.5.4, 4.3.30, 4.3.14, 4.3.11
Description:
The minimalist bootstrap toolset for conda and Python3.

minife

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
mpi, qthreads
Link Dependencies:
mpi, qthreads
Description:
Proxy Application. MiniFE is an proxy application for unstructured implicit finite element codes.

minighost

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. A Finite Difference proxy application which implements a difference stencil across a homogenous three dimensional domain.

minigmg

Homepage:
Spack package:
Versions:
master
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
miniGMG is a compact benchmark for understanding the performance challenges associated with geometric multigrid solvers found in applications built from AMR MG frameworks like CHOMBO or BoxLib when running on modern multi- and manycore-based supercomputers. It includes both productive reference examples as well as highly-optimized implementations for CPUs and GPUs. It is sufficiently general that it has been used to evaluate a broad range of research topics including PGAS programming models and algorithmic tradeoffs inherit in multigrid. miniGMG was developed under the CACHE Joint Math-CS Institute. Note, miniGMG code has been supersceded by HPGMG.

minimap2

Homepage:
Spack package:
Versions:
2.14, 2.10, 2.2
Build Dependencies:
py-mappy, zlib
Link Dependencies:
zlib
Run Dependencies:
py-mappy
Description:
Minimap2 is a versatile sequence alignment program that aligns DNA or mRNA sequences against a large reference database.

minimd

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. A simple proxy for the force computations in a typical molecular dynamics applications.

miniqmc

Homepage:
Spack package:
Versions:
0.4.0, 0.3.0, 0.2.0
Build Dependencies:
cmake, mpi, lapack
Link Dependencies:
mpi, lapack
Description:
A simplified real space QMC code for algorithm development, performance portability testing, and computer science experiments

minisign

Homepage:
Spack package:
Versions:
0.7
Build Dependencies:
cmake, libsodium
Link Dependencies:
libsodium
Description:
Minisign is a dead simple tool to sign files and verify signatures.

minismac2d

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. Solves the finite-differenced 2D incompressible Navier-Stokes equations with Spalart-Allmaras one-equation turbulence model on a structured body conforming grid.

minitri

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
A simple, triangle-based data analytics proxy application.

minivite

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
miniVite is a proxy application that implements a single phase of Louvain method in distributed memory for graph community detection.

minixyce

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. A portable proxy of some of the key capabilities in the electrical modeling Xyce.

minuit

Homepage:
Spack package:
Versions:
5.34.14, 5.28.00, 5.27.02, 5.24.00, 5.22.00, 5.21.06, 5.20.00, 5.18.00, 5.16.00, 5.14.00, 5.12.00, 5.10.00, 5.08.00, 1.7.9, 1.7.6, 1.7.1, 1.6.3, 1.6.0, 1.5.2, 1.5.0
Description:
MINUIT is a physics analysis tool for function minimization.

mira

Homepage:
Spack package:
Versions:
4.0.2
Build Dependencies:
boost, expat, gperftools
Link Dependencies:
boost, expat, gperftools
Description:
MIRA is a multi-pass DNA sequence data assembler/mapper for whole genome and EST/RNASeq projects.

mirdeep2

Homepage:
Spack package:
Versions:
0.0.8
Build Dependencies:
perl, perl-pdf-api2, bowtie, viennarna, squid, randfold
Link Dependencies:
bowtie, viennarna, squid, randfold
Run Dependencies:
perl, perl-pdf-api2
Description:
miRDeep2 is a completely overhauled tool which discovers microRNA genes by analyzing sequenced RNAs.

mitofates

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
libsvm
Link Dependencies:
libsvm
Run Dependencies:
perl, perl-inline-c, perl-perl6-slurp, perl-math-cephes
Description:
MitoFates predicts mitochondrial presequence, a cleavable localization signal located in N-terminal, and its cleaved position.

mitos

Homepage:
Spack package:
Versions:
0.9.2, 0.9.1
Build Dependencies:
cmake, dyninst, hwloc, mpi
Link Dependencies:
dyninst, hwloc, mpi
Description:
Mitos is a library and a tool for collecting sampled memory performance data to view with MemAxes

mixcr

Homepage:
Spack package:
Versions:
3.0.2
Build Dependencies:
java
Link Dependencies:
java
Description:
MiXCR is a universal framework that processes big immunome data from raw sequences to quantitated clonotypes. MiXCR efficiently handles paired- and single-end reads, considers sequence quality, corrects PCR errors and identifies germline hypermutations. The software supports both partial- and full-length profiling and employs all available RNA or DNA information, including sequences upstream of V and downstream of J gene segments.

mkfontdir

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
pkgconfig, util-macros
Run Dependencies:
mkfontscale
Description:
mkfontdir creates the fonts.dir files needed by the legacy X server core font system. The current implementation is a simple wrapper script around the mkfontscale program, which must be built and installed first.

mkfontscale

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
libfontenc, freetype, xproto, pkgconfig, util-macros
Link Dependencies:
libfontenc, freetype
Description:
mkfontscale creates the fonts.scale and fonts.dir index files used by the legacy X11 font system.

mlhka

Homepage:
Spack package:
Versions:
2.1
Description:
A maximum likelihood ratio test of natural selection, using polymorphism and divergence data.

mmg

Homepage:
Spack package:
Versions:
5.4.0, 5.3.13
Build Dependencies:
cmake, scotch, doxygen
Link Dependencies:
scotch, doxygen
Description:
Mmg is an open source software for simplicial remeshing. It provides 3 applications and 4 libraries: - the mmg2d application and the libmmg2d library: adaptation and optimization of a two-dimensional triangulation and generation of a triangulation from a set of points or from given boundary edges - the mmgs application and the libmmgs library: adaptation and optimization of a surface triangulation and isovalue discretization - the mmg3d application and the libmmg3d library: adaptation and optimization of a tetrahedral mesh and implicit domain meshing - the libmmg library gathering the libmmg2d, libmmgs and libmmg3d libraries.

moab

Homepage:
Spack package:
Versions:
develop, master, 5.0.2, 5.0.1, 5.0.0, 4.9.2, 4.9.1, 4.9.0, 4.8.2
Build Dependencies:
autoconf, automake, libtool, m4, blas, lapack, mpi, hdf5, netcdf, parallel-netcdf, cgm, metis, parmetis, zoltan
Link Dependencies:
blas, lapack, mpi, hdf5, netcdf, parallel-netcdf, cgm, metis, parmetis, zoltan
Description:
MOAB is a component for representing and evaluating mesh data. MOAB can store structured and unstructured mesh, consisting of elements in the finite element 'zoo.' The functional interface to MOAB is simple yet powerful, allowing the representation of many types of metadata commonly found on the mesh. MOAB is optimized for efficiency in space and time, based on access to mesh in chunks rather than through individual entities, while also versatile enough to support individual entity access.

modern-wheel

Homepage:
Spack package:
Versions:
1.2, 1.1, 1.0
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
C++ utility collection. Provides various facilities of common use in modern codebases like dynamic linking helpers, loadable plugins facilities and misc patterns.

mofem-cephas

Homepage:
Spack package:
Versions:
develop, 0.8.17, 0.8.16, 0.8.15, 0.8.14, 0.8.13, 0.8.12, 0.8.11, 0.8.10, 0.8.9, 0.8.8, 0.8.7
Build Dependencies:
cmake, mpi, boost, parmetis, hdf5, petsc, slepc, moab, adol-c, tetgen, med
Link Dependencies:
mpi, boost, parmetis, hdf5, petsc, slepc, moab, adol-c, tetgen, med
Description:
MoFEM is finite element core library

mofem-fracture-module

Homepage:
Spack package:
Versions:
develop, 0.9.50, 0.9.49, 0.9.48, 0.9.47, 0.9.46, 0.9.45, 0.9.44, 0.9.42
Build Dependencies:
cmake, mofem-cephas, mofem-users-modules
Link Dependencies:
mofem-cephas, mofem-users-modules
Run Dependencies:
mofem-users-modules
Description:
mofem fracture module

mofem-minimal-surface-equation

Homepage:
Spack package:
Versions:
develop, 0.3.10, 0.3.9
Build Dependencies:
cmake, mofem-cephas, mofem-users-modules
Link Dependencies:
mofem-cephas, mofem-users-modules
Run Dependencies:
mofem-users-modules
Description:
mofem minimal surface equation

mofem-users-modules

Homepage:
Spack package:
Versions:
develop, 0.8.17, 0.8.16, 0.8.15, 0.8.14, 0.8.12, 0.8.11, 0.8.10, 0.8.8, 0.8.7
Build Dependencies:
cmake, mofem-cephas
Link Dependencies:
mofem-cephas
Description:
MofemUsersModules creates installation environment for user-provided modules and extends of mofem-cephas package. For more information how to work with Spack and MoFEM see http://mofem.eng.gla.ac.uk/mofem/html/install_spack.html

molcas

Homepage:
Spack package:
Versions:
8.2
Build Dependencies:
cmake, openmpi, openblas, hdf5
Link Dependencies:
openmpi, openblas, hdf5
Description:
Molcas is an ab initio quantum chemistry software package developed by scientists to be used by scientists. Please set the path to licence file with the following command export MOLCAS_LICENSE=/path/to/molcas/license/

mongo-cxx-driver

Homepage:
Spack package:
Versions:
3.2.0
Build Dependencies:
cmake, libmongoc
Link Dependencies:
libmongoc
Description:
C++ Driver for MongoDB

mono

Homepage:
Spack package:
Versions:
5.18.0.240, 5.16.0.220, 5.14.0.177, 5.12.0.309, 5.10.1.57, 5.4.1.7, 5.4.0.167, 5.0.1.1, 4.8.0.524
Build Dependencies:
cmake, libiconv, perl
Link Dependencies:
libiconv
Description:
Mono is a software platform designed to allow developers to easily create cross platform applications. It is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.

mosh

Homepage:
Spack package:
Versions:
1.3.2, 1.3.0, 1.2.6
Build Dependencies:
protobuf, ncurses, zlib, openssl, pkgconfig
Link Dependencies:
protobuf, ncurses, zlib, openssl
Run Dependencies:
perl
Description:
Remote terminal application that allows roaming, supports intermittent connectivity, and provides intelligent local echo and line editing of user keystrokes. Mosh is a replacement for SSH. It's more robust and responsive, especially over Wi-Fi, cellular, and long-distance links.

mothur

Homepage:
Spack package:
Versions:
1.40.5, 1.39.5
Build Dependencies:
boost, readline
Link Dependencies:
boost, readline
Description:
This project seeks to develop a single piece of open-source, expandable software to fill the bioinformatics needs of the microbial ecology community.

motif

Homepage:
Spack package:
Versions:
2.3.8
Build Dependencies:
flex, libx11, libxt, libxext, libxft, libxcomposite, libxfixes, xbitmaps
Link Dependencies:
flex, libx11, libxt, libxext, libxft, libxcomposite, libxfixes, xbitmaps
Description:
" Motif - Graphical user interface (GUI) specification and the widget toolkit

motioncor2

Homepage:
Spack package:
Versions:
1.1.0, 1.0.5, 1.0.4
Run Dependencies:
cuda, libtiff
Description:
MotionCor2 is a multi-GPU program that corrects beam-induced sample motion recorded on dose fractionated movie stacks. It implements a robust iterative alignment algorithm that delivers precise measurement and correction of both global and non-uniform local motions at single pixel level, suitable for both single-particle and tomographic images. MotionCor2 is sufficiently fast to keep up with automated data collection.

mount-point-attributes

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
autoconf, automake, libtool
Description:
Library to turn expensive, non-scalable file system calls into simple string comparison operations.

mozjs

Homepage:
Spack package:
Versions:
24.2.0, 17.0.0, 1.8.5
Build Dependencies:
perl, pkgconfig, python, nspr, libffi, readline, zlib
Link Dependencies:
nspr, libffi, readline, zlib
Description:
SpiderMonkey is Mozilla's JavaScript engine written in C/C++. It is used in various Mozilla products, including Firefox, and is available under the MPL2.

mpark-variant

Homepage:
Spack package:
Versions:
1.4.0, 1.3.0
Build Dependencies:
cmake
Description:
C++17 `std::variant` for C++11/14/17

mpc

Homepage:
Spack package:
Versions:
1.1.0, 1.0.3, 1.0.2
Build Dependencies:
gmp, mpfr
Link Dependencies:
gmp, mpfr
Description:
Gnu Mpc is a C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result.

mpdecimal

Homepage:
Spack package:
Versions:
2.4.2
Build Dependencies:
gmake
Description:
mpdecimal is a package for correctly-rounded arbitrary precision decimal floating point arithmetic.

mpe2

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Message Passing Extensions (MPE): Parallel, shared X window graphics

mpest

Homepage:
Spack package:
Versions:
1.5
Description:
MP-EST estimates species trees from a set of gene trees by maximizing a pseudo-likelihood function.

mpfr

Homepage:
Spack package:
Versions:
4.0.1, 4.0.0, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2
Build Dependencies:
gmp
Link Dependencies:
gmp
Description:
The MPFR library is a C library for multiple-precision floating-point computations with correct rounding.

mpibash

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
bash, mpi, libcircle
Link Dependencies:
bash, mpi, libcircle
Description:
Parallel scripting right from the Bourne-Again Shell (Bash)

mpiblast

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
mpiBLAST is a freely available, open-source, parallel implementation of NCBI BLAST

mpich

Homepage:
Spack package:
Versions:
develop, 3.3, 3.2.1, 3.2, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1, 3.0.4
Build Dependencies:
findutils, pkgconfig, libfabric, libpciaccess, libxml2, slurm, pmix
Link Dependencies:
libfabric, libpciaccess, libxml2, slurm, pmix
Description:
MPICH is a high performance and widely portable implementation of the Message Passing Interface (MPI) standard.

mpifileutils

Homepage:
Spack package:
Versions:
develop, 0.9.1, 0.9, 0.8.1, 0.8, 0.7, 0.6
Build Dependencies:
mpi, libcircle, dtcmp, libarchive, cmake
Link Dependencies:
mpi, libcircle, dtcmp, libarchive
Description:
mpiFileUtils is a suite of MPI-based tools to manage large datasets, which may vary from large directory trees to large files. High- performance computing users often generate large datasets with parallel applications that run with many processes (millions in some cases). However those users are then stuck with single-process tools like cp and rm to manage their datasets. This suite provides MPI-based tools to handle typical jobs like copy, remove, and compare for such datasets, providing speedups of up to 20-30x.

mpilander

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake
Description:
There can only be one (MPI process)!

mpileaks

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi, adept-utils, callpath
Link Dependencies:
mpi, adept-utils, callpath
Description:
Tool to detect and report leaked MPI objects like MPI_Requests and MPI_Datatypes.

mpip

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
elf, libdwarf, libunwind, mpi
Link Dependencies:
elf, libdwarf, libunwind, mpi
Description:
mpiP: Lightweight, Scalable MPI Profiling

mpir

Homepage:
Spack package:
Versions:
develop, 2.7.0, 2.6.0
Build Dependencies:
autoconf, yasm
Link Dependencies:
yasm
Description:
Multiple Precision Integers and Rationals.

mpix-launch-swift

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
stc, tcl, mpi, swig
Link Dependencies:
stc, tcl, mpi
Description:
Library that allows a child MPI application to be launched inside a subset of processes in a parent MPI application.

mrbayes

Homepage:
Spack package:
Versions:
2017-11-22
Build Dependencies:
autoconf, automake, libtool, m4, libbeagle, mpi
Link Dependencies:
libbeagle, mpi
Description:
MrBayes is a program for Bayesian inference and model choice across a wide range of phylogenetic and evolutionary models. MrBayes uses Markov chain Monte Carlo (MCMC) methods to estimate the posterior distribution of model parameters.

mrnet

Homepage:
Spack package:
Versions:
5.0.1-3, 5.0.1-2, 5.0.1, 4.1.0, 4.0.0
Build Dependencies:
boost, cti
Link Dependencies:
boost, cti
Description:
The MRNet Multi-Cast Reduction Network.

mrtrix3

Homepage:
Spack package:
Versions:
2017-09-25
Build Dependencies:
python, py-numpy, glu, qt, eigen, zlib, libtiff, fftw
Link Dependencies:
glu, qt, eigen, zlib, libtiff, fftw
Run Dependencies:
python, py-numpy
Description:
MRtrix provides a set of tools to perform various advanced diffusion MRI analyses, including constrained spherical deconvolution (CSD), probabilistic tractography, track-density imaging, and apparent fibre density.

mscgen

Homepage:
Spack package:
Versions:
0.20
Build Dependencies:
flex, bison, pkgconfig, libgd
Link Dependencies:
flex, bison, pkgconfig, libgd
Description:
Mscgen is a small program that parses Message Sequence Chart descriptions and produces PNG, SVG, EPS or server side image maps (ismaps) as the output.

msgpack-c

Homepage:
Spack package:
Versions:
3.0.1, 1.4.1
Build Dependencies:
cmake
Test Dependencies:
googletest
Description:
A small, fast binary interchange format convertible to/from JSON

mshadow

Homepage:
Spack package:
Versions:
master, 20170721
Description:
MShadow is a lightweight CPU/GPU Matrix/Tensor C++ Template Library. in C++/CUDA.

msmc

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
gsl, dmd
Run Dependencies:
gsl
Description:
This software implements MSMC, a method to infer population size and gene flow from multiple genome sequences

multitail

Homepage:
Spack package:
Versions:
6.4.2
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
MultiTail allows you to monitor logfiles and command output in multiple windows in a terminal, colorize, filter and merge.

multitime

Homepage:
Spack package:
Versions:
1.4
Description:
multitime is, in essence, a simple extension to time which runs a command multiple times and prints the timing means, standard deviations, mins, medians, and maxes having done so. This can give a much better understanding of the command's performance.

multiverso

Homepage:
Spack package:
Versions:
master, 143187, 0.2
Build Dependencies:
cmake, mpi, boost
Link Dependencies:
mpi, boost
Description:
Multiverso is a parameter server based framework for training machine learning models on big data with numbers of machines.

mummer

Homepage:
Spack package:
Versions:
3.23
Build Dependencies:
gnuplot, perl
Link Dependencies:
gnuplot
Run Dependencies:
perl
Description:
MUMmer is a system for rapidly aligning entire genomes.

mumps

Homepage:
Spack package:
Versions:
5.2.0, 5.1.2, 5.1.1, 5.0.2, 5.0.1
Build Dependencies:
scotch, metis, parmetis, blas, lapack, scalapack, mpi
Link Dependencies:
scotch, metis, parmetis, blas, lapack, scalapack, mpi
Description:
MUMPS: a MUltifrontal Massively Parallel sparse direct Solver

munge

Homepage:
Spack package:
Versions:
0.5.13, 0.5.12, 0.5.11
Build Dependencies:
openssl, libgcrypt
Link Dependencies:
openssl, libgcrypt
Description:
MUNGE Uid 'N' Gid Emporium

muparser

Homepage:
Spack package:
Versions:
2.2.6.1, 2.2.5
Build Dependencies:
cmake
Description:
C++ math expression parser library.

muscle

Homepage:
Spack package:
Versions:
3.8.1551
Description:
MUSCLE is one of the best-performing multiple alignment programs according to published benchmark tests, with accuracy and speed that are consistently better than CLUSTALW.

muse

Homepage:
Spack package:
Versions:
1.0-rc
Description:
Somatic point mutation caller.

muster

Homepage:
Spack package:
Versions:
1.0.1, 1.0
Build Dependencies:
cmake, boost, mpi
Link Dependencies:
boost, mpi
Description:
The Muster library provides implementations of sequential and parallel K-Medoids clustering algorithms. It is intended as a general framework for parallel cluster analysis, particularly for performance data analysis on systems with very large numbers of processes.

mvapich2

Homepage:
Spack package:
Versions:
2.3.1, 2.3rc2, 2.3rc1, 2.3a, 2.3, 2.2, 2.1, 2.0
Build Dependencies:
findutils, bison, pkgconfig, zlib, libpciaccess, libxml2, cuda, psm, opa-psm2, rdma-core, libfabric
Link Dependencies:
zlib, libpciaccess, libxml2, cuda, psm, opa-psm2, rdma-core, libfabric
Description:
MVAPICH2 is an MPI implementation for Infiniband networks.

mxml

Homepage:
Spack package:
Versions:
2.10, 2.9, 2.8, 2.7, 2.6, 2.5
Description:
Mini-XML is a small XML library that you can use to read and write XML and XML-like data files in your application without requiring large non- standard libraries.

mxnet

Homepage:
Spack package:
Versions:
1.3.0, 0.10.0.post2, 0.10.0.post1, 0.10.0
Build Dependencies:
dmlc-core, mshadow, ps-lite, nnvm, blas, cudnn, cub, opencv, python, py-setuptools
Link Dependencies:
dmlc-core, mshadow, ps-lite, nnvm, blas, cudnn, cub, opencv, python
Run Dependencies:
python
Description:
MXNet is a deep learning framework designed for both efficiency and flexibility.

mysql

Homepage:
Spack package:
Versions:
8.0.15, 8.0.14, 8.0.13, 8.0.12, 8.0.11, 5.7.25, 5.7.24, 5.7.23, 5.7.22, 5.7.21, 5.7.20, 5.7.19, 5.7.18, 5.7.17, 5.7.16, 5.7.15, 5.7.14, 5.7.13, 5.7.12, 5.7.11, 5.7.10, 5.7.9, 5.6.43, 5.5.62
Build Dependencies:
cmake, gmake, boost, ncurses, openssl, bison, m4
Link Dependencies:
boost, ncurses, openssl
Test Dependencies:
perl
Description:
MySQL is an open source relational database management system.

nag

Homepage:
Spack package:
Versions:
6.2, 6.1, 6.0
Description:
The NAG Fortran Compiler.

nalu

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, mpi, yaml-cpp, trilinos, tioga
Link Dependencies:
mpi, yaml-cpp, trilinos, tioga
Description:
Nalu: a generalized unstructured massively parallel low Mach flow code designed to support a variety of energy applications of interest built on the Sierra Toolkit and Trilinos solver Tpetra/Epetra stack

nalu-wind

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, mpi, yaml-cpp, trilinos, openfast, tioga, hypre, trilinos-catalyst-ioss-adapter, fftw
Link Dependencies:
mpi, yaml-cpp, trilinos, openfast, tioga, hypre, trilinos-catalyst-ioss-adapter, fftw
Description:
Nalu-Wind: Wind energy focused variant of Nalu.

namd

Homepage:
Spack package:
Versions:
2.12
Build Dependencies:
charmpp, fftw, intel-mkl, tcl, python
Link Dependencies:
charmpp, fftw, intel-mkl, tcl, python
Description:
NAMDis a parallel molecular dynamics code designed for high-performance simulation of large biomolecular systems.

nano

Homepage:
Spack package:
Versions:
2.6.3, 2.6.2
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Tiny little text editor

nanoflann

Homepage:
Spack package:
Versions:
1.2.3
Build Dependencies:
cmake
Description:
a C++ header-only library for Nearest Neighbor (NN) search wih KD-trees.

nanopb

Homepage:
Spack package:
Versions:
0.3.9.1
Build Dependencies:
cmake, protobuf, py-protobuf
Description:
Nanopb is a small code-size Protocol Buffers implementation in ansi C.

nasm

Homepage:
Spack package:
Versions:
2.13.03, 2.11.06
Description:
NASM (Netwide Assembler) is an 80x86 assembler designed for portability and modularity. It includes a disassembler as well.

nauty

Homepage:
Spack package:
Versions:
2.6r7
Build Dependencies:
m4, autoconf, automake, libtool, pkgconfig, help2man, zlib, gmp
Link Dependencies:
zlib, gmp
Description:
nauty and Traces are programs for computing automorphism groups of graphsq and digraphs

ncbi-magicblast

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
lmdb
Link Dependencies:
lmdb
Description:
Magic-BLAST is a tool for mapping large next-generation RNA or DNA sequencing runs against a whole genome or transcriptome.

ncbi-rmblastn

Homepage:
Spack package:
Versions:
2.2.28
Description:
RMBlast search engine for NCBI

ncbi-toolkit

Homepage:
Spack package:
Versions:
21_0_0
Build Dependencies:
boost, bzip2, libjpeg, libpng, libtiff, libxml2, libxslt, lzo, pcre, giflib, sqlite, zlib, samtools, bamtools
Link Dependencies:
boost, bzip2, libjpeg, libpng, libtiff, libxml2, libxslt, lzo, pcre, giflib, sqlite, zlib, samtools, bamtools
Description:
NCBI C++ Toolkit

nccl

Homepage:
Spack package:
Versions:
2.4.6-1, 2.4.2-1, 2.3.7-1, 2.3.5-5, 2.2, 1.3.4-1, 1.3.0-1
Build Dependencies:
cuda
Link Dependencies:
cuda
Description:
Optimized primitives for collective multi-GPU communication.

nccmp

Homepage:
Spack package:
Versions:
1.8.2.0
Build Dependencies:
netcdf
Link Dependencies:
netcdf
Description:
Compare NetCDF Files

ncdu

Homepage:
Spack package:
Versions:
1.13, 1.12, 1.11, 1.10, 1.9, 1.8, 1.7
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Ncdu is a disk usage analyzer with an ncurses interface. It is designed to find space hogs on a remote server where you don't have an entire gaphical setup available, but it is a useful tool even on regular desktop systems. Ncdu aims to be fast, simple and easy to use, and should be able to run in any minimal POSIX-like environment with ncurses installed.

ncftp

Homepage:
Spack package:
Versions:
3.2.6
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
NcFTP Client is a set of application programs implementing the File Transfer Protocol.

ncl

Homepage:
Spack package:
Versions:
6.6.2, 6.5.0, 6.4.0
Build Dependencies:
jpeg, netcdf, cairo, bison, flex, libiconv, tcsh, curl, libx11, libxaw, libxmu, hdf5, szip, hdf, gdal, udunits2
Link Dependencies:
jpeg, netcdf, cairo, flex, libiconv, tcsh, curl, libx11, libxaw, libxmu, hdf5, szip, hdf, gdal, udunits2
Run Dependencies:
esmf
Description:
NCL is an interpreted language designed specifically for scientific data analysis and visualization. Supports NetCDF 3/4, GRIB 1/2, HDF 4/5, HDF- EOD 2/5, shapefile, ASCII, binary. Numerous analysis functions are built-in.

nco

Homepage:
Spack package:
Versions:
4.7.9, 4.6.7, 4.6.6, 4.6.5, 4.6.4, 4.6.3, 4.6.2, 4.6.1, 4.5.5
Build Dependencies:
netcdf, antlr, gsl, udunits2, flex, bison, texinfo
Link Dependencies:
netcdf, antlr, gsl, udunits2
Description:
The NCO toolkit manipulates and analyzes data stored in netCDF- accessible formats

ncurses

Homepage:
Spack package:
Versions:
6.1, 6.0, 5.9
Build Dependencies:
pkgconfig
Description:
The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses.

ncview

Homepage:
Spack package:
Versions:
2.1.7
Build Dependencies:
netcdf, udunits2, libpng, libxaw
Link Dependencies:
netcdf, udunits2, libpng, libxaw
Description:
Simple viewer for NetCDF files.

ndiff

Homepage:
Spack package:
Versions:
2.00, 1.00
Description:
The ndiff tool is a binary utility that compares putatively similar files while ignoring small numeric differernces. This utility is most often used to compare files containing a lot of floating-point numeric data that may be slightly different due to numeric error.

nek5000

Homepage:
Spack package:
Versions:
develop, 17.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
A fast and scalable high-order solver for computational fluid dynamics

nekbone

Homepage:
Spack package:
Versions:
develop, 17.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
NEK5000 emulation software called NEKbone. Nekbone captures the basic structure and user interface of the extensive Nek5000 software. Nek5000 is a high order, incompressible Navier-Stokes solver based on the spectral element method.

nekcem

Homepage:
Spack package:
Versions:
develop, 7332619, 0b8bedd
Build Dependencies:
mpi, blas, lapack, python
Link Dependencies:
mpi, blas, lapack
Description:
Spectral-element solver for Maxwell's equations, drift-diffusion equations, and more.

nektar

Homepage:
Spack package:
Versions:
4.4.1
Build Dependencies:
cmake, blas, lapack, boost, tinyxml, mpi, fftw, arpack-ng, hdf5, scotch
Link Dependencies:
blas, lapack, boost, tinyxml, mpi, fftw, arpack-ng, hdf5, scotch
Description:
Nektar++: Spectral/hp Element Framework

nektools

Homepage:
Spack package:
Versions:
develop, 17.0
Build Dependencies:
libx11, libxt, xproto, visit
Link Dependencies:
libx11, libxt, xproto, visit
Description:
Tools reuqired by Nek5000

neovim

Homepage:
Spack package:
Versions:
0.3.4, 0.3.1, 0.3.0, 0.2.2, 0.2.1, 0.2.0
Build Dependencies:
cmake, lua, lua-lpeg, lua-mpack, lua-bitlib, libuv, jemalloc, libtermkey, libvterm, unibilium, msgpack-c, gperf
Link Dependencies:
lua, lua-lpeg, lua-mpack, lua-bitlib, libuv, jemalloc, libtermkey, libvterm, unibilium, msgpack-c, gperf
Description:
NeoVim: the future of vim

nest

Homepage:
Spack package:
Versions:
2.14.0, 2.12.0, 2.10.0, 2.8.0, 2.6.0, 2.4.2
Build Dependencies:
cmake, python, py-numpy, py-cython, py-setuptools, mpi, doxygen, gsl, readline, libtool, pkgconfig
Link Dependencies:
python, mpi, gsl, readline, libtool
Run Dependencies:
python, py-numpy
Test Dependencies:
py-nose
Description:
NEST is a simulator for spiking neural network models It focuses on the dynamics, size and structure of neural systems rather than on the exact morphology of individual neurons.

netcdf

Homepage:
Spack package:
Versions:
master, 4.7.0, 4.6.3, 4.6.2, 4.6.1, 4.6.0, 4.5.0, 4.4.1.1, 4.4.1, 4.4.0, 4.3.3.1, 4.3.3
Build Dependencies:
autoconf, automake, libtool, m4, hdf, curl, parallel-netcdf, mpi, zlib, hdf5
Link Dependencies:
hdf, curl, parallel-netcdf, mpi, zlib, hdf5
Description:
NetCDF is a set of software libraries and self-describing, machine- independent data formats that support the creation, access, and sharing of array-oriented scientific data.

netcdf-cxx

Homepage:
Spack package:
Versions:
4.2
Build Dependencies:
netcdf
Link Dependencies:
netcdf
Description:
Deprecated C++ compatibility bindings for NetCDF. These do NOT read or write NetCDF-4 files, and are no longer maintained by Unidata. Developers should migrate to current NetCDF C++ bindings, in Spack package netcdf-cxx4.

netcdf-cxx4

Homepage:
Spack package:
Versions:
4.3.0, 4.2.1
Build Dependencies:
netcdf, automake, autoconf, libtool
Link Dependencies:
netcdf
Description:
C++ interface for NetCDF4

netcdf-fortran

Homepage:
Spack package:
Versions:
4.4.4, 4.4.3
Build Dependencies:
netcdf
Link Dependencies:
netcdf
Description:
Fortran interface for NetCDF4

netgauge

Homepage:
Spack package:
Versions:
2.4.6
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Netgauge is a high-precision network parameter measurement tool. It supports benchmarking of many different network protocols and communication patterns. The main focus lies on accuracy, statistical analysis and easy extensibility.

netgen

Homepage:
Spack package:
Versions:
5.3.1
Build Dependencies:
zlib, mpi, oce, metis
Link Dependencies:
zlib, mpi, oce, metis
Description:
NETGEN is an automatic 3d tetrahedral mesh generator. It accepts input from constructive solid geometry (CSG) or boundary representation (BRep) from STL file format. The connection to a geometry kernel allows the handling of IGES and STEP files. NETGEN contains modules for mesh optimization and hierarchical mesh refinement.

netlib-lapack

Homepage:
Spack package:
Versions:
3.8.0, 3.7.1, 3.7.0, 3.6.1, 3.6.0, 3.5.0, 3.4.2, 3.4.1, 3.4.0, 3.3.1
Build Dependencies:
cmake, blas, netlib-xblas
Link Dependencies:
blas, netlib-xblas
Test Dependencies:
python
Description:
LAPACK version 3.X is a comprehensive FORTRAN library that does linear algebra operations including matrix inversions, least squared solutions to linear sets of equations, eigenvector analysis, singular value decomposition, etc. It is a very comprehensive and reputable package that has found extensive use in the scientific community.

netlib-scalapack

Homepage:
Spack package:
Versions:
2.0.2, 2.0.1, 2.0.0
Build Dependencies:
cmake, mpi, lapack, blas
Link Dependencies:
mpi, lapack, blas
Description:
ScaLAPACK is a library of high-performance linear algebra routines for parallel distributed memory machines

netlib-xblas

Homepage:
Spack package:
Versions:
1.0.248
Description:
XBLAS is a reference implementation for extra precision BLAS. XBLAS is a reference implementation for the dense and banded BLAS routines, along with extended and mixed precision version. Extended precision is only used internally; input and output arguments remain the same as in the existing BLAS. Extra precisions is implemented as double-double (i.e., 128-bit total, 106-bit significand). Mixed precision permits some input/output arguments of different types (mixing real and complex) or precisions (mixing single and double). This implementation is proof of concept, and no attempt was made to optimize performance; performance should be as good as straightforward but careful code written by hand.

nettle

Homepage:
Spack package:
Versions:
3.4.1, 3.4, 3.3, 3.2, 2.7.1, 2.7
Build Dependencies:
gmp, m4
Link Dependencies:
gmp
Description:
The Nettle package contains the low-level cryptographic library that is designed to fit easily in many contexts.

neuron

Homepage:
Spack package:
Versions:
develop, 7.5, 7.4, 7.3, 7.2
Build Dependencies:
flex, bison, automake, autoconf, libtool, pkgconfig, mpi, python, ncurses
Link Dependencies:
mpi, python, ncurses
Description:
NEURON is a simulation environment for single and networks of neurons. NEURON is a simulation environment for modeling individual and networks of neurons. NEURON models individual neurons via the use of sections that are automatically subdivided into individual compartments, instead of requiring the user to manually create compartments. The primary scripting language is hoc but a Python interface is also available.

nextflow

Homepage:
Spack package:
Versions:
0.25.6, 0.24.1, 0.23.3, 0.21.0, 0.20.1, 0.17.3
Build Dependencies:
java
Link Dependencies:
java
Description:
Data-driven computational pipelines

nfft

Homepage:
Spack package:
Versions:
3.4.1, 3.3.2
Build Dependencies:
fftw
Link Dependencies:
fftw
Description:
NFFT is a C subroutine library for computing the nonequispaced discrete Fourier transform (NDFT) in one or more dimensions, of arbitrary input size, and of complex data.

nghttp2

Homepage:
Spack package:
Versions:
1.26.0
Build Dependencies:
python, py-cython, py-setuptools
Run Dependencies:
python, py-cython
Description:
nghttp2 is an implementation of HTTP/2 and its header compression algorithm HPACK in C.

nginx

Homepage:
Spack package:
Versions:
1.15.6, 1.13.8, 1.12.0
Build Dependencies:
openssl, pcre, zlib
Link Dependencies:
openssl, pcre, zlib
Description:
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev.

ngmlr

Homepage:
Spack package:
Versions:
0.2.5
Build Dependencies:
cmake
Description:
Ngmlr is a long-read mapper designed to align PacBilo or Oxford Nanopore to a reference genome with a focus on reads that span structural variations.

ninja

Homepage:
Spack package:
Versions:
1.9.0, 1.8.2, 1.7.2, 1.6.0, kitware
Build Dependencies:
python
Description:
Ninja is a small build system with a focus on speed. It differs from other build systems in two major respects: it is designed to have its input files generated by a higher-level build system, and it is designed to run builds as fast as possible.

ninja-fortran

Homepage:
Spack package:
Versions:
1.9.0.2.g99df1, 1.9.0.1.g5b44b, 1.9.0.0.gad558, 1.8.2.2.g81279, 1.8.2.1.g3bbbe, 1.8.2.0.g972a7, 1.7.2.1.gaad58, 1.7.2.0.gcc0ea, 1.7.1.0.g7ca7f
Build Dependencies:
python
Description:
A Fortran capable fork of ninja.

nix

Homepage:
Spack package:
Versions:
2.2.1, 2.1.3, 2.0.4
Build Dependencies:
autoconf, automake, bison, flex, libtool, libxslt, boost, brotli, editline, m4, bzip2, curl, libseccomp, openssl, sqlite, xz
Link Dependencies:
boost, brotli, editline, bzip2, curl, libseccomp, openssl, sqlite, xz
Description:
Nix, the purely functional package manager

nlohmann-json

Homepage:
Spack package:
Versions:
3.5.0, 3.4.0, 3.3.0, 3.2.0, 3.1.2, 3.1.1
Build Dependencies:
cmake
Description:
JSON for Modern C++

nlopt

Homepage:
Spack package:
Versions:
develop, 2.5.0
Build Dependencies:
cmake, python, py-numpy, swig, guile, octave, matlab
Link Dependencies:
python, swig, guile, octave, matlab
Run Dependencies:
py-numpy
Description:
NLopt is a free/open-source library for nonlinear optimization, providing a common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms.

nmap

Homepage:
Spack package:
Versions:
7.70, 7.31, 7.30
Description:
Nmap ("Network Mapper") is a free and open source (license) utility for network discovery and security auditing. It also provides ncat an updated nc

nnvm

Homepage:
Spack package:
Versions:
master, 20170418
Build Dependencies:
cmake, dmlc-core
Link Dependencies:
dmlc-core
Description:
nnvm is a modular, decentralized and lightweight part to help build deep learning libraries.

node-js

Homepage:
Spack package:
Versions:
11.1.0, 10.13.0, 8.9.1, 7.1.0, 6.3.0, 6.2.2
Build Dependencies:
libtool, pkgconfig, python, icu4c, openssl, zlib
Link Dependencies:
icu4c, openssl, zlib
Description:
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.

notmuch

Homepage:
Spack package:
Versions:
0.23.7
Build Dependencies:
zlib, talloc, gmime, xapian-core
Link Dependencies:
zlib, talloc, gmime, xapian-core
Description:
Notmuch is a mail indexer. Essentially, is a very thin front end on top of xapian.

npb

Homepage:
Spack package:
Versions:
3.3.1
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
The NAS Parallel Benchmarks (NPB) are a small set of programs designed to help evaluate the performance of parallel supercomputers. The benchmarks are derived from computational fluid dynamics (CFD) applications and consist of five kernels and three pseudo-applications in the original "pencil-and-paper" specification (NPB 1). The benchmark suite has been extended to include new benchmarks for unstructured adaptive mesh, parallel I/O, multi-zone applications, and computational grids. Problem sizes in NPB are predefined and indicated as different classes. Reference implementations of NPB are available in commonly-used programming models like MPI and OpenMP (NPB 2 and NPB 3).

npm

Homepage:
Spack package:
Versions:
3.10.9, 3.10.5
Build Dependencies:
node-js
Run Dependencies:
node-js
Description:
npm: A package manager for javascript.

npth

Homepage:
Spack package:
Versions:
1.5, 1.4
Description:
nPth is a library to provide the GNU Pth API and thus a non-preemptive threads implementation.

nseg

Homepage:
Spack package:
Versions:
1.0
Description:
NSEG - Low complexity sequence identification

nspr

Homepage:
Spack package:
Versions:
4.13.1
Build Dependencies:
perl
Description:
Netscape Portable Runtime (NSPR) provides a platform-neutral API for system level and libc-like functions.

ntpoly

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
cmake, mpi
Link Dependencies:
blas, mpi
Description:
NTPoly - parallel library for computing matrix functions. NTPoly is a library for computing the functions of sparse, hermitian matrices based on polynomial expansions. For sufficiently sparse matrices, most of the matrix functions in NTPoly can be computed in linear time.

numactl

Homepage:
Spack package:
Versions:
2.0.12, 2.0.11
Build Dependencies:
autoconf, automake, libtool, m4
Description:
NUMA support for Linux

numdiff

Homepage:
Spack package:
Versions:
5.9.0, 5.8.1
Build Dependencies:
gettext, gmp
Link Dependencies:
gettext, gmp
Description:
Numdiff is a little program that can be used to compare putatively similar files line by line and field by field, ignoring small numeric differences or/and different numeric formats.

nut

Homepage:
Spack package:
Versions:
master, 0.1.1
Build Dependencies:
cmake, random123
Link Dependencies:
cmake, random123
Description:
NuT is Monte Carlo code for neutrino transport and is a C++ analog to the Haskell McPhD code. NuT is principally aimed at exploring on-node parallelism and performance issues.

nvptx-tools

Homepage:
Spack package:
Versions:
2018-03-01
Build Dependencies:
binutils, cuda
Link Dependencies:
binutils, cuda
Description:
nvptx-tools: A collection of tools for use with nvptx-none GCC toolchains. These tools are necessary when building a version of GCC that enables offloading of OpenMP/OpenACC code to NVIDIA GPUs.

nwchem

Homepage:
Spack package:
Versions:
6.8.1, 6.8, 6.6
Build Dependencies:
blas, lapack, mpi, scalapack, python
Link Dependencies:
blas, lapack, mpi, scalapack, python
Run Dependencies:
python
Description:
High-performance computational chemistry software

nyancat

Homepage:
Spack package:
Versions:
1.5.2, 1.5.1, 1.5.0, 1.4.5
Description:
Nyancat in your terminal, rendered through ANSI escape sequences.

ocaml

Homepage:
Spack package:
Versions:
4.06.0, 4.03.0
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
OCaml is an industrial strength programming language supporting functional, imperative and object-oriented styles

occa

Homepage:
Spack package:
Versions:
develop, 1.0.8, 1.0.0-alpha.5, 0.2.0, 0.1.0
Build Dependencies:
cuda
Link Dependencies:
cuda
Description:
OCCA is an open-source (MIT license) library used to program current multi-core/many-core architectures. Devices (such as CPUs, GPUs, Intel's Xeon Phi, FPGAs, etc) are abstracted using an offload-model for application development and programming for the devices is done through a C-based (OKL) or Fortran-based kernel language (OFL). OCCA gives developers the ability to target devices at run-time by using run-time compilation for device kernels.

oce

Homepage:
Spack package:
Versions:
0.18.3, 0.18.2, 0.18.1, 0.18, 0.17.2, 0.17.1, 0.17, 0.16.1, 0.16
Build Dependencies:
cmake, tbb
Link Dependencies:
tbb
Description:
Open CASCADE Community Edition: patches/improvements/experiments contributed by users over the official Open CASCADE library.

oclint

Homepage:
Spack package:
Versions:
0.13
Build Dependencies:
python, py-argparse, git, subversion, cmake, ninja, llvm
Link Dependencies:
llvm
Description:
OClint: a static analysis tool for C, C++, and Objective-C code OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code and looking for potential problems

oclock

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxmu, libxext, libxt, libxkbfile, pkgconfig, util-macros
Link Dependencies:
libx11, libxmu, libxext, libxt, libxkbfile
Description:
oclock is a simple analog clock using the SHAPE extension to make a round (possibly transparent) window.

octave

Homepage:
Spack package:
Versions:
4.4.1, 4.4.0, 4.2.2, 4.2.1, 4.2.0, 4.0.2, 4.0.0
Build Dependencies:
blas, lapack, pcre, pkgconfig, readline, arpack-ng, curl, fftw, fltk, fontconfig, freetype, glpk, gl2ps, gnuplot, image-magick, hdf5, java, llvm, qhull, qrupdate, qt, suite-sparse, zlib
Link Dependencies:
blas, lapack, pcre, readline, arpack-ng, curl, fftw, fltk, fontconfig, freetype, glpk, gl2ps, gnuplot, image-magick, hdf5, java, llvm, qhull, qrupdate, qt, suite-sparse, zlib
Description:
GNU Octave is a high-level language, primarily intended for numerical computations. It provides a convenient command line interface for solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with Matlab. It may also be used as a batch-oriented language.

octave-optim

Homepage:
Spack package:
Versions:
1.5.2
Build Dependencies:
octave, octave-struct
Link Dependencies:
octave, octave-struct
Run Dependencies:
octave
Description:
Non-linear optimization toolkit for Octave.

octave-splines

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
octave
Link Dependencies:
octave
Run Dependencies:
octave
Description:
Additional spline functions.

octave-struct

Homepage:
Spack package:
Versions:
1.0.14
Build Dependencies:
octave
Link Dependencies:
octave
Run Dependencies:
octave
Description:
Additional structure manipulation functions for Octave.

octopus

Homepage:
Spack package:
Versions:
7.3, 6.0, 5.0.1
Build Dependencies:
blas, gsl, lapack, libxc, mpi, fftw, metis, parmetis, scalapack, netcdf-fortran, arpack-ng
Link Dependencies:
blas, gsl, lapack, libxc, mpi, fftw, metis, parmetis, scalapack, netcdf-fortran, arpack-ng
Description:
A real-space finite-difference (time-dependent) density-functional theory code.

of-adios-write

Homepage:
Spack package:
Versions:
develop, 1706, 1612
Build Dependencies:
openfoam-com, adios
Link Dependencies:
openfoam-com, adios
Description:
adios-write supplies additional libraries and function objects for reading/writing OpenFOAM data with ADIOS. This offering is part of the community repository supported by OpenCFD Ltd, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM trademark. OpenCFD Ltd has been developing and releasing OpenFOAM since its debut in 2004.

of-catalyst

Homepage:
Spack package:
Versions:
develop, 1806
Build Dependencies:
cmake, openfoam-com, catalyst, paraview
Link Dependencies:
openfoam-com, catalyst, paraview
Run Dependencies:
openfoam-com
Description:
Of-catalyst is a library for OpenFOAM that provides a runtime-selectable function object for embedding ParaView Catalyst in-situ visualization into arbitrary OpenFOAM simulations. Supports in-situ conversion of the following types: 1) finite volume meshes and fields, single or multi- region; 2) finite area meshes and fields, single region; 3) lagrangian (clouds), single or multiple clouds. This offering is part of the community repository supported by OpenCFD Ltd, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM trademark. OpenCFD Ltd has been developing and releasing OpenFOAM since its debut in 2004.

of-precice

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
openfoam, precice, yaml-cpp
Link Dependencies:
openfoam, precice, yaml-cpp
Description:
preCICE adapter for OpenFOAM

omega-h

Homepage:
Spack package:
Versions:
develop, 9.27.0, 9.22.2, 9.19.1, 9.19.0, 9.15.0, 9.14.0, 9.13.14, 9.13.13
Build Dependencies:
cmake, gmsh, mpi, trilinos, zlib
Link Dependencies:
mpi, trilinos, zlib
Description:
Omega_h is a C++11 library providing data structures and algorithms for adaptive discretizations. Its specialty is anisotropic triangle and tetrahedral mesh adaptation. It runs efficiently on most modern HPC hardware including GPUs.

ompss

Homepage:
Spack package:
Versions:
14.10
Build Dependencies:
mpi, hwloc, extrae
Link Dependencies:
mpi, hwloc, extrae
Description:
OmpSs is an effort to integrate features from the StarSs programming model developed by BSC into a single programming model. In particular, our objective is to extend OpenMP with new directives to support asynchronous parallelism and heterogeneity (devices like GPUs). However, it can also be understood as new directives extending other accelerator based APIs like CUDA or OpenCL. Our OmpSs environment is built on top of our Mercurium compiler and Nanos++ runtime system.

ompt-openmp

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
cmake
Description:
LLVM/Clang OpenMP runtime with OMPT support. This is a fork of the OpenMPToolsInterface/LLVM-openmp fork of the official LLVM OpenMP mirror. This library provides a drop-in replacement of the OpenMP runtimes for GCC, Intel and LLVM/Clang.

oniguruma

Homepage:
Spack package:
Versions:
6.1.3
Description:
Regular expression library.

ont-albacore

Homepage:
Spack package:
Versions:
2.3.1, 2.1.2, 1.2.4, 1.1.0
Build Dependencies:
python, py-setuptools, py-numpy, py-dateutil, py-h5py, py-ont-fast5-api, py-pip
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-numpy, py-dateutil, py-h5py, py-ont-fast5-api
Description:
Albacore is a software project that provides an entry point to the Oxford Nanopore basecalling algorithms. It can be run from the command line on Windows and multiple Linux platforms. A selection of configuration files allow basecalling DNA libraries made with our current range of sequencing kits and Flow Cells.

opa-psm2

Homepage:
Spack package:
Versions:
11.2.68, 10.3-37, 10.3-17, 10.3-10, 10.3-8, 10.2-260, 10.2-235, 10.2-175
Build Dependencies:
numactl
Link Dependencies:
numactl
Description:
Intel Omni-Path Performance Scaled Messaging 2 (PSM2) library

opam

Homepage:
Spack package:
Versions:
1.2.2, 1.2.1
Build Dependencies:
ocaml
Link Dependencies:
ocaml
Description:
OPAM: OCaml Package Manager OPAM is a source-based package manager for OCaml. It supports multiple simultaneous compiler installations, flexible package constraints, and a Git-friendly development workflow.

opari2

Homepage:
Spack package:
Versions:
2.0.4, 2.0.3, 2.0.1, 2.0, 1.1.4, 1.1.2
Description:
OPARI2 is a source-to-source instrumentation tool for OpenMP and hybrid codes. It surrounds OpenMP directives and runtime library calls with calls to the POMP2 measurement interface. OPARI2 will provide you with a new initialization method that allows for multi-directory and parallel builds as well as the usage of pre-instrumented libraries. Furthermore, an efficient way of tracking parent-child relationships was added. Additionally, we extended OPARI2 to support instrumentation of OpenMP 3.0 tied tasks.

openbabel

Homepage:
Spack package:
Versions:
2.4.1
Build Dependencies:
cmake, python, pkgconfig, cairo, eigen, libxml2, zlib
Link Dependencies:
python, cairo, eigen, libxml2, zlib
Run Dependencies:
python
Description:
Open Babel is a chemical toolbox designed to speak the many languages of chemical data. It's an open, collaborative project allowing anyone to search, convert, analyze, or store data from molecular modeling, chemistry, solid-state materials, biochemistry, or related areas.

openblas

Homepage:
Spack package:
Versions:
develop, 0.3.6, 0.3.5, 0.3.4, 0.3.3, 0.3.2, 0.3.1, 0.3.0, 0.2.20, 0.2.19, 0.2.18, 0.2.17, 0.2.16, 0.2.15
Description:
OpenBLAS: An optimized BLAS library

opencoarrays

Homepage:
Spack package:
Versions:
2.2.0, 1.8.10, 1.8.4, 1.8.0, 1.7.4, 1.6.2
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
OpenCoarrays is an open-source software project that produces an application binary interface (ABI) supporting coarray Fortran (CAF) compilers, an application programming interface (API) that supports users of non-CAF compilers, and an associated compiler wrapper and program launcher.

opencv

Homepage:
Spack package:
Versions:
master, 4.1.0-openvino, 4.1.0, 4.0.1-openvino, 4.0.1, 4.0.0-openvino, 4.0.0, 3.4.6, 3.4.5, 3.4.4, 3.4.3, 3.4.1, 3.4.0, 3.3.1, 3.3.0, 3.2.0, 3.1.0, 2.4.13.2, 2.4.13.1, 2.4.13, 2.4.12.3, 2.4.12.2, 2.4.12.1
Build Dependencies:
cmake, eigen, zlib, libpng, jpeg, libtiff, jasper, cuda, gtkplus, vtk, qt, java, py-numpy, protobuf, ffmpeg, mpi, python
Link Dependencies:
zlib, libpng, jpeg, libtiff, jasper, cuda, gtkplus, vtk, qt, java, protobuf, ffmpeg, mpi, python
Run Dependencies:
py-numpy
Description:
OpenCV is released under a BSD license and hence it's free for both academic and commercial use. It has C++, C, Python and Java interfaces and supports Windows, Linux, Mac OS, iOS and Android. OpenCV was designed for computational efficiency and with a strong focus on real- time applications. Written in optimized C/C++, the library can take advantage of multi-core processing. Enabled with OpenCL, it can take advantage of the hardware acceleration of the underlying heterogeneous compute platform. Adopted all around the world, OpenCV has more than 47 thousand people of user community and estimated number of downloads exceeding 9 million. Usage ranges from interactive art, to mines inspection, stitching maps on the web or through advanced robotics.

openexr

Homepage:
Spack package:
Versions:
2.3.0, 2.2.0, 2.1.0, 2.0.1, 1.7.0, 1.6.1, 1.5.0, 1.4.0a, 1.3.2
Build Dependencies:
pkgconfig, ilmbase, zlib
Link Dependencies:
ilmbase, zlib
Description:
OpenEXR Graphics Tools (high dynamic-range image file format)

openfast

Homepage:
Spack package:
Versions:
develop, master
Build Dependencies:
cmake, blas, lapack, mpi, yaml-cpp, hdf5, zlib, libxml2
Link Dependencies:
blas, lapack, mpi, yaml-cpp, hdf5, zlib, libxml2
Description:
Wind turbine simulation package from NREL

openfoam-com

Homepage:
Spack package:
Versions:
develop, 1812, 1806, 1712, 1706, 1612
Build Dependencies:
mpi, zlib, fftw, boost, cgal, flex, cmake, scotch, kahip, metis, parmgridgen, zoltan, vtk, paraview
Link Dependencies:
mpi, zlib, fftw, boost, cgal, flex, scotch, kahip, metis, zoltan, vtk, paraview
Description:
OpenFOAM is a GPL-opensource C++ CFD-toolbox. This offering is supported by OpenCFD Ltd, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM trademark. OpenCFD Ltd has been developing and releasing OpenFOAM since its debut in 2004.

openfoam-org

Homepage:
Spack package:
Versions:
develop, 5.0, 4.1, 2.4.0
Build Dependencies:
mpi, zlib, flex, cmake, scotch
Link Dependencies:
mpi, zlib, scotch
Description:
OpenFOAM is a GPL-opensource C++ CFD-toolbox. The openfoam.org release is managed by the OpenFOAM Foundation Ltd as a licensee of the OPENFOAM trademark. This offering is not approved or endorsed by OpenCFD Ltd, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM trademark.

openfst

Homepage:
Spack package:
Versions:
1.6.1, 1.6.0, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5.0, 1.4.1-patch, 1.4.1, 1.4.0
Description:
OpenFst is a library for constructing, combining, optimizing, and searching weighted finite-state transducers (FSTs). Weighted finite- state transducers are automata where each transition has an input label, an output label, and a weight.

opengl

Homepage:
Spack package:
Description:
Placeholder for external OpenGL libraries from hardware vendors

openglu

Homepage:
Spack package:
Description:
Placeholder for external OpenGL utility library (GLU) from hardware vendors

openimageio

Homepage:
Spack package:
Versions:
1.8.15
Build Dependencies:
cmake, boost, libtiff, openexr, libpng, ffmpeg, openjpeg, python, py-numpy, py-pybind11, qt
Link Dependencies:
boost, libtiff, openexr, libpng, ffmpeg, openjpeg, python, qt
Run Dependencies:
py-numpy, py-pybind11
Description:
OpenImageIO is a library for reading and writing images, and a bunch of related classes, utilities, and applications.

openjdk

Homepage:
Spack package:
Versions:
11.0.1
Description:
The free and opensource java implementation

openjpeg

Homepage:
Spack package:
Versions:
2.3.0, 2.2.0, 2.1.2, 2.1.1, 2.1.0, 2.0.1, 2.0.0, 1.5.2, 1.5.1
Build Dependencies:
cmake
Description:
OpenJPEG is an open-source JPEG 2000 codec written in C language. It has been developed in order to promote the use of JPEG 2000, a still-image compression standard from the Joint Photographic Experts Group (JPEG). Since April 2015, it is officially recognized by ISO/IEC and ITU-T as a JPEG 2000 Reference Software.

openkim-models

Homepage:
Spack package:
Versions:
2019-03-29
Build Dependencies:
cmake, kim-api
Link Dependencies:
kim-api
Description:
OpenKIM is an online framework for making molecular simulations reliable, reproducible, and portable. Computer implementations of inter- atomic models are archived in OpenKIM, verified for coding integrity, and tested by computing their predictions for a variety of material properties. Models conforming to the KIM application programming interface (API) work seamlessly with major simulation codes that have adopted the KIM API standard. This package provides all models archived at openkim.org that are compatible with the kim-api package.

openmc

Homepage:
Spack package:
Versions:
develop, 0.10.0
Build Dependencies:
cmake, hdf5
Link Dependencies:
hdf5
Description:
The OpenMC project aims to provide a fully-featured Monte Carlo particle transport code based on modern methods. It is a constructive solid geometry, continuous-energy transport code that uses ACE format cross sections. The project started under the Computational Reactor Physics Group at MIT.

openmpi

Homepage:
Spack package:
Versions:
develop, 4.0.1, 4.0.0, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.1.6, 2.1.5, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 1.10.7, 1.10.6, 1.10.5, 1.10.4, 1.10.3, 1.10.2, 1.10.1, 1.10.0, 1.8.8, 1.8.7, 1.8.6, 1.8.5, 1.8.4, 1.8.3, 1.8.2, 1.8.1, 1.8, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.7.1, 1.7, 1.6.5, 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6, 1.5.5, 1.5.4, 1.5.3, 1.5.2, 1.5.1, 1.5, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1, 1.4, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1, 1.0.2, 1.0.1, 1.0
Build Dependencies:
numactl, autoconf, automake, libtool, m4, perl, hwloc, java, sqlite, zlib, valgrind, ucx, libfabric, slurm, binutils
Link Dependencies:
numactl, hwloc, java, sqlite, zlib, valgrind, ucx, libfabric, slurm, binutils
Description:
An open source Message Passing Interface implementation. The Open MPI Project is an open source Message Passing Interface implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able to combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software vendors, application developers and computer science researchers.

opennurbs

Homepage:
Spack package:
Versions:
develop, percept
Description:
OpenNURBS is an open-source NURBS-based geometric modeling library and toolset, with meshing and display / output functions.

openpa

Homepage:
Spack package:
Versions:
1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0.0
Description:
An open source, highly-portable library that provides atomic primitives (and related constructs) for high performance, concurrent software

openpmd-api

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpark-variant, mpi, hdf5, adios, adios2, nlohmann-json, python
Link Dependencies:
mpark-variant, mpi, hdf5, adios, adios2, nlohmann-json, py-pybind11, python
Run Dependencies:
py-numpy, py-mpi4py, python
Test Dependencies:
catch, py-numpy, py-mpi4py, python
Description:
API for easy reading and writing of openPMD files

openscenegraph

Homepage:
Spack package:
Versions:
3.2.3, 3.1.5
Build Dependencies:
cmake, qt, zlib
Link Dependencies:
qt, zlib
Description:
OpenSceneGraph is an open source, high performance 3D graphics toolkit that's used in a variety of visual simulation applications.

openslide

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
openjpeg, jpeg, libtiff, libxml2, sqlite
Link Dependencies:
openjpeg, jpeg, libtiff, libxml2, sqlite
Description:
OpenSlide reads whole slide image files.

openspeedshop

Homepage:
Spack package:
Versions:
develop, 2.4.1, 2.4.0, 2.3.1.5, 2.3.1.4, 2.3.1.3
Build Dependencies:
cmake, libtool, bison, flex, binutils, libdwarf, sqlite, boost, dyninst, python, libxml2, qt, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Link Dependencies:
binutils, elf, libdwarf, sqlite, boost, dyninst, libxml2, qt, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Run Dependencies:
python, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Description:
OpenSpeedShop is a community effort by The Krell Institute with current direct funding from DOEs NNSA. It builds on top of a broad list of community infrastructures, most notably Dyninst and MRNet from UW, libmonitor from Rice, and PAPI from UTK. OpenSpeedShop is an open source multi platform Linux performance tool which is targeted to support performance analysis of applications running on both single node and large scale IA64, IA32, EM64T, AMD64, PPC, ARM, Power8, Intel Phi, Blue Gene and Cray platforms. OpenSpeedShop development is hosted by the Krell Institute. The infrastructure and base components of OpenSpeedShop are released as open source code primarily under LGPL.

openspeedshop-utils

Homepage:
Spack package:
Versions:
develop, 2.4.1, 2.4.0, 2.3.1.5, 2.3.1.4, 2.3.1.3
Build Dependencies:
cmake, libtool, bison, flex, binutils, libdwarf, sqlite, boost, dyninst, python, libxml2, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Link Dependencies:
elf, libdwarf, sqlite, boost, dyninst, libxml2, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Run Dependencies:
python, cbtf, cbtf-krell, cbtf-argonavis, mrnet
Description:
OpenSpeedShop is a community effort by The Krell Institute with current direct funding from DOEs NNSA. It builds on top of a broad list of community infrastructures, most notably Dyninst and MRNet from UW, libmonitor from Rice, and PAPI from UTK. OpenSpeedShop is an open source multi platform Linux performance tool which is targeted to support performance analysis of applications running on both single node and large scale IA64, IA32, EM64T, AMD64, PPC, ARM, Power8, Intel Phi, Blue Gene and Cray platforms. OpenSpeedShop development is hosted by the Krell Institute. The infrastructure and base components of OpenSpeedShop are released as open source code primarily under LGPL. openspeedshop- utils is a package that does not have the qt3 gui. It was created to avoid a conflict between openspeedshop and cbtf-argonavis-gui based on the fact that spack will not allow a qt3 and qt4/qt5 dependency in a packages dependency tree.

openssh

Homepage:
Spack package:
Versions:
7.9p1, 7.6p1, 7.5p1, 7.4p1, 7.3p1, 7.2p2, 7.1p2, 7.0p1, 6.9p1, 6.8p1, 6.7p1, 6.6p1
Build Dependencies:
openssl, libedit, ncurses, zlib
Link Dependencies:
openssl, libedit, ncurses, zlib
Description:
OpenSSH is the premier connectivity tool for remote login with the SSH protocol. It encrypts all traffic to eliminate eavesdropping, connection hijacking, and other attacks. In addition, OpenSSH provides a large suite of secure tunneling capabilities, several authentication methods, and sophisticated configuration options.

openssl

Homepage:
Spack package:
Versions:
1.1.1b, 1.1.1a, 1.1.1, 1.1.0j, 1.1.0i, 1.1.0g, 1.1.0e, 1.1.0d, 1.1.0c, 1.0.2r, 1.0.2p, 1.0.2o, 1.0.2n, 1.0.2m, 1.0.2k, 1.0.2j, 1.0.2i, 1.0.2h, 1.0.2g, 1.0.2f, 1.0.2e, 1.0.2d, 1.0.1u, 1.0.1t, 1.0.1r, 1.0.1h, 1.0.1e
Build Dependencies:
zlib, perl
Link Dependencies:
zlib
Test Dependencies:
perl
Description:
OpenSSL is an open source project that provides a robust, commercial- grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.

opium

Homepage:
Spack package:
Versions:
3.8
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
DFT pseudopotential generation project

optional-lite

Homepage:
Spack package:
Versions:
3.2.0, 3.1.1, 3.1.0, 3.0.0, 2.3.0, 2.2.0, 2.0.0, 1.0.3
Build Dependencies:
cmake
Description:
A single-file header-only version of a C++17-like optional, a nullable object for C++98, C++11 and later.

opus

Homepage:
Spack package:
Versions:
1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1, 1.0.3, 1.0.2, 1.0.1, 1.0.0, 0.9.14, 0.9.10, 0.9.9, 0.9.8, 0.9.7, 0.9.6, 0.9.5, 0.9.3, 0.9.2, 0.9.1, 0.9.0
Build Dependencies:
libvorbis
Link Dependencies:
libvorbis
Description:
Opus is a totally open, royalty-free, highly versatile audio codec.

orca

Homepage:
Spack package:
Versions:
4.0.1.2
Build Dependencies:
zstd
Run Dependencies:
openmpi
Description:
An ab initio, DFT and semiempirical SCF-MO package Note: Orca is licensed software. You will need to create an account on the Orca homepage and download Orca yourself. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

orfm

Homepage:
Spack package:
Versions:
0.7.1
Link Dependencies:
zlib
Description:
A simple and not slow open reading frame (ORF) caller. No bells or whistles like frameshift detection, just a straightforward goal of returning a FASTA file of open reading frames over a certain length from a FASTA/Q file of nucleotide sequences.

orthofiller

Homepage:
Spack package:
Versions:
1.1.4
Run Dependencies:
augustus, bedtools2, hmmer, orthofinder, python, py-biopython, py-scipy, r, r-gamlss, mafft
Description:
OrthoFiller: Identifying missing annotations for evolutionarily conserved genes.

orthofinder

Homepage:
Spack package:
Versions:
2.2.0
Run Dependencies:
blast-plus, mcl, fastme, py-dlcpar
Description:
OrthoFinder is a fast, accurate and comprehensive analysis tool for comparative genomics. It finds orthologues and orthogroups infers rooted gene trees for all orthogroups and infers a rooted species tree for the species being analysed. OrthoFinder also provides comprehensive statistics for comparative genomic analyses. OrthoFinder is simple to use and all you need to run it is a set of protein sequence files (one per species) in FASTA format.

orthomcl

Homepage:
Spack package:
Versions:
2.0.9
Build Dependencies:
perl, blast-plus, mcl, mariadb
Link Dependencies:
blast-plus, mcl, mariadb
Run Dependencies:
perl
Description:
OrthoMCL is a genome-scale algorithm for grouping orthologous protein sequences.

osmctools

Homepage:
Spack package:
Versions:
0.9, 0.8
Build Dependencies:
zlib, autoconf, automake, libtool, m4
Link Dependencies:
zlib
Description:
A few really fast tools to convert, filter and update OpenStreetMap data files

osu-micro-benchmarks

Homepage:
Spack package:
Versions:
5.5, 5.4, 5.3
Build Dependencies:
mpi, cuda
Link Dependencies:
mpi, cuda
Description:
The Ohio MicroBenchmark suite is a collection of independent MPI message passing performance microbenchmarks developed and written at The Ohio State University. It includes traditional benchmarks and performance measures such as latency, bandwidth and host overhead and can be used for both traditional and GPU-enhanced nodes.

otf

Homepage:
Spack package:
Versions:
1.12.5salmon
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
To improve scalability for very large and massively parallel traces the Open Trace Format (OTF) is developed at ZIH as a successor format to the Vampir Trace Format (VTF3).

otf2

Homepage:
Spack package:
Versions:
2.1.1, 2.1, 2.0, 1.5.1, 1.4, 1.3.1, 1.2.1
Description:
The Open Trace Format 2 is a highly scalable, memory efficient event trace data format plus support library.

p4est

Homepage:
Spack package:
Versions:
2.0, 1.1
Build Dependencies:
automake, autoconf, libtool, mpi, zlib
Link Dependencies:
mpi, zlib
Description:
Dynamic management of a collection (a forest) of adaptive octrees in parallel

p7zip

Homepage:
Spack package:
Versions:
16.02
Description:
A Unix port of the 7z file archiver

pacbio-daligner

Homepage:
Spack package:
Versions:
2017-08-05
Build Dependencies:
gmake, pacbio-dazz-db
Link Dependencies:
pacbio-dazz-db
Description:
Daligner: The Dazzler "Overlap" Module. This is a special fork required for some pacbio utilities.

pacbio-damasker

Homepage:
Spack package:
Versions:
2017-02-11
Build Dependencies:
gmake
Description:
Damasker: The Dazzler Repeat Masking Suite. This is a special fork required for some pacbio utilities.

pacbio-dazz-db

Homepage:
Spack package:
Versions:
2017-04-10
Build Dependencies:
gmake
Description:
The Dazzler Database Library. This version is a special fork required for some pacbio utilities.

pacbio-dextractor

Homepage:
Spack package:
Versions:
2016-08-09
Build Dependencies:
hdf5, gmake
Link Dependencies:
hdf5
Description:
The Dextractor and Compression Command Library. This is a special fork required by some pacbio utilities.

packmol

Homepage:
Spack package:
Versions:
18.169
Build Dependencies:
cmake
Description:
Packmol creates an initial point for molecular dynamics simulations by packing molecules in defined regions of space.

pacvim

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Pacvim is a command-line-based game based off of Pacman. The main purpose of this software is to familiarize individuals with Vim.

pagit

Homepage:
Spack package:
Versions:
1.01
Build Dependencies:
java, perl
Run Dependencies:
java, perl
Description:
PAGIT addresses the need for software to generate high quality draft genomes.

pagmo

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
cmake, python, boost, gsl, ipopt, mpi, blas, py-scipy, py-networkx
Link Dependencies:
python, boost, gsl, ipopt, mpi, blas
Run Dependencies:
py-scipy, py-networkx
Description:
Parallel Global Multiobjective Optimizer (and its Python alter ego PyGMO) is a C++ / Python platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model.

pal

Homepage:
Spack package:
Versions:
0.9.8
Build Dependencies:
sofa-c, erfa
Link Dependencies:
sofa-c, erfa
Description:
The PAL library is a partial re-implementation of Pat Wallace's popular SLALIB library written in C using a Gnu GPL license and layered on top of the IAU's SOFA library (or the BSD-licensed ERFA) where appropriate.

paml

Homepage:
Spack package:
Versions:
4.9h
Description:
PAML is a package of programs for phylogenetic analyses of DNA or protein sewuences using maximum likelihood.

panda

Homepage:
Spack package:
Versions:
2016-03-07
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
PANDA: Parallel AdjaceNcy Decomposition Algorithm

pandaseq

Homepage:
Spack package:
Versions:
2.11, 2.10
Build Dependencies:
autoconf, automake, libtool, m4, zlib, pkgconfig
Link Dependencies:
libtool, bzip2
Description:
PANDASEQ is a program to align Illumina reads, optionally with PCR primers embedded in the sequence, and reconstruct an overlapping sequence.

pango

Homepage:
Spack package:
Versions:
1.41.0, 1.40.3, 1.40.1, 1.36.8
Build Dependencies:
pkgconfig, harfbuzz, cairo, libxft, glib, gobject-introspection
Link Dependencies:
harfbuzz, cairo, libxft, glib, gobject-introspection
Description:
Pango is a library for laying out and rendering of text, with an emphasis on internationalization. It can be used anywhere that text layout is needed, though most of the work on Pango so far has been done in the context of the GTK+ widget toolkit.

pangomm

Homepage:
Spack package:
Versions:
2.14.1, 2.14.0
Build Dependencies:
pango, glibmm, cairomm
Link Dependencies:
pango, glibmm, cairomm
Description:
Pangomm is a C++ interface to Pango.

papi

Homepage:
Spack package:
Versions:
5.7.0, 5.6.0, 5.5.1, 5.5.0, 5.4.3, 5.4.1, 5.3.0
Description:
PAPI provides the tool designer and application engineer with a consistent interface and methodology for use of the performance counter hardware found in most major microprocessors. PAPI enables software engineers to see, in near real time, the relation between software performance and processor events. In addition Component PAPI provides access to a collection of components that expose performance measurement opportunites across the hardware and software stack.

papyrus

Homepage:
Spack package:
Versions:
develop, 1.0.0
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Parallel Aggregate Persistent Storage

paradiseo

Homepage:
Spack package:
Versions:
head, dev-safe
Build Dependencies:
cmake, mpi, doxygen, gnuplot, eigen, boost
Link Dependencies:
mpi, gnuplot, boost
Description:
A C++ white-box object-oriented framework dedicated to the reusable design of metaheuristics.

parallel

Homepage:
Spack package:
Versions:
20190222, 20170322, 20170122, 20160422, 20160322
Build Dependencies:
perl
Run Dependencies:
perl
Description:
GNU parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input.

parallel-netcdf

Homepage:
Spack package:
Versions:
develop, master, 1.11.1, 1.11.0, 1.10.0, 1.9.0, 1.8.1, 1.8.0, 1.7.0, 1.6.1
Build Dependencies:
mpi, m4
Link Dependencies:
mpi
Description:
PnetCDF (Parallel netCDF) is a high-performance parallel I/O library for accessing files in format compatibility with Unidata's NetCDF, specifically the formats of CDF-1, 2, and 5.

paraver

Homepage:
Spack package:
Versions:
4.6.3, 4.6.2
Build Dependencies:
boost, wx, wxpropgrid
Link Dependencies:
boost, wx, wxpropgrid
Description:
"A very powerful performance visualization and analysis tool based on traces that can be used to analyse any information that is expressed on its input trace format. Traces for parallel MPI, OpenMP and other programs can be genereated with Extrae.

paraview

Homepage:
Spack package:
Versions:
5.6.0, 5.5.2, 5.5.1, 5.5.0, 5.4.1, 5.4.0, 5.3.0, 5.2.0, 5.1.2, 5.0.1, 4.4.0
Build Dependencies:
cmake, python, py-numpy, py-mpi4py, mpi, qt, mesa, gl, libxt, bzip2, freetype, hdf5, jpeg, libpng, libtiff, libxml2, netcdf, expat, zlib
Link Dependencies:
python, mpi, qt, mesa, gl, libxt, bzip2, freetype, hdf5, jpeg, libpng, libtiff, libxml2, netcdf, expat, zlib
Run Dependencies:
py-numpy, py-mpi4py, py-matplotlib
Description:
ParaView is an open-source, multi-platform data analysis and visualization application.

parmetis

Homepage:
Spack package:
Versions:
4.0.3, 4.0.2
Build Dependencies:
cmake, mpi, metis
Link Dependencies:
mpi, metis
Description:
ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices.

parmgridgen

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
MGRIDGEN is a serial library written entirely in ANSI C that implements (serial) algorithms for obtaining a sequence of successive coarse grids that are well-suited for geometric multigrid methods. ParMGridGen is the parallel version of MGridGen.

parquet

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
cmake, arrow, boost, pkgconfig, thrift
Link Dependencies:
arrow, boost, thrift
Description:
C++ bindings for the Apache Parquet columnar data format.

parsimonator

Homepage:
Spack package:
Versions:
1.0.2
Description:
Parsimonator is a no-frills light-weight implementation for building starting trees under parsimony for RAxML

parsplice

Homepage:
Spack package:
Versions:
develop, 1.1, multisplice
Build Dependencies:
cmake, berkeley-db, nauty, boost, mpi, eigen, lammps
Link Dependencies:
berkeley-db, nauty, boost, mpi, eigen, lammps
Description:
ParSplice code implements the Parallel Trajectory Splicing algorithm

partitionfinder

Homepage:
Spack package:
Versions:
2.1.1
Build Dependencies:
python, py-numpy, py-pandas, py-pytables, py-pyparsing, py-scipy, py-scikit-learn
Run Dependencies:
python, py-numpy, py-pandas, py-pytables, py-pyparsing, py-scipy, py-scikit-learn
Description:
PartitionFinder is free open source software to select best-fit partitioning schemes and models of molecular evolution for phylogenetic analyses.

pasta

Homepage:
Spack package:
Versions:
1.8.3
Build Dependencies:
python, py-dendropy, java
Link Dependencies:
python, py-dendropy, java
Description:
PASTA (Practical Alignment using SATe and Transitivity)

patch

Homepage:
Spack package:
Versions:
2.7.6, 2.7.5
Description:
Patch takes a patch file containing a difference listing produced by the diff program and applies those differences to one or more original files, producing patched versions.

patchelf

Homepage:
Spack package:
Versions:
0.9, 0.8
Description:
PatchELF is a small utility to modify the dynamic linker and RPATH of ELF executables.

pathfinder

Homepage:
Spack package:
Versions:
1.0.0
Description:
Proxy Application. Signature search.

pax-utils

Homepage:
Spack package:
Versions:
1.2.2
Description:
ELF utils that can check files for security relevant properties

pbbam

Homepage:
Spack package:
Versions:
0.18.0
Build Dependencies:
cmake, zlib, boost, htslib, doxygen
Link Dependencies:
zlib, boost, htslib, doxygen
Description:
The pbbam software package provides components to create, query, & edit PacBio BAM files and associated indices. These components include a core C++ library, bindings for additional languages, and command-line utilities.

pbmpi

Homepage:
Spack package:
Versions:
partition
Build Dependencies:
mpi, libfabric
Link Dependencies:
mpi, libfabric
Description:
A Bayesian software for phylogenetic reconstruction using mixture models

pbsuite

Homepage:
Spack package:
Versions:
15.8.24
Run Dependencies:
blasr, python, py-networkx
Description:
PBJelly is a highly automated pipeline that aligns long sequencing reads (such as PacBio RS reads or long 454 reads in fasta format) to high- confidence draft assembles.

pcma

Homepage:
Spack package:
Versions:
2.0
Description:
PCMA is a progressive multiple sequence alignment program that combines two different alignment strategies.

pcre

Homepage:
Spack package:
Versions:
8.42, 8.41, 8.40, 8.39, 8.38
Description:
The PCRE package contains Perl Compatible Regular Expression libraries. These are useful for implementing regular expression pattern matching using the same syntax and semantics as Perl 5.

pcre2

Homepage:
Spack package:
Versions:
10.31, 10.20
Description:
The PCRE2 package contains Perl Compatible Regular Expression libraries. These are useful for implementing regular expression pattern matching using the same syntax and semantics as Perl 5.

pdf2svg

Homepage:
Spack package:
Versions:
0.2.3, 0.2.2
Run Dependencies:
cairo, poppler
Description:
A simple PDF to SVG converter using the Poppler and Cairo libraries.

pdftk

Homepage:
Spack package:
Versions:
2.02
Build Dependencies:
eclipse-gcj-parser
Description:
PDFtk Server is a command-line tool for working with PDFs. It is commonly used for client-side scripting or server-side processing of PDFs.

pdsh

Homepage:
Spack package:
Versions:
2.31
Description:
PDSH: a high performance, parallel remote shell utility

pdt

Homepage:
Spack package:
Versions:
3.25, 3.24, 3.23, 3.22.1, 3.22, 3.21, 3.20, 3.19, 3.18.1
Description:
Program Database Toolkit (PDT) is a framework for analyzing source code written in several programming languages and for making rich program knowledge accessible to developers of static and dynamic analysis tools. PDT implements a standard program representation, the program database (PDB), that can be accessed in a uniform way through a class library supporting common PDB operations.

pegtl

Homepage:
Spack package:
Versions:
develop, 2.1.4, 2.0.0
Build Dependencies:
cmake
Description:
The Parsing Expression Grammar Template Library (PEGTL) is a zero- dependency C++11 header-only library for creating parsers according to a Parsing Expression Grammar (PEG).

pennant

Homepage:
Spack package:
Versions:
0.9, 0.8, 0.7, 0.6, 0.5, 0.4
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
PENNANT is an unstructured mesh physics mini-app designed for advanced architecture research. It contains mesh data structures and a few physics algorithms adapted from the LANL rad-hydro code FLAG, and gives a sample of the typical memory access patterns of FLAG.

percept

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, googletest, opennurbs, boost, yaml-cpp, trilinos
Link Dependencies:
googletest, opennurbs, boost, yaml-cpp, trilinos
Description:
Parallel mesh refinement and adaptivity tools for the finite element method.

perl

Homepage:
Spack package:
Versions:
5.28.0, 5.26.2, 5.25.11, 5.24.1, 5.22.4, 5.22.3, 5.22.2, 5.22.1, 5.22.0, 5.20.3, 5.18.4, 5.16.3
Build Dependencies:
gdbm
Link Dependencies:
gdbm
Description:
Perl 5 is a highly capable, feature-rich programming language with over 27 years of development.

perl-algorithm-diff

Homepage:
Spack package:
Versions:
1.1903
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Compute 'intelligent' differences between two files / lists

perl-app-cmd

Homepage:
Spack package:
Versions:
0.331
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Write command line apps with less suffering

perl-array-utils

Homepage:
Spack package:
Versions:
0.5
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Small utils for array manipulation

perl-b-hooks-endofscope

Homepage:
Spack package:
Versions:
0.21
Build Dependencies:
perl, perl-sub-exporter-progressive
Link Dependencies:
perl
Run Dependencies:
perl, perl-sub-exporter-progressive
Description:
Execute code after a scope finished compilation.

perl-bio-perl

Homepage:
Spack package:
Versions:
1.007002
Build Dependencies:
perl, perl-module-build, perl-uri-escape, perl-io-string, perl-data-stag, perl-test-most
Link Dependencies:
perl
Run Dependencies:
perl, perl-uri-escape, perl-io-string, perl-data-stag, perl-test-most
Description:
Functional access to BioPerl for people who don't know objects

perl-bit-vector

Homepage:
Spack package:
Versions:
7.4
Build Dependencies:
perl, perl-carp-clan
Link Dependencies:
perl
Run Dependencies:
perl, perl-carp-clan
Description:
Efficient bit vector, set of integers and "big int" math library

perl-cairo

Homepage:
Spack package:
Versions:
1.106
Build Dependencies:
perl, cairo, perl-extutils-depends, perl-extutils-pkgconfig
Link Dependencies:
perl, cairo, perl-extutils-depends, perl-extutils-pkgconfig
Run Dependencies:
perl
Description:
Perl interface to the cairo 2d vector graphics library

perl-capture-tiny

Homepage:
Spack package:
Versions:
0.46
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Capture STDOUT and STDERR from Perl, XS or external programs

perl-carp-clan

Homepage:
Spack package:
Versions:
6.06
Build Dependencies:
perl, perl-test-exception, perl-sub-uplevel
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-exception, perl-sub-uplevel
Description:
Report errors from perspective of caller of a "clan" of modules

perl-cgi

Homepage:
Spack package:
Versions:
4.40, 4.39, 4.38, 4.37
Build Dependencies:
perl, perl-html-parser
Link Dependencies:
perl
Run Dependencies:
perl, perl-html-parser
Description:
CGI - Handle Common Gateway Interface requests and responses CGI was included in the Perl distribution from 5.4 to 5.20 but has since been removed.

perl-class-data-inheritable

Homepage:
Spack package:
Versions:
0.08
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
For creating accessor/mutators to class data.

perl-class-inspector

Homepage:
Spack package:
Versions:
1.32
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Get information about a class and its structure

perl-class-load

Homepage:
Spack package:
Versions:
0.24
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A working (require "Class::Name") and more

perl-class-load-xs

Homepage:
Spack package:
Versions:
0.10
Build Dependencies:
perl, perl-class-load
Link Dependencies:
perl
Run Dependencies:
perl, perl-class-load
Description:
This module provides an XS implementation for portions of Class::Load.

perl-clone

Homepage:
Spack package:
Versions:
0.41
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Clone - recursively copy Perl datatypes

perl-clone-choose

Homepage:
Spack package:
Versions:
0.010
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Checks several different modules which provides a clone() function and selects an appropriate one.

perl-compress-raw-bzip2

Homepage:
Spack package:
Versions:
2.081
Build Dependencies:
perl, bzip2, perl-extutils-makemaker
Link Dependencies:
perl, bzip2
Run Dependencies:
perl
Description:
A low-Level Interface to bzip2 compression library.

perl-compress-raw-zlib

Homepage:
Spack package:
Versions:
2.081
Build Dependencies:
perl, zlib, perl-extutils-makemaker
Link Dependencies:
perl, zlib
Run Dependencies:
perl
Description:
A low-Level Interface to zlib compression library.

perl-config-general

Homepage:
Spack package:
Versions:
2.63
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Config::General - Generic Config Module

perl-contextual-return

Homepage:
Spack package:
Versions:
0.004014
Build Dependencies:
perl, perl-want
Link Dependencies:
perl, perl-want
Run Dependencies:
perl
Description:
Create context-sensitive return values

perl-cpan-meta-check

Homepage:
Spack package:
Versions:
0.014
Build Dependencies:
perl, perl-test-deep
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-deep
Description:
This module verifies if requirements described in a CPAN::Meta object are present..

perl-data-dumper

Homepage:
Spack package:
Versions:
2.173
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Stringified perl data structures, suitable for both printing and eval

perl-data-optlist

Homepage:
Spack package:
Versions:
0.110
Build Dependencies:
perl, perl-sub-install
Link Dependencies:
perl
Run Dependencies:
perl, perl-sub-install
Description:
Parse and validate simple name/value option pairs

perl-data-stag

Homepage:
Spack package:
Versions:
0.14
Build Dependencies:
perl, perl-io-string
Link Dependencies:
perl
Run Dependencies:
perl, perl-io-string
Description:
Structured Tags datastructures

perl-dbd-mysql

Homepage:
Spack package:
Versions:
4.043
Build Dependencies:
perl, perl-test-deep, perl-dbi, mariadb
Link Dependencies:
perl, mariadb
Run Dependencies:
perl, perl-test-deep, perl-dbi
Description:
MySQL driver for the Perl5 Database Interface (DBI)

perl-dbd-sqlite

Homepage:
Spack package:
Versions:
1.59_01, 1.58, 1.57_01, 1.56
Build Dependencies:
perl, perl-dbi
Link Dependencies:
perl
Run Dependencies:
perl, perl-dbi
Description:
DBD::SQLite - Self-contained RDBMS in a DBI Driver

perl-dbfile

Homepage:
Spack package:
Versions:
1.840
Build Dependencies:
perl, perl-extutils-makemaker
Link Dependencies:
perl
Run Dependencies:
perl
Description:
DB_File is a module which allows Perl programs to make use of the facilities provided by Berkeley DB version 1.x (if you have a newer version of DB, see "Using DB_File with Berkeley DB version 2 or greater"). It is assumed that you have a copy of the Berkeley DB manual pages at hand when reading this documentation. The interface defined here mirrors the Berkeley DB interface closely.

perl-dbi

Homepage:
Spack package:
Versions:
1.636
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
The DBI is the standard database interface module for Perl. It defines a set of methods, variables and conventions that provide a consistent database interface independent of the actual database being used.

perl-devel-cycle

Homepage:
Spack package:
Versions:
1.12
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Find memory cycles in objects

perl-devel-globaldestruction

Homepage:
Spack package:
Versions:
0.14
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Makes Perl's global destruction less tricky to deal with

perl-devel-overloadinfo

Homepage:
Spack package:
Versions:
0.005, 0.004
Build Dependencies:
perl, perl-mro-compat
Link Dependencies:
perl
Run Dependencies:
perl, perl-mro-compat
Description:
Returns information about overloaded operators for a given class

perl-devel-stacktrace

Homepage:
Spack package:
Versions:
2.02
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
An object representing a stack trace.

perl-digest-md5

Homepage:
Spack package:
Versions:
2.55
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl interface to the MD5 Algorithm

perl-dist-checkconflicts

Homepage:
Spack package:
Versions:
0.11
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Declare version conflicts for your dist

perl-encode-locale

Homepage:
Spack package:
Versions:
1.05
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Determine the locale encoding

perl-eval-closure

Homepage:
Spack package:
Versions:
0.14
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Safely and cleanly create closures via string eval

perl-exception-class

Homepage:
Spack package:
Versions:
1.43
Build Dependencies:
perl, perl-devel-stacktrace, perl-class-data-inheritable
Link Dependencies:
perl
Run Dependencies:
perl, perl-devel-stacktrace, perl-class-data-inheritable
Description:
A module that allows you to declare real exception classes in Perl

perl-exporter-tiny

Homepage:
Spack package:
Versions:
1.000000
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
An exporter with the features of Sub::Exporter but only core dependencies

perl-extutils-config

Homepage:
Spack package:
Versions:
0.008
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
ExtUtils::Config - A wrapper for perl's configuration

perl-extutils-depends

Homepage:
Spack package:
Versions:
0.405
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Easily build XS extensions that depend on XS extensions

perl-extutils-helpers

Homepage:
Spack package:
Versions:
0.026
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
ExtUtils::Helpers - Various portability utilities for module builders

perl-extutils-installpaths

Homepage:
Spack package:
Versions:
0.012
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
ExtUtils::InstallPaths - Build.PL install path logic made easy

perl-extutils-makemaker

Homepage:
Spack package:
Versions:
7.24
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
ExtUtils::MakeMaker - Create a module Makefile. This utility is designed to write a Makefile for an extension module from a Makefile.PL. It is based on the Makefile.SH model provided by Andy Dougherty and the perl5-porters.

perl-extutils-pkgconfig

Homepage:
Spack package:
Versions:
1.16
Build Dependencies:
perl, pkgconfig
Link Dependencies:
perl
Run Dependencies:
perl, pkgconfig
Description:
simplistic interface to pkg-config

perl-file-copy-recursive

Homepage:
Spack package:
Versions:
0.40, 0.38
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl extension for recursively copying files and directories

perl-file-homedir

Homepage:
Spack package:
Versions:
1.004
Build Dependencies:
perl, perl-file-which
Link Dependencies:
perl
Run Dependencies:
perl, perl-file-which
Description:
Find your home and other directories on any platform

perl-file-listing

Homepage:
Spack package:
Versions:
6.04
Build Dependencies:
perl, perl-http-date
Link Dependencies:
perl
Run Dependencies:
perl, perl-http-date
Description:
Parse directory listing

perl-file-pushd

Homepage:
Spack package:
Versions:
1.014
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Change directory temporarily for a limited scope

perl-file-sharedir-install

Homepage:
Spack package:
Versions:
0.11
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Install shared files

perl-file-slurp-tiny

Homepage:
Spack package:
Versions:
0.004
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A simple, sane and efficient file slurper

perl-file-slurper

Homepage:
Spack package:
Versions:
0.011
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A simple, sane and efficient module to slurp a file

perl-file-which

Homepage:
Spack package:
Versions:
1.22
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl implementation of the which utility as an API

perl-font-ttf

Homepage:
Spack package:
Versions:
1.06
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl module for TrueType Font hacking

perl-gd

Homepage:
Spack package:
Versions:
2.53
Build Dependencies:
perl, perl-module-build, perl-extutils-makemaker, perl-extutils-pkgconfig, libgd
Link Dependencies:
perl, libgd
Run Dependencies:
perl, perl-extutils-makemaker, perl-extutils-pkgconfig
Description:
Interface to Gd Graphics Library

perl-gd-graph

Homepage:
Spack package:
Versions:
1.4308
Build Dependencies:
perl, perl-capture-tiny, perl-test-exception, perl-gd-text, perl-gd
Link Dependencies:
perl
Run Dependencies:
perl, perl-capture-tiny, perl-test-exception, perl-gd-text, perl-gd
Description:
Graph Plotting Module for Perl 5

perl-gd-text

Homepage:
Spack package:
Versions:
0.86
Build Dependencies:
perl, perl-gd
Link Dependencies:
perl
Run Dependencies:
perl, perl-gd
Description:
Text utilities for use with GD

perl-gdgraph-histogram

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
GD::Graph::histogram extends the GD::Graph module to create histograms. The module allow creation of count or percentage histograms.

perl-graph

Homepage:
Spack package:
Versions:
0.9704
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Graph data structures and algorithms

perl-graph-readwrite

Homepage:
Spack package:
Versions:
2.09
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Write out directed graph in Dot format

perl-hash-merge

Homepage:
Spack package:
Versions:
0.300
Build Dependencies:
perl, perl-scalar-list-utils, perl-clone-choose
Link Dependencies:
perl
Run Dependencies:
perl, perl-scalar-list-utils, perl-clone-choose
Description:
Hash::Merge merges two arbitrarily deep hashes into a single hash.

perl-html-parser

Homepage:
Spack package:
Versions:
3.72
Build Dependencies:
perl, perl-html-tagset
Link Dependencies:
perl
Run Dependencies:
perl, perl-html-tagset
Description:
HTML parser class

perl-html-tagset

Homepage:
Spack package:
Versions:
3.20
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Data tables useful in parsing HTML

perl-http-cookies

Homepage:
Spack package:
Versions:
6.04
Build Dependencies:
perl, perl-uri, perl-http-message
Link Dependencies:
perl
Run Dependencies:
perl, perl-uri, perl-http-message
Description:
HTTP cookie jars

perl-http-daemon

Homepage:
Spack package:
Versions:
6.01
Build Dependencies:
perl, perl-lwp-mediatypes, perl-http-message
Link Dependencies:
perl
Run Dependencies:
perl, perl-lwp-mediatypes, perl-http-message
Description:
A simple http server class

perl-http-date

Homepage:
Spack package:
Versions:
6.02
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Date conversion routines

perl-http-message

Homepage:
Spack package:
Versions:
6.13
Build Dependencies:
perl, perl-lwp-mediatypes, perl-encode-locale, perl-io-html, perl-try-tiny, perl-uri, perl-http-date
Link Dependencies:
perl
Run Dependencies:
perl, perl-lwp-mediatypes, perl-encode-locale, perl-io-html, perl-try-tiny, perl-uri, perl-http-date
Description:
HTTP style message (base class)

perl-http-negotiate

Homepage:
Spack package:
Versions:
6.01
Build Dependencies:
perl, perl-http-message
Link Dependencies:
perl
Run Dependencies:
perl, perl-http-message
Description:
Choose a variant to serve

perl-inline

Homepage:
Spack package:
Versions:
0.80
Build Dependencies:
perl, perl-test-warn
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-warn
Description:
Write Perl Subroutines in Other Programming Languages

perl-inline-c

Homepage:
Spack package:
Versions:
0.78
Build Dependencies:
perl, perl-yaml-libyaml, perl-parse-recdescent, perl-inline, perl-pegex, perl-file-copy-recursive
Link Dependencies:
perl
Run Dependencies:
perl, perl-yaml-libyaml, perl-parse-recdescent, perl-inline, perl-pegex, perl-file-copy-recursive
Description:
C Language Support for Inline

perl-intervaltree

Homepage:
Spack package:
Versions:
0.10
Build Dependencies:
perl, perl-extutils-makemaker
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Set::IntervalTree uses Interval Trees to store and efficiently look up ranges using a range-based lookup.

perl-io-compress

Homepage:
Spack package:
Versions:
2.081
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl, perl-compress-raw-zlib, perl-compress-raw-bzip2
Description:
A perl library for uncompressing gzip, zip, bzip2 or lzop file/buffer.

perl-io-html

Homepage:
Spack package:
Versions:
1.001
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Open an HTML file with automatic charset detection.

perl-io-sessiondata

Homepage:
Spack package:
Versions:
1.03
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A wrapper around a single IO::Socket object

perl-io-socket-ssl

Homepage:
Spack package:
Versions:
2.052
Build Dependencies:
perl, perl-net-ssleay
Link Dependencies:
perl
Run Dependencies:
perl, perl-net-ssleay
Description:
SSL sockets with IO::Socket interface

perl-io-string

Homepage:
Spack package:
Versions:
1.08
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Emulate file interface for in-core strings

perl-json

Homepage:
Spack package:
Versions:
2.97001
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
JSON (JavaScript Object Notation) encoder/decoder

perl-libwww-perl

Homepage:
Spack package:
Versions:
6.33
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
The libwww-perl collection is a set of Perl modules which provides a simple and consistent application programming interface to the World- Wide Web. The main focus of the library is to provide classes and functions that allow you to write WWW clients.

perl-list-moreutils

Homepage:
Spack package:
Versions:
0.428
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Provide the stuff missing in List::Util

perl-log-log4perl

Homepage:
Spack package:
Versions:
146
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Log4j implementation for Perl

perl-logger-simple

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
perl, perl-object-insideout
Link Dependencies:
perl
Run Dependencies:
perl, perl-object-insideout
Description:
Implementation of the Simran-Log-Log and Simran-Error-Error modules

perl-lwp-mediatypes

Homepage:
Spack package:
Versions:
6.02
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Guess media type for a file or a URL

perl-lwp-protocol-https

Homepage:
Spack package:
Versions:
6.04
Build Dependencies:
perl, perl-test-requiresinternet, perl-io-socket-ssl, perl-net-http, perl-mozilla-ca, perl-lwp
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-requiresinternet, perl-io-socket-ssl, perl-net-http, perl-mozilla-ca, perl-lwp
Description:
Provide https support for LWP::UserAgent

perl-math-bezier

Homepage:
Spack package:
Versions:
0.01
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Math::Bezier - solution of Bezier Curves

perl-math-cdf

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Generate probabilities and quantiles from several statistical probability functions

perl-math-cephes

Homepage:
Spack package:
Versions:
0.5305
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
This module provides an interface to over 150 functions of the cephes math library of Stephen Moshier.

perl-math-matrixreal

Homepage:
Spack package:
Versions:
2.13
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Implements the data type "matrix of real numbers" (and consequently also "vector of real numbers").

perl-math-round

Homepage:
Spack package:
Versions:
0.07
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Math::Round - Perl extension for rounding numbers

perl-math-vecstat

Homepage:
Spack package:
Versions:
0.08
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Math::VecStat - Some basic numeric stats on vectors

perl-module-build

Homepage:
Spack package:
Versions:
0.4224, 0.4220
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Module::Build is a system for building, testing, and installing Perl modules. It is meant to be an alternative to ExtUtils::MakeMaker. Developers may alter the behavior of the module through subclassing in a much more straightforward way than with MakeMaker. It also does not require a make on your system - most of the Module::Build code is pure- perl and written in a very cross-platform way.

perl-module-build-tiny

Homepage:
Spack package:
Versions:
0.039
Build Dependencies:
perl, perl-module-build, perl-extutils-config, perl-extutils-helpers, perl-extutils-installpaths
Link Dependencies:
perl
Run Dependencies:
perl, perl-extutils-config, perl-extutils-helpers, perl-extutils-installpaths
Description:
Module::Build::Tiny - A tiny replacement for Module::Build

perl-module-implementation

Homepage:
Spack package:
Versions:
0.09
Build Dependencies:
perl, perl-module-runtime, perl-test-fatal, perl-test-requires, perl-try-tiny
Link Dependencies:
perl
Run Dependencies:
perl, perl-module-runtime, perl-test-fatal, perl-test-requires, perl-try-tiny
Description:
Loads one of several alternate underlying implementations for a module

perl-module-runtime

Homepage:
Spack package:
Versions:
0.016
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Runtime module handling

perl-module-runtime-conflicts

Homepage:
Spack package:
Versions:
0.003
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Provide information on conflicts for Module::Runtime

perl-mozilla-ca

Homepage:
Spack package:
Versions:
20160104
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Mozilla's CA cert bundle in PEM format

perl-mro-compat

Homepage:
Spack package:
Versions:
0.13
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Provides several utilities for dealing with method resolution order.

perl-namespace-clean

Homepage:
Spack package:
Versions:
0.27
Build Dependencies:
perl, perl-b-hooks-endofscope
Link Dependencies:
perl
Run Dependencies:
perl, perl-b-hooks-endofscope
Description:
Keep imports and functions out of your namespace.

perl-net-http

Homepage:
Spack package:
Versions:
6.17
Build Dependencies:
perl, perl-uri
Link Dependencies:
perl
Run Dependencies:
perl, perl-uri
Description:
Low-level HTTP connection (client)

perl-net-scp-expect

Homepage:
Spack package:
Versions:
0.16
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Wrapper for scp that allows passwords via Expect.

perl-net-ssleay

Homepage:
Spack package:
Versions:
1.85, 1.82
Build Dependencies:
perl, openssl
Link Dependencies:
perl, openssl
Run Dependencies:
perl
Description:
Perl extension for using OpenSSL

perl-number-format

Homepage:
Spack package:
Versions:
1.75
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Number::Format - Perl extension for formatting numbers

perl-object-insideout

Homepage:
Spack package:
Versions:
4.05
Build Dependencies:
perl, perl-module-build, perl-exception-class
Link Dependencies:
perl
Run Dependencies:
perl, perl-exception-class
Description:
Implements inside-out objects as anonymous scalar references that are blessed into a class with the scalar containing the ID for the object (usually a sequence number).

perl-package-deprecationmanager

Homepage:
Spack package:
Versions:
0.17
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Manage deprecation warnings for your distribution

perl-package-stash

Homepage:
Spack package:
Versions:
0.37
Build Dependencies:
perl, perl-test-requires, perl-test-fatal, perl-module-implementation, perl-dist-checkconflicts
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-requires, perl-test-fatal, perl-module-implementation, perl-dist-checkconflicts
Description:
Routines for manipulating stashes

perl-package-stash-xs

Homepage:
Spack package:
Versions:
0.28
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Faster and more correct implementation of the Package::Stash API

perl-padwalker

Homepage:
Spack package:
Versions:
2.2
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
play with other peoples' lexical variables

perl-parallel-forkmanager

Homepage:
Spack package:
Versions:
1.19
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A simple parallel processing fork manager

perl-params-util

Homepage:
Spack package:
Versions:
1.07
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Simple, compact and correct param-checking functions

perl-params-validate

Homepage:
Spack package:
Versions:
1.29
Build Dependencies:
perl, perl-module-build, perl-module-implementation
Link Dependencies:
perl
Run Dependencies:
perl, perl-module-implementation
Description:
Params::Validate - Validate method/function parameters

perl-parse-recdescent

Homepage:
Spack package:
Versions:
1.967015
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Generate Recursive-Descent Parsers

perl-pdf-api2

Homepage:
Spack package:
Versions:
2.033
Build Dependencies:
perl, perl-test-exception, perl-test-memory-cycle, perl-font-ttf
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-exception, perl-test-memory-cycle, perl-font-ttf
Description:
Facilitates the creation and modification of PDF files

perl-pegex

Homepage:
Spack package:
Versions:
0.64
Build Dependencies:
perl, perl-file-sharedir-install, perl-yaml-libyaml
Link Dependencies:
perl
Run Dependencies:
perl, perl-file-sharedir-install, perl-yaml-libyaml
Description:
Acmeist PEG Parser Framework

perl-perl4-corelibs

Homepage:
Spack package:
Versions:
0.004, 0.003, 0.002, 0.001, 0.000
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl4::CoreLibs - libraries historically supplied with Perl 4

perl-perl6-slurp

Homepage:
Spack package:
Versions:
0.051005
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl6::Slurp - Implements the Perl 6 'slurp' built-in

perl-perlio-gzip

Homepage:
Spack package:
Versions:
0.20, 0.19
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl extension to provide a PerlIO layer to gzip/gunzip

perl-perlio-utf8-strict

Homepage:
Spack package:
Versions:
0.002
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
This module provides a fast and correct UTF-8 PerlIO layer.

perl-readonly

Homepage:
Spack package:
Versions:
2.05
Build Dependencies:
perl, perl-module-build-tiny
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Readonly - Facility for creating read-only scalars, arrays, hashes

perl-regexp-common

Homepage:
Spack package:
Versions:
2017060201
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Regexp::Common - Provide commonly requested regular expressions

perl-scalar-list-utils

Homepage:
Spack package:
Versions:
1.50
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Scalar::Util - A selection of general-utility scalar subroutines

perl-scalar-util-numeric

Homepage:
Spack package:
Versions:
0.40
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
This module exports a number of wrappers around perl's builtin grok_number function, which returns the numeric type of its argument, or 0 if it isn't numeric.

perl-set-intspan

Homepage:
Spack package:
Versions:
1.19
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Set::IntSpan - Manages sets of integers

perl-star-fusion

Homepage:
Spack package:
Versions:
master
Build Dependencies:
perl, star, perl-intervaltree, perl-dbi, perl-dbfile, perl-uri-escape
Link Dependencies:
perl
Run Dependencies:
perl, star, perl-intervaltree, perl-dbi, perl-dbfile, perl-uri-escape
Description:
STAR-Fusion is a component of the Trinity Cancer Transcriptome Analysis Toolkit (CTAT). STAR-Fusion uses the STAR aligner to identify candidate fusion transcripts supported by Illumina reads. STAR-Fusion further processes the output generated by the STAR aligner to map junction reads and spanning reads to a reference annotation set.

perl-statistics-basic

Homepage:
Spack package:
Versions:
1.6611
Build Dependencies:
perl, perl-number-format, perl-scalar-list-utils
Link Dependencies:
perl
Run Dependencies:
perl, perl-number-format, perl-scalar-list-utils
Description:
Statistics::Basic - A collection of very basic statistics modules

perl-statistics-descriptive

Homepage:
Spack package:
Versions:
3.0612
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Module of basic descriptive statistical functions.

perl-statistics-pca

Homepage:
Spack package:
Versions:
0.0.1
Build Dependencies:
perl, perl-module-build, perl-contextual-return, perl-text-simpletable, perl-math-matrixreal
Link Dependencies:
perl
Run Dependencies:
perl, perl-contextual-return, perl-text-simpletable, perl-math-matrixreal
Description:
A simple Perl implementation of Principal Component Analysis.

perl-sub-exporter

Homepage:
Spack package:
Versions:
0.987
Build Dependencies:
perl, perl-params-util, perl-data-optlist
Link Dependencies:
perl
Run Dependencies:
perl, perl-params-util, perl-data-optlist
Description:
A sophisticated exporter for custom-built routines

perl-sub-exporter-progressive

Homepage:
Spack package:
Versions:
0.001013
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Progressive Sub::Exporter

perl-sub-identify

Homepage:
Spack package:
Versions:
0.14
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Retrieve names of code references

perl-sub-install

Homepage:
Spack package:
Versions:
0.928
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Install subroutines into packages easily

perl-sub-name

Homepage:
Spack package:
Versions:
0.21
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Name or rename a sub

perl-sub-uplevel

Homepage:
Spack package:
Versions:
0.2800
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
apparently run a function in a higher stack frame

perl-svg

Homepage:
Spack package:
Versions:
2.78
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl extension for generating Scalable Vector Graphics (SVG) documents.

perl-swissknife

Homepage:
Spack package:
Versions:
1.75
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
An object-oriented Perl library to handle Swiss-Prot entries

perl-task-weaken

Homepage:
Spack package:
Versions:
1.04
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Ensure that a platform has weaken support

perl-term-readkey

Homepage:
Spack package:
Versions:
2.37
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Term::ReadKey is a compiled perl module dedicated to providing simple control over terminal driver modes (cbreak, raw, cooked, etc.,) support for non-blocking reads, if the architecture allows, and some generalized handy functions for working with terminals. One of the main goals is to have the functions as portable as possible, so you can just plug in "use Term::ReadKey" on any architecture and have a good likelihood of it working.

perl-test-deep

Homepage:
Spack package:
Versions:
1.127
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Extremely flexible deep comparison

perl-test-differences

Homepage:
Spack package:
Versions:
0.64
Build Dependencies:
perl, perl-module-build, perl-capture-tiny, perl-text-diff
Link Dependencies:
perl
Run Dependencies:
perl, perl-capture-tiny, perl-text-diff
Description:
Test strings and data structures and show differences if not ok

perl-test-exception

Homepage:
Spack package:
Versions:
0.43
Build Dependencies:
perl, perl-sub-uplevel
Link Dependencies:
perl
Run Dependencies:
perl, perl-sub-uplevel
Description:
Test exception-based code

perl-test-fatal

Homepage:
Spack package:
Versions:
0.014
Build Dependencies:
perl, perl-try-tiny
Link Dependencies:
perl
Run Dependencies:
perl, perl-try-tiny
Description:
Incredibly simple helpers for testing code with exceptions

perl-test-memory-cycle

Homepage:
Spack package:
Versions:
1.06
Build Dependencies:
perl, perl-padwalker, perl-devel-cycle
Link Dependencies:
perl
Run Dependencies:
perl, perl-padwalker, perl-devel-cycle
Description:
Check for memory leaks and circular memory references

perl-test-most

Homepage:
Spack package:
Versions:
0.35
Build Dependencies:
perl, perl-exception-class, perl-test-differences, perl-test-exception, perl-test-warn, perl-test-deep
Link Dependencies:
perl
Run Dependencies:
perl, perl-exception-class, perl-test-differences, perl-test-exception, perl-test-warn, perl-test-deep
Description:
Most commonly needed test functions and features.

perl-test-needs

Homepage:
Spack package:
Versions:
0.002005
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Skip tests when modules not available.

perl-test-requires

Homepage:
Spack package:
Versions:
0.10
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Checks to see if the module can be loaded.

perl-test-requiresinternet

Homepage:
Spack package:
Versions:
0.05
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Easily test network connectivity

perl-test-warn

Homepage:
Spack package:
Versions:
0.30
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl extension to test methods for warnings

perl-test-warnings

Homepage:
Spack package:
Versions:
0.026
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Test for warnings and the lack of them

perl-text-csv

Homepage:
Spack package:
Versions:
1.95
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Comma-separated values manipulator (using XS or PurePerl)

perl-text-diff

Homepage:
Spack package:
Versions:
1.45
Build Dependencies:
perl, perl-algorithm-diff
Link Dependencies:
perl
Run Dependencies:
perl, perl-algorithm-diff
Description:
Provides a basic set of services akin to the GNU diff utility.

perl-text-format

Homepage:
Spack package:
Versions:
0.61
Build Dependencies:
perl, perl-module-build
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Text::Format - Various subroutines to format text

perl-text-simpletable

Homepage:
Spack package:
Versions:
2.04
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Simple Eyecandy ASCII Tables

perl-text-soundex

Homepage:
Spack package:
Versions:
3.05
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Soundex is a phonetic algorithm for indexing names by sound, as pronounced in English. The goal is for names with the same pronunciation to be encoded to the same representation so that they can be matched despite minor differences in spelling

perl-text-unidecode

Homepage:
Spack package:
Versions:
1.30
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
plain ASCII transliterations of Unicode text

perl-time-hires

Homepage:
Spack package:
Versions:
1.9746
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
High resolution alarm, sleep, gettimeofday, interval timers

perl-time-piece

Homepage:
Spack package:
Versions:
1.3203
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Object Oriented time objects

perl-try-tiny

Homepage:
Spack package:
Versions:
0.28
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Minimal try/catch with proper preservation of $@

perl-uri

Homepage:
Spack package:
Versions:
1.72
Build Dependencies:
perl, perl-test-needs
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-needs
Description:
Uniform Resource Identifiers (absolute and relative)

perl-uri-escape

Homepage:
Spack package:
Versions:
1.71
Build Dependencies:
perl, perl-extutils-makemaker
Link Dependencies:
perl
Run Dependencies:
perl
Description:
This module provides functions to percent-encode and percent-decode URI strings as defined by RFC 3986. Percent-encoding URI's is informally called "URI escaping". This is the terminology used by this module, which predates the formalization of the terms by the RFC by several years.

perl-version

Homepage:
Spack package:
Versions:
1.013_03
Build Dependencies:
perl, perl-file-slurp-tiny
Link Dependencies:
perl
Run Dependencies:
perl, perl-file-slurp-tiny
Description:
Parse and manipulate Perl version strings

perl-want

Homepage:
Spack package:
Versions:
0.29
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
A generalisation of wantarray.

perl-www-robotrules

Homepage:
Spack package:
Versions:
6.02
Build Dependencies:
perl, perl-uri
Link Dependencies:
perl
Run Dependencies:
perl, perl-uri
Description:
Database of robots.txt-derived permissions

perl-xml-parser

Homepage:
Spack package:
Versions:
2.44
Build Dependencies:
perl, expat
Link Dependencies:
perl, expat
Run Dependencies:
perl
Description:
XML::Parser - A perl module for parsing XML documents

perl-xml-parser-lite

Homepage:
Spack package:
Versions:
0.721
Build Dependencies:
perl, perl-test-requires
Link Dependencies:
perl
Run Dependencies:
perl, perl-test-requires
Description:
Lightweight pure-perl XML Parser (based on regexps)

perl-xml-simple

Homepage:
Spack package:
Versions:
2.24
Build Dependencies:
perl, perl-xml-parser
Link Dependencies:
perl
Run Dependencies:
perl, perl-xml-parser
Description:
An API for simple XML files

perl-yaml

Homepage:
Spack package:
Versions:
1.27
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
This module has been released to CPAN as YAML::Old, and soon YAML.pm will be changed to just be a frontend interface module for all the various Perl YAML implementation modules, including YAML::Old

perl-yaml-libyaml

Homepage:
Spack package:
Versions:
0.67
Build Dependencies:
perl
Link Dependencies:
perl
Run Dependencies:
perl
Description:
Perl YAML Serialization using XS and libyaml

petsc

Homepage:
Spack package:
Versions:
develop, 3.11.1, 3.11.0, 3.10.5, 3.10.4, 3.10.3, 3.10.2, 3.10.1, 3.10.0, 3.9.4, 3.9.3, 3.9.2, 3.9.1, 3.9.0, 3.8.4, 3.8.3, 3.8.2, 3.8.1, 3.8.0, 3.7.7, 3.7.6, 3.7.5, 3.7.4, 3.7.2, 3.6.4, 3.6.3, 3.5.3, 3.5.2, 3.5.1, 3.4.4, xsdk-0.2.0
Build Dependencies:
sowing, blas, lapack, mpi, python, metis, hdf5, zlib, parmetis, hypre, superlu-dist, mumps, scalapack, trilinos, fftw, suite-sparse, libx11
Link Dependencies:
sowing, blas, lapack, mpi, metis, hdf5, zlib, parmetis, hypre, superlu-dist, mumps, scalapack, trilinos, fftw, suite-sparse, libx11
Description:
PETSc is a suite of data structures and routines for the scalable (parallel) solution of scientific applications modeled by partial differential equations.

pexsi

Homepage:
Spack package:
Versions:
0.10.2, 0.9.2, 0.9.0
Build Dependencies:
parmetis, superlu-dist
Link Dependencies:
parmetis, superlu-dist
Description:
The PEXSI library is written in C++, and uses message passing interface (MPI) to parallelize the computation on distributed memory computing systems and achieve scalability on more than 10,000 processors. The Pole EXpansion and Selected Inversion (PEXSI) method is a fast method for electronic structure calculation based on Kohn-Sham density functional theory. It efficiently evaluates certain selected elements of matrix functions, e.g., the Fermi-Dirac function of the KS Hamiltonian, which yields a density matrix. It can be used as an alternative to diagonalization methods for obtaining the density, energy and forces in electronic structure calculations.

pfft

Homepage:
Spack package:
Versions:
1.0.8-alpha
Build Dependencies:
fftw, mpi
Link Dependencies:
fftw, mpi
Description:
PFFT is a software library for computing massively parallel, fast Fourier transformations on distributed memory architectures. PFFT can be understood as a generalization of FFTW-MPI to multidimensional data decomposition.

pflotran

Homepage:
Spack package:
Versions:
develop, xsdk-0.4.0, xsdk-0.3.0, xsdk-0.2.0
Build Dependencies:
mpi, hdf5, petsc
Link Dependencies:
mpi, hdf5, petsc
Description:
PFLOTRAN is an open source, state-of-the-art massively parallel subsurface flow and reactive transport code.

pfunit

Homepage:
Spack package:
Versions:
3.2.9
Build Dependencies:
cmake, python, mpi
Link Dependencies:
mpi
Run Dependencies:
python
Description:
pFUnit is a unit testing framework enabling JUnit-like testing of serial and MPI-parallel software written in Fortran.

pgdspider

Homepage:
Spack package:
Versions:
2.1.1.2
Build Dependencies:
java, bcftools, bwa, samtools
Link Dependencies:
bcftools, bwa, samtools
Run Dependencies:
java
Description:
"PGDSpider is a powerful automated data conversion tool for population genetic and genomics programs

pgi

Homepage:
Spack package:
Versions:
19.4, 19.1, 18.10, 18.4, 17.10, 17.4, 17.3, 16.10, 16.5, 16.3, 15.7
Description:
PGI optimizing multi-core x64 compilers for Linux, MacOS & Windows with support for debugging and profiling of local MPI processes. Note: The PGI compilers are licensed software. You will need to create an account on the PGI homepage and download PGI yourself. Spack will search your current directory for the download tarball. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

pgmath

Homepage:
Spack package:
Versions:
develop, 20180921, 20180612
Build Dependencies:
cmake, awk
Description:
Flang's math library

phantompeakqualtools

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
r, awk, samtools, r-phantompeakqualtools
Link Dependencies:
r, awk, samtools
Run Dependencies:
r, r-phantompeakqualtools
Description:
This package computes informative enrichment and quality measures for ChIP-seq/DNase-seq/FAIRE-seq/MNase-seq data.

phast

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
clapack
Link Dependencies:
clapack
Description:
PHAST is a freely available software package for comparative and evolutionary genomics.

phasta

Homepage:
Spack package:
Versions:
develop, 0.0.1
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
SCOREC RPI's Parallel Hierarchic Adaptive Stabilized Transient Analysis (PHASTA) of compressible and incompressible Navier Stokes equations.

phist

Homepage:
Spack package:
Versions:
develop, master, 1.7.5, 1.7.4, 1.7.3, 1.7.2, 1.6.1, 1.6.0, 1.4.3
Build Dependencies:
cmake, blas, lapack, python, mpi, trilinos, petsc, eigen, ghost, parmetis
Link Dependencies:
blas, lapack, mpi, trilinos, petsc, eigen, ghost, parmetis
Description:
The Pipelined, Hybrid-parallel Iterative Solver Toolkit provides implementations of and interfaces to block iterative solvers for sparse linear and eigenvalue problems. In contrast to other libraries we support multiple backends (e.g. Trilinos, PETSc and our own optimized kernels), and interfaces in multiple languages such as C, C++, Fortran 2003 and Python. PHIST has a clear focus on portability and hardware performance: in particular support row-major storage of block vectors and using GPUs (via the ghost library or Trilinos/Tpetra).

phrap-crossmatch-swat

Homepage:
Spack package:
Versions:
1.090518
Description:
phrap is a program for assembling shotgun DNA sequence data. cross_match is a general purpose utility for comparing any two DNA sequence sets using a 'banded' version of swat. swat is a program for searching one or more DNA or protein query sequences, or a query profile, against a sequence database

phred

Homepage:
Spack package:
Versions:
071220
Description:
The phred software reads DNA sequencing trace files, calls bases, and assigns a quality value to each called base.

phylip

Homepage:
Spack package:
Versions:
3.697, 3.696
Description:
PHYLIP (the PHYLogeny Inference Package) is a package of programs for inferring phylogenies (evolutionary trees).

phyluce

Homepage:
Spack package:
Versions:
1.6.7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-biopython, abyss, bcftools, bwa, gatk, gblocks, lastz, mafft, muscle, picard, raxml, samtools, seqtk, spades, trimal, trinity, velvet
Description:
phyluce (phy-loo-chee) is a software package that was initially developed for analyzing data collected from ultraconserved elements in organismal genomes

picard

Homepage:
Spack package:
Versions:
2.19.0, 2.18.3, 2.18.0, 2.17.0, 2.16.0, 2.15.0, 2.13.2, 2.10.0, 2.9.4, 2.9.3, 2.9.2, 2.9.0, 2.8.3, 2.6.0, 1.140
Run Dependencies:
java
Description:
Picard is a set of command line tools for manipulating high-throughput sequencing (HTS) data and formats such as SAM/BAM/CRAM and VCF.

picsar

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
mpi, fftw
Link Dependencies:
mpi, fftw
Description:
PICSAR is a high performance library of optimized versions of the key functionalities of the PIC loop.

picsarlite

Homepage:
Spack package:
Versions:
develop, 0.1
Build Dependencies:
mpi, fftw
Link Dependencies:
mpi, fftw
Description:
PICSARlite is a self-contained proxy that adequately portrays the computational loads and dataflow of more complex PIC codes.

pidx

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
PIDX Parallel I/O Library. PIDX is an efficient parallel I/O library that reads and writes multiresolution IDX data files.

pigz

Homepage:
Spack package:
Versions:
2.4, 2.3.4
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
A parallel implementation of gzip for modern multi-processor, multi-core machines.

pilon

Homepage:
Spack package:
Versions:
1.22, 1.13
Run Dependencies:
java
Description:
Pilon is an automated genome assembly improvement and variant detection tool.

pindel

Homepage:
Spack package:
Versions:
0.2.5b8, 0.2.5b6, 0.2.5b5, 0.2.5b4, 0.2.5b1, 0.2.5a7, 0.2.5
Build Dependencies:
htslib
Link Dependencies:
htslib
Description:
Pindel can detect breakpoints from next-gen sequence data.

piranha

Homepage:
Spack package:
Versions:
develop, 0.5
Build Dependencies:
cmake, python, boost, bzip2, gmp, mpfr
Link Dependencies:
python, boost, bzip2, gmp, mpfr
Description:
Piranha is a computer-algebra library for the symbolic manipulation of sparse multivariate polynomials and other closely-related symbolic objects (such as Poisson series).

pism

Homepage:
Spack package:
Versions:
develop, 0.7.3, 0.7.x, icebin
Build Dependencies:
cmake, fftw, gsl, mpi, netcdf, petsc, udunits2, proj, everytrace, python, py-matplotlib, py-numpy
Link Dependencies:
fftw, gsl, mpi, netcdf, petsc, udunits2, proj, everytrace, python, py-matplotlib, py-numpy
Description:
Parallel Ice Sheet Model

pixman

Homepage:
Spack package:
Versions:
0.38.0, 0.34.0, 0.32.6
Build Dependencies:
pkgconfig, libpng
Link Dependencies:
libpng
Description:
The Pixman package contains a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.

pkg-config

Homepage:
Spack package:
Versions:
0.29.2, 0.29.1, 0.28
Description:
pkg-config is a helper tool used when compiling applications and libraries

pkgconf

Homepage:
Spack package:
Versions:
1.6.0, 1.5.4, 1.4.2, 1.4.0, 1.3.10, 1.3.8
Description:
pkgconf is a program which helps to configure compiler and linker flags for development frameworks. It is similar to pkg-config from freedesktop.org, providing additional functionality while also maintaining compatibility.

planck-likelihood

Homepage:
Spack package:
Versions:
2.00
Build Dependencies:
blas, cfitsio, lapack
Link Dependencies:
blas, cfitsio, lapack
Description:
2015 Cosmic Microwave Background (CMB) spectra and likelihood code

plasma

Homepage:
Spack package:
Versions:
develop, 18.11.1, 18.11.0, 18.10.0, 18.9.0, 17.1
Build Dependencies:
cmake, lua, blas, lapack
Link Dependencies:
lua, blas, lapack
Description:
Parallel Linear Algebra Software for Multicore Architectures, PLASMA is a software package for solving problems in dense linear algebra using multicore processors and Xeon Phi coprocessors. PLASMA provides implementations of state-of-the-art algorithms using cutting-edge task scheduling techniques. PLASMA currently offers a collection of routines for solving linear systems of equations, least squares problems, eigenvalue problems, and singular value problems.

platypus

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
python, py-cython, htslib
Link Dependencies:
htslib
Run Dependencies:
python
Description:
A Haplotype-Based Variant Caller For Next Generation Sequence Data

plplot

Homepage:
Spack package:
Versions:
5.13.0, 5.12.0, 5.11.0
Build Dependencies:
cmake, java, lua, pango, py-numpy, python, qt, tcl, wx, freetype, gtkplus, libx11, qhull, swig
Link Dependencies:
java, lua, pango, qt, tcl, wx, freetype, gtkplus, libx11, qhull, swig
Run Dependencies:
py-numpy, python
Description:
PLplot is a cross-platform package for creating scientific plots.

plumed

Homepage:
Spack package:
Versions:
2.5.0, 2.4.4, 2.4.2, 2.4.1, 2.3.5, 2.3.3, 2.3.0, 2.2.4, 2.2.3
Build Dependencies:
zlib, blas, lapack, libmatheval, mpi, gsl, autoconf, automake, libtool
Link Dependencies:
zlib, blas, lapack, libmatheval, mpi, gsl
Description:
PLUMED is an open source library for free energy calculations in molecular systems which works together with some of the most popular molecular dynamics engines. Free energy calculations can be performed as a function of many order parameters with a particular focus on biological problems, using state of the art methods such as metadynamics, umbrella sampling and Jarzynski-equation based steered MD. The software, written in C++, can be easily interfaced with both fortran and C/C++ codes.

pmdk

Homepage:
Spack package:
Versions:
develop, 1.6, 1.5
Description:
The Persistent Memory Development Kit (PMDK), formerly known as NVML, is a library for using memory-mapped persistence, optimized specifically for persistent memory

pmgr-collective

Homepage:
Spack package:
Versions:
1.0
Description:
PMGR_COLLECTIVE provides a scalable network for bootstrapping MPI jobs.

pmix

Homepage:
Spack package:
Versions:
3.1.2, 3.0.2, 3.0.1, 3.0.0, 2.2.2, 2.1.4, 2.1.3, 2.1.2, 2.0.1, 1.2.5
Build Dependencies:
libevent, hwloc
Link Dependencies:
libevent, hwloc
Description:
The Process Management Interface (PMI) has been used for quite some time as a means of exchanging wireup information needed for interprocess communication. However, meeting the significant orchestration challenges presented by exascale systems requires that the process-to-system interface evolve to permit a tighter integration between the different components of the parallel application and existing and future SMS solutions. PMI Exascale (PMIx) addresses these needs by providing an extended version of the PMI definitions specifically designed to support exascale and beyond environments by: (a) adding flexibility to the functionality expressed in the existing APIs, (b) augmenting the interfaces with new APIs that provide extended capabilities, (c) forging a collaboration between subsystem providers including resource manager, fabric, file system, and programming library developers, (d) establishing a standards-like body for maintaining the definitions, and (e) providing a reference implementation of the PMIx standard that demonstrates the desired level of scalability while maintaining strict separation between it and the standard itself.

pnfft

Homepage:
Spack package:
Versions:
1.0.7-alpha
Build Dependencies:
pfft, gsl
Link Dependencies:
pfft, gsl
Description:
PNFFT is a parallel software library for the calculation of three- dimensional nonequispaced FFTs.

pngwriter

Homepage:
Spack package:
Versions:
develop, master, 0.7.0, 0.6.0, 0.5.6
Build Dependencies:
cmake, libpng, zlib, freetype
Link Dependencies:
libpng, zlib, freetype
Description:
PNGwriter is a very easy to use open source graphics library that uses PNG as its output format. The interface has been designed to be as simple and intuitive as possible. It supports plotting and reading pixels in the RGB (red, green, blue), HSV (hue, saturation, value/brightness) and CMYK (cyan, magenta, yellow, black) colour spaces, basic shapes, scaling, bilinear interpolation, full TrueType antialiased and rotated text support, bezier curves, opening existing PNG images and more.

pnmpi

Homepage:
Spack package:
Versions:
1.7
Build Dependencies:
cmake, argp-standalone, binutils, help2man, doxygen, mpi
Link Dependencies:
argp-standalone, binutils, help2man, doxygen, mpi
Description:
PnMPI is a dynamic MPI tool infrastructure that builds on top of the standardized PMPI interface.

poamsa

Homepage:
Spack package:
Versions:
2.0
Description:
POA is Partial Order Alignment, a fast program for multiple sequence alignment in bioinformatics. Its advantages are speed, scalability, sensitivity, and the superior ability to handle branching / indels in the alignment.

pocl

Homepage:
Spack package:
Versions:
master, 1.1, 1.0, 0.14, 0.13, 0.12, 0.11, 0.10
Build Dependencies:
cmake, hwloc, libtool, pkgconfig, llvm
Link Dependencies:
hwloc, libtool, llvm
Run Dependencies:
libtool
Description:
Portable Computing Language (pocl) is an open source implementation of the OpenCL standard which can be easily adapted for new targets and devices, both for homogeneous CPU and heterogeneous GPUs/accelerators.

polymake

Homepage:
Spack package:
Versions:
3.0r2, 3.0r1
Build Dependencies:
bliss, boost, cddlib, gmp, lrslib, mpfr, ppl
Link Dependencies:
bliss, boost, cddlib, gmp, lrslib, mpfr, ppl
Description:
polymake is open source software for research in polyhedral geometry

poppler

Homepage:
Spack package:
Versions:
0.72.0, 0.65.0, 0.64.0
Build Dependencies:
cmake, pkgconfig, poppler-data, fontconfig, freetype, lcms, glib, gobject-introspection, curl, openjpeg, qt, zlib, cairo, libiconv, jpeg, libpng, libtiff
Link Dependencies:
fontconfig, freetype, lcms, glib, gobject-introspection, curl, openjpeg, qt, zlib, cairo, libiconv, jpeg, libpng, libtiff
Run Dependencies:
poppler-data
Description:
Poppler is a PDF rendering library based on the xpdf-3.0 code base.

poppler-data

Homepage:
Spack package:
Versions:
0.4.9
Build Dependencies:
cmake
Description:
This package consists of encoding files for use with poppler. The encoding files are optional and poppler will automatically read them if they are present. When installed, the encoding files enables poppler to correctly render CJK and Cyrrilic properly. While poppler is licensed under the GPL, these encoding files have different license, and thus distributed separately.

porta

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
libtool
Description:
PORTA is a collection of routines for analyzing polytopes and polyhedra

portage

Homepage:
Spack package:
Versions:
develop, 1.1.1, 1.1.0
Build Dependencies:
cmake, mpi, lapack
Link Dependencies:
mpi, lapack
Description:
Portage is a framework that computational physics applications can use to build a highly customized, hybrid parallel (MPI+X) conservative remapping library for transfer of field data between meshes.

portcullis

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
autoconf, automake, libtool, m4, zlib, samtools, python, py-setuptools, py-pandas, py-sphinx
Link Dependencies:
py-sphinx
Run Dependencies:
python, py-setuptools, py-pandas
Description:
PORTable CULLing of Invalid Splice junctions

postgresql

Homepage:
Spack package:
Versions:
11.2, 11.1, 11.0, 10.7, 10.6, 10.5, 10.4, 10.3, 10.2, 10.1, 10.0, 9.6.12, 9.6.11, 9.5.3, 9.3.4
Build Dependencies:
readline, libedit, openssl, tcl, perl, python
Link Dependencies:
readline, libedit, openssl, tcl, perl, python
Description:
PostgreSQL is a powerful, open source object-relational database system. It has more than 15 years of active development and a proven architecture that has earned it a strong reputation for reliability, data integrity, and correctness.

ppl

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
gmp
Link Dependencies:
gmp
Description:
The Parma Polyhedra Library (PPL) provides numerical abstractions especially targeted at applications in the field of analysis and verification of complex systems. These abstractions include convex polyhedra, some special classes of polyhedra shapes that offer interesting complexity/precision tradeoffs, and grids which represent regularly spaced points that satisfy a set of linear congruence relations. The library also supports finite powersets and products of polyhedra and grids, a mixed integer linear programming problem solver using an exact-arithmetic version of the simplex algorithm, a parametric integer programming solver, and primitives for termination analysis via the automatic synthesis of linear ranking functions.

pplacer

Homepage:
Spack package:
Versions:
1.1.alpha19
Description:
Pplacer places query sequences on a fixed reference phylogenetic tree to maximize phylogenetic likelihood or posterior probability according to a reference alignment. Pplacer is designed to be fast, to give useful information about uncertainty, and to offer advanced visualization and downstream analysis.

prank

Homepage:
Spack package:
Versions:
170427, 150803
Build Dependencies:
mafft, exonerate, bpp-suite
Link Dependencies:
mafft, exonerate, bpp-suite
Description:
A powerful multiple sequence alignment browser.

precice

Homepage:
Spack package:
Versions:
develop, 1.4.1, 1.4.0, 1.3.0, 1.2.0
Build Dependencies:
cmake, boost, eigen, libxml2, mpi, petsc, python
Link Dependencies:
boost, eigen, libxml2, mpi, petsc
Run Dependencies:
python
Description:
preCICE (Precise Code Interaction Coupling Environment) is a coupling library for partitioned multi-physics simulations. Partitioned means that preCICE couples existing programs (solvers) capable of simulating a subpart of the complete physics involved in a simulation.

presentproto

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
pkgconfig, util-macros
Description:
Present protocol specification and Xlib/Xserver headers.

preseq

Homepage:
Spack package:
Versions:
2.0.2
Build Dependencies:
samtools, gsl
Link Dependencies:
samtools, gsl
Description:
The preseq package is aimed at predicting and estimating the complexity of a genomic sequencing library, equivalent to predicting and estimating the number of redundant reads from a given sequencing depth and how many will be expected from additional sequencing using an initial sequencing experiment.

price

Homepage:
Spack package:
Versions:
140408
Description:
PRICE (Paired-Read Iterative Contig Extension): a de novo genome assembler implemented in C++.

primer3

Homepage:
Spack package:
Versions:
2.3.7
Description:
Primer3 is a widely used program for designing PCR primers (PCR = "Polymerase Chain Reaction"). PCR is an essential and ubiquitous tool in genetics and molecular biology. Primer3 can also design hybridization probes and sequencing primers.

prinseq-lite

Homepage:
Spack package:
Versions:
0.20.4
Run Dependencies:
perl, perl-cairo, perl-digest-md5, perl-json
Description:
PRINSEQ will help you to preprocess your genomic or metagenomic sequence data in FASTA or FASTQ format.

printproto

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
pkgconfig, util-macros
Description:
Xprint extension to the X11 protocol - a portable, network-transparent printing system.

prng

Homepage:
Spack package:
Versions:
3.0.2
Build Dependencies:
automake, autoconf, libtool, m4
Description:
Pseudo-Random Number Generator library.

probconsrna

Homepage:
Spack package:
Versions:
2005-6-7
Description:
Experimental version of PROBCONS with parameters estimated via unsupervised training on BRAliBASE

prodigal

Homepage:
Spack package:
Versions:
2.6.3
Description:
Fast, reliable protein-coding gene prediction for prokaryotic genomes.

proj

Homepage:
Spack package:
Versions:
5.2.0, 5.1.0, 5.0.1, 4.9.2, 4.9.1, 4.8.0, 4.7.0, 4.6.1
Build Dependencies:
sqlite
Link Dependencies:
sqlite
Description:
PROJ is a generic coordinate transformation software, that transforms geospatial coordinates from one coordinate reference system (CRS) to another. This includes cartographic projections as well as geodetic transformations.

protobuf

Homepage:
Spack package:
Versions:
3.7.1, 3.7.0, 3.6.1, 3.5.2, 3.5.1.1, 3.5.1, 3.5.0.1, 3.5.0, 3.4.1, 3.4.0, 3.3.0, 3.2.0, 3.1.0, 3.0.2
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Description:
Google's data interchange format.

proxymngr

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libice, libxt, lbxproxy, xproto, xproxymanagementprotocol, pkgconfig, util-macros
Link Dependencies:
libice, libxt, lbxproxy
Description:
The proxy manager (proxymngr) is responsible for resolving requests from xfindproxy (and other similar clients), starting new proxies when appropriate, and keeping track of all of the available proxy services. The proxy manager strives to reuse existing proxies whenever possible.

pruners-ninja

Homepage:
Spack package:
Versions:
1.0.1, 1.0.0
Build Dependencies:
mpi, autoconf, automake, libtool
Link Dependencies:
mpi
Description:
NINJA: Noise Inject agent tool to expose subtle and unintended message races.

ps-lite

Homepage:
Spack package:
Versions:
master, 20170328
Build Dependencies:
cmake, protobuf, zeromq
Link Dependencies:
protobuf, zeromq
Description:
ps-lite is A light and efficient implementation of the parameter server framework.

psi4

Homepage:
Spack package:
Versions:
0.5
Build Dependencies:
cmake, blas, lapack, boost, python, py-numpy
Link Dependencies:
blas, lapack, boost, python
Run Dependencies:
py-numpy
Description:
Psi4 is an open-source suite of ab initio quantum chemistry programs designed for efficient, high-accuracy simulations of a variety of molecular properties.

pslib

Homepage:
Spack package:
Versions:
0.4.5
Build Dependencies:
jpeg, libpng
Link Dependencies:
jpeg, libpng
Description:
C-library to create PostScript files on the fly.

psm

Homepage:
Spack package:
Versions:
2017-04-28, 3.3
Build Dependencies:
libuuid
Link Dependencies:
libuuid
Description:
Intel Performance scaled messaging library

psmc

Homepage:
Spack package:
Versions:
2016-1-21
Description:
mplementation of the Pairwise Sequentially Markovian Coalescent (PSMC) model

pstreams

Homepage:
Spack package:
Versions:
1.0.1
Description:
C++ wrapper for the POSIX.2 functions popen(3) and pclose(3)

pugixml

Homepage:
Spack package:
Versions:
1.8.1
Build Dependencies:
cmake
Description:
Light-weight, simple, and fast XML parser for C++ with XPath support

pumi

Homepage:
Spack package:
Versions:
develop, 2.2.0, 2.1.0
Build Dependencies:
cmake, mpi, zoltan, simmetrix-simmodsuite
Link Dependencies:
mpi, zoltan, simmetrix-simmodsuite
Description:
SCOREC RPI's Parallel Unstructured Mesh Infrastructure (PUMI). An efficient distributed mesh data structure and methods to support parallel adaptive analysis including general mesh-based operations, such as mesh entity creation/deletion, adjacency and geometric classification, iterators, arbitrary (field) data attachable to mesh entities, efficient communication involving entities duplicated across multiple tasks, migration of mesh entities between tasks, and dynamic load balancing.

pv

Homepage:
Spack package:
Versions:
1.6.6
Description:
Pipe Viewer - is a terminal-based tool for monitoring the progress of data through a pipeline

pvm

Homepage:
Spack package:
Versions:
3.4.6
Description:
PVM (Parallel Virtual Machine) is a software package that permits a heterogeneous collection of Unix and/or Windows computers hooked together by a network to be used as a single large parallel computer.

pxz

Homepage:
Spack package:
Versions:
develop, 4.999.9beta.20091201git
Build Dependencies:
xz
Link Dependencies:
xz
Description:
Pxz is a parallel LZMA compressor using liblzma.

py-3to2

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
lib3to2 is a set of fixers that are intended to backport code written for Python version 3.x into Python version 2.x.

py-4suite-xml

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
XML tools and libraries for Python: Domlette, XPath, XSLT, XPointer, XLink, XUpdate

py-abipy

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
python, py-setuptools, py-cython, py-six, py-prettytable, py-tabulate, py-apscheduler, py-pydispatcher, py-tqdm, py-html2text, py-pyyaml, py-pandas, py-numpy, py-scipy, py-spglib, py-pymatgen, py-netcdf4, py-matplotlib, py-seaborn, py-wxpython, py-wxmplot, py-ipython, py-jupyter, py-nbformat
Link Dependencies:
python
Run Dependencies:
python, py-six, py-prettytable, py-tabulate, py-apscheduler, py-pydispatcher, py-tqdm, py-html2text, py-pyyaml, py-pandas, py-numpy, py-scipy, py-spglib, py-pymatgen, py-netcdf4, py-matplotlib, py-seaborn, py-wxpython, py-wxmplot, py-ipython, py-jupyter, py-nbformat
Description:
Python package to automate ABINIT calculations and analyze the results.

py-adios

Homepage:
Spack package:
Versions:
develop, 1.13.0, 1.12.0, 1.11.1, 1.11.0, 1.10.0, 1.9.0
Build Dependencies:
python, adios, py-numpy, mpi, py-cython
Link Dependencies:
python, adios, mpi
Run Dependencies:
python, adios, py-numpy, py-mpi4py
Description:
NumPy bindings of ADIOS1

py-advancedhtmlparser

Homepage:
Spack package:
Versions:
8.1.4
Build Dependencies:
python, py-setuptools, py-queryablelist
Link Dependencies:
python
Run Dependencies:
python, py-queryablelist
Description:
Fast Indexed python HTML parser which builds a DOM node tree, providing common getElementsBy* functions for scraping, testing, modification, and formatting

py-affine

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Matrices describing affine transformation of the plane.

py-alabaster

Homepage:
Spack package:
Versions:
0.7.12, 0.7.10, 0.7.9
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Alabaster is a visually (c)lean, responsive, configurable theme for the Sphinx documentation system.

py-alembic

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Alembic is a database migrations tool.

py-apache-libcloud

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python library for multiple cloud provider APIs

py-apipkg

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
apipkg: namespace control and lazy-import mechanism

py-appdirs

Homepage:
Spack package:
Versions:
1.4.3, 1.4.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".

py-appnope

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Disable App Nap on OS X 10.9

py-apscheduler

Homepage:
Spack package:
Versions:
3.3.1, 2.1.0
Build Dependencies:
python, py-setuptools, py-six, py-pytz, py-tzlocal
Link Dependencies:
python
Run Dependencies:
python, py-six, py-pytz, py-tzlocal
Description:
In-process task scheduler with Cron-like capabilities.

py-argcomplete

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Bash tab completion for argparse.

py-argparse

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python command-line parsing library.

py-ase

Homepage:
Spack package:
Versions:
3.15.0, 3.13.0
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
The Atomic Simulation Environment (ASE) is a set of tools and Python modules for setting up, manipulating, running, visualizing and analyzing atomistic simulations.

py-asn1crypto

Homepage:
Spack package:
Versions:
0.22.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python ASN.1 library with a focus on performance and a pythonic API

py-astroid

Homepage:
Spack package:
Versions:
2.2.0, 1.4.5, 1.4.4, 1.4.3, 1.4.2, 1.4.1
Build Dependencies:
python, py-lazy-object-proxy, py-six, py-wrapt, py-enum34, py-singledispatch, py-backports-functools-lru-cache, py-setuptools
Link Dependencies:
python, py-lazy-object-proxy, py-six, py-wrapt, py-enum34, py-singledispatch, py-backports-functools-lru-cache, py-setuptools
Run Dependencies:
python
Description:
A common base representation of python source code for pylint and other projects.

py-astropy

Homepage:
Spack package:
Versions:
1.1.2, 1.1.post1
Build Dependencies:
python, py-setuptools, py-numpy, py-h5py, py-beautifulsoup4, py-pyyaml, py-scipy, libxml2, py-matplotlib, py-pytz, py-scikit-image, py-pandas, py-markupsafe, cfitsio, expat
Link Dependencies:
python, libxml2, cfitsio, expat
Run Dependencies:
python, py-numpy, py-h5py, py-beautifulsoup4, py-pyyaml, py-scipy, py-matplotlib, py-pytz, py-scikit-image, py-pandas, py-markupsafe
Description:
The Astropy Project is a community effort to develop a single core package for Astronomy in Python and foster interoperability between Python astronomy packages.

py-async-generator

Homepage:
Spack package:
Versions:
1.10
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Provides async generator functionality to python 3.5.

py-atomicwrites

Homepage:
Spack package:
Versions:
1.1.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Atomic file writes.

py-attrs

Homepage:
Spack package:
Versions:
18.1.0, 16.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-coverage, py-hypothesis, py-pympler, py-pytest, py-six, py-zope-interface
Description:
Classes Without Boilerplate

py-autopep8

Homepage:
Spack package:
Versions:
1.3.3, 1.2.4, 1.2.2
Build Dependencies:
python, py-pycodestyle, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-pycodestyle
Description:
autopep8 automatically formats Python code to conform to the PEP 8 style guide.

py-avro

Homepage:
Spack package:
Versions:
1.8.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Avro is a serialization and RPC framework.

py-avro-json-serializer

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
python, py-setuptools, py-simplejson, py-avro
Link Dependencies:
python
Run Dependencies:
python, py-simplejson, py-avro
Description:
Serializes data into a JSON format using AVRO schema.

py-babel

Homepage:
Spack package:
Versions:
2.6.0, 2.4.0, 2.3.4
Build Dependencies:
python, py-setuptools, py-pytz
Link Dependencies:
python
Run Dependencies:
python, py-pytz
Description:
Babel is an integrated collection of utilities that assist in internationalizing and localizing Python applications, with an emphasis on web-based applications.

py-backcall

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Specifications for callback functions passed in to an API

py-backports-abc

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Backports_ABC: A backport of recent additions to the 'collections.abc' module.

py-backports-functools-lru-cache

Homepage:
Spack package:
Versions:
1.5, 1.4, 1.0.1
Build Dependencies:
python, py-setuptools, py-setuptools-scm
Link Dependencies:
python
Run Dependencies:
python
Description:
Backport of functools.lru_cache from Python 3.3

py-backports-shutil-get-terminal-size

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A backport of the get_terminal_size function from Python 3.3's shutil.

py-backports-ssl-match-hostname

Homepage:
Spack package:
Versions:
3.5.0.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
The ssl.match_hostname() function from Python 3.5

py-basemap

Homepage:
Spack package:
Versions:
1.2.0, 1.0.7
Build Dependencies:
python, py-numpy, py-matplotlib, py-pyproj, py-pyshp, pil, geos
Link Dependencies:
python, geos
Run Dependencies:
python, py-setuptools, py-numpy, py-matplotlib, py-pyproj, py-pyshp, pil
Description:
The matplotlib basemap toolkit is a library for plotting 2D data on maps in Python.

py-bcbio-gff

Homepage:
Spack package:
Versions:
0.6.2
Build Dependencies:
python, py-setuptools, py-six, py-biopython
Link Dependencies:
python
Run Dependencies:
python, py-six, py-biopython
Description:
Read and write Generic Feature Format (GFF) with Biopython integration.

py-beautifulsoup4

Homepage:
Spack package:
Versions:
4.5.3, 4.5.1, 4.4.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree.

py-binwalk

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Binwalk is a fast, easy to use tool for analyzing, reverse engineering, and extracting firmware images.

py-biom-format

Homepage:
Spack package:
Versions:
2.1.6
Build Dependencies:
python, py-setuptools, py-cython, py-h5py, py-click, py-numpy, py-future, py-scipy, py-pandas, py-six, py-pyqi
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-h5py, py-click, py-numpy, py-future, py-scipy, py-pandas, py-six, py-pyqi
Description:
The BIOM file format (canonically pronounced biome) is designed to be a general-use format for representing biological sample by observation contingency tables.

py-biomine

Homepage:
Spack package:
Versions:
0.9.5
Build Dependencies:
python, py-advancedhtmlparser, py-pysam, py-pyvcf, py-requests
Link Dependencies:
python
Run Dependencies:
python, py-advancedhtmlparser, py-pysam, py-pyvcf, py-requests
Description:
Bioinformatics data-mining.

py-biopython

Homepage:
Spack package:
Versions:
1.73, 1.70, 1.65
Build Dependencies:
python, py-numpy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
A distributed collaborative effort to develop Python libraries and applications which address the needs of current and future work in bioinformatics.

py-bitarray

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Efficient array of booleans - C extension

py-bitstring

Homepage:
Spack package:
Versions:
3.1.5
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Simple construction, analysis and modification of binary data.

py-black

Homepage:
Spack package:
Versions:
18.9b0
Build Dependencies:
python, py-setuptools, py-attrs, py-click, py-appdirs, py-toml
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-attrs, py-click, py-appdirs, py-toml
Description:
Black is the uncompromising Python code formatter. By using it, you agree to cede control over minutiae of hand-formatting. In return, Black gives you speed, determinism, and freedom from pycodestyle nagging about formatting.

py-bleach

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
python, py-setuptools, py-six, py-html5lib
Link Dependencies:
python
Run Dependencies:
python, py-six, py-html5lib
Description:
An easy whitelist-based HTML-sanitizing tool.

py-blessings

Homepage:
Spack package:
Versions:
1.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A nicer, kinder way to write to the terminal

py-bokeh

Homepage:
Spack package:
Versions:
0.12.2
Build Dependencies:
python, py-six, py-requests, py-pyyaml, py-dateutil, py-jinja2, py-numpy, py-tornado, py-futures
Link Dependencies:
python
Run Dependencies:
python, py-six, py-requests, py-pyyaml, py-dateutil, py-jinja2, py-numpy, py-tornado, py-futures
Description:
Statistical and novel interactive HTML plots for Python

py-boltons

Homepage:
Spack package:
Versions:
16.5.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
When they're not builtins, they're boltons. Functionality that should be in the standard library. Like builtins, but Boltons. Otherwise known as, "everyone's util.py," but cleaned up and tested.

py-bottleneck

Homepage:
Spack package:
Versions:
1.2.1, 1.0.0
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
A collection of fast NumPy array functions written in Cython.

py-breakseq2

Homepage:
Spack package:
Versions:
2.2
Build Dependencies:
python, py-setuptools, py-biopython, py-cython, py-pysam
Link Dependencies:
python
Run Dependencies:
python, py-biopython, py-pysam, bwa, samtools
Description:
nucleotide-resolution analysis of structural variants

py-breathe

Homepage:
Spack package:
Versions:
4.11.1, 4.11.0, 4.10.0, 4.9.1, 4.9.0, 4.8.0, 4.7.3, 4.7.2, 4.7.1, 4.7.0
Build Dependencies:
python, py-setuptools, py-sphinx, py-docutils, py-six, doxygen
Link Dependencies:
python, doxygen
Run Dependencies:
python, py-sphinx, py-docutils, py-six
Description:
This is an extension to reStructuredText and Sphinx to be able to read and render the Doxygen xml output.

py-brian

Homepage:
Spack package:
Versions:
1.4.3
Build Dependencies:
python, py-matplotlib, py-numpy, py-scipy
Link Dependencies:
python
Run Dependencies:
python, py-matplotlib, py-numpy, py-scipy
Description:
A clock-driven simulator for spiking neural networks

py-brian2

Homepage:
Spack package:
Versions:
2.0.1, 2.0rc3
Build Dependencies:
python, py-setuptools, py-numpy, py-sympy, py-pyparsing, py-jinja2, py-cpuinfo, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-sympy, py-pyparsing, py-jinja2, py-cpuinfo, py-sphinx
Test Dependencies:
py-nosetests
Description:
A clock-driven simulator for spiking neural networks

py-bsddb3

Homepage:
Spack package:
Versions:
6.2.5
Build Dependencies:
python, py-setuptools, berkeley-db
Link Dependencies:
python, berkeley-db
Run Dependencies:
python
Description:
This module provides a nearly complete wrapping of the Oracle/Sleepycat C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and Transaction objects, and each of these is exposed as a Python type in the bsddb3.db module.

py-bx-python

Homepage:
Spack package:
Versions:
0.7.4
Build Dependencies:
python, py-setuptools, py-numpy, py-six
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-six
Description:
The bx-python project is a python library and associated set of scripts to allow for rapid implementation of genome scale analyses.

py-cartopy

Homepage:
Spack package:
Versions:
0.16.0
Build Dependencies:
python, py-setuptools, py-cython, py-numpy, py-shapely, py-pyshp, py-six, geos, proj, py-matplotlib, gdal, py-pillow, py-pyepsg, py-scipy, py-owslib
Link Dependencies:
python, geos, proj
Run Dependencies:
python, py-numpy, py-shapely, py-pyshp, py-six, py-matplotlib, gdal, py-pillow, py-pyepsg, py-scipy, py-owslib
Test Dependencies:
py-mock, py-pytest
Description:
Cartopy - a cartographic python library with matplotlib support.

py-cclib

Homepage:
Spack package:
Versions:
1.5.post1
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Open source library for parsing and interpreting the results of computational chemistry packages

py-cdat-lite

Homepage:
Spack package:
Versions:
6.0.1
Build Dependencies:
python, netcdf, py-numpy, py-setuptools
Link Dependencies:
python, netcdf
Run Dependencies:
python, py-numpy
Description:
Cdat-lite is a Python package for managing and analysing climate science data. It is a subset of the Climate Data Analysis Tools (CDAT) developed by PCMDI at Lawrence Livermore National Laboratory.

py-cdo

Homepage:
Spack package:
Versions:
1.3.2
Build Dependencies:
python, cdo, py-setuptools, py-scipy, py-netcdf4
Link Dependencies:
python, cdo
Run Dependencies:
python, py-scipy, py-netcdf4
Description:
The cdo package provides an interface to the Climate Data Operators from Python.

py-certifi

Homepage:
Spack package:
Versions:
2017.4.17, 2017.1.23, 2016.02.28
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Certifi: A carefully curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts.

py-cffi

Homepage:
Spack package:
Versions:
1.12.2, 1.11.5, 1.10.0, 1.1.2
Build Dependencies:
python, pkgconfig, py-setuptools, py-pycparser, libffi
Link Dependencies:
python, libffi
Run Dependencies:
python, py-pycparser
Description:
Foreign Function Interface for Python calling C code

py-cftime

Homepage:
Spack package:
Versions:
1.0.3.4
Build Dependencies:
python, py-setuptools, py-cython, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Python library for decoding time units and variable values in a netCDF file conforming to the Climate and Forecasting (CF) netCDF conventions

py-chardet

Homepage:
Spack package:
Versions:
3.0.2, 2.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Universal encoding detector for Python 2 and 3

py-checkm-genome

Homepage:
Spack package:
Versions:
1.0.13, 1.0.11
Build Dependencies:
python, hmmer, pplacer, prodigal, py-backports-functools-lru-cache, py-numpy, py-scipy, py-matplotlib, py-pysam, py-dendropy
Link Dependencies:
python
Run Dependencies:
python, hmmer, pplacer, prodigal, py-backports-functools-lru-cache, py-numpy, py-scipy, py-matplotlib, py-pysam, py-dendropy
Description:
Assess the quality of microbial genomes recovered from isolates, single cells, and metagenomes

py-cheetah

Homepage:
Spack package:
Versions:
2.3.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Cheetah is a template engine and code generation tool.

py-click

Homepage:
Spack package:
Versions:
6.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A simple wrapper around optparse for powerful command line utilities.

py-click-plugins

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
python, py-setuptools, py-click
Link Dependencies:
python
Run Dependencies:
python, py-click
Description:
An extension module for py-click to register external CLI commands via setuptools entry-points.

py-cligj

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
python, py-setuptools, py-click
Link Dependencies:
python
Run Dependencies:
python, py-click
Description:
Click-based argument and option decorators for Python GIS command line programs

py-cloudpickle

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Extended pickling support for Python objects.

py-cogent

Homepage:
Spack package:
Versions:
1.9, 1.5.3
Build Dependencies:
python, py-setuptools, py-numpy, zlib, py-matplotlib, py-mpi4py, py-sqlalchemy, py-pymysql, py-cython
Link Dependencies:
python, zlib
Run Dependencies:
python, py-numpy, py-matplotlib, py-mpi4py, py-sqlalchemy, py-pymysql
Description:
A toolkit for statistical analysis of biological sequences.

py-colorama

Homepage:
Spack package:
Versions:
0.3.7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Cross-platform colored terminal text.

py-colormath

Homepage:
Spack package:
Versions:
3.0.0, 2.1.1
Build Dependencies:
python, py-setuptools, py-numpy, py-networkx
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-networkx
Description:
Color math and conversion library.

py-configparser

Homepage:
Spack package:
Versions:
3.5.1, 3.5.0
Build Dependencies:
python, py-setuptools, py-ordereddict
Link Dependencies:
python
Run Dependencies:
python, py-ordereddict
Description:
This library brings the updated configparser from Python 3.5 to Python 2.6-3.5.

py-counter

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Counter package defines the "counter.Counter" class similar to bags or multisets in other languages.

py-coverage

Homepage:
Spack package:
Versions:
4.3.4, 4.0a6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Testing coverage checker for python

py-cpuinfo

Homepage:
Spack package:
Versions:
0.2.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Get CPU info with pure Python 2 & 3

py-crispresso

Homepage:
Spack package:
Versions:
1.0.8
Build Dependencies:
python, py-setuptools, py-biopython, py-matplotlib, py-numpy, py-pandas, py-seaborn, emboss, flash, java
Link Dependencies:
python
Run Dependencies:
python, py-biopython, py-matplotlib, py-numpy, py-pandas, py-seaborn, emboss, flash, java
Description:
Software pipeline for the analysis of CRISPR-Cas9 genome editing outcomes from deep sequencing data.

py-crossmap

Homepage:
Spack package:
Versions:
0.3.3, 0.2.9
Build Dependencies:
python, py-setuptools, py-numpy, py-cython, py-pysam, py-bx-python, py-pybigwig
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-cython, py-pysam, py-bx-python, py-pybigwig
Description:
CrossMap is a program for convenient conversion of genome coordinates (or annotation files) between different assemblies

py-cryptography

Homepage:
Spack package:
Versions:
2.3.1, 1.8.1
Build Dependencies:
python, py-setuptools, py-cffi, py-asn1crypto, py-six, py-idna, py-enum34, py-ipaddress, openssl
Link Dependencies:
python, openssl
Run Dependencies:
python, py-cffi, py-asn1crypto, py-six, py-idna, py-enum34, py-ipaddress
Description:
cryptography is a package which provides cryptographic recipes and primitives to Python developers

py-csvkit

Homepage:
Spack package:
Versions:
0.9.1
Build Dependencies:
python, py-setuptools, py-dateutil, py-dbf, py-xlrd, py-sqlalchemy, py-six, py-openpyxl
Link Dependencies:
python
Run Dependencies:
python, py-dateutil, py-dbf, py-xlrd, py-sqlalchemy, py-six, py-openpyxl
Description:
A library of utilities for working with CSV, the king of tabular file formats

py-current

Homepage:
Spack package:
Versions:
0.3.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Current module relative paths and imports

py-cutadapt

Homepage:
Spack package:
Versions:
1.13
Build Dependencies:
python, py-setuptools, py-xopen
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-xopen
Description:
Cutadapt finds and removes adapter sequences, primers, poly-A tails and other types of unwanted sequence from your high-throughput sequencing reads.

py-cvxopt

Homepage:
Spack package:
Versions:
1.1.9
Build Dependencies:
python, py-setuptools, blas, lapack, suite-sparse, gsl, fftw, glpk, dsdp
Link Dependencies:
python, blas, lapack, suite-sparse, gsl, fftw, glpk, dsdp
Run Dependencies:
python
Description:
CVXOPT is a free software package for convex optimization based on the Python programming language.

py-cycler

Homepage:
Spack package:
Versions:
0.10.0
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Composable style cycles.

py-cython

Homepage:
Spack package:
Versions:
0.29.7, 0.29.5, 0.29, 0.28.6, 0.28.3, 0.28.1, 0.25.2, 0.23.5, 0.23.4, 0.22, 0.21.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
gdb
Description:
The Cython compiler for writing C extensions for the Python language.

py-dask

Homepage:
Spack package:
Versions:
1.1.2, 1.1.0, 0.17.4, 0.8.1
Build Dependencies:
python, py-setuptools, py-numpy, py-toolz, py-cloudpickle, py-partd, py-pandas
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-toolz, py-cloudpickle, py-partd, py-pandas
Test Dependencies:
py-pytest, py-requests
Description:
Dask is a flexible parallel computing library for analytics.

py-dateutil

Homepage:
Spack package:
Versions:
2.7.5, 2.5.2, 2.4.2, 2.4.0, 2.2
Build Dependencies:
python, py-setuptools, py-setuptools-scm, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Extensions to the standard Python datetime module.

py-dbf

Homepage:
Spack package:
Versions:
0.96.005, 0.94.003
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Pure python package for reading/writing dBase, FoxPro, and Visual FoxPro .dbf files (including memos)

py-decorator

Homepage:
Spack package:
Versions:
4.3.0, 4.0.9
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
The aim of the decorator module it to simplify the usage of decorators for the average programmer, and to popularize decorators by showing various non-trivial examples.

py-deeptools

Homepage:
Spack package:
Versions:
3.2.1, 2.5.2
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-py2bit, py-pybigwig, py-pysam, py-matplotlib, py-numpydoc
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-py2bit, py-pybigwig, py-pysam, py-matplotlib, py-numpydoc
Description:
deepTools addresses the challenge of handling the large amounts of data that are now routinely generated from DNA sequencing centers.

py-dendropy

Homepage:
Spack package:
Versions:
4.3.0, 3.12.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
DendroPy is a Python library for phylogenetic computing. It provides classes and functions for the simulation, processing, and manipulation of phylogenetic trees and character matrices, and supports the reading and writing of phylogenetic data in a range of formats, such as NEXUS, NEWICK, NeXML, Phylip, FASTA, etc.

py-descartes

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
python, py-setuptools, py-matplotlib
Link Dependencies:
python
Run Dependencies:
python, py-matplotlib
Description:
Use Shapely or GeoJSON-like geometric objects as matplotlib paths and patches

py-dill

Homepage:
Spack package:
Versions:
0.2.6, 0.2.5, 0.2.4, 0.2.3, 0.2.2, 0.2.1, 0.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Serialize all of python

py-discover

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Test discovery for unittest.

py-dlcpar

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
DLCpar is a reconciliation method for inferring gene duplications, losses, and coalescence (accounting for incomplete lineage sorting).

py-docopt

Homepage:
Spack package:
Versions:
0.6.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Command-line interface description language.

py-docutils

Homepage:
Spack package:
Versions:
0.14, 0.13.1, 0.12
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Docutils is an open-source text processing system for processing plaintext documentation into useful formats, such as HTML, LaTeX, man- pages, open-document or XML. It includes reStructuredText, the easy to read, easy to use, what-you-see-is-what-you-get plaintext markup language.

py-doxypy

Homepage:
Spack package:
Versions:
0.3
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
doxypy is an input filter for Doxygen.

py-doxypypy

Homepage:
Spack package:
Versions:
0.8.8.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Doxygen filter for Python. A more Pythonic version of doxypy, a Doxygen filter for Python.

py-dryscrape

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
python, py-lxml, py-webkit-server, py-xvfbwrapper
Link Dependencies:
python
Run Dependencies:
python, py-lxml, py-webkit-server, py-xvfbwrapper
Description:
a lightweight Javascript-aware, headless web scraping library for Python

py-dxchange

Homepage:
Spack package:
Versions:
0.1.2
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-h5py, py-six, py-netcdf4, py-spefile, py-edffile, py-tifffile, py-dxfile, py-olefile, py-astropy
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-h5py, py-six, py-netcdf4, py-spefile, py-edffile, py-tifffile, py-dxfile, py-olefile, py-astropy
Description:
DXchange provides an interface with tomoPy and raw tomographic data collected at different synchrotron facilities.

py-dxfile

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
python, py-setuptools, py-h5py
Link Dependencies:
python
Run Dependencies:
python, py-h5py
Description:
Scientific Data Exchange [A1] is a set of guidelines for storing scientific data and metadata in a Hierarchical Data Format 5 [B6] file.

py-easybuild-easyblocks

Homepage:
Spack package:
Versions:
3.1.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-easybuild-framework
Description:
Collection of easyblocks for EasyBuild, a software build and installation framework for (scientific) software on HPC systems.

py-easybuild-easyconfigs

Homepage:
Spack package:
Versions:
3.1.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-easybuild-framework, py-easybuild-easyblocks
Description:
Collection of easyconfig files for EasyBuild, a software build and installation framework for (scientific) software on HPC systems.

py-easybuild-framework

Homepage:
Spack package:
Versions:
3.1.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-vsc-base, py-vsc-install
Description:
The core of EasyBuild, a software build and installation framework for (scientific) software on HPC systems.

py-edffile

Homepage:
Spack package:
Versions:
5.0.0
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Generic class for Edf files manipulation.

py-editdistance

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Fast implementation of the edit distance (Levenshtein distance).

py-elasticsearch

Homepage:
Spack package:
Versions:
5.2.0, 2.3.0
Build Dependencies:
python, py-setuptools, py-urllib3
Link Dependencies:
python
Run Dependencies:
python, py-urllib3
Description:
Python client for Elasticsearch

py-elephant

Homepage:
Spack package:
Versions:
0.4.1, 0.3.0
Build Dependencies:
python, py-setuptools, py-neo, py-numpy, py-quantities, py-scipy, py-pandas, py-numpydoc, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-neo, py-numpy, py-quantities, py-scipy, py-pandas, py-numpydoc, py-sphinx
Test Dependencies:
py-nose
Description:
Elephant is a package for analysis of electrophysiology data in Python

py-emcee

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
emcee is an MIT licensed pure-Python implementation of Goodman & Weare's Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler.

py-entrypoints

Homepage:
Spack package:
Versions:
0.3, 0.2.3
Build Dependencies:
python, py-configparser
Link Dependencies:
python
Run Dependencies:
python, py-configparser
Description:
Discover and load entry points from installed packages.

py-enum34

Homepage:
Spack package:
Versions:
1.1.6
Build Dependencies:
python, py-ordereddict, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-ordereddict
Description:
Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4.

py-epydoc

Homepage:
Spack package:
Versions:
3.0.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Epydoc is a tool for generating API documentation documentation for Python modules, based on their docstrings.

py-espresso

Homepage:
Spack package:
Versions:
develop, 4.0.2, 4.0.1, 4.0.0
Build Dependencies:
cmake, mpi, boost, python, py-cython, py-numpy, fftw, hdf5
Link Dependencies:
mpi, boost, python, fftw, hdf5
Run Dependencies:
py-numpy
Description:
ESPResSo is a highly versatile software package for performing and analyzing scientific Molecular Dynamics many-particle simulations of coarse-grained atomistic or bead-spring models as they are used in soft matter research in physics, chemistry and molecular biology. It can be used to simulate systems such as polymers, liquid crystals, colloids, polyelectrolytes, ferrofluids and biological systems, for example DNA and lipid membranes. It also has a DPD and lattice Boltzmann solver for hydrodynamic interactions, and allows several particle couplings to the LB fluid.

py-espressopp

Homepage:
Spack package:
Versions:
develop, 2.0.2, 1.9.5, 1.9.4.1, 1.9.4
Build Dependencies:
cmake, mpi, boost, python, py-mpi4py, fftw, py-sphinx, py-numpy, py-matplotlib, texlive, doxygen
Link Dependencies:
mpi, boost, python, fftw
Run Dependencies:
py-mpi4py, py-numpy
Description:
ESPResSo++ is an extensible, flexible, fast and parallel simulation software for soft matter research. It is a highly versatile software package for the scientific simulation and analysis of coarse-grained atomistic or bead-spring models as they are used in soft matter research

py-et-xmlfile

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
An implementation of lxml.xmlfile for the standard library.

py-eventlet

Homepage:
Spack package:
Versions:
0.22.0
Build Dependencies:
python, py-setuptools, py-greenlet, py-enum34
Link Dependencies:
python, py-greenlet
Run Dependencies:
python, py-enum34
Description:
Concurrent networking library for Python

py-execnet

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
python, py-setuptools, py-setuptools-scm, py-apipkg
Link Dependencies:
python
Run Dependencies:
python, py-apipkg
Description:
execnet provides a share-nothing model with channel-send/receive communication for distributing execution across many Python interpreters across version, platform and network barriers.

py-fastaindex

Homepage:
Spack package:
Versions:
0.11rc7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
FastA index (.fai) handler compatible with samtools faidx is extended with 4 columns storing counts for A, C, G & T for each sequence..

py-fasteners

Homepage:
Spack package:
Versions:
0.14.1
Build Dependencies:
python, py-setuptools, py-monotonic, py-six
Link Dependencies:
python
Run Dependencies:
python, py-monotonic, py-six
Description:
A python package that provides useful locks.

py-faststructure

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
python, py-cython, py-numpy, gsl
Link Dependencies:
python, gsl
Run Dependencies:
python, py-numpy
Description:
FastStructure is a fast algorithm for inferring population structure from large SNP genotype data.

py-filelock

Homepage:
Spack package:
Versions:
3.0.4, 3.0.3, 3.0.1, 3.0.0, 2.0.13, 2.0.12, 2.0.11, 2.0.10, 2.0.9, 2.0.8
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
This package contains a single module, which implements a platform independent file lock in Python, which provides a simple way of inter- process communication

py-fiona

Homepage:
Spack package:
Versions:
1.7.12
Build Dependencies:
python, py-cligj, py-six, py-munch, py-argparse, py-ordereddict, gdal, py-click-plugins, py-setuptools, py-cython
Link Dependencies:
python
Run Dependencies:
python, py-cligj, py-six, py-munch, py-argparse, py-ordereddict, gdal, py-click-plugins
Test Dependencies:
py-nose
Description:
Alternative Python binding for OGR

py-fiscalyear

Homepage:
Spack package:
Versions:
master, 0.1.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-pytest, py-pytest-runner
Description:
fiscalyear is a small, lightweight Python module providing helpful utilities for managing the fiscal calendar. It is designed as an extension of the built-in datetime and calendar modules, adding the ability to query the fiscal year and fiscal quarter of a date or datetime object.

py-flake8

Homepage:
Spack package:
Versions:
3.7.7, 3.5.0, 3.0.4, 2.5.4
Build Dependencies:
python, py-setuptools, py-entrypoints, py-pyflakes, py-pycodestyle, py-mccabe, py-configparser, py-enum34, py-functools32, py-typing
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-entrypoints, py-pyflakes, py-pycodestyle, py-mccabe, py-configparser, py-enum34, py-functools32, py-typing
Test Dependencies:
py-nose
Description:
Flake8 is a wrapper around PyFlakes, pep8 and Ned Batchelder's McCabe script.

py-flake8-polyfill

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-flake8
Description:
flake8-polyfill is a package that provides some compatibility helpers for Flake8 plugins that intend to support Flake8 2.x and 3.x simultaneously.

py-flask

Homepage:
Spack package:
Versions:
0.12.2, 0.12.1, 0.11.1
Build Dependencies:
python, py-setuptools, py-werkzeug, py-jinja2, py-itsdangerous, py-click
Link Dependencies:
python
Run Dependencies:
python, py-werkzeug, py-jinja2, py-itsdangerous, py-click
Description:
A microframework based on Werkzeug, Jinja2 and good intentions

py-flask-compress

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
python, py-setuptools, py-flask
Link Dependencies:
python
Run Dependencies:
python, py-flask
Description:
Flask-Compress allows you to easily compress your Flask application's responses with gzip.

py-flask-socketio

Homepage:
Spack package:
Versions:
2.9.6
Build Dependencies:
python, py-setuptools, py-flask, py-python-socketio, py-werkzeug
Link Dependencies:
python
Run Dependencies:
python, py-flask, py-python-socketio, py-werkzeug
Description:
Flask-SocketIO gives Flask applications access to low latency bi- directional communications between the clients and the server. The client-side application can use any of the SocketIO official clients libraries in Javascript, C++, Java and Swift, or any compatible client to establish a permanent connection to the server.

py-flexx

Homepage:
Spack package:
Versions:
0.4.1
Build Dependencies:
python, py-setuptools, py-tornado
Link Dependencies:
python
Run Dependencies:
python, py-tornado
Description:
Write desktop and web apps in pure Python.

py-fn

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Functional programming in Python: implementation of missing features to enjoy FP.

py-fparser

Homepage:
Spack package:
Versions:
develop, 0.0.6, 0.0.5
Build Dependencies:
python, py-setuptools, py-numpy, py-nose, py-six
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Test Dependencies:
py-pytest
Description:
Parser for Fortran 77..2003 code.

py-funcsigs

Homepage:
Spack package:
Versions:
1.0.2, 0.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-unittest2
Description:
Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2.

py-functools32

Homepage:
Spack package:
Versions:
3.2.3-2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Backport of the functools module from Python 3.2.3 for use on 2.7 and PyPy.

py-future

Homepage:
Spack package:
Versions:
0.16.0, 0.15.2
Build Dependencies:
python, py-setuptools, py-importlib, py-argparse
Link Dependencies:
python
Run Dependencies:
python, py-importlib, py-argparse
Description:
Clean single-source support for Python 3 and 2

py-futures

Homepage:
Spack package:
Versions:
3.0.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Backport of the concurrent.futures package from Python 3.2

py-fypp

Homepage:
Spack package:
Versions:
2.1.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python powered Fortran preprocessor.

py-gdbgui

Homepage:
Spack package:
Versions:
0.11.2.1
Build Dependencies:
python, py-setuptools, py-flask, py-flask-compress, py-flask-socketio, py-gevent, py-pygdbmi, py-pygments
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-flask, py-flask-compress, py-flask-socketio, py-gevent, py-pygdbmi, py-pygments, gdb
Description:
gdbgui is a modern, free, browser-based frontend to gdb

py-genders

Homepage:
Spack package:
Versions:
1.22
Build Dependencies:
python
Link Dependencies:
python
Description:
Genders is a static cluster configuration database used for cluster configuration management. It is used by a variety of tools and scripts for management of large clusters.

py-genshi

Homepage:
Spack package:
Versions:
0.7, 0.6.1, 0.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python toolkit for generation of output for the web

py-geopandas

Homepage:
Spack package:
Versions:
0.4.0, 0.3.0
Build Dependencies:
python, py-setuptools, py-descartes, py-matplotlib, py-fiona, py-pyproj, py-shapely, py-pandas
Link Dependencies:
python
Run Dependencies:
python, py-descartes, py-matplotlib, py-fiona, py-pyproj, py-shapely, py-pandas
Description:
GeoPandas is an open source project to make working with geospatial data in python easier. GeoPandas extends the datatypes used by pandas to allow spatial operations on geometric types. Geometric operations are performed by shapely. Geopandas further depends on fiona for file access and descartes and matplotlib for plotting.

py-gevent

Homepage:
Spack package:
Versions:
1.3a2
Build Dependencies:
python, py-setuptools, py-cython, py-cffi, py-greenlet
Link Dependencies:
python
Run Dependencies:
python, py-cffi, py-greenlet
Description:
gevent is a coroutine-based Python networking library.

py-git-review

Homepage:
Spack package:
Versions:
1.26.0, 1.25.0, 1.24, 1.23, 1.22, 1.21
Build Dependencies:
python, py-setuptools, py-pbr, py-requests
Link Dependencies:
python
Run Dependencies:
python, py-pbr, py-requests, git, tk
Description:
git-review is a tool that helps submitting git branches to gerrit

py-git2

Homepage:
Spack package:
Versions:
0.24.1
Build Dependencies:
python, py-setuptools, libgit2, py-six, py-cffi
Link Dependencies:
python, libgit2
Run Dependencies:
python, py-six, py-cffi
Description:
Pygit2 is a set of Python bindings to the libgit2 shared library, libgit2 implements the core of Git.

py-gnuplot

Homepage:
Spack package:
Versions:
1.8
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Gnuplot.py is a Python package that allows you to create graphs from within Python using the gnuplot plotting program.

py-goatools

Homepage:
Spack package:
Versions:
0.7.11
Build Dependencies:
python, py-nose, py-numpy, py-pandas, py-pydot, py-pyparsing, py-pytest, py-scipy, py-statsmodels, py-xlrd, py-xlsxwriter
Link Dependencies:
python
Run Dependencies:
python, py-nose, py-numpy, py-pandas, py-pydot, py-pyparsing, py-pytest, py-scipy, py-statsmodels, py-xlrd, py-xlsxwriter
Description:
Python scripts to find enrichment of GO terms

py-gpaw

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
python, mpi, py-ase, py-numpy, py-scipy, libxc, blas, lapack, fftw, scalapack
Link Dependencies:
python, mpi, libxc, blas, lapack, fftw, scalapack
Run Dependencies:
python, mpi, py-ase, py-numpy, py-scipy
Description:
GPAW is a density-functional theory (DFT) Python code based on the projector-augmented wave (PAW) method and the atomic simulation environment (ASE).

py-graphviz

Homepage:
Spack package:
Versions:
0.10.1
Build Dependencies:
python, py-setuptools, py-tox, py-flake8, py-pep8-naming, py-wheel, py-twine, py-sphinx, py-sphinx-rtd-theme
Link Dependencies:
python
Run Dependencies:
python, py-tox, py-flake8, py-pep8-naming, py-wheel, py-twine, py-sphinx, py-sphinx-rtd-theme
Test Dependencies:
py-mock, py-pytest, py-pytest-mock, py-pytest-cov
Description:
Simple Python interface for Graphviz

py-greenlet

Homepage:
Spack package:
Versions:
0.4.13
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Lightweight in-process concurrent programming

py-griddataformats

Homepage:
Spack package:
Versions:
0.3.3
Build Dependencies:
python, py-setuptools, py-numpy, py-six
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-six
Description:
The gridDataFormats package provides classes to unify reading and writing n-dimensional datasets. One can read grid data from files, make them available as a Grid object, and write out the data again.

py-guidata

Homepage:
Spack package:
Versions:
1.7.5
Build Dependencies:
python, py-setuptools, py-pyqt, py-spyder, py-h5py
Link Dependencies:
python
Run Dependencies:
python, py-pyqt, py-spyder, py-h5py
Description:
Automatic graphical user interfaces generation for easy dataset editing and display

py-guiqwt

Homepage:
Spack package:
Versions:
3.0.2
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-guidata, py-pythonqwt, py-pillow
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-guidata, py-pythonqwt, py-pillow
Description:
guiqwt is a set of tools for curve and image plotting (extension to PythonQwt)

py-h5glance

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
python, py-h5py
Link Dependencies:
python
Run Dependencies:
python, py-h5py, py-python-htmlgen
Description:
H5Glance lets you explore HDF5 files in the terminal or an HTML interface.

py-h5py

Homepage:
Spack package:
Versions:
2.9.0, 2.8.0, 2.7.1, 2.7.0, 2.6.0, 2.5.0, 2.4.0
Build Dependencies:
python, py-cython, py-pkgconfig, py-setuptools, py-numpy, py-six, hdf5, mpi, py-mpi4py
Link Dependencies:
python, hdf5, mpi
Run Dependencies:
python, py-numpy, py-six, py-mpi4py
Description:
The h5py package provides both a high- and low-level interface to the HDF5 library from Python.

py-hdfs

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
python, py-setuptools, py-docopt, py-requests, py-six
Link Dependencies:
python
Run Dependencies:
python, py-docopt, py-requests, py-six
Description:
API and command line interface for HDFS

py-hepdata-validator

Homepage:
Spack package:
Versions:
0.1.16, 0.1.15, 0.1.14, 0.1.8
Build Dependencies:
python, py-setuptools, py-jsonschema, py-pyyaml
Link Dependencies:
python
Run Dependencies:
python, py-jsonschema, py-pyyaml
Description:
Validation schema and code for HEPdata submissions.

py-hpccm

Homepage:
Spack package:
Versions:
19.2.0
Build Dependencies:
python, py-setuptools, py-enum34, py-six
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-enum34, py-six
Description:
HPC Container Maker (HPCCM - pronounced H-P-see-M) is an open source tool to make it easier to generate container specification files.

py-html2text

Homepage:
Spack package:
Versions:
2016.9.19
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Turn HTML into equivalent Markdown-structured text.

py-html5lib

Homepage:
Spack package:
Versions:
1.0.1, 0.9999999
Build Dependencies:
python, py-six, py-setuptools, py-webencodings
Link Dependencies:
python
Run Dependencies:
python, py-six, py-webencodings
Description:
HTML parser based on the WHATWG HTML specification.

py-htseq

Homepage:
Spack package:
Versions:
0.11.2, 0.9.1
Build Dependencies:
python, py-setuptools, py-numpy, py-pysam, py-matplotlib, py-cython, swig
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-pysam, py-matplotlib, py-cython, swig
Description:
HTSeq is a Python package that provides infrastructure to process data from high-throughput sequencing assays.

py-httpbin

Homepage:
Spack package:
Versions:
0.5.0
Build Dependencies:
python, py-setuptools, py-decorator, py-flask, py-itsdangerous, py-markupsafe, py-six
Link Dependencies:
python
Run Dependencies:
python, py-decorator, py-flask, py-itsdangerous, py-markupsafe, py-six
Description:
HTTP Request and Response Service

py-hypothesis

Homepage:
Spack package:
Versions:
4.7.2, 3.7.0
Build Dependencies:
python, py-setuptools, py-enum34
Link Dependencies:
python
Run Dependencies:
python, py-enum34
Description:
A library for property based testing.

py-idna

Homepage:
Spack package:
Versions:
2.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python, py-setuptools
Run Dependencies:
python
Description:
Internationalized Domain Names for Python (IDNA 2008 and UTS #46)

py-igraph

Homepage:
Spack package:
Versions:
0.7.0
Build Dependencies:
python, py-setuptools, igraph
Link Dependencies:
python, igraph
Run Dependencies:
python
Description:
igraph is a collection of network analysis tools with the emphasis on efficiency, portability and ease of use.

py-illumina-utils

Homepage:
Spack package:
Versions:
2.3, 2.2
Build Dependencies:
python, py-pip, py-setuptools, py-matplotlib, py-numpy, py-python-levenshtein
Link Dependencies:
python
Run Dependencies:
python, py-matplotlib, py-numpy, py-python-levenshtein
Description:
A library and collection of scripts to work with Illumina paired-end data (for CASAVA 1.8+).

py-imageio

Homepage:
Spack package:
Versions:
2.3.0
Build Dependencies:
python, py-numpy, py-pillow, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-pillow, ffmpeg
Description:
Imageio is a Python library that provides an easy interface to read and write a wide range of image data, including animated images, video, volumetric data, and scientific formats. It is cross-platform, runs on Python 2.7 and 3.4+, and is easy to install.

py-imagesize

Homepage:
Spack package:
Versions:
1.1.0, 0.7.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Parses image file headers and returns image size. Supports PNG, JPEG, JPEG2000, and GIF image file formats.

py-iminuit

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
python, py-setuptools, py-numpy, py-matplotlib, py-cython
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-matplotlib
Description:
Interactive IPython-Friendly Minimizer based on SEAL Minuit2.

py-importlib

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Packaging for importlib from Python 2.7

py-invoke

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Pythonic task execution

py-ipaddress

Homepage:
Spack package:
Versions:
1.0.18
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python 3.3's ipaddress for older Python versions

py-ipdb

Homepage:
Spack package:
Versions:
0.10.1
Build Dependencies:
python, py-setuptools, py-ipython, py-traitlets, py-six, py-pexpect, py-prompt-toolkit
Link Dependencies:
python, py-ipython, py-traitlets, py-six, py-pexpect, py-prompt-toolkit
Run Dependencies:
python
Description:
ipdb is the iPython debugger and has many additional features, including a better interactive debugging experience via colorized output.

py-ipykernel

Homepage:
Spack package:
Versions:
5.1.0, 4.5.0, 4.4.1, 4.4.0, 4.3.1, 4.3.0, 4.2.2, 4.2.1, 4.2.0, 4.1.1, 4.1.0
Build Dependencies:
python, py-setuptools, py-traitlets, py-tornado, py-ipython, py-jupyter-client, py-pexpect
Link Dependencies:
python
Run Dependencies:
python, py-traitlets, py-tornado, py-ipython, py-jupyter-client, py-pexpect
Description:
IPython Kernel for Jupyter

py-ipython

Homepage:
Spack package:
Versions:
7.3.0, 5.1.0, 3.1.0, 2.3.1
Build Dependencies:
python, py-backports-shutil-get-terminal-size, py-pathlib2, py-pygments, py-pickleshare, py-simplegeneric, py-prompt-toolkit, py-traitlets, py-decorator, py-pexpect, py-backcall
Link Dependencies:
python
Run Dependencies:
python, py-backports-shutil-get-terminal-size, py-pathlib2, py-pygments, py-pickleshare, py-simplegeneric, py-prompt-toolkit, py-traitlets, py-decorator, py-pexpect, py-backcall
Description:
IPython provides a rich toolkit to help you make the most out of using Python interactively.

py-ipython-genutils

Homepage:
Spack package:
Versions:
0.2.0, 0.1.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Vestigial utilities from IPython

py-ipywidgets

Homepage:
Spack package:
Versions:
5.2.2
Build Dependencies:
python, py-ipython, py-ipykernel, py-traitlets
Link Dependencies:
python
Run Dependencies:
python, py-ipython, py-ipykernel, py-traitlets
Description:
IPython widgets for the Jupyter Notebook

py-isort

Homepage:
Spack package:
Versions:
4.2.15
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Python utility / library to sort Python imports.

py-itsdangerous

Homepage:
Spack package:
Versions:
0.24
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Various helpers to pass trusted data to untrusted environments.

py-jdcal

Homepage:
Spack package:
Versions:
1.3, 1.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Julian dates from proleptic Gregorian and Julian calendars

py-jedi

Homepage:
Spack package:
Versions:
0.10.0, 0.9.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
An autocompletion tool for Python that can be used for text editors.

py-jinja2

Homepage:
Spack package:
Versions:
2.10, 2.9.6, 2.8, 2.7.3, 2.7.2, 2.7.1, 2.7
Build Dependencies:
python, py-setuptools, py-markupsafe, py-babel
Link Dependencies:
python
Run Dependencies:
python, py-markupsafe, py-babel
Description:
Jinja2 is a template engine written in pure Python. It provides a Django inspired non-XML syntax but supports inline expressions and an optional sandboxed environment.

py-joblib

Homepage:
Spack package:
Versions:
0.13.2, 0.10.3, 0.10.2, 0.10.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Python function as pipeline jobs

py-jprops

Homepage:
Spack package:
Versions:
2.0.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Java properties file parser for Python

py-jpype

Homepage:
Spack package:
Versions:
0.6.2, 0.6.1, 0.6.0
Build Dependencies:
python, py-setuptools, java
Link Dependencies:
python
Run Dependencies:
python, java
Description:
JPype is an effort to allow python programs full access to java class libraries.

py-jsonschema

Homepage:
Spack package:
Versions:
2.5.1
Build Dependencies:
python, py-setuptools, py-vcversioner, py-functools32
Link Dependencies:
python
Run Dependencies:
python, py-vcversioner, py-functools32
Description:
Jsonschema: An(other) implementation of JSON Schema for Python.

py-junit-xml

Homepage:
Spack package:
Versions:
1.7
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Creates JUnit XML test result documents that can be read by tools such as Jenkins

py-jupyter-client

Homepage:
Spack package:
Versions:
4.4.0, 4.3.0, 4.2.2, 4.2.1, 4.2.0, 4.1.1, 4.1.0, 4.0.0
Build Dependencies:
python, py-traitlets, py-jupyter-core, py-zmq
Link Dependencies:
python
Run Dependencies:
python, py-traitlets, py-jupyter-core, py-zmq
Description:
Jupyter protocol client APIs

py-jupyter-console

Homepage:
Spack package:
Versions:
5.2.0, 5.0.0, 4.1.1, 4.1.0, 4.0.3, 4.0.2
Build Dependencies:
python, py-jupyter-client, py-ipython, py-ipykernel, py-pygments
Link Dependencies:
python
Run Dependencies:
python, py-jupyter-client, py-ipython, py-ipykernel, py-pygments
Description:
Jupyter Terminal Console

py-jupyter-core

Homepage:
Spack package:
Versions:
4.4.0, 4.2.0, 4.1.1, 4.1.0, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2, 4.0.1, 4.0
Build Dependencies:
python, py-traitlets
Link Dependencies:
python
Run Dependencies:
python, py-traitlets
Description:
Core Jupyter functionality

py-jupyter-notebook

Homepage:
Spack package:
Versions:
4.2.3, 4.2.2, 4.2.1, 4.2.0, 4.1.0, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2
Build Dependencies:
python, npm, node-js, py-jinja2, py-tornado, py-ipython-genutils, py-traitlets, py-jupyter-core, py-jupyter-client, py-jupyter-console, py-nbformat, py-nbconvert, py-ipykernel, py-terminado, py-ipywidgets
Link Dependencies:
python
Run Dependencies:
python, node-js, py-jinja2, py-tornado, py-ipython-genutils, py-traitlets, py-jupyter-core, py-jupyter-client, py-jupyter-console, py-nbformat, py-nbconvert, py-ipykernel, py-terminado, py-ipywidgets
Description:
Jupyter Interactive Notebook

py-jupyterhub

Homepage:
Spack package:
Versions:
0.9.4
Build Dependencies:
python, node-js, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, node-js, py-dateutil, py-jinja2, py-sqlalchemy, py-tornado, py-traitlets, py-alembic, py-mako, py-async-generator, py-jupyter-notebook, py-prometheus-client, py-send2trash, py-requests
Description:
Multi-user server for Jupyter notebooks.

py-keras

Homepage:
Spack package:
Versions:
2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.6, 2.1.5, 2.1.4, 2.1.3, 2.1.2, 2.1.1, 2.1.0, 2.0.9, 2.0.8, 2.0.7, 2.0.6, 2.0.5, 2.0.4, 2.0.3, 1.2.2, 1.2.1, 1.2.0, 1.1.2, 1.1.1, 1.1.0
Build Dependencies:
python, py-setuptools, py-theano, py-pyyaml, py-six
Link Dependencies:
python
Run Dependencies:
python, py-keras-applications, py-keras-preprocessing, py-theano, py-pyyaml, py-six
Description:
Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano or TensorFlow.

py-keras-applications

Homepage:
Spack package:
Versions:
1.0.7, 1.0.6, 1.0.4, 1.0.3, 1.0.2, 1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Sample Deep Learning application in Keras. Keras depends on this package to run properly.

py-keras-preprocessing

Homepage:
Spack package:
Versions:
1.0.9, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Utilities for working with image data, text data, and sequence data.

py-kiwisolver

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A fast implementation of the Cassowary constraint solver

py-kmodes

Homepage:
Spack package:
Versions:
0.10.1
Build Dependencies:
python, py-setuptools, py-numpy, py-scikit-learn, py-scipy, py-joblib
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scikit-learn, py-scipy, py-joblib
Description:
Python implementations of the k-modes and k-prototypes clustering algorithms for clustering categorical data.

py-lark-parser

Homepage:
Spack package:
Versions:
0.6.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Lark is a modern general-purpose parsing library for Python.

py-latexcodec

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
A lexer and codec to work with LaTeX code in Python.

py-lazy

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Lazy attributes for Python objects

py-lazy-object-proxy

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A fast and thorough lazy object proxy.

py-lazy-property

Homepage:
Spack package:
Versions:
0.0.1, 0.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A package for making properties lazy

py-lazyarray

Homepage:
Spack package:
Versions:
0.2.10, 0.2.8
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
a Python package that provides a lazily-evaluated numerical array class, larray, based on and compatible with NumPy arrays.

py-libconf

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A pure-Python libconfig reader/writer with permissive license

py-libensemble

Homepage:
Spack package:
Versions:
develop, 0.5.0, 0.4.1, 0.4.0, 0.3.0, 0.2.0, 0.1.0
Build Dependencies:
python, py-setuptools, mpi, py-mpi4py, py-numpy, py-scipy, py-petsc4py, nlopt
Link Dependencies:
python, mpi
Run Dependencies:
python, py-mpi4py, py-numpy, py-scipy, py-petsc4py, nlopt
Description:
Library for managing ensemble-like collections of computations.

py-line-profiler

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
python, py-setuptools, py-cython, py-ipython
Link Dependencies:
python
Run Dependencies:
python, py-ipython
Description:
Line-by-line profiler.

py-linecache2

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
python, py-setuptools, py-pbr
Link Dependencies:
python
Run Dependencies:
python, py-pbr
Description:
Backports of the linecache module

py-lit

Homepage:
Spack package:
Versions:
0.7.1, 0.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
lit is a portable tool for executing LLVM and Clang style test suites, summarizing their results, and providing indication of failures. lit is designed to be a lightweight testing tool with as simple a user interface as possible.

py-llvmlite

Homepage:
Spack package:
Versions:
0.27.1, 0.26.0, 0.25.0, 0.23.0, 0.20.0
Build Dependencies:
python, py-setuptools, py-enum34, llvm, binutils
Link Dependencies:
python, llvm
Run Dependencies:
python, py-enum34
Description:
A lightweight LLVM python binding for writing JIT compilers

py-lmfit

Homepage:
Spack package:
Versions:
0.9.5
Build Dependencies:
python, py-numpy, py-scipy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy
Description:
Least-Squares Minimization with Bounds and Constraints

py-localcider

Homepage:
Spack package:
Versions:
0.1.14
Build Dependencies:
python, py-setuptools, py-numpy, py-matplotlib, py-scipy
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-matplotlib, py-scipy
Description:
Tools for calculating sequence properties of disordered proteins

py-locket

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
File-based locks for Python for Linux and Windows.

py-lockfile

Homepage:
Spack package:
Versions:
0.10.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
The lockfile package exports a LockFile class which provides a simple API for locking files. Unlike the Windows msvcrt.locking function, the fcntl.lockf and flock functions, and the deprecated posixfile module, the API is identical across both Unix (including Linux and Mac) and Windows platforms. The lock mechanism relies on the atomic nature of the link (on Unix) and mkdir (on Windows) system calls. An implementation based on SQLite is also provided, more as a demonstration of the possibilities it provides than as production-quality code.

py-logilab-common

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Common modules used by Logilab projects

py-lrudict

Homepage:
Spack package:
Versions:
1.1.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A fast LRU cache

py-luigi

Homepage:
Spack package:
Versions:
2.8.3
Build Dependencies:
python, py-setuptools, py-tornado, py-python-daemon, py-dateutil
Link Dependencies:
python
Run Dependencies:
python, py-tornado, py-python-daemon, py-dateutil
Test Dependencies:
py-test
Description:
Workflow mgmgt + task scheduling + dependency resolution

py-lxml

Homepage:
Spack package:
Versions:
4.2.5, 3.7.3, 2.3
Build Dependencies:
python, py-setuptools, py-cython, libxml2, libxslt
Link Dependencies:
python
Run Dependencies:
python, libxml2, libxslt
Description:
lxml is the most feature-rich and easy-to-use library for processing XML and HTML in the Python language.

py-lzstring

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
python, py-setuptools, py-future
Link Dependencies:
python
Run Dependencies:
python, py-future
Description:
lz-string for python.

py-m2r

Homepage:
Spack package:
Versions:
0.2.1, 0.2.0, 0.1.15, 0.1.14, 0.1.13, 0.1.12, 0.1.11, 0.1.10, 0.1.9, 0.1.8
Build Dependencies:
python, py-setuptools, py-mistune, py-docutils
Link Dependencies:
python
Run Dependencies:
python, py-mistune, py-docutils
Description:
M2R converts a markdown file including reStructuredText (rst) markups to a valid rst format.

py-macholib

Homepage:
Spack package:
Versions:
1.8
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python package for Mach-O header analysis and editing

py-machotools

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
python, py-setuptools, py-macholib
Link Dependencies:
python
Run Dependencies:
python, py-macholib
Description:
Python package for editing Mach-O headers using macholib

py-macs2

Homepage:
Spack package:
Versions:
2.1.1.20160309
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-numpy
Description:
MACS2 Model-based Analysis of ChIP-Seq

py-maestrowf

Homepage:
Spack package:
Versions:
1.1.2, 1.1.1, 1.1.0, 1.0.1
Build Dependencies:
python, py-setuptools, py-pyyaml, py-six, py-enum34, py-tabulate, py-filelock
Link Dependencies:
python
Run Dependencies:
python, py-pyyaml, py-six, py-enum34, py-tabulate, py-filelock
Description:
A general purpose workflow conductor for running multi-step simulation studies.

py-mako

Homepage:
Spack package:
Versions:
1.0.4, 1.0.1
Build Dependencies:
python, py-setuptools, py-markupsafe
Link Dependencies:
python
Run Dependencies:
python, py-markupsafe
Test Dependencies:
py-mock, py-pytest
Description:
A super-fast templating language that borrows the best ideas from the existing templating languages.

py-mappy

Homepage:
Spack package:
Versions:
2.2
Build Dependencies:
python, zlib
Link Dependencies:
python, zlib
Run Dependencies:
python
Description:
Mappy provides a convenient interface to minimap2.

py-markdown

Homepage:
Spack package:
Versions:
3.1.1, 2.6.11, 2.6.7, 2.6.6, 2.6.5, 2.6.4, 2.6.3, 2.6.2, 2.6.1, 2.6, 2.5.2, 2.5.1, 2.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
This is a Python implementation of John Gruber's Markdown. It is almost completely compliant with the reference implementation, though there are a few very minor differences. See John's Syntax Documentation for the syntax rules.

py-markupsafe

Homepage:
Spack package:
Versions:
1.0, 0.23, 0.22, 0.21, 0.20, 0.19
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
MarkupSafe is a library for Python that implements a unicode string that is aware of HTML escaping rules and can be used to implement automatic string escaping. It is used by Jinja 2, the Mako templating engine, the Pylons web framework and many more.

py-matplotlib

Homepage:
Spack package:
Versions:
3.0.2, 3.0.0, 2.2.3, 2.2.2, 2.0.2, 2.0.0, 1.5.3, 1.5.1, 1.4.3, 1.4.2
Build Dependencies:
python, py-setuptools, libpng, freetype, py-numpy, py-dateutil, py-pyparsing, py-pytz, py-cycler, py-subprocess32, py-functools32, py-kiwisolver, tk, qt, py-pyside, image-magick, pkgconfig, pil, py-ipython, qhull, py-six
Link Dependencies:
python, libpng, freetype, tk, qt, image-magick, qhull
Run Dependencies:
python, py-setuptools, py-numpy, py-dateutil, py-pyparsing, py-pytz, py-cycler, py-subprocess32, py-functools32, py-kiwisolver, py-pyside, pil, py-ipython, ghostscript, texlive, py-six
Test Dependencies:
py-nose, py-mock
Description:
matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms.

py-mccabe

Homepage:
Spack package:
Versions:
0.6.1, 0.6.0, 0.5.3, 0.5.2, 0.5.1, 0.5.0, 0.4.0, 0.3.1, 0.3, 0.2.1, 0.2, 0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-pytest
Description:
Ned's script to check McCabe complexity.

py-mdanalysis

Homepage:
Spack package:
Versions:
0.19.2, 0.19.1, 0.19.0, 0.18.0, 0.17.0, 0.16.2, 0.16.1, 0.16.0, 0.15.0
Build Dependencies:
python, py-setuptools, py-cython, py-numpy, py-six, py-biopython, py-networkx, py-griddataformats, py-matplotlib, py-scipy, py-seaborn, py-netcdf4
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-six, py-biopython, py-networkx, py-griddataformats, py-matplotlib, py-scipy, py-seaborn, py-netcdf4, hdf5
Description:
MDAnalysis is a Python toolkit to analyze molecular dynamics trajectories generated by a wide range of popular simulation packages including DL_Poly, CHARMM, Amber, NAMD, LAMMPS, and Gromacs. (See the lists of supported trajectory formats and topology formats.)

py-meep

Homepage:
Spack package:
Versions:
1.4.2
Build Dependencies:
python, py-numpy, py-scipy, py-matplotlib, mpi, meep, swig
Link Dependencies:
python, mpi, meep, swig
Run Dependencies:
python, py-numpy, py-scipy, py-matplotlib
Description:
Python-meep is a wrapper around libmeep. It allows the scripting of Meep-simulations with Python

py-memory-profiler

Homepage:
Spack package:
Versions:
0.47
Build Dependencies:
python, py-setuptools, py-psutil
Link Dependencies:
python
Run Dependencies:
python, py-psutil
Description:
A module for monitoring memory usage of a python program

py-merlin

Homepage:
Spack package:
Versions:
1.8
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A custom version of Phillip J. Eby's setuptools.

py-metasv

Homepage:
Spack package:
Versions:
0.5.4
Build Dependencies:
python, py-pybedtools, py-pysam, py-pyvcf, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-pybedtools, py-pysam, py-pyvcf
Description:
An accurate and integrative structural-variant caller for next generation sequencing

py-methylcode

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
python, py-six, py-setuptools, py-numpy, py-pyparsing, py-pyfasta, py-bsddb3, bowtie
Link Dependencies:
python, py-six, py-setuptools, py-numpy, py-pyparsing, py-pyfasta, py-bsddb3, bowtie
Run Dependencies:
python
Description:
MethylCoder is a single program that takes of bisulfite-treated reads and outputs per-base methylation data.

py-misopy

Homepage:
Spack package:
Versions:
0.5.4
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-pysam, py-matplotlib, samtools, bedtools2
Link Dependencies:
python, samtools, bedtools2
Run Dependencies:
python, py-numpy, py-scipy, py-pysam, py-matplotlib
Description:
MISO (Mixture of Isoforms) is a probabilistic framework that quantitates the expression level of alternatively spliced genes from RNA-Seq data, and identifies differentially regulated isoforms or exons across samples.

py-mistune

Homepage:
Spack package:
Versions:
0.7.1, 0.7, 0.6, 0.5.1, 0.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python markdown parser

py-mock

Homepage:
Spack package:
Versions:
2.0.0, 1.3.0
Build Dependencies:
python, py-pbr, py-six, py-funcsigs, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-pbr, py-six, py-funcsigs
Description:
mock is a library for testing in Python. It allows you to replace parts of your system under test with mock objects and make assertions about how they have been used.

py-modred

Homepage:
Spack package:
Versions:
2.0.4, 2.0.3, 2.0.2, 2.0.1, 2.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Modred is a parallelized library for finding modal decompositions and reduced-order models.

py-moltemplate

Homepage:
Spack package:
Versions:
2.5.8
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
Moltemplate is a general cross-platform text-based molecule builder for LAMMPS.

py-mongo

Homepage:
Spack package:
Versions:
3.6.0, 3.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python driver for MongoDB <http://www.mongodb.org>

py-monotonic

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
An implementation of time.monotonic() for Python 2 & < 3.3

py-monty

Homepage:
Spack package:
Versions:
0.9.6
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Monty is the missing complement to Python.

py-more-itertools

Homepage:
Spack package:
Versions:
4.3.0, 4.1.0, 2.2
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Additions to the standard Python itertools package.

py-mpi4py

Homepage:
Spack package:
Versions:
develop, 3.0.1, 3.0.0, 2.0.0, 1.3.1
Build Dependencies:
python, py-setuptools, mpi, py-cython
Link Dependencies:
python, mpi
Run Dependencies:
python
Description:
This package provides Python bindings for the Message Passing Interface (MPI) standard. It is implemented on top of the MPI-1/MPI-2 specification and exposes an API which grounds on the standard MPI-2 C++ bindings.

py-mpmath

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0, 0.19
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A Python library for arbitrary-precision floating-point arithmetic.

py-multiprocess

Homepage:
Spack package:
Versions:
0.70.5, 0.70.4
Build Dependencies:
python, py-setuptools, py-dill
Link Dependencies:
python
Run Dependencies:
python, py-dill
Description:
Better multiprocessing and multithreading in Python

py-multiqc

Homepage:
Spack package:
Versions:
1.7, 1.5, 1.3, 1.0
Build Dependencies:
python, py-setuptools, py-click, py-jinja2, py-lzstring, py-future, py-spectra, py-matplotlib, py-numpy, py-pyyaml, py-simplejson, py-requests, py-enum34, py-markdown
Link Dependencies:
python
Run Dependencies:
python, py-click, py-jinja2, py-lzstring, py-future, py-spectra, py-matplotlib, py-numpy, py-pyyaml, py-simplejson, py-requests, py-enum34, py-markdown
Description:
MultiQC is a tool to aggregate bioinformatics results across many samples into a single report. It is written in Python and contains modules for a large number of common bioinformatics tools.

py-munch

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
A Munch is a Python dictionary that provides attribute-style access (a la JavaScript objects).

py-mx

Homepage:
Spack package:
Versions:
3.2.8
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
The eGenix.com mx Base Distribution for Python is a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types.

py-mxnet

Homepage:
Spack package:
Versions:
0.10.0.post2
Build Dependencies:
python, py-setuptools, py-numpy, mxnet
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-numpy, mxnet
Description:
Python binding for DMLC/MXNet.

py-myhdl

Homepage:
Spack package:
Versions:
0.9.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python as a Hardware Description Language

py-mysql-connector

Homepage:
Spack package:
Versions:
8.0.13
Build Dependencies:
python, py-setuptools, py-protobuf
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-protobuf
Description:
MySQL Connector/Python is implementing the MySQL Client/Server protocol completely in Python. No MySQL libraries are needed, and no compilation is necessary to run this Python DB API v2.0 compliant driver.

py-mysqldb1

Homepage:
Spack package:
Versions:
1.2.5
Build Dependencies:
python, mysql, py-setuptools
Link Dependencies:
python, mysql
Run Dependencies:
python
Description:
Legacy mysql bindings for python

py-natsort

Homepage:
Spack package:
Versions:
5.2.0, 5.1.1, 5.1.0, 5.0.3, 5.0.2, 5.0.1, 5.0.0, 4.0.4, 4.0.3, 4.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Simple yet flexible natural sorting in Python.

py-nbconvert

Homepage:
Spack package:
Versions:
4.2.0, 4.1.0, 4.0.0
Build Dependencies:
python, py-pycurl, py-mistune, py-jinja2, py-pygments, py-traitlets, py-jupyter-core, py-nbformat, py-entrypoints, py-tornado, py-jupyter-client
Link Dependencies:
python
Run Dependencies:
python, py-mistune, py-jinja2, py-pygments, py-traitlets, py-jupyter-core, py-nbformat, py-entrypoints, py-tornado, py-jupyter-client
Description:
Jupyter Notebook Conversion

py-nbformat

Homepage:
Spack package:
Versions:
4.1.0, 4.0.1, 4.0.0
Build Dependencies:
python, py-ipython-genutils, py-traitlets, py-jsonschema, py-jupyter-core
Link Dependencies:
python
Run Dependencies:
python, py-ipython-genutils, py-traitlets, py-jsonschema, py-jupyter-core
Description:
The Jupyter Notebook format

py-neo

Homepage:
Spack package:
Versions:
0.5.2, 0.4.1
Build Dependencies:
python, py-setuptools, py-numpy, py-quantities
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-quantities
Description:
Neo is a package for representing electrophysiology data in Python, together with support for reading a wide range of neurophysiology file formats

py-nestle

Homepage:
Spack package:
Versions:
0.1.1
Build Dependencies:
python, py-numpy, py-scipy
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy
Description:
Nested sampling algorithms for evaluating Bayesian evidence.

py-netcdf4

Homepage:
Spack package:
Versions:
1.4.2, 1.2.7, 1.2.3.1
Build Dependencies:
python, py-setuptools, py-cython, py-numpy, py-cftime, netcdf, hdf5
Link Dependencies:
python, netcdf, hdf5
Run Dependencies:
python, py-numpy, py-cftime
Description:
Python interface to the netCDF Library.

py-netifaces

Homepage:
Spack package:
Versions:
0.10.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Portable network interface information

py-networkx

Homepage:
Spack package:
Versions:
2.2, 2.1, 1.11, 1.10
Build Dependencies:
python, py-decorator, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-decorator
Description:
NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.

py-nose

Homepage:
Spack package:
Versions:
1.3.7, 1.3.6, 1.3.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
nose extends the test loading and running features of unittest, making it easier to write, find and run tests.

py-nosexcover

Homepage:
Spack package:
Versions:
1.0.11
Build Dependencies:
python, py-setuptools, py-nose, py-coverage
Link Dependencies:
python
Run Dependencies:
python, py-nose, py-coverage
Description:
A companion to the built-in nose.plugins.cover, this plugin will write out an XML coverage report to a file named coverage.xml.

py-numba

Homepage:
Spack package:
Versions:
0.40.1, 0.35.0
Build Dependencies:
python, py-numpy, py-setuptools, py-llvmlite, py-argparse, py-funcsigs, py-singledispatch
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-llvmlite, py-argparse, py-funcsigs, py-singledispatch
Description:
NumPy aware dynamic Python compiler using LLVM

py-numexpr

Homepage:
Spack package:
Versions:
2.6.9, 2.6.5, 2.6.1, 2.5, 2.4.6
Build Dependencies:
python, py-numpy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Fast numerical expression evaluator for NumPy

py-numexpr3

Homepage:
Spack package:
Versions:
3.0.1.a1
Build Dependencies:
python, py-numpy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Numexpr3 is a fast numerical expression evaluator for NumPy. With it, expressions that operate on arrays (like "3*a+4*b") are accelerated and use less memory than doing the same calculation in Python. In addition, its multi-threaded capabilities can make use of all your cores, which may accelerate computations, most specially if they are not memory- bounded (e.g. those using transcendental functions). Compared to NumExpr 2.6, functions have been re-written in a fashion such that gcc can auto- vectorize them with SIMD instruction sets such as SSE2 or AVX2, if your processor supports them. Use of a newer version of gcc such as 5.4 is strongly recommended.

py-numpy

Homepage:
Spack package:
Versions:
1.16.3, 1.16.2, 1.16.1, 1.16.0, 1.15.4, 1.15.3, 1.15.2, 1.15.1, 1.15.0, 1.14.6, 1.14.5, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14.0, 1.13.3, 1.13.1, 1.13.0, 1.12.1, 1.12.0, 1.11.3, 1.11.2, 1.11.1, 1.11.0, 1.10.4, 1.9.3, 1.9.2, 1.9.1
Build Dependencies:
python, py-setuptools, blas, lapack
Link Dependencies:
python, blas, lapack
Run Dependencies:
python
Test Dependencies:
py-nose, py-pytest
Description:
NumPy is the fundamental package for scientific computing with Python. It contains among other things: a powerful N-dimensional array object, sophisticated (broadcasting) functions, tools for integrating C/C++ and Fortran code, and useful linear algebra, Fourier transform, and random number capabilities

py-numpydoc

Homepage:
Spack package:
Versions:
0.6.0
Build Dependencies:
python, py-setuptools, py-sphinx
Link Dependencies:
python
Run Dependencies:
python
Description:
numpydoc - Numpy's Sphinx extensions

py-olefile

Homepage:
Spack package:
Versions:
0.44
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Python package to parse, read and write Microsoft OLE2 files

py-onnx

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
python, py-setuptools, protobuf, py-protobuf, py-numpy, py-six, py-typing, py-typing-extensions
Link Dependencies:
python, protobuf
Run Dependencies:
python, py-protobuf, py-numpy, py-six, py-typing, py-typing-extensions
Description:
Open Neural Network Exchange (ONNX) is an open ecosystem that empowers AI developers to choose the right tools as their project evolves. ONNX provides an open source format for AI models, both deep learning and traditional ML. It defines an extensible computation graph model, as well as definitions of built-in operators and standard data types. Currently we focus on the capabilities needed for inferencing (scoring).

py-ont-fast5-api

Homepage:
Spack package:
Versions:
0.3.2
Build Dependencies:
python, py-setuptools, py-h5py, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-h5py, py-numpy
Description:
This project provides classes and utility functions for working with read fast5 files. It provides an abstraction layer between the underlying h5py library and the various concepts central to read fast5 files, such as "reads", "analyses", "analysis summaries", and "analysis datasets". Ideally all interaction with a read fast5 file should be possible via this API, without having to directly invoke the h5py library.

py-openpmd-validator

Homepage:
Spack package:
Versions:
1.0.0.2
Build Dependencies:
python, py-setuptools, py-numpy, py-dateutil, py-h5py
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-dateutil, py-h5py
Description:
Validator and Example Scripts for the openPMD markup. openPMD is an open standard for particle-mesh data files.

py-openpyxl

Homepage:
Spack package:
Versions:
2.4.5, 2.2.0-b1
Build Dependencies:
python, py-setuptools, py-jdcal, py-et-xmlfile
Link Dependencies:
python
Run Dependencies:
python, py-jdcal, py-et-xmlfile
Description:
A Python library to read/write Excel 2010 xlsx/xlsm files

py-openslide-python

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
python, openslide, py-setuptools, py-pillow
Link Dependencies:
python, openslide
Run Dependencies:
python, py-pillow
Description:
OpenSlide Python is a Python interface to the OpenSlide library.

py-opentuner

Homepage:
Spack package:
Versions:
0.8.0
Build Dependencies:
python, py-argparse, py-fn, py-numpy, py-pysqlite, py-setuptools, py-sqlalchemy
Link Dependencies:
python
Run Dependencies:
python, py-argparse, py-fn, py-numpy, py-pysqlite, py-sqlalchemy
Description:
An extensible framework for program autotuning.

py-ordereddict

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A drop-in substitute for Py2.7's new collections. OrderedDict that works in Python 2.4-2.6.

py-oset

Homepage:
Spack package:
Versions:
0.1.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Set that remembers original insertion order.

py-owslib

Homepage:
Spack package:
Versions:
0.16.0
Build Dependencies:
python, py-setuptools, py-dateutil, py-pytz, py-requests, py-pyproj
Link Dependencies:
python
Run Dependencies:
python, py-dateutil, py-pytz, py-requests, py-pyproj
Description:
OWSLib is a Python package for client programming with Open Geospatial Consortium (OGC) web service (hence OWS) interface standards, and their related content models.

py-packaging

Homepage:
Spack package:
Versions:
17.1, 16.8
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-six, py-pyparsing
Description:
Core utilities for Python packages.

py-palettable

Homepage:
Spack package:
Versions:
3.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Color palettes for Python.

py-pandas

Homepage:
Spack package:
Versions:
0.24.1, 0.23.4, 0.21.1, 0.20.0, 0.19.2, 0.19.0, 0.18.0, 0.16.1, 0.16.0
Build Dependencies:
python, py-dateutil, py-numpy, py-setuptools, py-cython, py-pytz, py-numexpr, py-bottleneck
Link Dependencies:
python
Run Dependencies:
python, py-dateutil, py-numpy, py-pytz, py-numexpr, py-bottleneck
Description:
pandas is a Python package providing fast, flexible, and expressive data structures designed to make working with relational or labeled data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world data analysis in Python. Additionally, it has the broader goal of becoming the most powerful and flexible open source data analysis / manipulation tool available in any language.

py-paramiko

Homepage:
Spack package:
Versions:
2.1.2
Build Dependencies:
python, py-setuptools, py-pyasn1, py-cryptography
Link Dependencies:
python
Run Dependencies:
python, py-pyasn1, py-cryptography
Description:
SSH2 protocol library

py-partd

Homepage:
Spack package:
Versions:
0.3.8
Build Dependencies:
python, py-setuptools, py-locket, py-toolz
Link Dependencies:
python
Run Dependencies:
python, py-locket, py-toolz
Description:
Key-value byte store with appendable values.

py-pathlib2

Homepage:
Spack package:
Versions:
2.3.2, 2.1.0
Build Dependencies:
python, py-setuptools, py-six, py-scandir
Link Dependencies:
python
Run Dependencies:
python, py-six, py-scandir
Description:
Backport of pathlib from python 3.4

py-pathos

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
python, py-setuptools, py-multiprocess, py-pox, py-ppft, py-dill
Link Dependencies:
python
Run Dependencies:
python, py-multiprocess, py-pox, py-ppft, py-dill
Description:
Parallel graph management and execution in heterogeneous computing

py-pathspec

Homepage:
Spack package:
Versions:
0.3.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
pathspec extends the test loading and running features of unittest, making it easier to write, find and run tests.

py-patsy

Homepage:
Spack package:
Versions:
0.4.1
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-six
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-six
Test Dependencies:
py-nose
Description:
A Python package for describing statistical models and for building design matrices.

py-pauvre

Homepage:
Spack package:
Versions:
0.1.86
Build Dependencies:
python, py-matplotlib, py-biopython, py-pandas, py-pillow
Link Dependencies:
python
Run Dependencies:
python, py-matplotlib, py-biopython, py-pandas, py-pillow
Description:
pauvre: plotting package designed for nanopore and PacBio long reads

py-pbr

Homepage:
Spack package:
Versions:
3.1.1, 2.0.0, 1.10.0, 1.8.1
Build Dependencies:
python, py-setuptools, py-enum34
Link Dependencies:
python
Run Dependencies:
python
Description:
PBR is a library that injects some useful and sensible default behaviors into your setuptools run.

py-pep8-naming

Homepage:
Spack package:
Versions:
0.7.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python, py-flake8-polyfill
Description:
Check PEP-8 naming conventions, plugin for flake8.

py-perf

Homepage:
Spack package:
Versions:
1.5.1
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
The Python perf module is a toolkit to write, run and analyze benchmarks.

py-performance

Homepage:
Spack package:
Versions:
0.6.1, 0.6.0
Build Dependencies:
python, py-setuptools, py-six, py-perf
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-six, py-perf
Description:
The performance project is intended to be an authoritative source of benchmarks for all Python implementations. The focus is on real-world benchmarks, rather than synthetic benchmarks, using whole applications when possible.

py-periodictable

Homepage:
Spack package:
Versions:
1.5.0, 1.4.1
Build Dependencies:
python, py-setuptools, py-numpy, py-pyparsing
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-pyparsing
Description:
nose extends the test loading and running features of unittest, making it easier to write, find and run tests.

py-petsc4py

Homepage:
Spack package:
Versions:
develop, 3.11.0, 3.10.1, 3.10.0, 3.9.1, 3.9.0, 3.8.1, 3.8.0, 3.7.0
Build Dependencies:
python, py-cython, py-setuptools, py-numpy, py-mpi4py, petsc
Link Dependencies:
python, petsc
Run Dependencies:
python, py-numpy, py-mpi4py
Description:
This package provides Python bindings for the PETSc package.

py-pexpect

Homepage:
Spack package:
Versions:
4.6.0, 4.2.1, 3.3
Build Dependencies:
python, py-ptyprocess
Link Dependencies:
python
Run Dependencies:
python, py-ptyprocess
Description:
Pexpect allows easy control of interactive console applications.

py-phonopy

Homepage:
Spack package:
Versions:
1.10.0
Build Dependencies:
python, py-numpy, py-scipy, py-matplotlib, py-pyyaml
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-matplotlib, py-pyyaml
Description:
Phonopy is an open source package for phonon calculations at harmonic and quasi-harmonic levels.

py-pickleshare

Homepage:
Spack package:
Versions:
0.7.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Tiny 'shelve'-like database with concurrency support

py-picrust

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
python, py-cogent, py-biom-format, py-setuptools, py-future, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-cogent, py-biom-format, py-future, py-numpy
Description:
bioinformatics software package designed to predict metagenome functional content from marker gene surveys and full genomes.

py-pil

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
The Python Imaging Library (PIL) adds image processing capabilities to your Python interpreter. This library supports many file formats, and provides powerful image processing and graphics capabilities.

py-pillow

Homepage:
Spack package:
Versions:
5.4.1, 5.1.0, 3.2.0, 3.0.0
Build Dependencies:
python, binutils, py-setuptools, jpeg, zlib, libtiff, freetype, lcms, openjpeg
Link Dependencies:
python, jpeg, zlib, libtiff, freetype, lcms, openjpeg
Run Dependencies:
python
Description:
Pillow is a fork of the Python Imaging Library (PIL). It adds image processing capabilities to your Python interpreter. This library supports many file formats, and provides powerful image processing and graphics capabilities.

py-pint

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Pint is a Python package to define, operate and manipulate physical quantities: the product of a numerical value and a unit of measurement. It allows arithmetic operations between them and conversions from and to different units.

py-pip

Homepage:
Spack package:
Versions:
19.0.3, 18.1, 10.0.1, 9.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
The PyPA recommended tool for installing Python packages.

py-pipits

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
python, py-biom-format, py-numpy, java, hmmer, fastx-toolkit, vsearch, itsx, rdp-classifier
Link Dependencies:
python, hmmer, fastx-toolkit, vsearch, itsx, rdp-classifier
Run Dependencies:
python, py-biom-format, py-numpy, java
Description:
Automated pipeline for analyses of fungal ITS from the Illumina

py-pkgconfig

Homepage:
Spack package:
Versions:
1.4.0, 1.2.2
Build Dependencies:
python, py-setuptools, pkgconfig, py-nose
Link Dependencies:
python
Run Dependencies:
python, pkgconfig
Test Dependencies:
py-nose
Description:
Interface Python with pkg-config.

py-plotly

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
python, py-setuptools, py-requests, py-six, py-pytz
Link Dependencies:
python
Run Dependencies:
python, py-requests, py-six, py-pytz
Description:
An interactive, browser-based graphing library for Python

py-pluggy

Homepage:
Spack package:
Versions:
0.7.1, 0.6.0
Build Dependencies:
python, py-setuptools, py-setuptools-scm
Link Dependencies:
python
Run Dependencies:
python
Description:
Plugin and hook calling mechanisms for python.

py-ply

Homepage:
Spack package:
Versions:
3.11, 3.8
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
PLY is nothing more than a straightforward lex/yacc implementation.

py-pmw

Homepage:
Spack package:
Versions:
2.0.1, 2.0.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Pmw is a toolkit for building high-level compound widgets, or megawidgets, constructed using other widgets as component parts.

py-poster

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Streaming HTTP uploads and multipart/form-data encoding.

py-pox

Homepage:
Spack package:
Versions:
0.2.3, 0.2.2, 0.2.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Utilities for filesystem exploration and automated builds.

py-ppft

Homepage:
Spack package:
Versions:
1.6.4.7.1, 1.6.4.6, 1.6.4.5
Build Dependencies:
python, py-setuptools, py-six, py-dill
Link Dependencies:
python
Run Dependencies:
python, py-six, py-dill
Description:
Distributed and parallel python

py-prettytable

Homepage:
Spack package:
Versions:
0.7.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
PrettyTable is a simple Python library designed to make it quick and easy to represent tabular data in visually appealing ASCII tables.

py-progress

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Easy progress reporting for Python

py-progressbar2

Homepage:
Spack package:
Versions:
3.39.3
Build Dependencies:
python, py-setuptools, py-six, py-python-utils
Link Dependencies:
python
Run Dependencies:
python, py-six, py-python-utils
Description:
A progress bar for Python 2 and Python 3

py-projectq

Homepage:
Spack package:
Versions:
develop, 0.3.6
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-future, py-requests, py-pybind11
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-future, py-requests, py-pybind11
Test Dependencies:
py-pytest
Description:
ProjectQ is an open-source software framework for quantum computing started at ETH Zurich. It allows users to implement their quantum programs in Python using a powerful and intuitive syntax. ProjectQ can then translate these programs to any type of back-end, be it a simulator run on a classical computer of an actual quantum chip.

py-prometheus-client

Homepage:
Spack package:
Versions:
0.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Prometheus instrumentation library for Python applications.

py-prompt-toolkit

Homepage:
Spack package:
Versions:
2.0.9, 1.0.9
Build Dependencies:
python, py-setuptools, py-six, py-wcwidth
Link Dependencies:
python
Run Dependencies:
python, py-six, py-wcwidth
Description:
Library for building powerful interactive command lines in Python

py-protobuf

Homepage:
Spack package:
Versions:
3.7.1, 3.6.1, 3.5.2.post1, 3.5.2, 3.5.1, 3.0.0b2, 2.6.1, 2.5.0, 2.4.1, 2.3.0
Build Dependencies:
python, py-setuptools, protobuf
Link Dependencies:
python, protobuf
Run Dependencies:
python
Description:
Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data - think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

py-psutil

Homepage:
Spack package:
Versions:
5.5.1, 5.4.5, 5.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
psutil is a cross-platform library for retrieving information on running processes and system utilization (CPU, memory, disks, network) in Python.

py-psyclone

Homepage:
Spack package:
Versions:
develop, 1.5.1
Build Dependencies:
python, py-setuptools, py-pyparsing, py-fparser
Link Dependencies:
python
Run Dependencies:
python, py-pyparsing, py-fparser
Test Dependencies:
py-numpy, py-nose, py-pytest
Description:
Code generation for the PSyKAl framework from the GungHo project, as used by the LFRic model at the UK Met Office.

py-psycopg2

Homepage:
Spack package:
Versions:
2.7.5
Build Dependencies:
python, py-setuptools, postgresql
Link Dependencies:
python
Run Dependencies:
python, postgresql
Description:
Python interface to PostgreSQL databases

py-ptyprocess

Homepage:
Spack package:
Versions:
0.5.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Run a subprocess in a pseudo terminal

py-pudb

Homepage:
Spack package:
Versions:
2017.1.1, 2016.2
Build Dependencies:
python, py-setuptools, py-urwid, py-pygments
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-urwid, py-pygments
Description:
Full-screen console debugger for Python

py-py

Homepage:
Spack package:
Versions:
1.5.4, 1.5.3, 1.4.33, 1.4.31
Build Dependencies:
python, py-setuptools, py-setuptools-scm
Link Dependencies:
python
Run Dependencies:
python
Description:
Library with cross-python path, ini-parsing, io, code, log facilities

py-py2bit

Homepage:
Spack package:
Versions:
0.2.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A package for accessing 2bit files using lib2bit.

py-py2cairo

Homepage:
Spack package:
Versions:
1.10.0
Build Dependencies:
python, cairo, pixman, pkgconfig
Link Dependencies:
python, cairo, pixman
Run Dependencies:
python
Test Dependencies:
py-pytest
Description:
Pycairo is a set of Python bindings for the cairo graphics library.

py-py2neo

Homepage:
Spack package:
Versions:
2.0.8, 2.0.7, 2.0.6, 2.0.5, 2.0.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Py2neo is a client library and toolkit for working with Neo4j from within Python applications and from the command line.

py-py4j

Homepage:
Spack package:
Versions:
0.10.6, 0.10.4, 0.10.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Enables Python programs to dynamically access arbitrary Java objects.

py-pyani

Homepage:
Spack package:
Versions:
0.2.7, 0.2.6
Build Dependencies:
python, py-setuptools, py-matplotlib, py-seaborn, py-biopython, py-pandas, py-scipy
Link Dependencies:
python
Run Dependencies:
python, py-matplotlib, py-seaborn, py-biopython, py-pandas, py-scipy, blast-plus, mummer
Description:
pyani is a Python3 module that provides support for calculating average nucleotide identity (ANI) and related measures for whole genome comparisons, and rendering relevant graphical summary output. Where available, it takes advantage of multicore systems, and can integrate with SGE/OGE-type job schedulers for the sequence comparisons.

py-pyarrow

Homepage:
Spack package:
Versions:
0.12.1, 0.11.0, 0.9.0
Build Dependencies:
python, cmake, pkgconfig, py-setuptools, py-cython, arrow
Link Dependencies:
python, arrow
Run Dependencies:
python
Description:
A cross-language development platform for in-memory data. This package contains the Python bindings.

py-pyasn1

Homepage:
Spack package:
Versions:
0.2.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Generic ASN.1 library for Python http://pyasn1.sf.net

py-pybedtools

Homepage:
Spack package:
Versions:
0.6.9
Build Dependencies:
python, py-cython, py-pysam, py-pandas, py-six, py-numpy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, bedtools2, py-cython, py-pysam, py-pandas, py-six, py-numpy
Description:
Python wrapper -- and more -- for Aaron Quinlan's BEDTools

py-pybigwig

Homepage:
Spack package:
Versions:
0.3.12, 0.3.4
Build Dependencies:
python, curl, py-setuptools, py-numpy
Link Dependencies:
python, curl
Run Dependencies:
python, curl, py-numpy
Description:
A package for accessing bigWig files using libBigWig.

py-pybind11

Homepage:
Spack package:
Versions:
develop, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.1, 2.1.0
Build Dependencies:
cmake, py-setuptools, python
Link Dependencies:
python
Test Dependencies:
py-pytest
Description:
pybind11 -- Seamless operability between C++11 and Python. pybind11 is a lightweight header-only library that exposes C++ types in Python and vice versa, mainly to create Python bindings of existing C++ code. Its goals and syntax are similar to the excellent Boost.Python library by David Abrahams: to minimize boilerplate code in traditional extension modules by inferring type information using compile-time introspection.

py-pybtex

Homepage:
Spack package:
Versions:
0.21
Build Dependencies:
python, py-setuptools, py-latexcodec, py-pyyaml, py-counter
Link Dependencies:
python
Run Dependencies:
python, py-latexcodec, py-pyyaml, py-counter
Description:
Pybtex is a BibTeX-compatible bibliography processor written in Python.

py-pybtex-docutils

Homepage:
Spack package:
Versions:
0.2.1
Build Dependencies:
python, py-setuptools, py-docutils, py-pybtex, py-six
Link Dependencies:
python
Run Dependencies:
python, py-docutils, py-pybtex, py-six
Description:
A docutils backend for pybtex.

py-pycairo

Homepage:
Spack package:
Versions:
1.17.1
Build Dependencies:
python, cairo, pkgconfig, py-setuptools
Link Dependencies:
python, cairo
Run Dependencies:
python
Description:
Pycairo is a set of Python bindings for the cairo graphics library.

py-pycares

Homepage:
Spack package:
Versions:
3.0.0
Build Dependencies:
python, py-cffi
Link Dependencies:
python, py-cffi
Run Dependencies:
python
Description:
pycares is a Python module which provides an interface to c-ares. c-ares is a C library that performs DNS requests and name resolutions asynchronously.

py-pychecker

Homepage:
Spack package:
Versions:
0.8.19
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Python source code checking tool.

py-pycodestyle

Homepage:
Spack package:
Versions:
2.5.0, 2.3.1, 2.3.0, 2.2.0, 2.1.0, 2.0.0, 1.7.0, 1.6.2, 1.6.1, 1.6, 1.5.7, 1.5.6, 1.5.5, 1.5.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
pycodestyle is a tool to check your Python code against some of the style conventions in PEP 8. Note: formerly called pep8.

py-pycparser

Homepage:
Spack package:
Versions:
2.18, 2.17, 2.13
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A complete parser of the C language, written in pure python.

py-pycrypto

Homepage:
Spack package:
Versions:
2.6.1
Build Dependencies:
python, gmp
Link Dependencies:
python, gmp
Run Dependencies:
python
Description:
The Python Cryptography Toolkit

py-pycurl

Homepage:
Spack package:
Versions:
7.43.0
Build Dependencies:
python, curl
Link Dependencies:
python, curl
Run Dependencies:
python
Description:
PycURL is a Python interface to libcurl. PycURL can be used to fetch objects identified by a URL from a Python program.

py-pydatalog

Homepage:
Spack package:
Versions:
0.17.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
pyDatalog adds logic programming to Python.

py-pydispatcher

Homepage:
Spack package:
Versions:
2.0.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Multi-producer-multi-consumer signal dispatching mechanism.

py-pydot

Homepage:
Spack package:
Versions:
1.4.1, 1.2.3, 1.2.2
Build Dependencies:
python, py-setuptools, py-pyparsing, graphviz
Link Dependencies:
python
Run Dependencies:
python, py-pyparsing, graphviz
Description:
Python interface to Graphviz's Dot language

py-pydv

Homepage:
Spack package:
Versions:
2.4.2
Build Dependencies:
python, py-backports-functools-lru-cache, py-cycler, py-dateutil, py-matplotlib, py-pyside, py-scipy
Link Dependencies:
python, py-backports-functools-lru-cache, py-cycler, py-dateutil, py-matplotlib, py-pyside, py-scipy
Run Dependencies:
python
Description:
PDV is a 1D graphics and data analysis tool, heavily based on the ULTRA plotting tool

py-pyelftools

Homepage:
Spack package:
Versions:
0.23
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A pure-Python library for parsing and analyzing ELF files and DWARF debugging information

py-pyepsg

Homepage:
Spack package:
Versions:
0.3.2
Build Dependencies:
python, py-setuptools, py-requests
Link Dependencies:
python
Run Dependencies:
python, py-requests
Description:
Provides simple access to http://epsg.io/.

py-pyfaidx

Homepage:
Spack package:
Versions:
0.5.5.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
pyfaidx: efficient pythonic random access to fasta subsequences

py-pyfasta

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python, py-setuptools, py-numpy
Run Dependencies:
python
Description:
Pyfasta: fast, memory-efficient, pythonic (and command-line) access to fasta sequence files

py-pyfftw

Homepage:
Spack package:
Versions:
0.11.1, 0.10.4
Build Dependencies:
python, fftw, py-setuptools, py-cython, py-numpy, py-scipy
Link Dependencies:
python, fftw
Run Dependencies:
python, py-numpy, py-scipy
Description:
A pythonic wrapper around FFTW, the FFT library, presenting a unified interface for all the supported transforms.

py-pyflakes

Homepage:
Spack package:
Versions:
2.1.0, 1.6.0, 1.5.0, 1.4.0, 1.3.0, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.0, 1.0.0, 0.9.2, 0.9.1, 0.9.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
A simple program which checks Python source files for errors.

py-pygdbmi

Homepage:
Spack package:
Versions:
0.8.2.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Parse gdb machine interface output with Python

py-pygments

Homepage:
Spack package:
Versions:
2.3.1, 2.2.0, 2.1.3, 2.0.2, 2.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Pygments is a syntax highlighting package written in Python.

py-pygobject

Homepage:
Spack package:
Versions:
3.28.3, 2.28.6, 2.28.3
Build Dependencies:
python, py-setuptools, pkgconfig, libffi, glib, py-pycairo, py-py2cairo, gobject-introspection, gtkplus
Link Dependencies:
python, libffi, glib, gobject-introspection, gtkplus
Run Dependencies:
python, py-pycairo, py-py2cairo
Description:
bindings for the GLib, and GObject, to be used in Python.

py-pygpu

Homepage:
Spack package:
Versions:
0.7.5, 0.7.4, 0.7.3, 0.7.2, 0.7.1, 0.7.0, 0.6.9, 0.6.2, 0.6.1, 0.6.0
Build Dependencies:
python, libgpuarray, py-setuptools, py-cython, py-nose, py-numpy, py-mako, libcheck
Link Dependencies:
python, libgpuarray, libcheck
Run Dependencies:
python, py-setuptools, py-cython, py-nose, py-numpy, py-mako
Description:
Python packge for the libgpuarray C library.

py-pygresql

Homepage:
Spack package:
Versions:
5.0.5
Build Dependencies:
python, py-setuptools, postgresql
Link Dependencies:
python
Run Dependencies:
python, postgresql
Description:
PyGreSQL is an open-source Python module that interfaces to a PostgreSQL database

py-pygtk

Homepage:
Spack package:
Versions:
2.24.0
Build Dependencies:
python, pkgconfig, libffi, atk, cairo, glib, gtkplus, py-pygobject, py-py2cairo
Link Dependencies:
python, libffi, atk, cairo, glib, gtkplus
Run Dependencies:
python, py-pygobject, py-py2cairo
Description:
bindings for the Gtk2 in Python. use pygobject for Gtk3.

py-pylint

Homepage:
Spack package:
Versions:
2.3.0, 1.6.5, 1.4.3, 1.4.1
Build Dependencies:
python, py-astroid, py-six, py-isort, py-mccabe, py-editdistance, py-setuptools, py-configparser, py-backports-functools-lru-cache, py-singledispatch
Link Dependencies:
python, py-isort, py-mccabe, py-editdistance, py-configparser, py-backports-functools-lru-cache, py-singledispatch
Run Dependencies:
python, py-astroid, py-six
Description:
array processing for numbers, strings, records, and objects.

py-pymatgen

Homepage:
Spack package:
Versions:
4.7.2, 4.6.2
Build Dependencies:
python, py-setuptools, py-numpy, py-six, py-requests, py-pyyaml, py-monty, py-scipy, py-pydispatcher, py-tabulate, py-spglib, py-matplotlib, py-palettable
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-six, py-requests, py-pyyaml, py-monty, py-scipy, py-pydispatcher, py-tabulate, py-spglib, py-matplotlib, py-palettable
Description:
Python Materials Genomics is a robust materials analysis code that defines core object representations for structures and molecules with support for many electronic structure codes. It is currently the core analysis code powering the Materials Project.

py-pyminifier

Homepage:
Spack package:
Versions:
2.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Pyminifier is a Python code minifier, obfuscator, and compressor.

py-pymol

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
python, tcl, tk, py-pmw, gl, glu, glew, libpng, freetype, libxml2, msgpack-c, py-pyqt, freeglut
Link Dependencies:
python, tcl, tk, py-pmw, gl, glu, glew, libpng, freetype, libxml2, msgpack-c, freeglut
Run Dependencies:
python, py-pyqt
Description:
PyMOL is a Python-enhanced molecular graphics tool. It excels at 3D visualization of proteins, small molecules, density, surfaces, and trajectories. It also includes molecular editing, ray tracing, and movies. Open Source PyMOL is free to everyone!

py-pympler

Homepage:
Spack package:
Versions:
0.4.3, 0.4.2, 0.4.1, 0.4, 0.3.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Development tool to measure, monitor and analyze the memory behavior of Python objects in a running Python application.

py-pymysql

Homepage:
Spack package:
Versions:
0.9.2
Build Dependencies:
python, py-setuptools, py-cryptography
Link Dependencies:
python
Run Dependencies:
python, py-cryptography
Description:
Pure-Python MySQL client library

py-pynio

Homepage:
Spack package:
Versions:
1.5.4
Build Dependencies:
python, libpng, jpeg, zlib, netcdf, hdf5, gdal, py-numpy
Link Dependencies:
python, libpng, jpeg, zlib, netcdf, hdf5, gdal
Run Dependencies:
python, py-numpy
Description:
PyNIO ("pie-nee-oh") is a Python module that allows read and/or write access to a variety of scientific data formats popular in climate and weather

py-pynn

Homepage:
Spack package:
Versions:
0.9.1, 0.8.3, 0.8.1, 0.8beta, 0.7.5
Build Dependencies:
python, py-jinja2, py-docutils, py-numpy, py-quantities, py-lazyarray, py-neo
Link Dependencies:
python
Run Dependencies:
python, py-jinja2, py-docutils, py-numpy, py-quantities, py-lazyarray, py-neo
Test Dependencies:
py-mock
Description:
A Python package for simulator-independent specification of neuronal network models

py-pyodbc

Homepage:
Spack package:
Versions:
4.0.26
Build Dependencies:
python, py-setuptools, unixodbc
Link Dependencies:
python
Run Dependencies:
python, unixodbc
Description:
A Python DB API 2 module for ODBC. This project provides an up-to-date, convenient interface to ODBC using native data types like datetime and decimal.

py-pypar

Homepage:
Spack package:
Versions:
2.1.5_108
Build Dependencies:
python, mpi, py-numpy
Link Dependencies:
python, mpi
Run Dependencies:
python, py-numpy
Description:
Pypar is an efficient but easy-to-use module that allows programs written in Python to run in parallel on multiple processors and communicate using MPI.

py-pyparsing

Homepage:
Spack package:
Versions:
2.3.1, 2.2.0, 2.1.10, 2.0.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Python Parsing Module.

py-pypeflow

Homepage:
Spack package:
Versions:
2017-05-04
Build Dependencies:
python, py-setuptools, py-networkx
Link Dependencies:
python
Run Dependencies:
python, py-networkx
Description:
pypeFLOW is light weight and reusable make / flow data process library written in Python.

py-pyprof2html

Homepage:
Spack package:
Versions:
0.3.1
Build Dependencies:
python, py-setuptools, py-jinja2
Link Dependencies:
python
Run Dependencies:
python, py-jinja2
Description:
Python cProfile and hotshot profile's data to HTML Converter

py-pyproj

Homepage:
Spack package:
Versions:
1.9.5.1.1, 1.9.5.1
Build Dependencies:
python, py-cython, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python interface to the PROJ.4 Library.

py-pyqi

Homepage:
Spack package:
Versions:
0.3.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
pyqi (canonically pronounced pie chee) is a Python framework designed to support wrapping general commands in multiple types of interfaces, including at the command line, HTML, and API levels.

py-pyqt

Homepage:
Spack package:
Versions:
4.11.3
Build Dependencies:
python, py-sip, qt
Link Dependencies:
python, qt
Run Dependencies:
py-sip
Description:
PyQt is a set of Python v2 and v3 bindings for Digia's Qt application framework and runs on all platforms supported by Qt including Windows, MacOS/X and Linux.

py-pyrad

Homepage:
Spack package:
Versions:
3.0.66
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, vsearch, muscle
Link Dependencies:
python, vsearch, muscle
Run Dependencies:
python, py-numpy, py-scipy
Description:
RADseq for phylogenetics & introgression analyses

py-pyrosar

Homepage:
Spack package:
Versions:
0.8
Build Dependencies:
python, py-setuptools, py-progressbar2, py-pathos, py-numpy, py-scoop, py-spatialist, py-pyyaml, gdal
Link Dependencies:
python, gdal
Run Dependencies:
python, py-progressbar2, py-pathos, py-numpy, py-scoop, py-spatialist, py-pyyaml, gdal
Description:
A framework for large-scale SAR satellite data processing

py-pysam

Homepage:
Spack package:
Versions:
0.15.2, 0.15.1, 0.14.1, 0.13, 0.11.2.2, 0.7.7
Build Dependencies:
python, py-setuptools, py-cython, curl, bcftools, htslib, samtools
Link Dependencies:
python, curl, bcftools, htslib, samtools
Run Dependencies:
python
Description:
A python module for reading, manipulating and writing genomic data sets.

py-pyscaf

Homepage:
Spack package:
Versions:
0.12a4
Build Dependencies:
python, py-setuptools, py-fastaindex
Link Dependencies:
python
Run Dependencies:
python, py-fastaindex
Description:
pyScaf orders contigs from genome assemblies utilising several types of information

py-pyserial

Homepage:
Spack package:
Versions:
3.1.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python Serial Port Extension

py-pyshp

Homepage:
Spack package:
Versions:
1.2.12
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
The Python Shapefile Library (pyshp) reads and writes ESRI Shapefiles in pure Python.

py-pyside

Homepage:
Spack package:
Versions:
1.2.4, 1.2.2
Build Dependencies:
python, cmake, py-setuptools, py-sphinx, qt, libxml2, libxslt
Link Dependencies:
python, qt, libxml2, libxslt
Run Dependencies:
python, py-sphinx
Description:
Python bindings for Qt.

py-pysocks

Homepage:
Spack package:
Versions:
1.6.6, 1.5.7
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A Python SOCKS client module.

py-pyspark

Homepage:
Spack package:
Versions:
2.3.0
Build Dependencies:
python, py-setuptools, py-py4j
Link Dependencies:
python
Run Dependencies:
python, py-py4j
Description:
Python bindings for Apache Spark

py-pysqlite

Homepage:
Spack package:
Versions:
2.8.3
Build Dependencies:
python, sqlite
Link Dependencies:
python
Run Dependencies:
python, sqlite
Description:
Python DB-API module for SQLite 3.

py-pytables

Homepage:
Spack package:
Versions:
3.4.4, 3.3.0, 3.2.2
Build Dependencies:
python, hdf5, py-numpy, py-numexpr, py-cython, py-six, py-setuptools
Link Dependencies:
python, hdf5
Run Dependencies:
python, py-numpy, py-numexpr, py-cython, py-six, py-setuptools
Description:
PyTables is a package for managing hierarchical datasets and designed to efficiently and easily cope with extremely large amounts of data.

py-pytest

Homepage:
Spack package:
Versions:
4.3.0, 3.7.2, 3.7.1, 3.5.1, 3.0.7, 3.0.2
Build Dependencies:
python, py-setuptools, py-setuptools-scm, py-py, py-six, py-attrs, py-more-itertools, py-atomicwrites, py-pluggy, py-funcsigs, py-pathlib2
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-py, py-six, py-attrs, py-more-itertools, py-atomicwrites, py-pluggy, py-funcsigs, py-pathlib2
Description:
pytest: simple powerful testing with Python.

py-pytest-cov

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
python, py-setuptools, py-pytest, py-coverage
Link Dependencies:
python
Run Dependencies:
python, py-pytest, py-coverage
Description:
Pytest plugin for measuring coverage.

py-pytest-flake8

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
python, py-setuptools, py-flake8, py-pytest
Link Dependencies:
python
Run Dependencies:
python, py-flake8, py-pytest
Description:
pytest plugin to check FLAKE8 requirements.

py-pytest-httpbin

Homepage:
Spack package:
Versions:
0.2.3
Build Dependencies:
python, py-setuptools, py-flask, py-decorator, py-httpbin, py-six
Link Dependencies:
python
Run Dependencies:
python, py-flask, py-decorator, py-httpbin, py-six
Description:
Easily test your HTTP library against a local copy of httpbin

py-pytest-mock

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
python, py-setuptools, py-pytest, py-mock
Link Dependencies:
python
Run Dependencies:
python, py-pytest, py-mock
Description:
Thin-wrapper around the mock package for easier use with py.test

py-pytest-runner

Homepage:
Spack package:
Versions:
2.11.1
Build Dependencies:
python, py-setuptools, py-setuptools-scm
Link Dependencies:
python
Run Dependencies:
python
Description:
Invoke py.test as distutils command with dependency resolution.

py-pytest-xdist

Homepage:
Spack package:
Versions:
1.16.0
Build Dependencies:
python, py-setuptools, py-execnet, py-pytest, py-py
Link Dependencies:
python
Run Dependencies:
python, py-execnet, py-pytest, py-py
Description:
py.test xdist plugin for distributed testing and loop-on-failing mode

py-pythia

Homepage:
Spack package:
Versions:
0.8.1.18
Build Dependencies:
python, py-merlin
Link Dependencies:
python
Run Dependencies:
python
Description:
Pythia refers to the Pyre framework and a collection of packages that interact with it, such as an interface to the ACIS solid modelling package.

py-python-daemon

Homepage:
Spack package:
Versions:
2.0.5
Build Dependencies:
python, py-setuptools, py-lockfile
Link Dependencies:
python
Run Dependencies:
python, py-lockfile
Description:
Library to implement a well-behaved Unix daemon process. This library implements the well-behaved daemon specification of PEP Standard daemon process. A well-behaved Unix daemon process is tricky to get right, but the required steps are much the same for every daemon program. A DaemonContext instance holds the behaviour and configured process environment for the program; use the instance as a context manager to enter a daemon state.

py-python-engineio

Homepage:
Spack package:
Versions:
2.0.2
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
Engine.IO is the implementation of transport-based cross-browser/cross- device bi-directional communication layer for Socket.IO.

py-python-gitlab

Homepage:
Spack package:
Versions:
0.19, 0.18, 0.17, 0.16
Build Dependencies:
python, py-setuptools, py-six, py-requests
Link Dependencies:
python
Run Dependencies:
python, py-six, py-requests
Description:
Python wrapper for the GitLab API

py-python-htmlgen

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-typing, py-python-asserts
Description:
Library to generate HTML from classes.

py-python-levenshtein

Homepage:
Spack package:
Versions:
0.12.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python extension for computing string edit distances and similarities.

py-python-socketio

Homepage:
Spack package:
Versions:
1.8.4
Build Dependencies:
python, py-setuptools, py-six, py-python-engineio, py-eventlet
Link Dependencies:
python
Run Dependencies:
python, py-six, py-python-engineio, py-eventlet
Description:
Python implementation of the Socket.IO realtime server.

py-python-utils

Homepage:
Spack package:
Versions:
2.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python Utils is a collection of small Python functions and classes which make common patterns shorter and easier.

py-pythonqwt

Homepage:
Spack package:
Versions:
0.5.5
Build Dependencies:
python, py-setuptools, py-numpy, py-sip, py-pyqt, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-sip, py-pyqt, py-sphinx
Description:
Qt plotting widgets for Python

py-pytorch

Homepage:
Spack package:
Versions:
1.0.0, 0.4.1, 0.4.0, 0.3.1
Build Dependencies:
python, py-setuptools, py-cffi, py-numpy, blas, lapack, py-pyyaml, py-typing, intel-mkl, cuda, cudnn, nccl, magma
Link Dependencies:
python, blas, lapack, intel-mkl, cuda, cudnn, nccl, magma
Run Dependencies:
python, py-numpy, py-pyyaml, py-typing, cuda
Description:
Tensors and Dynamic neural networks in Python with strong GPU acceleration.

py-pytz

Homepage:
Spack package:
Versions:
2018.4, 2017.2, 2016.10, 2016.6.1, 2016.3, 2015.4, 2014.10, 2014.9
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
World timezone definitions, modern and historical.

py-pyutilib

Homepage:
Spack package:
Versions:
5.6.2, 5.6.1, 5.6, 5.5.1, 5.5, 5.4.1, 5.4, 5.3.5, 5.3.4, 5.3.3
Build Dependencies:
python, py-nose, py-six
Link Dependencies:
python
Run Dependencies:
python, py-nose, py-six
Description:
The PyUtilib project supports a collection of Python utilities, including a well-developed component architecture and extensions to the PyUnit testing framework. PyUtilib has been developed to support several Python-centric projects, especially Pyomo. PyUtilib is available under the BSD License.

py-pyvcf

Homepage:
Spack package:
Versions:
0.6.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Variant Call Format reader for Python

py-pywavelets

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
python, py-setuptools, py-cython, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
PyWavelets is a free Open Source library for wavelet transforms in Python

py-pyyaml

Homepage:
Spack package:
Versions:
3.13, 3.12, 3.11
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
PyYAML is a YAML parser and emitter for Python.

py-qtawesome

Homepage:
Spack package:
Versions:
0.4.1, 0.3.3
Build Dependencies:
python, py-setuptools, py-qtpy, py-six
Link Dependencies:
python
Run Dependencies:
python, py-qtpy, py-six
Description:
FontAwesome icons in PyQt and PySide applications

py-qtconsole

Homepage:
Spack package:
Versions:
4.2.1
Build Dependencies:
python, py-ipykernel, py-jupyter-client, py-jupyter-core, py-pygments, py-traitlets, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-ipykernel, py-jupyter-client, py-jupyter-core, py-pygments, py-traitlets, py-sphinx
Test Dependencies:
py-mock
Description:
Jupyter Qt console

py-qtpy

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
python, py-setuptools, py-pyqt
Link Dependencies:
python
Run Dependencies:
python, py-pyqt
Description:
QtPy: Abtraction layer for PyQt5/PyQt4/PySide

py-quantities

Homepage:
Spack package:
Versions:
0.12.1, 0.11.1
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Support for physical quantities with units, based on numpy

py-quast

Homepage:
Spack package:
Versions:
4.6.3, 4.6.1, 4.6.0
Build Dependencies:
python, boost, perl, py-setuptools, py-matplotlib, java, perl-time-hires, gnuplot, mummer, bedtools2, bwa, glimmer
Link Dependencies:
python, boost, perl
Run Dependencies:
python, py-matplotlib, java, perl-time-hires, gnuplot, mummer, bedtools2, bwa, glimmer
Description:
Quality Assessment Tool for Genome Assemblies

py-queryablelist

Homepage:
Spack package:
Versions:
3.1.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python module to add support for ORM-style filtering to any list of items

py-radical-utils

Homepage:
Spack package:
Versions:
0.45, 0.41.1
Build Dependencies:
python, py-setuptools, py-colorama, py-netifaces
Link Dependencies:
python
Run Dependencies:
python, py-colorama, py-netifaces
Description:
Shared code and tools for various RADICAL Projects

py-ranger

Homepage:
Spack package:
Versions:
1.7.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A VIM-inspired filemanager for the console

py-rasterio

Homepage:
Spack package:
Versions:
1.0a12
Build Dependencies:
python, py-setuptools, py-cython, py-attrs, py-numpy, py-cligj, py-click, py-affine, py-snuggs, gdal, jpeg
Link Dependencies:
python, gdal, jpeg
Run Dependencies:
python, py-enum34, py-attrs, py-numpy, py-cligj, py-click, py-affine, py-snuggs
Description:
Rasterio reads and writes geospatial raster data. Geographic information systems use GeoTIFF and other formats to organize and store gridded, or raster, datasets. Rasterio reads and writes these formats and provides a Python API based on N-D arrays.

py-readme-renderer

Homepage:
Spack package:
Versions:
16.0
Build Dependencies:
python, py-setuptools, py-bleach, py-docutils, py-pygments, py-six
Link Dependencies:
python
Run Dependencies:
python, py-bleach, py-docutils, py-pygments, py-six
Description:
readme_renderer is a library for rendering "readme" descriptions for Warehouse.

py-regex

Homepage:
Spack package:
Versions:
2017.07.11
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Alternative regular expression module, to replace re.

py-reportlab

Homepage:
Spack package:
Versions:
3.4.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
The ReportLab Toolkit. An Open Source Python library for generating PDFs and graphics.

py-requests

Homepage:
Spack package:
Versions:
2.21.0, 2.14.2, 2.13.0, 2.11.1, 2.3.0
Build Dependencies:
python, py-setuptools, py-chardet, py-idna, py-urllib3, py-certifi
Link Dependencies:
python
Run Dependencies:
python, py-chardet, py-idna, py-urllib3, py-certifi
Test Dependencies:
py-pytest, py-pytest-cov, py-pytest-httpbin, py-pytest-mock
Description:
Python HTTP for Humans.

py-requests-toolbelt

Homepage:
Spack package:
Versions:
0.8.0
Build Dependencies:
python, py-setuptools, py-requests
Link Dependencies:
python
Run Dependencies:
python, py-requests
Description:
A toolbelt of useful classes and functions to be used with python- requests

py-restview

Homepage:
Spack package:
Versions:
2.6.1
Build Dependencies:
python, py-setuptools, py-docutils, py-readme-renderer, py-pygments
Link Dependencies:
python
Run Dependencies:
python, py-docutils, py-readme-renderer, py-pygments
Description:
A viewer for ReStructuredText documents that renders them on the fly.

py-rope

Homepage:
Spack package:
Versions:
0.11.0, 0.10.7, 0.10.6, 0.10.5
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
a python refactoring library.

py-rpy2

Homepage:
Spack package:
Versions:
3.0.0, 2.9.4, 2.8.6, 2.5.6, 2.5.4
Build Dependencies:
python, py-setuptools, r, py-jinja2, py-six, py-singledispatch
Link Dependencies:
python
Run Dependencies:
python, r, py-jinja2, py-six, py-singledispatch
Description:
rpy2 is a redesign and rewrite of rpy. It is providing a low-level interface to R from Python, a proposed high-level interface, including wrappers to graphical libraries, as well as R-like structures and functions.

py-rsa

Homepage:
Spack package:
Versions:
3.4.2
Build Dependencies:
python, py-setuptools, py-pyasn1
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-pyasn1
Description:
Pure-Python RSA implementation

py-rseqc

Homepage:
Spack package:
Versions:
2.6.4
Build Dependencies:
python, py-setuptools, py-bx-python, py-numpy, py-pysam, r
Link Dependencies:
python
Run Dependencies:
python, py-bx-python, py-numpy, py-pysam, r
Description:
RSeQC package provides a number of useful modules that can comprehensively evaluate high throughput sequence data especially RNA- seq data.

py-rtree

Homepage:
Spack package:
Versions:
0.8.3
Build Dependencies:
python, py-setuptools, libspatialindex
Link Dependencies:
python, libspatialindex
Run Dependencies:
python
Description:
Python interface to the RTREE.4 Library.

py-saga-python

Homepage:
Spack package:
Versions:
0.41.3
Build Dependencies:
python, py-setuptools, py-apache-libcloud, py-radical-utils
Link Dependencies:
python
Run Dependencies:
python, py-apache-libcloud, py-radical-utils
Description:
A light-weight access layer for distributed computing infrastructure

py-scandir

Homepage:
Spack package:
Versions:
1.9.0, 1.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
scandir, a better directory iterator and faster os.walk().

py-scientificpython

Homepage:
Spack package:
Versions:
2.8.1
Build Dependencies:
python, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
ScientificPython is a collection of Python modules for scientific computing. It contains support for geometry, mathematical functions, statistics, physical units, IO, visualization, and parallelization.

py-scikit-image

Homepage:
Spack package:
Versions:
0.14.2, 0.12.3
Build Dependencies:
python, py-dask, pil, py-networkx, py-six, py-scipy, py-matplotlib, py-setuptools, py-cython
Link Dependencies:
python
Run Dependencies:
python, py-dask, pil, py-networkx, py-six, py-scipy, py-matplotlib
Description:
Image processing algorithms for SciPy, including IO, morphology, filtering, warping, color manipulation, object detection, etc.

py-scikit-learn

Homepage:
Spack package:
Versions:
0.20.2, 0.20.0, 0.19.1, 0.18.1, 0.17.1, 0.16.1, 0.15.2, 0.13.1
Build Dependencies:
python, py-numpy, py-scipy, py-cython, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy
Test Dependencies:
py-test
Description:
A set of python modules for machine learning and data mining.

py-scikit-optimize

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
python, py-setuptools, py-numpy, py-scikit-learn, py-scipy, py-matplotlib
Link Dependencies:
python, py-matplotlib
Run Dependencies:
python, py-numpy, py-scikit-learn, py-scipy
Test Dependencies:
py-test
Description:
Scikit-Optimize, or skopt, is a simple and efficient library to minimize (very) expensive and noisy black-box functions. It implements several methods for sequential model-based optimization. skopt aims to be accessible and easy to use in many contexts. The library is built on top of NumPy, SciPy and Scikit-Learn.

py-scipy

Homepage:
Spack package:
Versions:
1.2.1, 1.1.0, 1.0.0, 0.19.1, 0.19.0, 0.18.1, 0.17.0, 0.15.1, 0.15.0
Build Dependencies:
python, py-setuptools, py-numpy, blas, lapack
Link Dependencies:
python, blas, lapack
Run Dependencies:
python, py-numpy
Test Dependencies:
py-nose
Description:
SciPy (pronounced "Sigh Pie") is a Scientific Library for Python. It provides many user-friendly and efficient numerical routines such as routines for numerical integration and optimization.

py-scoop

Homepage:
Spack package:
Versions:
0.7.1.1
Build Dependencies:
python, py-setuptools, py-greenlet, py-zmq
Link Dependencies:
python
Run Dependencies:
python, py-greenlet, py-zmq
Description:
SCOOP (Scalable COncurrent Operations in Python) is a distributed task module allowing concurrent parallel programming on various environments, from heterogeneous grids to supercomputers.

py-seaborn

Homepage:
Spack package:
Versions:
0.9.0, 0.7.1
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-matplotlib, py-pandas
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-matplotlib, py-pandas
Description:
Seaborn: statistical data visualization. Seaborn is a library for making attractive and informative statistical graphics in Python. It is built on top of matplotlib and tightly integrated with the PyData stack, including support for numpy and pandas data structures and statistical routines from scipy and statsmodels.

py-send2trash

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python library to send files to Trash/Recycle on all platforms.

py-setuptools

Homepage:
Spack package:
Versions:
41.0.1, 40.8.0, 40.4.3, 40.2.0, 39.2.0, 39.0.1, 35.0.2, 34.4.1, 34.2.0, 25.2.0, 20.7.0, 20.6.7, 20.5, 19.2, 18.1, 16.0, 11.3.1
Build Dependencies:
python, py-packaging, py-six, py-appdirs
Link Dependencies:
python
Run Dependencies:
python, py-packaging, py-six, py-appdirs
Description:
A Python utility that aids in the process of downloading, building, upgrading, installing, and uninstalling Python packages.

py-setuptools-git

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
python, py-setuptools, git
Link Dependencies:
python, git
Run Dependencies:
python
Description:
Setuptools revision control system plugin for Git

py-setuptools-scm

Homepage:
Spack package:
Versions:
3.1.0, 1.15.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
The blessed package to manage your versions by scm tags.

py-sfepy

Homepage:
Spack package:
Versions:
2017.3
Build Dependencies:
python, py-numpy, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-six, py-scipy, py-matplotlib, py-sympy, hdf5, py-pytables, py-petsc4py
Description:
SfePy (http://sfepy.org) is a software for solving systems of coupled partial differential equations (PDEs) by the finite element method in 1D, 2D and 3D. It can be viewed both as black-box PDE solver, and as a Python package which can be used for building custom applications.

py-sh

Homepage:
Spack package:
Versions:
1.12.9, 1.11
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python subprocess interface

py-shapely

Homepage:
Spack package:
Versions:
1.6.4
Build Dependencies:
python, py-setuptools, py-cython, py-numpy, geos
Link Dependencies:
python, geos
Run Dependencies:
python, py-numpy
Description:
Manipulation and analysis of geometric objects in the Cartesian plane.

py-shiboken

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
python, cmake, py-setuptools, py-sphinx, libxml2, qt
Link Dependencies:
python, libxml2, qt
Run Dependencies:
python, py-sphinx
Description:
Shiboken generates bindings for C++ libraries using CPython.

py-simplegeneric

Homepage:
Spack package:
Versions:
0.8.1, 0.8
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Simple generic functions (similar to Python's own len(), pickle.dump(), etc.)

py-simplejson

Homepage:
Spack package:
Versions:
3.10.0, 3.9.0, 3.8.2, 3.8.1, 3.8.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Simplejson is a simple, fast, extensible JSON encoder/decoder for Python

py-singledispatch

Homepage:
Spack package:
Versions:
3.4.0.3
Build Dependencies:
python, py-setuptools, py-six, py-ordereddict
Link Dependencies:
python
Run Dependencies:
python, py-six, py-ordereddict
Description:
This library brings functools.singledispatch to Python 2.6-3.3.

py-sip

Homepage:
Spack package:
Versions:
4.19.13, 4.16.7, 4.16.5
Build Dependencies:
python
Link Dependencies:
python
Description:
SIP is a tool that makes it very easy to create Python bindings for C and C++ libraries.

py-six

Homepage:
Spack package:
Versions:
1.12.0, 1.11.0, 1.10.0, 1.9.0, 1.8.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Python 2 and 3 compatibility utilities.

py-slepc4py

Homepage:
Spack package:
Versions:
3.10.0, 3.9.0, 3.8.0, 3.7.0
Build Dependencies:
python, py-setuptools, py-petsc4py, slepc
Link Dependencies:
python, slepc
Run Dependencies:
python, py-petsc4py
Description:
This package provides Python bindings for the SLEPc package.

py-slurm-pipeline

Homepage:
Spack package:
Versions:
2.0.9, 1.1.13
Build Dependencies:
python, py-setuptools, py-six
Link Dependencies:
python
Run Dependencies:
python, py-six
Description:
A Python class for scheduling SLURM jobs

py-sncosmo

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-astropy, py-matplotlib, py-iminuit, py-emcee, py-nestle
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-astropy, py-matplotlib, py-iminuit, py-emcee, py-nestle
Description:
SNCosmo is a Python library for high-level supernova cosmology analysis.

py-snowballstemmer

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
This package provides 16 stemmer algorithms (15 + Poerter English stemmer) generated from Snowball algorithms.

py-snuggs

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
python, py-numpy, py-click, py-pyparsing
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-click, py-pyparsing
Description:
Snuggs are s-expressions for Numpy

py-spatialist

Homepage:
Spack package:
Versions:
0.2.8
Build Dependencies:
python, py-setuptools, py-progressbar2, py-pathos, py-numpy, py-matplotlib, py-jupyter-core, py-ipython, py-ipywidgets, py-tblib
Link Dependencies:
python
Run Dependencies:
python, py-progressbar2, py-pathos, py-numpy, py-matplotlib, py-jupyter-core, py-ipython, py-ipywidgets, py-tblib
Description:
This package offers functionalities for user-friendly geo data processing using GDAL and OGR.

py-spectra

Homepage:
Spack package:
Versions:
0.0.11, 0.0.8
Build Dependencies:
python, py-setuptools, py-colormath
Link Dependencies:
python
Run Dependencies:
python, py-colormath
Description:
Color scales and color conversion made easy for Python.

py-spefile

Homepage:
Spack package:
Versions:
1.6
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Reader for SPE files part of pyspec a set of python routines for data analysis of x-ray scattering experiments

py-spglib

Homepage:
Spack package:
Versions:
1.9.9.18
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-numpy
Description:
Python bindings for C library for finding and handling crystal symmetries.

py-sphinx-bootstrap-theme

Homepage:
Spack package:
Versions:
0.4.13
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Sphinx Bootstrap Theme.

py-sphinx-rtd-theme

Homepage:
Spack package:
Versions:
0.4.3, 0.2.5b1, 0.1.10a0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
ReadTheDocs.org theme for Sphinx.

py-sphinxautomodapi

Homepage:
Spack package:
Versions:
0.9
Build Dependencies:
python, py-setuptools, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-sphinx
Description:
Provides Sphinx directives to autogenerate API documentation pages

py-sphinxcontrib-bibtex

Homepage:
Spack package:
Versions:
0.3.5
Build Dependencies:
python, py-setuptools, py-latexcodec, py-pybtex, py-pybtex-docutils, py-six, py-sphinx, py-oset, py-ordereddict
Link Dependencies:
python
Run Dependencies:
python, py-latexcodec, py-pybtex, py-pybtex-docutils, py-six, py-sphinx, py-oset, py-ordereddict
Description:
A Sphinx extension for BibTeX style citations.

py-sphinxcontrib-programoutput

Homepage:
Spack package:
Versions:
0.10
Build Dependencies:
python, py-setuptools, py-sphinx
Link Dependencies:
python
Run Dependencies:
python, py-sphinx
Description:
A Sphinx extension to literally insert the output of arbitrary commands into documents, helping you to keep your command examples up to date.

py-sphinxcontrib-websupport

Homepage:
Spack package:
Versions:
1.1.0, 1.0.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-pytest, py-mock
Description:
sphinxcontrib-webuspport provides a Python API to easily integrate Sphinx documentation into your Web application.

py-spykeutils

Homepage:
Spack package:
Versions:
0.4.3
Build Dependencies:
python, py-setuptools, py-scipy, py-quantities, py-neo
Link Dependencies:
python
Run Dependencies:
python, py-scipy, py-quantities, py-neo
Description:
Utilities for analyzing electrophysiological data

py-sqlalchemy

Homepage:
Spack package:
Versions:
1.0.12
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
The Python SQL Toolkit and Object Relational Mapper

py-statsmodels

Homepage:
Spack package:
Versions:
0.8.0
Build Dependencies:
python, py-setuptools, py-numpy, py-scipy, py-pandas, py-patsy, py-cython
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-pandas, py-patsy, py-cython, py-matplotlib
Description:
Statistical computations and models for use with SciPy

py-stevedore

Homepage:
Spack package:
Versions:
1.28.0
Build Dependencies:
python, py-six, py-pbr
Link Dependencies:
python
Run Dependencies:
python, py-six, py-pbr
Description:
Manage Dynamic Plugins for Python Applications.

py-storm

Homepage:
Spack package:
Versions:
0.20
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Storm is an object-relational mapper (ORM) for Python

py-subprocess32

Homepage:
Spack package:
Versions:
3.2.7
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
A backport of the subprocess module from Python 3.2/3.3 for 2.x.

py-symengine

Homepage:
Spack package:
Versions:
develop, 0.2.0
Build Dependencies:
python, py-setuptools, py-cython, cmake, symengine
Link Dependencies:
python, symengine
Run Dependencies:
python
Description:
Python wrappers for SymEngine, a symbolic manipulation library.

py-symfit

Homepage:
Spack package:
Versions:
0.3.5
Build Dependencies:
python, py-setuptools, py-pbr
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-scipy, py-sympy, py-funcsigs
Description:
Symbolic Fitting; fitting as it should be.

py-sympy

Homepage:
Spack package:
Versions:
1.3, 1.1.1, 1.0, 0.7.6
Build Dependencies:
python, py-mpmath
Link Dependencies:
python
Run Dependencies:
python, py-mpmath
Description:
SymPy is a Python library for symbolic mathematics.

py-tabulate

Homepage:
Spack package:
Versions:
0.7.7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Pretty-print tabular data

py-tappy

Homepage:
Spack package:
Versions:
1.6
Build Dependencies:
python, py-nose, py-pygments, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-nose, py-pygments
Description:
Python TAP interface module for unit tests

py-tblib

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Traceback fiddling library. Allows you to pickle tracebacks.

py-terminado

Homepage:
Spack package:
Versions:
0.8.1, 0.6
Build Dependencies:
python, py-tornado, py-ptyprocess
Link Dependencies:
python
Run Dependencies:
python, py-tornado, py-ptyprocess
Description:
Terminals served to term.js using Tornado websockets

py-testinfra

Homepage:
Spack package:
Versions:
1.18.0, 1.13.0, 1.12.0, 1.11.1
Build Dependencies:
python, py-setuptools, py-importlib, py-pytest, py-six, py-paramiko, py-pytest-xdist
Link Dependencies:
python
Run Dependencies:
python, py-importlib, py-pytest, py-six, py-paramiko, py-pytest-xdist
Description:
With Testinfra you can write unit tests in Python to test actual state of your servers configured by management tools like Salt, Ansible, Puppet, Chef and so on.

py-tetoolkit

Homepage:
Spack package:
Versions:
2.0.3, 1.5.1
Build Dependencies:
python, py-setuptools, py-pysam, r-deseq, r-deseq2
Link Dependencies:
python, py-setuptools
Run Dependencies:
python, py-pysam, r-deseq, r-deseq2
Description:
TEToolkit is a software package that utilizes both unambiguously (uniquely) and ambiguously (multi-) mapped reads to perform differential enrichment analyses from high throughput sequencing experiments.

py-texttable

Homepage:
Spack package:
Versions:
1.6.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Python module for creating simple ASCII tables.

py-theano

Homepage:
Spack package:
Versions:
master, 1.0.4, 1.0.2, 1.0.1, 0.8.2
Build Dependencies:
python, py-setuptools, py-scipy, py-numpy, py-six, blas, cuda, cudnn, py-pygpu, libgpuarray
Link Dependencies:
python, blas, cuda, cudnn, libgpuarray
Run Dependencies:
python, py-setuptools, py-scipy, py-numpy, py-six, py-pygpu
Test Dependencies:
py-nose, py-nose-parameterized
Description:
Optimizing compiler for evaluating mathematical expressions on CPUs and GPUs.

py-tifffile

Homepage:
Spack package:
Versions:
0.12.1
Build Dependencies:
python, py-setuptools, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-numpy
Description:
Read and write image data from and to TIFF files.

py-toml

Homepage:
Spack package:
Versions:
0.10.0, 0.9.3
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Python library for parsing and creating TOML configuration files. For more information on the TOML standard, see https://github.com/toml- lang/toml.git

py-tomopy

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
python, py-setuptools, py-numpy, py-h5py, py-scipy, py-six, py-scikit-image, py-pywavelets, py-pyfftw, py-dxchange
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-h5py, py-scipy, py-six, py-scikit-image, py-pywavelets, py-pyfftw, py-dxchange
Description:
TomoPy is an open-source Python package for tomographic data processing and image reconstruction.

py-toolz

Homepage:
Spack package:
Versions:
0.9.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A set of utility functions for iterators, functions, and dictionaries

py-tornado

Homepage:
Spack package:
Versions:
4.4.0
Build Dependencies:
python, py-setuptools, py-backports-ssl-match-hostname, py-singledispatch, py-certifi, py-backports-abc
Link Dependencies:
python
Run Dependencies:
python, py-backports-ssl-match-hostname, py-singledispatch, py-certifi, py-backports-abc
Description:
Tornado is a Python web framework and asynchronous networking library.

py-tqdm

Homepage:
Spack package:
Versions:
4.8.4
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A Fast, Extensible Progress Meter

py-traceback2

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
python, py-setuptools, py-linecache2, py-pbr
Link Dependencies:
python
Run Dependencies:
python, py-linecache2, py-pbr
Description:
Backports of the traceback module

py-traitlets

Homepage:
Spack package:
Versions:
4.3.1, 4.3.0, 4.2.2, 4.2.1, 4.2.0, 4.1.0, 4.0.0, 4.0
Build Dependencies:
python, py-decorator, py-ipython-genutils, py-enum34
Link Dependencies:
python
Run Dependencies:
python, py-decorator, py-ipython-genutils, py-enum34
Description:
Traitlets Python config system

py-treehash

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Calculates a SHA256 (or, potentially, any other hashlib supported function) "tree" hash, as used by e.g. Amazon Glacier.

py-tuiview

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
python, py-pyqt, py-numpy, gdal
Link Dependencies:
python, gdal
Run Dependencies:
python, py-pyqt, py-numpy
Description:
TuiView is a lightweight raster GIS with powerful raster attribute table manipulation abilities.

py-twisted

Homepage:
Spack package:
Versions:
15.4.0, 15.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
An asynchronous networking framework written in Python

py-typing

Homepage:
Spack package:
Versions:
3.6.4, 3.6.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
This is a backport of the standard library typing module to Python versions older than 3.6.

py-typing-extensions

Homepage:
Spack package:
Versions:
3.7.2
Build Dependencies:
python, py-setuptools, py-typing
Link Dependencies:
python
Run Dependencies:
python, py-typing
Description:
The typing_extensions module contains both backports of these changes as well as experimental types that will eventually be added to the typing module, such as Protocol (see PEP 544 for details about protocols and static duck typing).

py-tzlocal

Homepage:
Spack package:
Versions:
1.3
Build Dependencies:
python, py-setuptools, py-pytz
Link Dependencies:
python
Run Dependencies:
python, py-pytz
Description:
tzinfo object for the local timezone.

py-udunits

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
python, py-setuptools, py-six, py-netcdf4, udunits2
Link Dependencies:
python, udunits2
Run Dependencies:
python, py-six, py-netcdf4
Description:
The MetOffice cf_units Python interface to the UDUNITS-2 Library.

py-umi-tools

Homepage:
Spack package:
Versions:
1.0.0, 0.5.5, 0.5.4, 0.5.3
Build Dependencies:
python, py-setuptools, py-numpy, py-pandas, py-pysam, py-future, py-six, py-regex, py-scipy, py-matplotlib
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-pandas, py-pysam, py-future, py-six, py-regex, py-scipy, py-matplotlib
Description:
Tools for handling Unique Molecular Identifiers in NGS data sets

py-unicycler

Homepage:
Spack package:
Versions:
0.4.7, 0.4.6, 0.4.5
Build Dependencies:
python, py-setuptools, jdk, samtools, racon
Link Dependencies:
python, samtools, racon
Run Dependencies:
python, py-setuptools, spades, pilon, jdk, bowtie2, samtools, racon, blast-plus
Description:
Unicycler is an assembly pipeline for bacterial genomes. It can assemble Illumina-only read sets where it functions as a SPAdes-optimiser. It can also assembly long-read-only sets (PacBio or Nanopore) where it runs a miniasm+Racon pipeline. For the best possible assemblies, give it both Illumina reads and long reads, and it will conduct a hybrid assembly.

py-unittest2

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
python, py-setuptools, py-enum34, py-traceback2, py-six, py-argparse
Link Dependencies:
python
Run Dependencies:
python, py-enum34, py-traceback2, py-six, py-argparse
Description:
unittest2 is a backport of the new features added to the unittest testing framework in Python 2.7 and onwards.

py-unittest2py3k

Homepage:
Spack package:
Versions:
0.5.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
unittest2 is a backport of the new features added to the unittest testing framework in Python 2.7 and 3.2. This is a Python 3 compatible version of unittest2.

py-urllib3

Homepage:
Spack package:
Versions:
1.21.1, 1.20, 1.14
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
HTTP library with thread-safe connection pooling, file post, and more.

py-urwid

Homepage:
Spack package:
Versions:
1.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A full-featured console UI library

py-vcversioner

Homepage:
Spack package:
Versions:
2.16.0.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Vcversioner: Take version numbers from version control.

py-virtualenv

Homepage:
Spack package:
Versions:
16.4.1, 16.0.0, 15.1.0, 15.0.1, 13.0.1, 1.11.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
virtualenv is a tool to create isolated Python environments.

py-virtualenv-clone

Homepage:
Spack package:
Versions:
0.2.6
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
A script for cloning a non-relocatable virtualenv.

py-virtualenvwrapper

Homepage:
Spack package:
Versions:
4.8.2
Build Dependencies:
python, py-virtualenv, py-virtualenv-clone, py-stevedore, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-virtualenv, py-virtualenv-clone, py-stevedore, py-setuptools
Description:
virtualenvwrapper is a set of extensions to Ian Bicking's virtualenv tool. The extensions include wrappers for creating and deleting virtual environments and otherwise managing your development workflow, making it easier to work on more than one project at a time without introducing conflicts in their dependencies.

py-vsc-base

Homepage:
Spack package:
Versions:
2.5.8
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
Common Python libraries tools created by HPC-UGent

py-vsc-install

Homepage:
Spack package:
Versions:
0.10.25
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python, py-setuptools
Description:
Shared setuptools functions and classes for Python libraries developed by HPC-UGent.

py-wcsaxes

Homepage:
Spack package:
Versions:
0.8
Build Dependencies:
python, py-setuptools, py-numpy, py-matplotlib, py-astropy
Link Dependencies:
python
Run Dependencies:
python, py-numpy, py-matplotlib, py-astropy
Description:
WCSAxes is a framework for making plots of Astronomical data in Matplotlib.

py-wcwidth

Homepage:
Spack package:
Versions:
0.1.7
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Measures number of Terminal column cells of wide-character codes

py-webencodings

Homepage:
Spack package:
Versions:
0.5.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
This is a Python implementation of the WHATWG Encoding standard.

py-webkit-server

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
a Webkit-based, headless web client

py-werkzeug

Homepage:
Spack package:
Versions:
0.11.15, 0.11.11
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
The Swiss Army knife of Python web development

py-whatshap

Homepage:
Spack package:
Versions:
0.17
Build Dependencies:
python, py-setuptools, py-cython
Link Dependencies:
python
Run Dependencies:
python, py-cython, py-pysam, py-xopen, py-pyvcf, py-pyfaidx, py-networkx
Description:
WhatsHap is a software for phasing genomic variants using DNA sequencing reads, also called read-based phasing or haplotype assembly.

py-wheel

Homepage:
Spack package:
Versions:
0.33.1, 0.29.0, 0.26.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A built-package format for Python.

py-widgetsnbextension

Homepage:
Spack package:
Versions:
1.2.6
Build Dependencies:
python, py-setuptools, py-jupyter-notebook
Link Dependencies:
python
Run Dependencies:
python, py-jupyter-notebook
Description:
IPython HTML widgets for Jupyter

py-wrapt

Homepage:
Spack package:
Versions:
1.10.10
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Module for decorators, wrappers and monkey patching.

py-xarray

Homepage:
Spack package:
Versions:
0.9.1
Build Dependencies:
python, py-setuptools, py-pandas, py-numpy
Link Dependencies:
python
Run Dependencies:
python, py-pandas, py-numpy
Description:
N-D labeled arrays and datasets in Python

py-xattr

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
A python interface to access extended file attributes, sans libattr dependency

py-xdot

Homepage:
Spack package:
Versions:
master, 1.0, 0.9
Build Dependencies:
python, py-setuptools, py-pygobject, py-pycairo, pango, atk, gdk-pixbuf, gtkplus
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-pygobject, py-pycairo, pango, atk, gdk-pixbuf, gtkplus
Description:
xdot.py is an interactive viewer for graphs written in Graphviz's dot language.

py-xenv

Homepage:
Spack package:
Versions:
develop_2018-12-20, develop
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Helpers to work with the environment in a platform independent way.

py-xlrd

Homepage:
Spack package:
Versions:
0.9.4
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
Library for developers to extract data from Microsoft Excel (tm) spreadsheet files

py-xlsxwriter

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
python
Link Dependencies:
python
Run Dependencies:
python
Description:
XlsxWriter is a Python module for writing files in the Excel 2007+ XLSX file format.

py-xmlrunner

Homepage:
Spack package:
Versions:
1.7.7
Build Dependencies:
python, py-setuptools, py-unittest2
Link Dependencies:
python
Run Dependencies:
python, py-unittest2
Description:
PyUnit-based test runner with JUnit like XML reporting.

py-xopen

Homepage:
Spack package:
Versions:
0.5.0, 0.1.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
This small Python module provides a xopen function that works like the built-in open function, but can also deal with compressed files. Supported compression formats are gzip, bzip2 and xz. They are automatically recognized by their file extensions .gz, .bz2 or .xz.

py-xpyb

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
python, libxcb, xcb-proto
Link Dependencies:
python, libxcb
Description:
xpyb provides a Python binding to the X Window System protocol via libxcb.

py-xvfbwrapper

Homepage:
Spack package:
Versions:
0.2.9
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
run headless display inside X virtual framebuffer (Xvfb)

py-yamlreader

Homepage:
Spack package:
Versions:
3.0.4
Build Dependencies:
python, py-setuptools, py-pyyaml, py-six
Link Dependencies:
python
Run Dependencies:
python, py-setuptools, py-pyyaml, py-six
Description:
Yamlreader merges YAML data from a directory, a list of files or a file glob.

py-yapf

Homepage:
Spack package:
Versions:
0.2.1
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Yet Another Python Formatter

py-yt

Homepage:
Spack package:
Versions:
develop-4.0, develop, 3.5.1, 3.5.0, 3.4.1, 3.4.0, 3.3.5, 3.3.4, 3.3.3, 3.3.2, 3.3.1, 3.3.0, 3.2.3, 3.2.2
Build Dependencies:
python, py-astropy, py-cython, py-h5py, py-ipython, py-matplotlib, py-numpy, py-scipy, py-setuptools, py-sympy, rockstar
Link Dependencies:
python
Run Dependencies:
python, py-astropy, py-cython, py-h5py, py-ipython, py-matplotlib, py-numpy, py-scipy, py-setuptools, py-sympy, rockstar
Description:
Volumetric Data Analysis yt is a python package for analyzing and visualizing volumetric, multi-resolution data from astrophysical simulations, radio telescopes, and a burgeoning interdisciplinary community.

py-ytopt

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
python, py-scikit-learn, py-scikit-optimize
Link Dependencies:
python
Run Dependencies:
python, py-scikit-learn, py-scikit-optimize
Description:
Ytopt package implements search using Random Forest (SuRF), an autotuning search method developed within Y-Tune ECP project.

py-zmq

Homepage:
Spack package:
Versions:
17.1.2, 16.0.2, 14.7.0
Build Dependencies:
python, py-cython, py-py, py-cffi, zeromq
Link Dependencies:
python, zeromq
Run Dependencies:
python, py-cython, py-py, py-cffi
Description:
PyZMQ: Python bindings for zeromq.

py-zope-event

Homepage:
Spack package:
Versions:
4.3.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
Very basic event publishing system.

py-zope-interface

Homepage:
Spack package:
Versions:
4.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Test Dependencies:
py-zope-event, py-nose, py-coverage
Description:
This package provides an implementation of "object interfaces" for Python. Interfaces are a mechanism for labeling objects as conforming to a given API or contract. So, this package can be considered as implementation of the Design By Contract methodology support in Python.

pythia6

Homepage:
Spack package:
Versions:
6.4.28
Build Dependencies:
cmake
Description:
PYTHIA is a program for the generation of high-energy physics events, i.e. for the description of collisions at high energies between elementary particles such as e+, e-, p and pbar in various combinations. PYTHIA6 is a Fortran package which is no longer maintained: new prospective users should use Pythia8 instead. This recipe includes patches required to interoperate with Root.

python

Homepage:
Spack package:
Versions:
3.7.3, 3.7.2, 3.7.1, 3.7.0, 3.6.8, 3.6.7, 3.6.6, 3.6.5, 3.6.4, 3.6.3, 3.6.2, 3.6.1, 3.6.0, 3.5.7, 3.5.2, 3.5.1, 3.5.0, 3.4.10, 3.4.3, 3.3.6, 3.2.6, 3.1.5, 2.7.16, 2.7.15, 2.7.14, 2.7.13, 2.7.12, 2.7.11, 2.7.10, 2.7.9, 2.7.8
Build Dependencies:
pkgconfig, readline, ncurses, openssl, sqlite, gdbm, libnsl, zlib, bzip2, xz, expat, libffi, tk, tcl, libuuid
Link Dependencies:
readline, ncurses, openssl, sqlite, gdbm, libnsl, zlib, bzip2, xz, expat, libffi, tk, tcl, libuuid
Description:
The Python programming language.

qbank

Homepage:
Spack package:
Versions:
2.10.4
Build Dependencies:
openssl, perl, perl-dbi
Link Dependencies:
openssl
Run Dependencies:
perl, perl-dbi
Description:
QBank is a unique dynamic reservation-based allocation management system that manages the utilization of computational resources in a multi- project environment. It is used in conjunction with a resource management system allowing an organization to guarantee greater fairness and enforce mission priorities by associating a charge with the use of computational resources and allocating resource credits which limit how much of the resources may be used at what time and by whom. It tracks resource utilization and allows for insightful planning.

qbox

Homepage:
Spack package:
Versions:
1.63.7, 1.63.5, 1.63.4, 1.63.2, 1.63.0, 1.62.3, 1.60.9, 1.60.4, 1.60.0, 1.58.0, 1.56.2, 1.54.4, 1.54.2, 1.52.3, 1.52.2, 1.50.4, 1.50.2, 1.50.1, 1.47.0, 1.45.3, 1.45.1, 1.45.0, 1.44.0
Build Dependencies:
mpi, blas, scalapack, fftw, xerces-c
Link Dependencies:
mpi, blas, scalapack, fftw, xerces-c
Description:
Qbox is a C++/MPI scalable parallel implementation of first-principles molecular dynamics (FPMD) based on the plane-wave, pseudopotential formalism. Qbox is designed for operation on large parallel computers.

qca

Homepage:
Spack package:
Versions:
2.1.3
Build Dependencies:
cmake, qt
Link Dependencies:
qt
Description:
Taking a hint from the similarly-named Java Cryptography Architecture, QCA aims to provide a straightforward and cross-platform crypto API, using Qt datatypes and conventions. QCA separates the API from the implementation, using plugins known as Providers. The advantage of this model is to allow applications to avoid linking to or explicitly depending on any particular cryptographic library. This allows one to easily change or upgrade crypto implementations without even needing to recompile the application! QCA should work everywhere Qt does, including Windows/Unix/MacOSX.

qhull

Homepage:
Spack package:
Versions:
2015.2, 2012.1
Build Dependencies:
cmake
Description:
Qhull computes the convex hull, Delaunay triangulation, Voronoi diagram, halfspace intersection about a point, furt hest-site Delaunay triangulation, and furthest-site Voronoi diagram. The source code runs in 2-d, 3-d, 4-d, and higher dimensions. Qhull implements the Quickhull algorithm for computing the convex hull. It handles roundoff errors from floating point arithmetic. It computes volumes, surface areas, and approximations to the convex hull.

qjson

Homepage:
Spack package:
Versions:
0.9.0
Build Dependencies:
cmake, qt
Link Dependencies:
qt
Description:
QJson is a Qt-based library that maps JSON data to QVariant objects and vice versa.

qmcpack

Homepage:
Spack package:
Versions:
develop, 3.7.0, 3.6.0, 3.5.0, 3.4.0, 3.3.0, 3.2.0, 3.1.1, 3.1.0
Build Dependencies:
cuda, cmake, boost, libxml2, mpi, hdf5, blas, lapack, fftw-api
Link Dependencies:
cuda, boost, libxml2, mpi, hdf5, blas, lapack, fftw-api
Run Dependencies:
py-numpy, py-matplotlib, quantum-espresso
Description:
QMCPACK, is a modern high-performance open-source Quantum Monte Carlo (QMC) simulation code.

qmd-progress

Homepage:
Spack package:
Versions:
develop, 1.1.0, 1.0.0
Build Dependencies:
cmake, bml, mpi, metis
Link Dependencies:
bml, mpi, metis
Description:
PROGRESS: Parallel, Rapid O(N) and Graph-based Recursive Electronic Structure Solver. This library is focused on the development of general solvers that are commonly used in quantum chemistry packages.

qorts

Homepage:
Spack package:
Versions:
1.2.42
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r, java
Description:
The QoRTs software package is a fast, efficient, and portable multifunction toolkit designed to assist in the analysis, quality control, and data management of RNA-Seq and DNA-Seq datasets. Its primary function is to aid in the detection and identification of errors, biases, and artifacts produced by high-throughput sequencing technology.

qrupdate

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
blas, lapack
Link Dependencies:
blas, lapack
Description:
qrupdate is a Fortran library for fast updates of QR and Cholesky decompositions.

qt

Homepage:
Spack package:
Versions:
5.11.3, 5.11.2, 5.10.0, 5.9.1, 5.9.0, 5.8.0, 5.7.1, 5.7.0, 5.5.1, 5.4.2, 5.4.0, 5.3.2, 5.2.1, 4.8.6, 4.8.5, 3.3.8b
Build Dependencies:
pkgconfig, openssl, glib, gtkplus, libxml2, zlib, dbus, libtiff, libpng, libmng, jpeg, icu4c, fontconfig, freetype, sqlite, pcre, pcre2, double-conversion, harfbuzz, python, gl, libxcb, xcb-util-image, xcb-util-keysyms, xcb-util-wm, xcb-util-renderutil, libxkbcommon, inputproto, libx11, libxext, flex, bison, gperf
Link Dependencies:
openssl, glib, gtkplus, libxml2, zlib, dbus, libtiff, libpng, libmng, jpeg, icu4c, fontconfig, freetype, pcre, pcre2, double-conversion, harfbuzz, gl, libxcb, xcb-util-image, xcb-util-keysyms, xcb-util-wm, xcb-util-renderutil, libxkbcommon, inputproto, libx11, libxext, gperf
Run Dependencies:
sqlite
Description:
Qt is a comprehensive cross-platform C++ application framework.

qt-creator

Homepage:
Spack package:
Versions:
4.8.0, 4.4.0, 4.3.1, 4.1.0
Build Dependencies:
qt, sqlite
Link Dependencies:
qt, sqlite
Description:
The Qt Creator IDE.

qtgraph

Homepage:
Spack package:
Versions:
develop, 1.0.0.0
Build Dependencies:
qt, graphviz
Link Dependencies:
qt, graphviz
Description:
The baseline library used in the CUDA-centric Open|SpeedShop Graphical User Interface (GUI) which allows Graphviz DOT formatted data to be imported into a Qt application by wrapping the Graphviz libcgraph and libgvc within the Qt Graphics View Framework.

qthreads

Homepage:
Spack package:
Versions:
1.12, 1.11, 1.10
Build Dependencies:
hwloc
Link Dependencies:
hwloc
Description:
The qthreads API is designed to make using large numbers of threads convenient and easy, and to allow portable access to threading constructs used in massively parallel shared memory environments. The API maps well to both MTA-style threading and PIM-style threading, and we provide an implementation of this interface in both a standard SMP context as well as the SST context. The qthreads API provides access to full/empty-bit (FEB) semantics, where every word of memory can be marked either full or empty, and a thread can wait for any word to attain either state.

quantum-espresso

Homepage:
Spack package:
Versions:
develop, 6.4, 6.3, 6.2.1, 6.2.0, 6.1.0, 6.0.0, 5.4, 5.3, latest-backports
Build Dependencies:
blas, lapack, fftw-api, mpi, scalapack, elpa, hdf5
Link Dependencies:
blas, lapack, fftw-api, mpi, scalapack, elpa, hdf5
Description:
Quantum-ESPRESSO is an integrated suite of Open-Source computer codes for electronic-structure calculations and materials modeling at the nanoscale. It is based on density-functional theory, plane waves, and pseudopotentials.

quinoa

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, hdf5, charmpp, trilinos, boost, hypre, random123, netlib-lapack, mad-numdiff, h5part, boostmplcartesianproduct, tut, pugixml, pstreams, pegtl
Link Dependencies:
hdf5, charmpp, trilinos, boost, hypre, random123, netlib-lapack, mad-numdiff, h5part, boostmplcartesianproduct, tut, pugixml, pstreams, pegtl
Description:
Quinoa is a set of computational tools that enables research and numerical analysis in fluid dynamics. At this time it is a test-bed to experiment with various algorithms using fully asynchronous runtime systems.

qwt

Homepage:
Spack package:
Versions:
6.1.3, 5.2.2
Build Dependencies:
qt
Link Dependencies:
qt
Description:
The Qwt library contains GUI Components and utility classes which are primarily useful for programs with a technical background. Beside a framework for 2D plots it provides scales, sliders, dials, compasses, thermometers, wheels and knobs to control or display values, arrays, or ranges of type double.

r

Homepage:
Spack package:
Versions:
3.6.0, 3.5.3, 3.5.2, 3.5.1, 3.5.0, 3.4.4, 3.4.3, 3.4.2, 3.4.1, 3.4.0, 3.3.3, 3.3.2, 3.3.1, 3.3.0, 3.2.5, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.3, 3.1.2
Build Dependencies:
blas, lapack, readline, ncurses, icu4c, glib, zlib, bzip2, libtiff, jpeg, cairo, pango, freetype, tcl, tk, libx11, libxt, curl, pcre, java
Link Dependencies:
blas, lapack, readline, ncurses, icu4c, glib, zlib, bzip2, libtiff, jpeg, cairo, pango, freetype, tcl, tk, libx11, libxt, curl, pcre, java
Description:
R is 'GNU S', a freely available language and environment for statistical computing and graphics which provides a wide variety of statistical and graphical techniques: linear and nonlinear modelling, statistical tests, time series analysis, classification, clustering, etc. Please consult the R project homepage for further information.

r-a4

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-a4base, r-a4preproc, r-a4classif, r-a4core, r-a4reporting
Link Dependencies:
r
Run Dependencies:
r, r-a4base, r-a4preproc, r-a4classif, r-a4core, r-a4reporting
Description:
Automated Affymetrix Array Analysis Umbrella Package.

r-a4base

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-biobase, r-annotationdbi, r-annaffy, r-mpm, r-genefilter, r-limma, r-multtest, r-glmnet, r-a4preproc, r-a4core, r-gplots
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-annotationdbi, r-annaffy, r-mpm, r-genefilter, r-limma, r-multtest, r-glmnet, r-a4preproc, r-a4core, r-gplots
Description:
Automated Affymetrix Array Analysis.

r-a4classif

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-a4core, r-a4preproc, r-mlinterfaces, r-rocr, r-pamr, r-glmnet, r-varselrf
Link Dependencies:
r
Run Dependencies:
r, r-a4core, r-a4preproc, r-mlinterfaces, r-rocr, r-pamr, r-glmnet, r-varselrf
Description:
Automated Affymetrix Array Analysis Classification Package.

r-a4core

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-biobase, r-glmnet
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-glmnet
Description:
Automated Affymetrix Array Analysis Core Package.

r-a4preproc

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
Automated Affymetrix Array Analysis Preprocessing Package.

r-a4reporting

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-annaffy, r-xtable
Link Dependencies:
r
Run Dependencies:
r, r-annaffy, r-xtable
Description:
Automated Affymetrix Array Analysis Reporting Package.

r-abadata

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides the data for the gene expression enrichment analysis conducted in the package 'ABAEnrichment'. The package includes three datasets which are derived from the Allen Brain Atlas: (1) Gene expression data from Human Brain (adults) averaged across donors, (2) Gene expression data from the Developing Human Brain pooled into five age categories and averaged across donors and (3) a developmental effect score based on the Developing Human Brain expression data. All datasets are restricted to protein coding genes.

r-abaenrichment

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
r, r-rcpp, r-gplots, r-gtools, r-abadata
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-gplots, r-gtools, r-abadata
Description:
The package ABAEnrichment is designed to test for enrichment of user defined candidate genes in the set of expressed genes in different human brain regions. The core function 'aba_enrich' integrates the expression of the candidate gene set (averaged across donors) and the structural information of the brain using an ontology, both provided by the Allen Brain Atlas project. 'aba_enrich' interfaces the ontology enrichment software FUNC to perform the statistical analyses. Additional functions provided in this package like 'get_expression' and 'plot_expression' facilitate exploring the expression data. From version 1.3.5 onwards genomic regions can be provided as input, too; and from version 1.5.9 onwards the function 'get_annotated_genes' offers an easy way to obtain annotations of genes to enriched or user-defined brain regions.

r-abind

Homepage:
Spack package:
Versions:
1.4-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Combine multidimensional arrays into a single array. This is a generalization of 'cbind' and 'rbind'. Works with vectors, matrices, and higher-dimensional arrays. Also provides functions 'adrop', 'asub', and 'afill' for manipulating, extracting and replacing data in arrays.

r-absseq

Homepage:
Spack package:
Versions:
1.22.8
Build Dependencies:
r, r-locfit, r-limma
Link Dependencies:
r
Run Dependencies:
r, r-locfit, r-limma
Description:
Inferring differential expression genes by absolute counts difference between two groups, utilizing Negative binomial distribution and moderating fold-change according to heterogeneity of dispersion across expression level.

r-acde

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
r, r-boot
Link Dependencies:
r
Run Dependencies:
r, r-boot
Description:
This package provides a multivariate inferential analysis method for detecting differentially expressed genes in gene expression data. It uses artificial components, close to the data's principal components but with an exact interpretation in terms of differential genetic expression, to identify differentially expressed genes while controlling the false discovery rate (FDR). The methods on this package are described in the vignette or in the article 'Multivariate Method for Inferential Identification of Differentially Expressed Genes in Gene Expression Experiments' by J. P. Acosta, L. Lopez-Kleine and S. Restrepo (2015, pending publication).

r-acepack

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
ACE and AVAS for Selecting Multiple Regression Transformations.

r-acgh

Homepage:
Spack package:
Versions:
1.54.0
Build Dependencies:
r, r-cluster, r-survival, r-multtest, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-cluster, r-survival, r-multtest, r-biobase
Description:
Functions for reading aCGH data from image analysis output files and clone information files, creation of aCGH S3 objects for storing these data. Basic methods for accessing/replacing, subsetting, printing and plotting aCGH objects.

r-acme

Homepage:
Spack package:
Versions:
2.32.0
Build Dependencies:
r, r-biobase, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biocgenerics
Description:
ACME (Algorithms for Calculating Microarray Enrichment) is a set of tools for analysing tiling array ChIP/chip, DNAse hypersensitivity, or other experiments that result in regions of the genome showing "enrichment". It does not rely on a specific array technology (although the array should be a "tiling" array), is very general (can be applied in experiments resulting in regions of enrichment), and is very insensitive to array noise or normalization methods. It is also very fast and can be applied on whole-genome tiling array experiments quite easily with enough memory.

r-ada

Homepage:
Spack package:
Versions:
2.0-5
Build Dependencies:
r, r-rpart
Link Dependencies:
r
Run Dependencies:
r, r-rpart
Description:
Performs discrete, real, and gentle boost under both exponential and logistic loss on a given data set.

r-adabag

Homepage:
Spack package:
Versions:
4.1
Build Dependencies:
r, r-rpart, r-mlbench, r-caret
Link Dependencies:
r
Run Dependencies:
r, r-rpart, r-mlbench, r-caret
Description:
Applies Multiclass AdaBoost.M1, SAMME and Bagging.

r-ade4

Homepage:
Spack package:
Versions:
1.7-6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Analysis of Ecological Data : Exploratory and Euclidean Methods in Environmental Sciences

r-adegenet

Homepage:
Spack package:
Versions:
2.0.1
Build Dependencies:
r, r-ade4, r-igraph, r-ape, r-shiny, r-ggplot2, r-seqinr, r-spdep, r-reshape2, r-dplyr, r-vegan
Link Dependencies:
r
Run Dependencies:
r, r-ade4, r-igraph, r-ape, r-shiny, r-ggplot2, r-seqinr, r-spdep, r-reshape2, r-dplyr, r-vegan
Description:
Toolset for the exploration of genetic and genomic data. Adegenet provides formal (S4) classes for storing and handling various genetic data, including genetic markers with varying ploidy and hierarchical population structure ('genind' class), alleles counts by populations ('genpop'), and genome-wide SNP data ('genlight'). It also implements original multivariate methods (DAPC, sPCA), graphics, statistical tests, simulation tools, distance and similarity measures, and several spatial methods. A range of both empirical and simulated datasets is also provided to illustrate various methods.

r-adsplit

Homepage:
Spack package:
Versions:
1.46.0
Build Dependencies:
r, r-annotationdbi, r-biobase, r-cluster, r-go-db, r-kegg-db, r-multtest
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi, r-biobase, r-cluster, r-go-db, r-kegg-db, r-multtest
Description:
This package implements clustering of microarray gene expression profiles according to functional annotations. For each term genes are annotated to, splits into two subclasses are computed and a significance of the supporting gene set is determined.

r-aer

Homepage:
Spack package:
Versions:
1.2-5
Build Dependencies:
r, r-car, r-lmtest, r-sandwich, r-survival, r-zoo, r-formula
Link Dependencies:
r
Run Dependencies:
r, r-car, r-lmtest, r-sandwich, r-survival, r-zoo, r-formula
Description:
Functions, data sets, examples, demos, and vignettes for the book Christian Kleiber and Achim Zeileis (2008), Applied Econometrics with R, Springer-Verlag, New York. ISBN 978-0-387-77316-2.

r-affxparser

Homepage:
Spack package:
Versions:
1.48.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Package for parsing Affymetrix files (CDF, CEL, CHP, BPMAP, BAR). It provides methods for fast and memory efficient parsing of Affymetrix files using the Affymetrix' Fusion SDK. Both ASCII- and binary-based files are supported. Currently, there are methods for reading chip definition file (CDF) and a cell intensity file (CEL). These files can be read either in full or in part. For example, probe signals from a few probesets can be extracted very quickly from a set of CEL files into a convenient list structure.

r-affy

Homepage:
Spack package:
Versions:
1.54.0
Build Dependencies:
r, r-biocgenerics, r-biobase, r-affyio, r-biocinstaller, r-preprocesscore, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-affyio, r-biocinstaller, r-preprocesscore, r-zlibbioc
Description:
The package contains functions for exploratory oligonucleotide array analysis. The dependence on tkWidgets only concerns few convenience functions. 'affy' is fully functional without it.

r-affycomp

Homepage:
Spack package:
Versions:
1.52.0
Build Dependencies:
r, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-biobase
Description:
The package contains functions that can be used to compare expression measures for Affymetrix Oligonucleotide Arrays.

r-affycompatible

Homepage:
Spack package:
Versions:
1.36.0
Build Dependencies:
r, r-xml, r-rcurl, r-biostrings
Link Dependencies:
r
Run Dependencies:
r, r-xml, r-rcurl, r-biostrings
Description:
This package provides an interface to Affymetrix chip annotation and sample attribute files. The package allows an easy way for users to download and manage local data bases of Affynmetrix NetAffx annotation files. The package also provides access to GeneChip Operating System (GCOS) and GeneChip Command Console (AGCC)-compatible sample annotation files.

r-affycontam

Homepage:
Spack package:
Versions:
1.34.0
Build Dependencies:
r, r-biobase, r-affy, r-affydata
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-affy, r-affydata
Description:
structured corruption of cel file data to demonstrate QA effectiveness.

r-affycoretools

Homepage:
Spack package:
Versions:
1.48.0
Build Dependencies:
r, r-biobase, r-affy, r-limma, r-gostats, r-gcrma, r-xtable, r-annotationdbi, r-ggplot2, r-gplots, r-oligoclasses, r-reportingtools, r-hwriter, r-lattice, r-s4vectors, r-edger, r-rsqlite, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-affy, r-limma, r-gostats, r-gcrma, r-xtable, r-annotationdbi, r-ggplot2, r-gplots, r-oligoclasses, r-reportingtools, r-hwriter, r-lattice, r-s4vectors, r-edger, r-rsqlite, r-biocgenerics
Description:
Various wrapper functions that have been written to streamline the more common analyses that a core Biostatistician might see.

r-affydata

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-affy
Link Dependencies:
r
Run Dependencies:
r, r-affy
Description:
Example datasets of a slightly large size. They represent 'real world examples', unlike the artificial examples included in the package affy.

r-affyexpress

Homepage:
Spack package:
Versions:
1.42.0
Build Dependencies:
r, r-affy, r-limma
Link Dependencies:
r
Run Dependencies:
r, r-affy, r-limma
Description:
The purpose of this package is to provide a comprehensive and easy-to- use tool for quality assessment and to identify differentially expressed genes in the Affymetrix gene expression data.

r-affyilm

Homepage:
Spack package:
Versions:
1.28.0
Build Dependencies:
r, r-gcrma, r-affxparser, r-affy, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-gcrma, r-affxparser, r-affy, r-biobase
Description:
affyILM is a preprocessing tool which estimates gene expression levels for Affymetrix Gene Chips. Input from physical chemistry is employed to first background subtract intensities before calculating concentrations on behalf of the Langmuir model.

r-affyio

Homepage:
Spack package:
Versions:
1.46.0
Build Dependencies:
r, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-zlibbioc
Description:
Routines for parsing Affymetrix data files based upon file format information. Primary focus is on accessing the CEL and CDF file formats.

r-affypdnn

Homepage:
Spack package:
Versions:
1.50.0
Build Dependencies:
r, r-affy
Link Dependencies:
r
Run Dependencies:
r, r-affy
Description:
The package contains functions to perform the PDNN method described by Li Zhang et al.

r-affyplm

Homepage:
Spack package:
Versions:
1.52.1
Build Dependencies:
r, r-biocgenerics, r-affy, r-biobase, r-gcrma, r-preprocesscore, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-affy, r-biobase, r-gcrma, r-preprocesscore, r-zlibbioc
Description:
A package that extends and improves the functionality of the base affy package. Routines that make heavy use of compiled code for speed. Central focus is on implementation of methods for fitting probe-level models and tools using these models. PLM based quality assessment tools.

r-affyqcreport

Homepage:
Spack package:
Versions:
1.54.0
Build Dependencies:
r, r-biobase, r-affy, r-lattice, r-affyplm, r-genefilter, r-rcolorbrewer, r-simpleaffy, r-xtable
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-affy, r-lattice, r-affyplm, r-genefilter, r-rcolorbrewer, r-simpleaffy, r-xtable
Description:
This package creates a QC report for an AffyBatch object. The report is intended to allow the user to quickly assess the quality of a set of arrays in an AffyBatch object.

r-affyrnadegradation

Homepage:
Spack package:
Versions:
1.22.0
Build Dependencies:
r, r-affy
Link Dependencies:
r
Run Dependencies:
r, r-affy
Description:
The package helps with the assessment and correction of RNA degradation effects in Affymetrix 3' expression arrays. The parameter d gives a robust and accurate measure of RNA integrity. The correction removes the probe positional bias, and thus improves comparability of samples that are affected by RNA degradation.

r-agdex

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-biobase, r-gseabase
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-gseabase
Description:
A tool to evaluate agreement of differential expression for cross- species genomics.

r-agilp

Homepage:
Spack package:
Versions:
3.8.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Agilent expression array processing package.

r-agimicrorna

Homepage:
Spack package:
Versions:
2.26.0
Build Dependencies:
r, r-affycoretools, r-preprocesscore, r-affy, r-limma, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-affycoretools, r-preprocesscore, r-affy, r-limma, r-biobase
Description:
Processing and Analysis of Agilent microRNA data.

r-aims

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-e1071, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-e1071, r-biobase
Description:
This package contains the AIMS implementation. It contains necessary functions to assign the five intrinsic molecular subtypes (Luminal A, Luminal B, Her2-enriched, Basal-like, Normal-like). Assignments could be done on individual samples as well as on dataset of gene expression data.

r-aldex2

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-s4vectors, r-iranges, r-genomicranges, r-summarizedexperiment, r-biocparallel
Link Dependencies:
r
Run Dependencies:
r, r-s4vectors, r-iranges, r-genomicranges, r-summarizedexperiment, r-biocparallel
Description:
A differential abundance analysis for the comparison of two or more conditions. For example, single-organism and meta-RNA-seq high- throughput sequencing assays, or of selected and unselected values from in-vitro sequence selections. Uses a Dirichlet-multinomial model to infer abundance from counts, that has been optimized for three or more experimental replicates. Infers sampling variation and calculates the expected false discovery rate given the biological and sampling variation using the Wilcox rank test or Welches t-test (aldex.ttest) or the glm and Kruskal Wallis tests (aldex.glm). Reports both P and fdr values calculated by the Benjamini Hochberg correction.

r-alpine

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-biostrings, r-iranges, r-genomicranges, r-genomicalignments, r-rsamtools, r-summarizedexperiment, r-genomicfeatures, r-speedglm, r-graph, r-rbgl, r-stringr, r-genomeinfodb, r-s4vectors
Link Dependencies:
r
Run Dependencies:
r, r-biostrings, r-iranges, r-genomicranges, r-genomicalignments, r-rsamtools, r-summarizedexperiment, r-genomicfeatures, r-speedglm, r-graph, r-rbgl, r-stringr, r-genomeinfodb, r-s4vectors
Description:
Fragment sequence bias modeling and correction for RNA-seq transcript abundance estimation.

r-als

Homepage:
Spack package:
Versions:
0.0.6
Build Dependencies:
r, r-iso, r-nnls
Link Dependencies:
r
Run Dependencies:
r, r-iso, r-nnls
Description:
Alternating least squares is often used to resolve components contributing to data with a bilinear structure; the basic technique may be extended to alternating constrained least squares. Commonly applied constraints include unimodality, non-negativity, and normalization of components. Several data matrices may be decomposed simultaneously by assuming that one of the two matrices in the bilinear decomposition is shared between datasets.

r-alsace

Homepage:
Spack package:
Versions:
1.12.0
Build Dependencies:
r, r-als, r-ptw
Link Dependencies:
r
Run Dependencies:
r, r-als, r-ptw
Description:
Alternating Least Squares (or Multivariate Curve Resolution) for analytical chemical data, in particular hyphenated data where the first direction is a retention time axis, and the second a spectral axis. Package builds on the basic als function from the ALS package and adds functionality for high-throughput analysis, including definition of time windows, clustering of profiles, retention time correction, etcetera.

r-altcdfenvs

Homepage:
Spack package:
Versions:
2.38.0
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-biobase, r-affy, r-makecdfenv, r-biostrings, r-hypergraph
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-biobase, r-affy, r-makecdfenv, r-biostrings, r-hypergraph
Description:
Convenience data structures and functions to handle cdfenvs.

r-amap

Homepage:
Spack package:
Versions:
0.8-16
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Tools for Clustering and Principal Component Analysis (With robust methods, and parallelized functions).

r-ampliqueso

Homepage:
Spack package:
Versions:
1.14.0
Build Dependencies:
r, r-samr, r-deseq, r-edger, r-xtable, r-statmod, r-genefilter, r-variantannotation, r-foreach, r-doparallel, r-gplots, r-ggplot2, r-rgl, r-knitr, r-rnaseqmap
Link Dependencies:
r
Run Dependencies:
r, r-samr, r-deseq, r-edger, r-xtable, r-statmod, r-genefilter, r-variantannotation, r-foreach, r-doparallel, r-gplots, r-ggplot2, r-rgl, r-knitr, r-rnaseqmap
Description:
The package provides tools and reports for the analysis of amplicon sequencing panels, such as AmpliSeq.

r-analysispageserver

Homepage:
Spack package:
Versions:
1.10.0
Build Dependencies:
r, r-log4r, r-rjson, r-biobase, r-graph
Link Dependencies:
r
Run Dependencies:
r, r-log4r, r-rjson, r-biobase, r-graph
Description:
AnalysisPageServer is a modular system that enables sharing of customizable R analyses via the web.

r-anaquin

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-deseq2, r-plyr, r-locfit, r-qvalue, r-knitr, r-rocr, r-ggplot2
Link Dependencies:
r
Run Dependencies:
r, r-deseq2, r-plyr, r-locfit, r-qvalue, r-knitr, r-rocr, r-ggplot2
Description:
The project is intended to support the use of sequins (synthetic sequencing spike-in controls) owned and made available by the Garvan Institute of Medical Research. The goal is to provide a standard open source library for quantitative analysis, modelling and visualization of spike-in controls.

r-aneufinderdata

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Whole-genome single cell sequencing data for demonstration purposes in the AneuFinder package.

r-animation

Homepage:
Spack package:
Versions:
2.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides functions for animations in statistics, covering topics in probability theory, mathematical statistics, multivariate statistics, non-parametric statistics, sampling survey, linear models, time series, computational statistics, data mining and machine learning. These functions maybe helpful in teaching statistics and data analysis.

r-annaffy

Homepage:
Spack package:
Versions:
1.48.0
Build Dependencies:
r, r-biobase, r-go-db, r-kegg-db
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-go-db, r-kegg-db
Description:
Functions for handling data from Bioconductor Affymetrix annotation data packages. Produces compact HTML and text reports including experimental data and URL links to many online databases. Allows searching biological metadata using various criteria.

r-annotate

Homepage:
Spack package:
Versions:
1.58.0, 1.54.0
Build Dependencies:
r, r-annotationdbi, r-xml, r-rcurl, r-xtable
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi, r-xml, r-rcurl, r-xtable
Description:
Using R enviroments for annotation.

r-annotationdbi

Homepage:
Spack package:
Versions:
1.42.1, 1.38.2
Build Dependencies:
r, r-biocgenerics, r-biobase, r-iranges, r-dbi, r-rsqlite
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-iranges, r-dbi, r-rsqlite
Description:
Provides user interface and database connection code for annotation data packages using SQLite data storage.

r-annotationfilter

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
r, r-genomicranges, r-lazyeval
Link Dependencies:
r
Run Dependencies:
r, r-genomicranges, r-lazyeval
Description:
This package provides class and other infrastructure to implement filters for manipulating Bioconductor annotation resources. The filters will be used by ensembldb, Organism.dplyr, and other packages.

r-annotationforge

Homepage:
Spack package:
Versions:
1.18.2
Build Dependencies:
r, r-biocgenerics, r-biobase, r-annotationdbi, r-dbi, r-rsqlite, r-xml, r-s4vectors, r-rcurl
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-annotationdbi, r-dbi, r-rsqlite, r-xml, r-s4vectors, r-rcurl
Description:
Provides code for generating Annotation packages and their databases. Packages produced are intended to be used with AnnotationDbi.

r-annotationhub

Homepage:
Spack package:
Versions:
2.8.3
Build Dependencies:
r, r-rsqlite, r-biocinstaller, r-annotationdbi, r-s4vectors, r-interactivedisplaybase, r-httr, r-yaml
Link Dependencies:
r
Run Dependencies:
r, r-rsqlite, r-biocinstaller, r-annotationdbi, r-s4vectors, r-interactivedisplaybase, r-httr, r-yaml
Description:
This package provides a client for the Bioconductor AnnotationHub web resource. The AnnotationHub web resource provides a central location where genomic files (e.g., VCF, bed, wig) and other resources from standard locations (e.g., UCSC, Ensembl) can be discovered. The resource includes metadata about each resource, e.g., a textual description, tags, and date of modification. The client creates and manages a local cache of files retrieved by the user, helping with quick and reproducible access.

r-ape

Homepage:
Spack package:
Versions:
5.2, 5.1, 5.0, 4.1
Build Dependencies:
r, r-nlme, r-lattice, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-nlme, r-lattice, r-rcpp
Description:
Functions for reading, writing, plotting, and manipulating phylogenetic trees, analyses of comparative data in a phylogenetic framework, ancestral character analyses, analyses of diversification and macroevolution, computing distances from DNA sequences, reading and writing nucleotide sequences as well as importing from BioConductor, and several tools such as Mantel's test, generalized skyline plots, graphical exploration of phylogenetic data (alex, trex, kronoviz), estimation of absolute evolutionary rates and clock-like trees using mean path lengths and penalized likelihood, dating trees with non- contemporaneous sequences, translating DNA into AA sequences, and assessing sequence alignments. Phylogeny estimation can be done with the NJ, BIONJ, ME, MVR, SDM, and triangle methods, and several methods handling incomplete distance matrices (NJ*, BIONJ*, MVR*, and the corresponding triangle method). Some functions call external applications (PhyML, Clustal, T-Coffee, Muscle) whose results are returned into R.

r-argparse

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
r, r-proto, r-findpython, r-getopt, r-jsonlite
Link Dependencies:
r
Run Dependencies:
r, r-proto, r-findpython, r-getopt, r-jsonlite
Description:
A command line parser to be used with Rscript to write "#!" shebang scripts that gracefully accept positional and optional arguments and automatically generate usage.

r-assertthat

Homepage:
Spack package:
Versions:
0.2.0, 0.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
assertthat is an extension to stopifnot() that makes it easy to declare the pre and post conditions that you code should satisfy, while also producing friendly error messages so that your users know what they've done wrong.

r-backports

Homepage:
Spack package:
Versions:
1.1.1, 1.1.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implementations of functions which have been introduced in R since version 3.0.0. The backports are conditionally exported which results in R resolving the function names to the version shipped with R (if available) and uses the implemented backports as fallback. This way package developers can make use of the new functions without worrying about the minimum required R version.

r-bamsignals

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-biocgenerics, r-rcpp, r-iranges, r-genomicranges, r-zlibbioc, r-rhtslib
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-rcpp, r-iranges, r-genomicranges, r-zlibbioc, r-rhtslib
Description:
This package allows to efficiently obtain count vectors from indexed bam files. It counts the number of reads in given genomic ranges and it computes reads profiles and coverage profiles. It also handles paired- end data.

r-base64

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
r, r-openssl
Link Dependencies:
r
Run Dependencies:
r, r-openssl
Description:
Compatibility wrapper to replace the orphaned package by Romain Francois. New applications should use the 'openssl' or 'base64enc' package instead.

r-base64enc

Homepage:
Spack package:
Versions:
0.1-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package provides tools for handling base64 encoding. It is more flexible than the orphaned base64 package.

r-bayesm

Homepage:
Spack package:
Versions:
3.1-0.1
Build Dependencies:
r, r-rcpp, r-rcpparmadillo
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-rcpparmadillo
Description:
Bayesian Inference for Marketing/Micro-Econometrics

r-bbmisc

Homepage:
Spack package:
Versions:
1.11
Build Dependencies:
r, r-checkmate
Link Dependencies:
r
Run Dependencies:
r, r-checkmate
Description:
Miscellaneous helper functions for and from B. Bischl and some other guys, mainly for package development.

r-beanplot

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Plots univariate comparison graphs, an alternative to boxplot/stripchart/violin plot.

r-bfast

Homepage:
Spack package:
Versions:
1.5.7
Build Dependencies:
r, r-strucchange, r-zoo, r-forecast, r-sp, r-raster
Link Dependencies:
r
Run Dependencies:
r, r-strucchange, r-zoo, r-forecast, r-sp, r-raster
Description:
bfast: Breaks For Additive Season and Trend (BFAST)

r-bfastspatial

Homepage:
Spack package:
Versions:
0.6.2
Build Dependencies:
r, r-raster, r-bfast, r-gdalutils, r-stringr, r-rgdal, r-bitops, r-zoo, r-sp
Link Dependencies:
r
Run Dependencies:
r, r-raster, r-bfast, r-gdalutils, r-stringr, r-rgdal, r-bitops, r-zoo, r-sp
Description:
Pre-process gridded time-series data in order for them to be analyzed with change detection algorithms such as bfast. Uses classes from the raster package and includes utilities to run the algorithms and post- process the results.

r-bglr

Homepage:
Spack package:
Versions:
1.0.8
Build Dependencies:
r, r-truncnorm
Link Dependencies:
r
Run Dependencies:
r, r-truncnorm
Description:
BGLR: Bayesian Generalized Linear Regression

r-bh

Homepage:
Spack package:
Versions:
1.69.0-1, 1.65.0-1, 1.60.0-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Boost provides free peer-reviewed portable C++ source libraries. A large part of Boost is provided as C++ template code which is resolved entirely at compile-time without linking. This package aims to provide the most useful subset of Boost libraries for template use among CRAN package. By placing these libraries in this package, we offer a more efficient distribution system for CRAN as replication of this code in the sources of other packages is avoided. As of release 1.60.0-2, the following Boost libraries are included: 'algorithm' 'any' 'bimap' 'bind' 'circular_buffer' 'concept' 'config' 'container' 'date'_'time' 'detail' 'dynamic_bitset' 'exception' 'filesystem' 'flyweight' 'foreach' 'functional' 'fusion' 'geometry' 'graph' 'heap' 'icl' 'integer' 'interprocess' 'intrusive' 'io' 'iostreams' 'iterator' 'math' 'move' 'mpl' 'multiprcecision' 'numeric' 'pending' 'phoenix' 'preprocessor' 'random' 'range' 'smart_ptr' 'spirit' 'tuple' 'type_trains' 'typeof' 'unordered' 'utility' 'uuid'.

r-biasedurn

Homepage:
Spack package:
Versions:
1.07
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Statistical models of biased sampling in the form of univariate and multivariate noncentral hypergeometric distributions, including Wallenius' noncentral hypergeometric distribution and Fisher's noncentral hypergeometric distribution (also called extended hypergeometric distribution). See vignette("UrnTheory") for explanation of these distributions.

r-bibtex

Homepage:
Spack package:
Versions:
0.4.2
Build Dependencies:
r, r-stringr, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-stringr, r-testthat
Description:
bibtex: Bibtex Parser Utility to parse a bibtex file.

r-bindr

Homepage:
Spack package:
Versions:
0.1.1, 0.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a simple interface for creating active bindings where the bound function accepts additional arguments.

r-bindrcpp

Homepage:
Spack package:
Versions:
0.2.2, 0.2
Build Dependencies:
r, r-rcpp, r-bindr, r-plogr
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-bindr, r-plogr
Description:
Provides an easy way to fill an environment with active bindings that call a C++ function.

r-biobase

Homepage:
Spack package:
Versions:
2.40.0, 2.38.0, 2.36.2
Build Dependencies:
r, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics
Description:
Functions that are needed by many other packages or which replace R functions.

r-biocgenerics

Homepage:
Spack package:
Versions:
0.26.0, 0.24.0, 0.22.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
S4 generic functions needed by many Bioconductor packages.

r-biocinstaller

Homepage:
Spack package:
Versions:
1.26.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package is used to install and update Bioconductor, CRAN, and (some) github packages.

r-biocparallel

Homepage:
Spack package:
Versions:
1.14.2, 1.10.1
Build Dependencies:
r, r-futile-logger, r-snow, r-bh
Link Dependencies:
r, r-bh
Run Dependencies:
r, r-futile-logger, r-snow, r-bh
Description:
This package provides modified versions and novel implementation of functions for parallel evaluation, tailored to use with Bioconductor objects.

r-biocstyle

Homepage:
Spack package:
Versions:
2.4.1
Build Dependencies:
r, r-bookdown, r-knitr, r-rmarkdown, r-yaml
Link Dependencies:
r
Run Dependencies:
r, r-bookdown, r-knitr, r-rmarkdown, r-yaml
Description:
Provides standard formatting styles for Bioconductor PDF and HTML documents. Package vignettes illustrate use and functionality.

r-biom-utils

Homepage:
Spack package:
Versions:
0.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides utilities to facilitate import, export and computation with the BIOM (Biological Observation Matrix) format (http://biom-format.org).

r-biomart

Homepage:
Spack package:
Versions:
2.36.1, 2.34.2, 2.32.1
Build Dependencies:
r, r-xml, r-rcurl, r-annotationdbi, r-progress, r-stringr, r-httr
Link Dependencies:
r
Run Dependencies:
r, r-xml, r-rcurl, r-annotationdbi, r-progress, r-stringr, r-httr
Description:
In recent years a wealth of biological data has become available in public data repositories. Easy access to these valuable data resources and firm integration with data analysis is needed for comprehensive bioinformatics data analysis. biomaRt provides an interface to a growing collection of databases implementing the BioMart software suite (http://www.biomart.org). The package enables retrieval of large amounts of data in a uniform way without the need to know the underlying database schemas or write complex SQL queries. Examples of BioMart databases are Ensembl, COSMIC, Uniprot, HGNC, Gramene, Wormbase and dbSNP mapped to Ensembl. These major databases give biomaRt users direct access to a diverse set of data and enable a wide range of powerful online queries from gene annotation to database mining.

r-biomformat

Homepage:
Spack package:
Versions:
1.4.0
Build Dependencies:
r, r-plyr, r-jsonlite, r-matrix, r-rhdf5
Link Dependencies:
r
Run Dependencies:
r, r-plyr, r-jsonlite, r-matrix, r-rhdf5
Description:
This is an R package for interfacing with the BIOM format. This package includes basic tools for reading biom-format files, accessing and subsetting data tables from a biom object (which is more complex than a single table), as well as limited support for writing a biom-object back to a biom-format file. The design of this API is intended to match the python API and other tools included with the biom-format project, but with a decidedly "R flavor" that should be familiar to R users. This includes S4 classes and methods, as well as extensions of common core functions/methods.

r-biostrings

Homepage:
Spack package:
Versions:
2.48.0, 2.44.2
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-xvector
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-xvector
Description:
Memory efficient string containers, string matching algorithms, and other utilities, for fast manipulation of large biological sequences or sets of sequences.

r-biovizbase

Homepage:
Spack package:
Versions:
1.24.0
Build Dependencies:
r, r-scales, r-hmisc, r-rcolorbrewer, r-dichromat, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-genomicalignments, r-genomicfeatures, r-annotationdbi, r-variantannotation, r-ensembldb, r-annotationfilter
Link Dependencies:
r
Run Dependencies:
r, r-scales, r-hmisc, r-rcolorbrewer, r-dichromat, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-genomicalignments, r-genomicfeatures, r-annotationdbi, r-variantannotation, r-ensembldb, r-annotationfilter
Description:
The biovizBase package is designed to provide a set of utilities, color schemes and conventions for genomic data. It serves as the base for various high-level packages for biological data visualization. This saves development effort and encourages consistency.

r-bit

Homepage:
Spack package:
Versions:
1.1-12
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A class for vectors of 1-bit booleans.

r-bit64

Homepage:
Spack package:
Versions:
0.9-7
Build Dependencies:
r, r-bit
Link Dependencies:
r
Run Dependencies:
r, r-bit
Description:
Package 'bit64' provides serializable S3 atomic 64bit (signed) integers. These are useful for handling database keys and exact counting in +-2^63. WARNING: do not use them as replacement for 32bit integers, integer64 are not supported for subscripting by R-core and they have different semantics when combined with double, e.g. integer64 + double => integer64. Class integer64 can be used in vectors, matrices, arrays and data.frames. Methods are available for coercion from and to logicals, integers, doubles, characters and factors as well as many elementwise and summary functions. Many fast algorithmic operations such as 'match' and 'order' support inter- active data exploration and manipulation and optionally leverage caching.

r-bitops

Homepage:
Spack package:
Versions:
1.0-6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions for bitwise operations on integer vectors.

r-blob

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
r, r-tibble
Link Dependencies:
r
Run Dependencies:
r, r-tibble
Description:
R's raw vector is useful for storing a single binary object. What if you want to put a vector of them in a data frame? The blob package provides the blob object, a list of raw vectors, suitable for use as a column in data frame.

r-blockmodeling

Homepage:
Spack package:
Versions:
0.3.1
Build Dependencies:
r, r-matrix, r-doparallel, r-dorng, r-foreach
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-doparallel, r-dorng, r-foreach
Description:
blockmodeling: Generalized and Classical Blockmodeling of Valued Networks

r-bookdown

Homepage:
Spack package:
Versions:
0.5
Build Dependencies:
r, r-yaml, r-rmarkdown, r-knitr, r-htmltools
Link Dependencies:
r
Run Dependencies:
r, r-yaml, r-rmarkdown, r-knitr, r-htmltools
Description:
Output formats and utilities for authoring books and technical documents with R Markdown.

r-boot

Homepage:
Spack package:
Versions:
1.3-20, 1.3-18
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions and datasets for bootstrapping from the book "Bootstrap Methods and Their Application" by A. C. Davison and D. V. Hinkley (1997, CUP), originally written by Angelo Canty for S.

r-brew

Homepage:
Spack package:
Versions:
1.0-6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
brew implements a templating framework for mixing text and R code for report generation. brew template syntax is similar to PHP, Ruby's erb module, Java Server Pages, and Python's psp module.

r-broom

Homepage:
Spack package:
Versions:
0.4.2
Build Dependencies:
r, r-plyr, r-dplyr, r-tidyr, r-psych, r-stringr, r-reshape2, r-nlme
Link Dependencies:
r
Run Dependencies:
r, r-plyr, r-dplyr, r-tidyr, r-psych, r-stringr, r-reshape2, r-nlme
Description:
Convert statistical analysis objects from R into tidy data frames, so that they can more easily be combined, reshaped and otherwise processed with tools like 'dplyr', 'tidyr' and 'ggplot2'. The package provides three S3 generics: tidy, which summarizes a model's statistical findings such as coefficients of a regression; augment, which adds columns to the original data such as predictions, residuals and cluster assignments; and glance, which provides a one-row summary of model-level statistics.

r-bsgenome

Homepage:
Spack package:
Versions:
1.46.0, 1.44.2
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-biostrings, r-rtracklayer, r-rsamtools, r-xvector
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-biostrings, r-rtracklayer, r-rsamtools, r-xvector
Description:
Infrastructure shared by all the Biostrings-based genome data packages.

r-c50

Homepage:
Spack package:
Versions:
0.1.0-24
Build Dependencies:
r, r-partykit
Link Dependencies:
r
Run Dependencies:
r, r-partykit
Description:
C5.0 decision trees and rule-based models for pattern recognition.

r-cairo

Homepage:
Spack package:
Versions:
1.5-9
Build Dependencies:
r, cairo
Link Dependencies:
r, cairo
Run Dependencies:
r
Description:
R graphics device using cairo graphics library for creating high-quality bitmap (PNG, JPEG, TIFF), vector (PDF, SVG, PostScript) and display (X11 and Win32) output

r-callr

Homepage:
Spack package:
Versions:
3.0.0, 1.0.0
Build Dependencies:
r, r-base64enc, r-processx, r-r6, r-utils
Link Dependencies:
r
Run Dependencies:
r, r-base64enc, r-processx, r-r6, r-utils
Description:
It is sometimes useful to perform a computation in a separate R process, without affecting the current R process at all. This packages does exactly that.

r-car

Homepage:
Spack package:
Versions:
2.1-4, 2.1-2
Build Dependencies:
r, r-mass, r-mgcv, r-nnet, r-pbkrtest, r-quantreg
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-mgcv, r-nnet, r-pbkrtest, r-quantreg
Description:
Functions and Datasets to Accompany J. Fox and S. Weisberg, An R Companion to Applied Regression, Second Edition, Sage, 2011.

r-caret

Homepage:
Spack package:
Versions:
6.0-73, 6.0-70
Build Dependencies:
r, r-lattice, r-ggplot2, r-car, r-foreach, r-plyr, r-modelmetrics, r-nlme, r-reshape2
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-ggplot2, r-car, r-foreach, r-plyr, r-modelmetrics, r-nlme, r-reshape2
Description:
Misc functions for training and plotting classification and regression models.

r-caroline

Homepage:
Spack package:
Versions:
0.7.6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
caroline: A Collection of Database, Data Structure, Visualization, andUtility Functions for R

r-category

Homepage:
Spack package:
Versions:
2.42.1
Build Dependencies:
r, r-biocgenerics, r-annotationdbi, r-biobase, r-matrix, r-graph, r-rbgl, r-gseabase, r-genefilter, r-annotate, r-dbi
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-annotationdbi, r-biobase, r-matrix, r-graph, r-rbgl, r-gseabase, r-genefilter, r-annotate, r-dbi
Description:
A collection of tools for performing category analysis.

r-catools

Homepage:
Spack package:
Versions:
1.17.1
Build Dependencies:
r, r-bitops
Link Dependencies:
r
Run Dependencies:
r, r-bitops
Description:
Contains several basic utility functions including: moving (rolling, running) window statistic functions, read/write for GIF and ENVI binary files, fast calculation of AUC, LogitBoost classifier, base64 encoder/decoder, round-off-error-free sum and cumsum, etc.

r-cdcfluview

Homepage:
Spack package:
Versions:
0.7.0
Build Dependencies:
r, r-httr, r-dplyr, r-jsonlite, r-sf, r-xml2, r-purrr, r-readr, r-mmwrweek, r-units
Link Dependencies:
r
Run Dependencies:
r, r-httr, r-dplyr, r-jsonlite, r-sf, r-xml2, r-purrr, r-readr, r-mmwrweek, r-units
Description:
The 'U.S.' Centers for Disease Control ('CDC') maintains a portal <http://gis.cdc.gov/grasp/fluview/fluportaldashboard.html> for accessing state, regional and national influenza statistics as well as Mortality Surveillance Data. The web interface makes it difficult and time- consuming to select and retrieve influenza data. Tools are provided to access the data provided by the portal's underlying 'API'.

r-cellranger

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
r, r-rematch, r-tibble
Link Dependencies:
r
Run Dependencies:
r, r-rematch, r-tibble
Description:
Helper functions to work with spreadsheets and the "A1:D10" style of cell range specification.

r-checkmate

Homepage:
Spack package:
Versions:
1.8.4
Build Dependencies:
r, r-backports
Link Dependencies:
r
Run Dependencies:
r, r-backports
Description:
Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.

r-checkpoint

Homepage:
Spack package:
Versions:
0.3.18, 0.3.15
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The goal of checkpoint is to solve the problem of package reproducibility in R. Specifically, checkpoint allows you to install packages as they existed on CRAN on a specific snapshot date as if you had a CRAN time machine.

r-chemometrics

Homepage:
Spack package:
Versions:
1.4.2, 1.4.1, 1.3.9, 1.3.8, 1.3.7
Build Dependencies:
r, r-rpart, r-mclust, r-lars, r-robustbase, r-e1071, r-pls, r-som, r-pcapp
Link Dependencies:
r
Run Dependencies:
r, r-rpart, r-mclust, r-lars, r-robustbase, r-e1071, r-pls, r-som, r-pcapp
Description:
R companion to the book "Introduction to Multivariate Statistical Analysis in Chemometrics" written by K. Varmuza and P. Filzmoser (2009).

r-chron

Homepage:
Spack package:
Versions:
2.3-47
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Chronological objects which can handle dates and times.

r-circlize

Homepage:
Spack package:
Versions:
0.4.1, 0.4.0
Build Dependencies:
r, r-globaloptions, r-shape, r-colorspace
Link Dependencies:
r
Run Dependencies:
r, r-globaloptions, r-shape, r-colorspace
Description:
Circular layout is an efficient way for the visualization of huge amounts of information. Here this package provides an implementation of circular layout generation in R as well as an enhancement of available software. The flexibility of the package is based on the usage of low- level graphics functions such that self-defined high-level graphics can be easily implemented by users for specific purposes. Together with the seamless connection between the powerful computational and visual environment in R, it gives users more convenience and freedom to design figures for better understanding complex patterns behind multiple dimensional data.

r-class

Homepage:
Spack package:
Versions:
7.3-14
Build Dependencies:
r, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-mass
Description:
Various functions for classification, including k-nearest neighbour, Learning Vector Quantization and Self-Organizing Maps.

r-classint

Homepage:
Spack package:
Versions:
0.1-24
Build Dependencies:
r, r-e1071, r-class
Link Dependencies:
r
Run Dependencies:
r, r-e1071, r-class
Description:
Selected commonly used methods for choosing univariate class intervals for mapping or other graphics purposes.

r-cli

Homepage:
Spack package:
Versions:
1.0.1, 1.0.0
Build Dependencies:
r, r-assertthat, r-crayon
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-crayon
Description:
A suite of tools designed to build attractive command line interfaces ('CLIs'). Includes tools for drawing rules, boxes, trees, and 'Unicode' symbols with 'ASCII' alternatives.

r-clipr

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
r, r-rstudioapi, r-testthat, xclip
Link Dependencies:
r, xclip
Run Dependencies:
r, r-rstudioapi, r-testthat
Description:
Simple utility functions to read from and write to the Windows, OS X, and X11 clipboards.

r-cluster

Homepage:
Spack package:
Versions:
2.0.7-1, 2.0.5, 2.0.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Methods for Cluster analysis. Much extended the original from Peter Rousseeuw, Anja Struyf and Mia Hubert, based on Kaufman and Rousseeuw (1990) "Finding Groups in Data".

r-clustergeneration

Homepage:
Spack package:
Versions:
1.3.4
Build Dependencies:
r, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-mass
Description:
Random Cluster Generation (with Specified Degree of Separation)

r-clusterprofiler

Homepage:
Spack package:
Versions:
3.4.4
Build Dependencies:
r, r-tidyr, r-rvcheck, r-qvalue, r-plyr, r-magrittr, r-gosemsim, r-go-db, r-ggplot2, r-annotationdbi, r-dose
Link Dependencies:
r
Run Dependencies:
r, r-tidyr, r-rvcheck, r-qvalue, r-plyr, r-magrittr, r-gosemsim, r-go-db, r-ggplot2, r-annotationdbi, r-dose
Description:
This package implements methods to analyze and visualize functional profiles (GO and KEGG) of gene and gene clusters.

r-coda

Homepage:
Spack package:
Versions:
0.19-1
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Provides functions for summarizing and plotting the output from Markov Chain Monte Carlo (MCMC) simulations, as well as diagnostic tests of convergence to the equilibrium distribution of the Markov chain.

r-codetools

Homepage:
Spack package:
Versions:
0.2-15, 0.2-14
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Code analysis tools for R.

r-coin

Homepage:
Spack package:
Versions:
1.1-3
Build Dependencies:
r, r-survival, r-modeltools, r-mvtnorm, r-multcomp
Link Dependencies:
r
Run Dependencies:
r, r-survival, r-modeltools, r-mvtnorm, r-multcomp
Description:
Conditional inference procedures for the general independence problem including two-sample, K-sample (non-parametric ANOVA), correlation, censored, ordered and multivariate problems.

r-colorspace

Homepage:
Spack package:
Versions:
1.3-2, 1.2-6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Carries out mapping between assorted color spaces including RGB, HSV, HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB and polar CIELAB. Qualitative, sequential, and diverging color palettes based on HCL colors are provided.

r-combinat

Homepage:
Spack package:
Versions:
0.0-8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
routines for combinatorics

r-commonmark

Homepage:
Spack package:
Versions:
1.7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
commonmark: CommonMark and Github Markdown Rendering in R

r-complexheatmap

Homepage:
Spack package:
Versions:
1.14.0
Build Dependencies:
r, r-circlize, r-getoptlong, r-colorspace, r-rcolorbrewer, r-dendextend, r-globaloptions
Link Dependencies:
r
Run Dependencies:
r, r-circlize, r-getoptlong, r-colorspace, r-rcolorbrewer, r-dendextend, r-globaloptions
Description:
Complex heatmaps are efficient to visualize associations between different sources of data sets and reveal potential structures. Here the ComplexHeatmap package provides a highly flexible way to arrange multiple heatmaps and supports self-defined annotation graphics.

r-compositions

Homepage:
Spack package:
Versions:
1.40-2
Build Dependencies:
r, r-tensora, r-robustbase, r-energy, r-bayesm
Link Dependencies:
r
Run Dependencies:
r, r-tensora, r-robustbase, r-energy, r-bayesm
Description:
Compositional Data Analysis

r-construct

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
r, r-bh, r-caroline, r-doparallel, r-foreach, r-gtools, r-rcpp, r-rcppeigen, r-rstan, r-rstantools, r-stanheaders
Link Dependencies:
r
Run Dependencies:
r, r-bh, r-caroline, r-doparallel, r-foreach, r-gtools, r-rcpp, r-rcppeigen, r-rstan, r-rstantools, r-stanheaders
Description:
conStruct: Models Spatially Continuous and Discrete Population GeneticStructure

r-convevol

Homepage:
Spack package:
Versions:
1.3
Build Dependencies:
r, r-ape, r-cluster, r-geiger, r-mass, r-phytools
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-cluster, r-geiger, r-mass, r-phytools
Description:
Quantifies and assesses the significance of convergent evolution

r-corhmm

Homepage:
Spack package:
Versions:
1.22
Build Dependencies:
r, r-ape, r-nloptr, r-gensa, r-expm, r-numderiv, r-nnet, r-corpcor, r-phangorn, r-rmpfr
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-nloptr, r-gensa, r-expm, r-numderiv, r-nnet, r-corpcor, r-phangorn, r-rmpfr
Description:
corHMM: Analysis of Binary Character Evolution Fits a hidden rates model that allows different transition rate classes on different portions of a phylogeny by treating rate classes as hidden states in a Markov process and various other functions for evaluating models of binary character evolution.

r-corpcor

Homepage:
Spack package:
Versions:
1.6.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Efficient Estimation of Covariance and (Partial) Correlation

r-corrplot

Homepage:
Spack package:
Versions:
0.77
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A graphical display of a correlation matrix or general matrix. It also contains some algorithms to do matrix reordering.

r-covr

Homepage:
Spack package:
Versions:
3.0.1
Build Dependencies:
r, r-jsonlite, r-rex, r-httr, r-crayon, r-withr
Link Dependencies:
r
Run Dependencies:
r, r-jsonlite, r-rex, r-httr, r-crayon, r-withr
Description:
Track and report code coverage for your package and (optionally) upload the results to a coverage service like 'Codecov' <http://codecov.io> or 'Coveralls' <http://coveralls.io>. Code coverage is a measure of the amount of code being exercised by a set of tests. It is an indirect measure of test quality and completeness. This package is compatible with any testing methodology or framework and tracks coverage of both R code and compiled C/C++/FORTRAN code.

r-cowplot

Homepage:
Spack package:
Versions:
0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.0
Build Dependencies:
r, r-ggplot2, r-gtable, r-plyr, r-scales
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-gtable, r-plyr, r-scales
Description:
Some helpful extensions and modifications to the 'ggplot2' package. In particular, this package makes it easy to combine multiple 'ggplot2' plots into one and label them with letters, e.g. A, B, C, etc., as is often required for scientific publications. The package also provides a streamlined and clean theme that is used in the Wilke lab, hence the package name, which stands for Claus O. Wilke's plot package.

r-crayon

Homepage:
Spack package:
Versions:
1.3.4, 1.3.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Colored terminal output on terminals that support 'ANSI' color and highlight codes. It also works in 'Emacs' 'ESS'. 'ANSI' color support is automatically detected. Colors and highlighting can be combined and nested. New styles can also be created easily. This package was inspired by the 'chalk' 'JavaScript' project.

r-crosstalk

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
r, r-htmltools, r-jsonlite, r-lazyeval, r-ggplot2, r-shiny
Link Dependencies:
r
Run Dependencies:
r, r-htmltools, r-jsonlite, r-lazyeval, r-ggplot2, r-shiny
Description:
Provides building blocks for allowing HTML widgets to communicate with each other, with Shiny or without (i.e. static .html files).

r-crul

Homepage:
Spack package:
Versions:
0.7.4
Build Dependencies:
r, r-curl, r-httpcode, r-mime, r-r6, r-urltools
Link Dependencies:
r
Run Dependencies:
r, r-curl, r-httpcode, r-mime, r-r6, r-urltools
Description:
crul: HTTP Client

r-ctc

Homepage:
Spack package:
Versions:
1.54.0
Build Dependencies:
r, r-amap
Link Dependencies:
r
Run Dependencies:
r, r-amap
Description:
Tools for export and import classification trees and clusters to other programs

r-cubature

Homepage:
Spack package:
Versions:
1.1-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Adaptive multivariate integration over hypercubes

r-cubist

Homepage:
Spack package:
Versions:
0.0.19
Build Dependencies:
r, r-lattice, r-reshape2
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-reshape2
Description:
Regression modeling using rules with added instance-based corrections

r-curl

Homepage:
Spack package:
Versions:
3.3, 3.0, 2.3, 1.0, 0.9.7
Build Dependencies:
r, curl
Link Dependencies:
r, curl
Run Dependencies:
r
Description:
The curl() and curl_download() functions provide highly configurable drop-in replacements for base url() and download.file() with better performance, support for encryption (https, ftps), gzip compression, authentication, and other libcurl goodies. The core of the package implements a framework for performing fully customized requests where data can be processed either in memory, on disk, or streaming via the callback or connection interfaces. Some knowledge of libcurl is recommended; for a more-user-friendly web client see the 'httr' package which builds on this package with http specific tools and logic.

r-data-table

Homepage:
Spack package:
Versions:
1.11.8, 1.11.6, 1.11.4, 1.11.2, 1.11.0, 1.10.4-3, 1.10.4-2, 1.10.4-1, 1.10.4, 1.10.2, 1.10.0, 1.9.8, 1.9.6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.

r-dbi

Homepage:
Spack package:
Versions:
0.7, 0.4-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A database interface definition for communication between R and relational database management systems. All classes in this package are virtual and need to be extended by the various R/DBMS implementations.

r-dbplyr

Homepage:
Spack package:
Versions:
1.2.2, 1.2.1, 1.2.0, 1.1.0
Build Dependencies:
r, r-assertthat, r-dbi, r-dplyr, r-glue, r-purrr, r-r6, r-rlang, r-tibble, r-tidyselect
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-dbi, r-dplyr, r-glue, r-purrr, r-r6, r-rlang, r-tibble, r-tidyselect
Description:
A 'dplyr' back end for databases that allows you to work with remote database tables as if they are in-memory data frames. Basic features works with any database that has a 'DBI' back end; more advanced features require 'SQL' translation to be provided by the package author.

r-delayedarray

Homepage:
Spack package:
Versions:
0.6.5, 0.4.1, 0.2.7
Build Dependencies:
r, r-biocparallel, r-biocgenerics, r-s4vectors, r-iranges, r-matrixstats
Link Dependencies:
r
Run Dependencies:
r, r-biocparallel, r-biocgenerics, r-s4vectors, r-iranges, r-matrixstats
Description:
Wrapping an array-like object (typically an on-disk object) in a DelayedArray object allows one to perform common array operations on it without loading the object in memory. In order to reduce memory usage and optimize performance, operations on the object are either delayed or executed using a block processing mechanism. Note that this also works on in-memory array-like objects like DataFrame objects (typically with Rle columns), Matrix objects, and ordinary arrays and data frames. Wrapping an array-like object (typically an on-disk object) in a DelayedArray object allows one to perform common array operations on it without loading the object in memory. In order to reduce memory usage and optimize performance, operations on the object are either delayed or executed using a block processing mechanism. Note that this also works on in-memory array-like objects like DataFrame objects (typically with Rle columns), Matrix objects, and ordinary arrays and data frames.

r-deldir

Homepage:
Spack package:
Versions:
0.1-14
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Calculates the Delaunay triangulation and the Dirichlet or Voronoi tessellation (with respect to the entire plane) of a planar point set. Plots triangulations and tessellations in various ways. Clips tessellations to sub-windows. Calculates perimeters of tessellations. Summarises information about the tiles of the tessellation.

r-dendextend

Homepage:
Spack package:
Versions:
1.5.2
Build Dependencies:
r, r-magrittr, r-ggplot2, r-fpc, r-whisker, r-viridis
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-ggplot2, r-fpc, r-whisker, r-viridis
Description:
dendextend: Extending 'Dendrogram' Functionality in R

r-deoptim

Homepage:
Spack package:
Versions:
2.2-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implements the differential evolution algorithm for global optimization of a real-valued function of a real-valued parameter vector.

r-deoptimr

Homepage:
Spack package:
Versions:
1.0-8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An implementation of a bespoke jDE variant of the Differential Evolution stochastic algorithm for global optimization of nonlinear programming problems.

r-desc

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-assertthat, r-r6, r-crayon, r-rprojroot
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-r6, r-crayon, r-rprojroot
Description:
desc: Manipulate DESCRIPTION Files

r-deseq

Homepage:
Spack package:
Versions:
1.28.0
Build Dependencies:
r, r-biocgenerics, r-biobase, r-locfit, r-lattice, r-genefilter, r-geneplotter, r-mass, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-locfit, r-lattice, r-genefilter, r-geneplotter, r-mass, r-rcolorbrewer
Description:
Estimate variance-mean dependence in count data from high-throughput sequencing assays and test for differential expression based on a model using the negative binomial distribution.

r-deseq2

Homepage:
Spack package:
Versions:
1.20.0, 1.18.1, 1.16.1
Build Dependencies:
r, r-rcpparmadillo, r-s4vectors, r-iranges, r-genomicranges, r-summarizedexperiment, r-biocgenerics, r-biobase, r-biocparallel, r-genefilter, r-locfit, r-geneplotter, r-ggplot2, r-hmisc, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpparmadillo, r-s4vectors, r-iranges, r-genomicranges, r-summarizedexperiment, r-biocgenerics, r-biobase, r-biocparallel, r-genefilter, r-locfit, r-geneplotter, r-ggplot2, r-hmisc, r-rcpp
Description:
Estimate variance-mean dependence in count data from high-throughput sequencing assays and test for differential expression based on a model using the negative binomial distribution.

r-desolve

Homepage:
Spack package:
Versions:
1.20
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions that solve initial value problems of a system of first-order ordinary differential equations ('ODE'), of partial differential equations ('PDE'), of differential algebraic equations ('DAE'), and of delay differential equations.

r-devtools

Homepage:
Spack package:
Versions:
1.12.0, 1.11.1
Build Dependencies:
r, r-httr, r-memoise, r-whisker, r-digest, r-rstudioapi, r-jsonlite, r-git2r, r-withr
Link Dependencies:
r
Run Dependencies:
r, r-httr, r-memoise, r-whisker, r-digest, r-rstudioapi, r-jsonlite, r-git2r, r-withr
Description:
Collection of package development tools.

r-diagrammer

Homepage:
Spack package:
Versions:
0.8.4
Build Dependencies:
r, r-htmlwidgets, r-igraph, r-influencer, r-rstudioapi, r-stringr, r-visnetwork, r-scales
Link Dependencies:
r
Run Dependencies:
r, r-htmlwidgets, r-igraph, r-influencer, r-rstudioapi, r-stringr, r-visnetwork, r-scales
Description:
Create graph diagrams and flowcharts using R.

r-dicekriging

Homepage:
Spack package:
Versions:
1.5.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Estimation, validation and prediction of kriging models. Important functions : km, print.km, plot.km, predict.km.

r-dichromat

Homepage:
Spack package:
Versions:
2.0-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Collapse red-green or green-blue distinctions to simulate the effects of different types of color-blindness.

r-diffusionmap

Homepage:
Spack package:
Versions:
1.1-0, 1.0-0, 0.0-2, 0.0-1
Build Dependencies:
r, r-matrix, r-scatterplot3d, r-igraph
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-scatterplot3d, r-igraph
Description:
Allows to display a progress bar in the R console for long running computations taking place in c++ code, and support for interrupting those computations even in multithreaded code, typically using OpenMP.

r-digest

Homepage:
Spack package:
Versions:
0.6.12, 0.6.11, 0.6.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implementation of a function 'digest()' for the creation of hash digests of arbitrary R objects (using the md5, sha-1, sha-256, crc32, xxhash and murmurhash algorithms) permitting easy comparison of R language objects, as well as a function 'hmac()' to create hash-based message authentication code. The md5 algorithm by Ron Rivest is specified in RFC 1321, the sha-1 and sha-256 algorithms are specified in FIPS-180-1 and FIPS-180-2, and the crc32 algorithm is described in ftp://ftp.rocksoft.com/cliens/rocksoft/papers/crc_v3.txt. For md5, sha-1, sha-256 and aes, this package uses small standalone implementations that were provided by Christophe Devine. For crc32, code from the zlib library is used. For sha-512, an implementation by Aaron D. Gifford is used. For xxhash, the implementation by Yann Collet is used. For murmurhash, an implementation by Shane Day is used. Please note that this package is not meant to be deployed for cryptographic purposes for which more comprehensive (and widely tested) libraries such as OpenSSL should be used.

r-diptest

Homepage:
Spack package:
Versions:
0.75-7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
diptest: Hartigan's Dip Test Statistic for Unimodality - Corrected

r-dirichletmultinomial

Homepage:
Spack package:
Versions:
1.20.0
Build Dependencies:
r, r-s4vectors, r-iranges, gsl
Link Dependencies:
r, gsl
Run Dependencies:
r, r-s4vectors, r-iranges
Description:
Dirichlet-multinomial mixture models can be used to describe variability in microbial metagenomic data. This package is an interface to code originally made available by Holmes, Harris, and Quince, 2012, PLoS ONE 7(2): 1-15, as discussed further in the man page for this package, ?DirichletMultinomial.

r-dismo

Homepage:
Spack package:
Versions:
1.1-4
Build Dependencies:
r, r-raster, r-sp
Link Dependencies:
r
Run Dependencies:
r, r-raster, r-sp
Description:
Functions for species distribution modeling, that is, predicting entire geographic distributions form occurrences at a number of sites and the environment at these sites.

r-diversitree

Homepage:
Spack package:
Versions:
0.9-10
Build Dependencies:
r, r-ape, r-desolve, r-subplex, r-rcpp, fftw, gsl
Link Dependencies:
r, fftw, gsl
Run Dependencies:
r, r-ape, r-desolve, r-subplex, r-rcpp
Description:
Contains a number of comparative 'phylogenetic' methods. Mostly focusing on analysing diversification and character evolution. Contains implementations of 'BiSSE' (Binary State 'Speciation' and Extinction) and its unresolved tree extensions, 'MuSSE' (Multiple State 'Speciation' and Extinction), 'QuaSSE', 'GeoSSE', and 'BiSSE-ness' Other included methods include Markov models of discrete and continuous trait evolution and constant rate 'speciation' and extinction.

r-dnacopy

Homepage:
Spack package:
Versions:
1.50.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implements the circular binary segmentation (CBS) algorithm to segment DNA copy number data and identify genomic regions with abnormal copy number.

r-do-db

Homepage:
Spack package:
Versions:
2.9
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
A set of annotation maps describing the entire Disease Ontology assembled using data from DO.

r-domc

Homepage:
Spack package:
Versions:
1.3.4
Build Dependencies:
r, r-foreach, r-iterators
Link Dependencies:
r
Run Dependencies:
r, r-foreach, r-iterators
Description:
Provides a parallel backend for the %dopar% function using the multicore functionality of the parallel package.

r-doparallel

Homepage:
Spack package:
Versions:
1.0.11, 1.0.10
Build Dependencies:
r, r-foreach, r-iterators
Link Dependencies:
r
Run Dependencies:
r, r-foreach, r-iterators
Description:
Provides a parallel backend for the %dopar% function using the parallel package.

r-dorng

Homepage:
Spack package:
Versions:
1.6.6
Build Dependencies:
r, r-foreach, r-rngtools, r-iterators, r-pkgmaker
Link Dependencies:
r
Run Dependencies:
r, r-foreach, r-rngtools, r-iterators, r-pkgmaker
Description:
Provides functions to perform reproducible parallel foreach loops, using independent random streams as generated by L'Ecuyer's combined multiple- recursive generator [L'Ecuyer (1999), <doi:10.1287/opre.47.1.159>]. It enables to easily convert standard %dopar% loops into fully reproducible loops, independently of the number of workers, the task scheduling strategy, or the chosen parallel environment and associated foreach backend.

r-dose

Homepage:
Spack package:
Versions:
3.2.0
Build Dependencies:
r, r-scales, r-s4vectors, r-reshape2, r-qvalue, r-igraph, r-gosemsim, r-ggplot2, r-fgsea, r-do-db, r-biocparallel, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-scales, r-s4vectors, r-reshape2, r-qvalue, r-igraph, r-gosemsim, r-ggplot2, r-fgsea, r-do-db, r-biocparallel, r-annotationdbi
Description:
This package implements five methods proposed by Resnik, Schlicker, Jiang, Lin and Wang respectively for measuring semantic similarities among DO terms and gene products. Enrichment analyses including hypergeometric model and gene set enrichment analysis are also implemented for discovering disease associations of high-throughput biological data.

r-downloader

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
r, r-digest
Link Dependencies:
r
Run Dependencies:
r, r-digest
Description:
Provides a wrapper for the download.file function, making it possible to download files over HTTPS on Windows, Mac OS X, and other Unix-like platforms. The 'RCurl' package provides this functionality (and much more) but can be difficult to install because it must be compiled with external dependencies. This package has no external dependencies, so it is much easier to install.

r-dplyr

Homepage:
Spack package:
Versions:
0.7.7, 0.7.6, 0.7.5, 0.7.4, 0.7.3, 0.7.2, 0.7.1, 0.7.0, 0.5.0
Build Dependencies:
r, r-assertthat, r-bindrcpp, r-glue, r-magrittr, r-pkgconfig, r-r6, r-rcpp, r-rlang, r-tibble, r-tidyselect, r-bh
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-bindrcpp, r-glue, r-magrittr, r-pkgconfig, r-r6, r-rcpp, r-rlang, r-tibble, r-tidyselect, r-bh
Description:
A fast, consistent tool for working with data frame like objects, both in memory and out of memory.

r-dt

Homepage:
Spack package:
Versions:
0.4, 0.3, 0.2, 0.1
Build Dependencies:
r, r-htmltools, r-htmlwidgets, r-magrittr, r-crosstalk
Link Dependencies:
r
Run Dependencies:
r, r-htmltools, r-htmlwidgets, r-magrittr, r-crosstalk
Description:
Data objects in R can be rendered as HTML tables using the JavaScript library 'DataTables' (typically via R Markdown or Shiny). The 'DataTables' library has been included in this R package. The package name 'DT' is an abbreviation of 'DataTables'.

r-dtw

Homepage:
Spack package:
Versions:
1.18-1, 1.17-1, 1.16, 1.15, 1.14-3
Build Dependencies:
r, r-proxy
Link Dependencies:
r
Run Dependencies:
r, r-proxy
Description:
A comprehensive implementation of dynamic time warping (DTW) algorithms in R. DTW computes the optimal (least cumulative distance) alignment between points of two time series.

r-dygraphs

Homepage:
Spack package:
Versions:
0.9
Build Dependencies:
r, r-magrittr, r-htmlwidgets, r-zoo, r-xts
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-htmlwidgets, r-zoo, r-xts
Description:
An R interface to the 'dygraphs' JavaScript charting library (a copy of which is included in the package). Provides rich facilities for charting time-series data in R, including highly configurable series- and axis- display and interactive features like zoom/pan and series/point highlighting.

r-dynamictreecut

Homepage:
Spack package:
Versions:
1.63-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
dynamicTreeCut: Methods for Detection of Clusters in Hierarchical Clustering Dendrograms

r-e1071

Homepage:
Spack package:
Versions:
1.6-7
Build Dependencies:
r, r-class
Link Dependencies:
r
Run Dependencies:
r, r-class
Description:
Functions for latent class analysis, short time Fourier transform, fuzzy clustering, support vector machines, shortest path computation, bagged clustering, naive Bayes classifier, ...

r-edger

Homepage:
Spack package:
Versions:
3.22.3, 3.18.1
Build Dependencies:
r, r-limma, r-locfit, r-rcpp
Link Dependencies:
r, r-rcpp
Run Dependencies:
r, r-limma, r-locfit, r-rcpp
Description:
Differential expression analysis of RNA-seq expression profiles with biological replication. Implements a range of statistical methodology based on the negative binomial distributions, including empirical Bayes estimation, exact tests, generalized linear models and quasi-likelihood tests. As well as RNA-seq, it be applied to differential signal analysis of other types of genomic data that produce counts, including ChIP-seq, SAGE and CAGE.

r-ellipse

Homepage:
Spack package:
Versions:
0.3-8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package contains various routines for drawing ellipses and ellipse- like confidence regions.

r-emmli

Homepage:
Spack package:
Versions:
0.0.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Fit models of modularity to morphological landmarks. Perform model selection on results. Fit models with a single within-module correlation or with separate within-module correlations fitted to each module.

r-energy

Homepage:
Spack package:
Versions:
1.7-5
Build Dependencies:
r, r-rcpp, r-boot
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-boot
Description:
E-Statistics: Multivariate Inference via the Energy of Data

r-ensembldb

Homepage:
Spack package:
Versions:
2.0.4
Build Dependencies:
r, r-biocgenerics, r-genomicranges, r-genomicfeatures, r-annotationfilter, r-rsqlite, r-dbi, r-biobase, r-genomeinfodb, r-annotationdbi, r-rtracklayer, r-s4vectors, r-annotationhub, r-rsamtools, r-iranges, r-protgenerics, r-biostrings, r-curl
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-genomicranges, r-genomicfeatures, r-annotationfilter, r-rsqlite, r-dbi, r-biobase, r-genomeinfodb, r-annotationdbi, r-rtracklayer, r-s4vectors, r-annotationhub, r-rsamtools, r-iranges, r-protgenerics, r-biostrings, r-curl
Description:
The package provides functions to create and use transcript centric annotation databases/packages. The annotation for the databases are directly fetched from Ensembl using their Perl API. The functionality and data is similar to that of the TxDb packages from the GenomicFeatures package, but, in addition to retrieve all gene/transcript models and annotations from the database, the ensembldb package provides also a filter framework allowing to retrieve annotations for specific entries like genes encoded on a chromosome region or transcript models of lincRNA genes.

r-ergm

Homepage:
Spack package:
Versions:
3.7.1
Build Dependencies:
r, r-robustbase, r-coda, r-trust, r-matrix, r-lpsolve, r-mass, r-statnet-common, r-network
Link Dependencies:
r
Run Dependencies:
r, r-robustbase, r-coda, r-trust, r-matrix, r-lpsolve, r-mass, r-statnet-common, r-network
Description:
An integrated set of tools to analyze and simulate networks based on exponential-family random graph models (ERGM). "ergm" is a part of the "statnet" suite of packages for network analysis.

r-evaluate

Homepage:
Spack package:
Versions:
0.10.1, 0.10, 0.9
Build Dependencies:
r, r-stringr
Link Dependencies:
r
Run Dependencies:
r, r-stringr
Description:
Parsing and evaluation tools that make it easy to recreate the command line behaviour of R.

r-expint

Homepage:
Spack package:
Versions:
0.1-5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
expint: Exponential Integral and Incomplete Gamma Function

r-expm

Homepage:
Spack package:
Versions:
0.999-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Computation of the matrix exponential, logarithm, sqrt, and related quantities.

r-factoextra

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
r, r-ggplot2, r-abind, r-dendextend, r-factominer, r-ggpubr, r-reshape2, r-ggrepel, r-tidyr
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-abind, r-dendextend, r-factominer, r-ggpubr, r-reshape2, r-ggrepel, r-tidyr
Description:
factoextra: Extract and Visualize the Results of Multivariate Data Analyses

r-factominer

Homepage:
Spack package:
Versions:
1.41, 1.40, 1.39, 1.38, 1.36, 1.35
Build Dependencies:
r, r-car, r-cluster, r-ellipse, r-flashclust, r-lattice, r-leaps, r-mass, r-scatterplot3d
Link Dependencies:
r
Run Dependencies:
r, r-car, r-cluster, r-ellipse, r-flashclust, r-lattice, r-leaps, r-mass, r-scatterplot3d
Description:
FactoMineR: Multivariate Exploratory Data Analysis and Data Mining

r-fansi

Homepage:
Spack package:
Versions:
0.4.0, 0.3.0, 0.2.3, 0.2.2, 0.2.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Counterparts to R string manipulation functions that account for the effects of ANSI text formatting control sequences.

r-fastcluster

Homepage:
Spack package:
Versions:
1.1.25
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This is a two-in-one package which provides interfaces to both R and 'Python'. It implements fast hierarchical, agglomerative clustering routines. Part of the functionality is designed as drop-in replacement for existing routines: linkage() in the 'SciPy' package 'scipy.cluster.hierarchy', hclust() in R's 'stats' package, and the 'flashClust' package. It provides the same functionality with the benefit of a much faster implementation. Moreover, there are memory- saving routines for clustering of vector data, which go beyond what the existing packages provide. For information on how to install the 'Python' files, see the file INSTALL in the source distribution.

r-fastmatch

Homepage:
Spack package:
Versions:
1.1-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Package providing a fast match() replacement for cases that require repeated look-ups. It is slightly faster that R's built-in match() function on first match against a table, but extremely fast on any subsequent lookup as it keeps the hash table in memory.

r-ff

Homepage:
Spack package:
Versions:
2.2-13
Build Dependencies:
r, r-bit
Link Dependencies:
r
Run Dependencies:
r, r-bit
Description:
memory-efficient storage of large data on disk and fast access functions.

r-fftwtools

Homepage:
Spack package:
Versions:
0.9-8
Build Dependencies:
r, fftw
Link Dependencies:
r, fftw
Run Dependencies:
r
Description:
Provides a wrapper for several 'FFTW' functions. This package provides access to the two-dimensional 'FFT', the multivariate 'FFT', and the one-dimensional real to complex 'FFT' using the 'FFTW3' library. The package includes the functions fftw() and mvfftw() which are designed to mimic the functionality of the R functions fft() and mvfft(). The 'FFT' functions have a parameter that allows them to not return the redundant complex conjugate when the input is real data.

r-fgsea

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
r, r-fastmatch, r-gridextra, r-ggplot2, r-biocparallel, r-data-table, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-fastmatch, r-gridextra, r-ggplot2, r-biocparallel, r-data-table, r-rcpp
Description:
The package implements an algorithm for fast gene set enrichment analysis. Using the fast algorithm allows to make more permutations and get more fine grained p-values, which allows to use accurate stantard approaches to multiple hypothesis correction.

r-filehash

Homepage:
Spack package:
Versions:
2.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implements a simple key-value style database where character string keys are associated with data values that are stored on the disk. A simple interface is provided for inserting, retrieving, and deleting data from the database. Utilities are provided that allow 'filehash' databases to be treated much like environments and lists are already used in R. These utilities are provided to encourage interactive and exploratory analysis on large datasets. Three different file formats for representing the database are currently available and new formats can easily be incorporated by third parties for use in the 'filehash' framework.

r-findpython

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r, python
Description:
Package designed to find an acceptable python binary.

r-fit-models

Homepage:
Spack package:
Versions:
0.5-14, 0.5-13
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Compare Fitted Models

r-flashclust

Homepage:
Spack package:
Versions:
1.01-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
flashClust: Implementation of optimal hierarchical clustering

r-flexclust

Homepage:
Spack package:
Versions:
1.3-5
Build Dependencies:
r, r-lattice, r-modeltools
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-modeltools
Description:
The main function kcca implements a general framework for k-centroids cluster analysis supporting arbitrary distance measures and centroid computation. Further cluster methods include hard competitive learning, neural gas, and QT clustering. There are numerous visualization methods for cluster results (neighborhood graphs, convex cluster hulls, barcharts of centroids, ...), and bootstrap methods for the analysis of cluster stability.

r-flexmix

Homepage:
Spack package:
Versions:
2.3-14
Build Dependencies:
r, r-modeltools
Link Dependencies:
r
Run Dependencies:
r, r-modeltools
Description:
flexmix: Flexible Mixture Modeling

r-fnn

Homepage:
Spack package:
Versions:
1.1, 1.0, 0.6-4, 0.6-3, 0.6-2
Build Dependencies:
r, r-mvtnorm, r-chemometrics
Link Dependencies:
r
Run Dependencies:
r, r-mvtnorm, r-chemometrics
Description:
Cover-tree and kd-tree fast k-nearest neighbor search algorithms and related applications including KNN classification, regression and information measures are implemented.

r-forcats

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r, r-tibble, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-tibble, r-magrittr
Description:
Helpers for reordering factor levels (including moving specified levels to front, ordering by first appearance, reversing, and randomly shuffling), and tools for modifying factor levels (including collapsing rare levels into other, 'anonymising', and manually 'recoding').

r-foreach

Homepage:
Spack package:
Versions:
1.4.3
Build Dependencies:
r, r-codetools, r-iterators
Link Dependencies:
r
Run Dependencies:
r, r-codetools, r-iterators
Description:
Support for the foreach looping construct. Foreach is an idiom that allows for iterating over elements in a collection, without the use of an explicit loop counter. This package in particular is intended to be used for its return value, rather than for its side effects. In that sense, it is similar to the standard lapply function, but doesn't require the evaluation of a function. Using foreach without side effects also facilitates executing the loop in parallel.

r-forecast

Homepage:
Spack package:
Versions:
8.2
Build Dependencies:
r, r-magrittr, r-ggplot2, r-colorspace, r-nnet, r-rcpp, r-fracdiff, r-tseries, r-lmtest, r-zoo, r-timedate, r-rcpparmadillo
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-ggplot2, r-colorspace, r-nnet, r-rcpp, r-fracdiff, r-tseries, r-lmtest, r-zoo, r-timedate, r-rcpparmadillo
Description:
Methods and tools for displaying and analysing univariate time series forecasts including exponential smoothing via state space models and automatic ARIMA modelling.

r-foreign

Homepage:
Spack package:
Versions:
0.8-66
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions for reading and writing data stored by some versions of Epi Info, Minitab, S, SAS, SPSS, Stata, Systat and Weka and for reading and writing some dBase files.

r-formatr

Homepage:
Spack package:
Versions:
1.5, 1.4
Build Dependencies:
r, r-codetools, r-shiny, r-testit
Link Dependencies:
r
Run Dependencies:
r, r-codetools, r-shiny, r-testit
Description:
Provides a function tidy_source() to format R source code. Spaces and indent will be added to the code automatically, and comments will be preserved under certain conditions, so that R code will be more human- readable and tidy. There is also a Shiny app as a user interface in this package.

r-formula

Homepage:
Spack package:
Versions:
1.2-2, 1.2-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Infrastructure for extended formulas with multiple parts on the right- hand side and/or multiple responses on the left-hand side.

r-fpc

Homepage:
Spack package:
Versions:
2.1-10
Build Dependencies:
r, r-mclust, r-flexmix, r-prabclus, r-diptest, r-mvtnorm, r-robustbase, r-kernlab, r-trimcluster
Link Dependencies:
r
Run Dependencies:
r, r-mclust, r-flexmix, r-prabclus, r-diptest, r-mvtnorm, r-robustbase, r-kernlab, r-trimcluster
Description:
fpc: Flexible Procedures for Clustering

r-fracdiff

Homepage:
Spack package:
Versions:
1.4-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Maximum likelihood estimation of the parameters of a fractionally differenced ARIMA(p,d,q) model (Haslett and Raftery, Appl.Statistics, 1989).

r-futile-logger

Homepage:
Spack package:
Versions:
1.4.3
Build Dependencies:
r, r-lambda-r, r-futile-options
Link Dependencies:
r
Run Dependencies:
r, r-lambda-r, r-futile-options
Description:
Provides a simple yet powerful logging utility. Based loosely on log4j, futile.logger takes advantage of R idioms to make logging a convenient and easy to use replacement for cat and print statements.

r-futile-options

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A scoped options management framework

r-gamlss

Homepage:
Spack package:
Versions:
5.1-2
Build Dependencies:
r, r-gamlss-data, r-gamlss-dist, r-mass, r-survival, r-nlme
Link Dependencies:
r
Run Dependencies:
r, r-gamlss-data, r-gamlss-dist, r-mass, r-survival, r-nlme
Description:
gamlss: Generalised Additive Models for Location Scale and Shape

r-gamlss-data

Homepage:
Spack package:
Versions:
5.1-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
gamlss.data: GAMLSS Data

r-gamlss-dist

Homepage:
Spack package:
Versions:
5.1-1
Build Dependencies:
r, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-mass
Description:
gamlss.dist: Distributions for Generalized Additive Models for Location Scale and Shape

r-gbm

Homepage:
Spack package:
Versions:
2.1.3
Build Dependencies:
r, r-survival, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-survival, r-lattice
Description:
Generalized Boosted Regression Models.

r-gcrma

Homepage:
Spack package:
Versions:
2.48.0
Build Dependencies:
r, r-affy, r-biobase, r-affyio, r-xvector, r-biostrings, r-biocinstaller
Link Dependencies:
r
Run Dependencies:
r, r-affy, r-biobase, r-affyio, r-xvector, r-biostrings, r-biocinstaller
Description:
Background adjustment using sequence information

r-gdalutils

Homepage:
Spack package:
Versions:
2.0.1.14
Build Dependencies:
r, r-sp, r-foreach, r-utils, r-raster, r-rgdal
Link Dependencies:
r
Run Dependencies:
r, r-sp, r-foreach, r-utils, r-raster, r-rgdal
Description:
gdalUtils: Wrappers for the Geospatial Data Abstraction Library

r-gdata

Homepage:
Spack package:
Versions:
2.18.0, 2.17.0
Build Dependencies:
r, r-gtools
Link Dependencies:
r
Run Dependencies:
r, r-gtools
Description:
Various R programming tools for data manipulation, including: - medical unit conversions ('ConvertMedUnits', 'MedUnits'), - combining objects ('bindData', 'cbindX', 'combine', 'interleave'), - character vector operations ('centerText', 'startsWith', 'trim'), - factor manipulation ('levels', 'reorder.factor', 'mapLevels'), - obtaining information about R objects ('object.size', 'elem', 'env', 'humanReadable', 'is.what', 'll', 'keep', 'ls.funs', 'Args','nPairs', 'nobs'), - manipulating MS- Excel formatted files ('read.xls', 'installXLSXsupport', 'sheetCount', 'xlsFormats'), - generating fixed-width format files ('write.fwf'), - extricating components of date & time objects ('getYear', 'getMonth', 'getDay', 'getHour', 'getMin', 'getSec'), - operations on columns of data frames ('matchcols', 'rename.vars'), - matrix operations ('unmatrix', 'upperTriangle', 'lowerTriangle'), - operations on vectors ('case', 'unknownToNA', 'duplicated2', 'trimSum'), - operations on data frames ('frameApply', 'wideByFactor'), - value of last evaluated expression ('ans'), and - wrapper for 'sample' that ensures consistent behavior for both scalar and vector arguments ('resample').

r-gdsfmt

Homepage:
Spack package:
Versions:
1.14.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package provides a high-level R interface to CoreArray Genomic Data Structure (GDS) data files, which are portable across platforms with hierarchical structure to store multiple scalable array-oriented data sets with metadata information. It is suited for large-scale datasets, especially for data which are much larger than the available random- access memory. The gdsfmt package offers the efficient operations specifically designed for integers of less than 8 bits, since a diploid genotype, like single-nucleotide polymorphism (SNP), usually occupies fewer bits than a byte. Data compression and decompression are available with relatively efficient random access. It is also allowed to read a GDS file in parallel with multiple R processes supported by the package parallel.

r-geiger

Homepage:
Spack package:
Versions:
2.0.6
Build Dependencies:
r, r-ape, r-mvtnorm, r-subplex, r-desolve, r-digest, r-rcpp, r-coda, r-ncbit, r-colorspace, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-mvtnorm, r-subplex, r-desolve, r-digest, r-rcpp, r-coda, r-ncbit, r-colorspace, r-mass
Description:
Methods for fitting macroevolutionary models to phylogenetic trees.

r-genefilter

Homepage:
Spack package:
Versions:
1.62.0, 1.58.1
Build Dependencies:
r, r-s4vectors, r-annotationdbi, r-annotate, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-s4vectors, r-annotationdbi, r-annotate, r-biobase
Description:
Some basic functions for filtering genes

r-genelendatabase

Homepage:
Spack package:
Versions:
1.16.0
Build Dependencies:
r, r-rtracklayer, r-genomicfeatures
Link Dependencies:
r
Run Dependencies:
r, r-rtracklayer, r-genomicfeatures
Description:
Length of mRNA transcripts for a number of genomes and gene ID formats, largely based on UCSC table browser

r-geneplotter

Homepage:
Spack package:
Versions:
1.58.0, 1.54.0
Build Dependencies:
r, r-biobase, r-biocgenerics, r-lattice, r-annotate, r-annotationdbi, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biocgenerics, r-lattice, r-annotate, r-annotationdbi, r-rcolorbrewer
Description:
Functions for plotting genomic data.

r-genie3

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-reshape2
Link Dependencies:
r
Run Dependencies:
r, r-reshape2
Description:
This package implements the GENIE3 algorithm for inferring gene regulatory networks from expression data.

r-genomeinfodb

Homepage:
Spack package:
Versions:
1.16.0, 1.14.0, 1.12.3
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-rcurl, r-genomeinfodbdata
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-rcurl, r-genomeinfodbdata
Description:
Contains data and functions that define and allow translation between different chromosome sequence naming conventions (e.g., "chr1" versus "1"), including a function that attempts to place sequence names in their natural, rather than lexicographic, order.

r-genomeinfodbdata

Homepage:
Spack package:
Versions:
1.1.0, 0.99.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
for mapping between NCBI taxonomy ID and species. Used by functions in the GenomeInfoDb package.

r-genomicalignments

Homepage:
Spack package:
Versions:
1.16.0, 1.14.2, 1.12.2
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-biocparallel
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-biocparallel
Description:
Provides efficient containers for storing and manipulating short genomic alignments (typically obtained by aligning short reads to a reference genome). This includes read counting, computing the coverage, junction detection, and working with the nucleotide content of the alignments.

r-genomicfeatures

Homepage:
Spack package:
Versions:
1.32.2, 1.28.5
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-annotationdbi, r-dbi, r-rsqlite, r-rcurl, r-xvector, r-biostrings, r-rtracklayer, r-biomart, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-annotationdbi, r-dbi, r-rsqlite, r-rcurl, r-xvector, r-biostrings, r-rtracklayer, r-biomart, r-biobase
Description:
A set of tools and methods for making and manipulating transcript centric annotations. With these tools the user can easily download the genomic locations of the transcripts, exons and cds of a given organism, from either the UCSC Genome Browser or a BioMart database (more sources will be supported in the future). This information is then stored in a local database that keeps track of the relationship between transcripts, exons, cds and genes. Flexible methods are provided for extracting the desired features in a convenient format.

r-genomicranges

Homepage:
Spack package:
Versions:
1.32.6, 1.30.3, 1.28.6
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-xvector
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-genomeinfodb, r-xvector
Description:
The ability to efficiently represent and manipulate genomic annotations and alignments is playing a central role when it comes to analyzing high-throughput sequencing data (a.k.a. NGS data). The GenomicRanges package defines general purpose containers for storing and manipulating genomic intervals and variables defined along a genome. More specialized containers for representing and manipulating short alignments against a reference genome, or a matrix-like summarization of an experiment, are defined in the GenomicAlignments and SummarizedExperiment packages respectively. Both packages build on top of the GenomicRanges infrastructure.

r-gensa

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
GenSA: Generalized Simulated Annealing Performs search for global minimum of a very complex non-linear objective function with a very large number of optima.

r-geomorph

Homepage:
Spack package:
Versions:
3.1.1, 3.0.7, 3.0.5
Build Dependencies:
r, r-rgl, r-ape, r-jpeg, r-geiger, r-matrix, r-rrpp
Link Dependencies:
r
Run Dependencies:
r, r-rgl, r-ape, r-jpeg, r-geiger, r-matrix, r-rrpp
Description:
Read, manipulate, and digitize landmark data, generate shape variables via Procrustes analysis for points, curves and surfaces, perform shape analyses, and provide graphical depictions of shapes and patterns of shape variation.

r-geonames

Homepage:
Spack package:
Versions:
0.999
Build Dependencies:
r, r-rjson
Link Dependencies:
r
Run Dependencies:
r, r-rjson
Description:
geonames: Interface to the "Geonames" Spatial Query Web Service

r-geoquery

Homepage:
Spack package:
Versions:
2.42.0
Build Dependencies:
r, r-biobase, r-xml, r-rcurl, r-httr
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-xml, r-rcurl, r-httr
Description:
The NCBI Gene Expression Omnibus (GEO) is a public repository of microarray data. Given the rich and varied nature of this resource, it is only natural to want to apply BioConductor tools to these data. GEOquery is the bridge between GEO and BioConductor.

r-geor

Homepage:
Spack package:
Versions:
1.7-5.2.1
Build Dependencies:
r, r-mass, r-sp, r-splancs, r-randomfields
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-sp, r-splancs, r-randomfields
Description:
Geostatistical analysis including traditional, likelihood-based and Bayesian methods.

r-geosphere

Homepage:
Spack package:
Versions:
1.5-5
Build Dependencies:
r, r-sp
Link Dependencies:
r
Run Dependencies:
r, r-sp
Description:
Spherical trigonometry for geographic applications. That is, compute distances and related measures for angular (longitude/latitude) locations.

r-getopt

Homepage:
Spack package:
Versions:
1.20.2, 1.20.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Package designed to be used with Rscript to write "#!" shebang scripts that accept short and long flags/options. Many users will prefer using instead the packages optparse or argparse which add extra features like automatically generated help option and usage, support for default values, positional argument support, etc.

r-getoptlong

Homepage:
Spack package:
Versions:
0.1.6
Build Dependencies:
r, r-rjson, r-globaloptions, perl
Link Dependencies:
r, perl
Run Dependencies:
r, r-rjson, r-globaloptions
Description:
This is yet another command-line argument parser which wraps the powerful Perl module Getopt::Long and with some adaptation for easier use in R. It also provides a simple way for variable interpolation in R.

r-ggally

Homepage:
Spack package:
Versions:
1.3.2
Build Dependencies:
r, r-ggplot2, r-gtable, r-plyr, r-progress, r-rcolorbrewer, r-reshape
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-gtable, r-plyr, r-progress, r-rcolorbrewer, r-reshape
Description:
The R package 'ggplot2' is a plotting system based on the grammar of graphics. 'GGally' extends 'ggplot2' by adding several functions to reduce the complexity of combining geometric objects with transformed data. Some of these functions include a pairwise plot matrix, a two group pairwise plot matrix, a parallel coordinates plot, a survival plot, and several functions to plot networks.

r-ggbio

Homepage:
Spack package:
Versions:
1.24.1
Build Dependencies:
r, r-gridextra, r-scales, r-reshape2, r-gtable, r-hmisc, r-biovizbase, r-biobase, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-genomicalignments, r-bsgenome, r-variantannotation, r-rtracklayer, r-genomicfeatures, r-organismdbi, r-ggally, r-ensembldb, r-annotationdbi, r-annotationfilter
Link Dependencies:
r
Run Dependencies:
r, r-gridextra, r-scales, r-reshape2, r-gtable, r-hmisc, r-biovizbase, r-biobase, r-s4vectors, r-iranges, r-genomeinfodb, r-genomicranges, r-summarizedexperiment, r-biostrings, r-rsamtools, r-genomicalignments, r-bsgenome, r-variantannotation, r-rtracklayer, r-genomicfeatures, r-organismdbi, r-ggally, r-ensembldb, r-annotationdbi, r-annotationfilter
Description:
The ggbio package extends and specializes the grammar of graphics for biological data. The graphics are designed to answer common scientific questions, in particular those often asked of high throughput genomics data. All core Bioconductor data structures are supported, where appropriate. The package supports detailed views of particular genomic regions, as well as genome-wide overviews. Supported overviews include ideograms and grand linear views. High-level plots include sequence fragment length, edge-linked interval to data view, mismatch pileup, and several splicing summaries.

r-ggdendro

Homepage:
Spack package:
Versions:
0.1-20
Build Dependencies:
r, r-ggplot2, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-mass
Description:
This is a set of tools for dendrograms and tree plots using 'ggplot2'. The 'ggplot2' philosophy is to clearly separate data from the presentation. Unfortunately the plot method for dendrograms plots directly to a plot device without exposing the data. The 'ggdendro' package resolves this by making available functions that extract the dendrogram plot data. The package provides implementations for tree, rpart, as well as diana and agnes cluster diagrams.

r-ggjoy

Homepage:
Spack package:
Versions:
0.4.0, 0.3.0, 0.2.0
Build Dependencies:
r, r-ggplot2, r-ggridges
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-ggridges
Description:
Joyplots provide a convenient way of visualizing changes in distributions over time or space.

r-ggmap

Homepage:
Spack package:
Versions:
2.6.1
Build Dependencies:
r, r-ggplot2, r-proto, r-rgooglemaps, r-png, r-plyr, r-reshape2, r-rjson, r-mapproj, r-jpeg, r-geosphere, r-digest, r-scales
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-proto, r-rgooglemaps, r-png, r-plyr, r-reshape2, r-rjson, r-mapproj, r-jpeg, r-geosphere, r-digest, r-scales
Description:
A collection of functions to visualize spatial data and models on top of static maps from various online sources (e.g Google Maps and Stamen Maps). It includes tools common to those tasks, including functions for geolocation and routing.

r-ggplot2

Homepage:
Spack package:
Versions:
2.2.1, 2.1.0
Build Dependencies:
r, r-digest, r-gtable, r-mass, r-plyr, r-reshape2, r-scales, r-tibble, r-lazyeval
Link Dependencies:
r
Run Dependencies:
r, r-digest, r-gtable, r-mass, r-plyr, r-reshape2, r-scales, r-tibble, r-lazyeval
Description:
An implementation of the grammar of graphics in R. It combines the advantages of both base and lattice graphics: conditioning and shared axes are handled automatically, and you can still build up a plot step by step from multiple data sources. It also implements a sophisticated multidimensional conditioning system and a consistent interface to map data to aesthetic attributes. See http://ggplot2.org for more information, documentation and examples.

r-ggpubr

Homepage:
Spack package:
Versions:
0.1.2
Build Dependencies:
r, r-ggplot2, r-ggrepel, r-ggsci, r-plyr
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-ggrepel, r-ggsci, r-plyr
Description:
ggpubr: 'ggplot2' Based Publication Ready Plots

r-ggrepel

Homepage:
Spack package:
Versions:
0.6.5
Build Dependencies:
r, r-ggplot2, r-rcpp, r-scales
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-rcpp, r-scales
Description:
ggrepel: Repulsive Text and Label Geoms for 'ggplot2'

r-ggridges

Homepage:
Spack package:
Versions:
0.4.1, 0.4.0
Build Dependencies:
r, r-ggplot2
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2
Description:
Ridgeline plots provide a convenient way of visualizing changes in distributions over time or space.

r-ggsci

Homepage:
Spack package:
Versions:
2.4
Build Dependencies:
r, r-scales, r-ggplot2
Link Dependencies:
r
Run Dependencies:
r, r-scales, r-ggplot2
Description:
ggsci: Scientific Journal and Sci-Fi Themed Color Palettes for 'ggplot2'

r-ggvis

Homepage:
Spack package:
Versions:
0.4.3, 0.4.2
Build Dependencies:
r, r-assertthat, r-jsonlite, r-shiny, r-magrittr, r-dplyr, r-lazyeval, r-htmltools
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-jsonlite, r-shiny, r-magrittr, r-dplyr, r-lazyeval, r-htmltools
Description:
An implementation of an interactive grammar of graphics, taking the best parts of 'ggplot2', combining them with the reactive framework from 'shiny' and web graphics from 'vega'.

r-gistr

Homepage:
Spack package:
Versions:
0.3.6
Build Dependencies:
r, r-jsonlite, r-httr, r-magrittr, r-assertthat, r-knitr, r-rmarkdown, r-dplyr
Link Dependencies:
r
Run Dependencies:
r, r-jsonlite, r-httr, r-magrittr, r-assertthat, r-knitr, r-rmarkdown, r-dplyr
Description:
Work with 'GitHub' 'gists' from 'R'. This package allows the user to create new 'gists', update 'gists' with new files, rename files, delete files, get and delete 'gists', star and 'un-star' 'gists', fork 'gists', open a 'gist' in your default browser, get embed code for a 'gist', list 'gist' 'commits', and get rate limit information when 'authenticated'. Some requests require authentication and some do not.

r-git2r

Homepage:
Spack package:
Versions:
0.18.0, 0.15.0
Build Dependencies:
r, zlib, openssl
Link Dependencies:
r, zlib, openssl
Run Dependencies:
r
Description:
Interface to the 'libgit2' library, which is a pure C implementation of the 'Git' core methods. Provides access to 'Git' repositories to extract data and running some basic 'Git' commands.

r-glimma

Homepage:
Spack package:
Versions:
1.8.2
Build Dependencies:
r, r-edger, r-jsonlite, r-s4vectors
Link Dependencies:
r
Run Dependencies:
r, r-edger, r-jsonlite, r-s4vectors
Description:
This package generates interactive visualisations for analysis of RNA- sequencing data using output from limma, edgeR or DESeq2 packages in an HTML page. The interactions are built on top of the popular static representations of analysis results in order to provide additional information.

r-glmnet

Homepage:
Spack package:
Versions:
2.0-13, 2.0-5
Build Dependencies:
r, r-matrix, r-foreach
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-foreach
Description:
Extremely efficient procedures for fitting the entire lasso or elastic- net regularization path for linear regression, logistic and multinomial regression models, Poisson regression and the Cox model. Two recent additions are the multiple-response Gaussian, and the grouped multinomial. The algorithm uses cyclical coordinate descent in a path- wise fashion, as described in the paper linked to via the URL below.

r-globaloptions

Homepage:
Spack package:
Versions:
0.0.12
Build Dependencies:
r, r-testthat, r-knitr, r-markdown
Link Dependencies:
r
Run Dependencies:
r, r-testthat, r-knitr, r-markdown
Description:
It provides more controls on the option values such as validation and filtering on the values, making options invisible or private.

r-glue

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An implementation of interpreted string literals, inspired by Python's Literal String Interpolation <https://www.python.org/dev/peps/pep-0498/> and Docstrings <https://www.python.org/dev/peps/pep-0257/> and Julia's Triple-Quoted String Literals <https://docs.julialang.org/en/stable/ manual/strings/#triple-quoted-string-literals>.

r-gmodels

Homepage:
Spack package:
Versions:
2.16.2
Build Dependencies:
r, r-gdata
Link Dependencies:
r
Run Dependencies:
r, r-gdata
Description:
Various R programming tools for model fitting.

r-gmp

Homepage:
Spack package:
Versions:
0.5-13.1
Build Dependencies:
r, gmp
Link Dependencies:
r, gmp
Run Dependencies:
r
Description:
Multiple Precision Arithmetic (big integers and rationals, prime number tests, matrix computation), "arithmetic without limitations" using the C library GMP (GNU Multiple Precision Arithmetic).

r-go-db

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
A set of annotation maps describing the entire Gene Ontology assembled using data from GO.

r-googlevis

Homepage:
Spack package:
Versions:
0.6.0
Build Dependencies:
r, r-jsonlite
Link Dependencies:
r
Run Dependencies:
r, r-jsonlite
Description:
R interface to Google Charts API, allowing users to create interactive charts based on data frames. Charts are displayed locally via the R HTTP help server. A modern browser with an Internet connection is required and for some charts a Flash player. The data remains local and is not uploaded to Google.

r-goplot

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
r, r-ggplot2, r-ggdendro, r-gridextra, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-ggdendro, r-gridextra, r-rcolorbrewer
Description:
Implementation of multilayered visualizations for enhanced graphical representation of functional analysis data. It combines and integrates omics data derived from expression and functional annotation enrichment analyses. Its plotting functions have been developed with an hierarchical structure in mind: starting from a general overview to identify the most enriched categories (modified bar plot, bubble plot) to a more detailed one displaying different types of relevant information for the molecules in a given set of categories (circle plot, chord plot, cluster plot, Venn diagram, heatmap).

r-gosemsim

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
r, r-annotationdbi, r-go-db, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi, r-go-db, r-rcpp
Description:
The semantic comparisons of Gene Ontology (GO) annotations provide quantitative ways to compute similarities between genes and gene groups, and have became important basis for many bioinformatics analysis approaches. GOSemSim is an R package for semantic similarity computation among GO terms, sets of GO terms, gene products and gene clusters. GOSemSim implemented five methods proposed by Resnik, Schlicker, Jiang, Lin and Wang respectively.

r-goseq

Homepage:
Spack package:
Versions:
1.32.0
Build Dependencies:
r, r-biasedurn, r-genelendatabase, r-mgcv, r-annotationdbi, r-go-db, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biasedurn, r-genelendatabase, r-mgcv, r-annotationdbi, r-go-db, r-biocgenerics
Description:
Detects Gene Ontology and/or other user defined categories which are over/under represented in RNA-seq data

r-gostats

Homepage:
Spack package:
Versions:
2.42.0
Build Dependencies:
r, r-biobase, r-category, r-go-db, r-graph, r-annotationdbi, r-rbgl, r-annotate, r-annotationforge
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-category, r-go-db, r-graph, r-annotationdbi, r-rbgl, r-annotate, r-annotationforge
Description:
A set of tools for interacting with GO and microarray data. A variety of basic manipulation tools for graphs, hypothesis testing and other simple calculations.

r-gplots

Homepage:
Spack package:
Versions:
3.0.1
Build Dependencies:
r, r-gtools, r-gdata, r-catools, r-kernsmooth
Link Dependencies:
r
Run Dependencies:
r, r-gtools, r-gdata, r-catools, r-kernsmooth
Description:
Various R Programming Tools for Plotting Data.

r-graph

Homepage:
Spack package:
Versions:
1.54.0
Build Dependencies:
r, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics
Description:
A package that implements some simple graph handling capabilities.

r-gridbase

Homepage:
Spack package:
Versions:
0.4-7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Integration of base and grid graphics.

r-gridextra

Homepage:
Spack package:
Versions:
2.3, 2.2.1
Build Dependencies:
r, r-gtable
Link Dependencies:
r
Run Dependencies:
r, r-gtable
Description:
Provides a number of user-level functions to work with "grid" graphics, notably to arrange multiple grid-based plots on a page, and draw tables.

r-gseabase

Homepage:
Spack package:
Versions:
1.38.2
Build Dependencies:
r, r-biocgenerics, r-biobase, r-annotate, r-graph, r-annotationdbi, r-xml
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-annotate, r-graph, r-annotationdbi, r-xml
Description:
This package provides classes and methods to support Gene Set Enrichment Analysis (GSEA).

r-gss

Homepage:
Spack package:
Versions:
2.1-7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A comprehensive package for structural multivariate function estimation using smoothing splines.

r-gsubfn

Homepage:
Spack package:
Versions:
0.6-6
Build Dependencies:
r, r-proto
Link Dependencies:
r
Run Dependencies:
r, r-proto
Description:
gsubfn is like gsub but can take a replacement function or certain other objects instead of the replacement string. Matches and back references are input to the replacement function and replaced by the function output. gsubfn can be used to split strings based on content rather than delimiters and for quasi-perl-style string interpolation. The package also has facilities for translating formulas to functions and allowing such formulas in function calls instead of functions. This can be used with R functions such as apply, sapply, lapply, optim, integrate, xyplot, Filter and any other function that expects another function as an input argument or functions like cat or sql calls that may involve strings where substitution is desirable.

r-gtable

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Tools to make it easier to work with "tables" of 'grobs'.

r-gtools

Homepage:
Spack package:
Versions:
3.5.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions to assist in R programming. Including: - assist in developing, updating, and maintaining R and R packages ('ask', 'checkRVersion', 'getDependencies', 'keywords', 'scat') - calculate the logit and inverse logit transformations ('logit', 'inv.logit') - test if a value is missing, empty or contains only NA and NULL values ('invalid') - manipulate R's .Last function ('addLast') - define macros ('defmacro') - detect odd and even integers ('odd', 'even') - convert strings containing non-ASCII characters (like single quotes) to plain ASCII ('ASCIIfy') - perform a binary search ('binsearch') - sort strings containing both numeric and character components ('mixedsort') - create a factor variable from the quantiles of a continuous variable ('quantcut') - enumerate permutations and combinations ('combinations', 'permutation') - calculate and convert between fold-change and log-ratio ('foldchange', 'logratio2foldchange', 'foldchange2logratio') - calculate probabilities and generate random numbers from Dirichlet distributions ('rdirichlet', 'ddirichlet') - apply a function over adjacent subsets of a vector ('running') - modify the TCP_NODELAY ('de-Nagle') flag for socket objects - efficient 'rbind' of data frames, even if the column names don't match ('smartbind') - generate significance stars from p-values ('stars.pval') - convert characters to/from ASCII codes.

r-gtrellis

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-iranges, r-genomicranges, r-circlize, r-getoptlong
Link Dependencies:
r
Run Dependencies:
r, r-iranges, r-genomicranges, r-circlize, r-getoptlong
Description:
Genome level Trellis graph visualizes genomic data conditioned by genomic categories (e.g. chromosomes). For each genomic category, multiple dimensional data which are represented as tracks describe different features from different aspects. This package provides high flexibility to arrange genomic categories and to add self-defined graphics in the plot.

r-gviz

Homepage:
Spack package:
Versions:
1.20.0
Build Dependencies:
r, r-s4vectors, r-iranges, r-genomicranges, r-xvector, r-rtracklayer, r-lattice, r-rcolorbrewer, r-biomart, r-annotationdbi, r-biobase, r-genomicfeatures, r-bsgenome, r-biostrings, r-biovizbase, r-rsamtools, r-latticeextra, r-matrixstats, r-genomicalignments, r-genomeinfodb, r-biocgenerics, r-digest
Link Dependencies:
r
Run Dependencies:
r, r-s4vectors, r-iranges, r-genomicranges, r-xvector, r-rtracklayer, r-lattice, r-rcolorbrewer, r-biomart, r-annotationdbi, r-biobase, r-genomicfeatures, r-bsgenome, r-biostrings, r-biovizbase, r-rsamtools, r-latticeextra, r-matrixstats, r-genomicalignments, r-genomeinfodb, r-biocgenerics, r-digest
Description:
Genomic data analyses requires integrated visualization of known genomic information and new experimental data. Gviz uses the biomaRt and the rtracklayer packages to perform live annotation queries to Ensembl and UCSC and translates this to e.g. gene/transcript structures in viewports of the grid graphics package. This results in genomic information plotted together with your data.

r-haven

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
r, r-rcpp, r-readr, r-hms, r-tibble, r-forcats
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-readr, r-hms, r-tibble, r-forcats
Description:
Import foreign statistical formats into R via the embedded 'ReadStat' C library, <https://github.com/WizardMac/ReadStat>.

r-hexbin

Homepage:
Spack package:
Versions:
1.27.1
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Binning and plotting functions for hexagonal bins. Now uses and relies on grid graphics and formal (S4) classes and methods.

r-highr

Homepage:
Spack package:
Versions:
0.6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides syntax highlighting for R source code. Currently it supports LaTeX and HTML output. Source code of other languages is supported via Andre Simon's highlight package.

r-hmisc

Homepage:
Spack package:
Versions:
4.1-1, 4.0-3
Build Dependencies:
r, r-lattice, r-survival, r-formula, r-ggplot2, r-latticeextra, r-acepack, r-gridextra, r-data-table, r-htmltools, r-base64enc, r-htmltable, r-viridis
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-survival, r-formula, r-ggplot2, r-latticeextra, r-acepack, r-gridextra, r-data-table, r-htmltools, r-base64enc, r-htmltable, r-viridis
Description:
Contains many functions useful for data analysis, high-level graphics, utility operations, functions for computing sample size and power, importing and annotating datasets, imputing missing values, advanced table making, variable clustering, character string manipulation, conversion of R objects to LaTeX and html code, and recoding variables.

r-hms

Homepage:
Spack package:
Versions:
0.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Implements an S3 class for storing and formatting time-of-day values, based on the 'difftime' class.

r-hoardr

Homepage:
Spack package:
Versions:
0.5.2
Build Dependencies:
r, r-r6, r-rappdirs, r-digest, r-roxygen2, r-testthat, r-knitr, r-rmarkdown
Link Dependencies:
r
Run Dependencies:
r, r-r6, r-rappdirs, r-digest, r-roxygen2, r-testthat, r-knitr, r-rmarkdown
Description:
hoardr: Manage Cached Files

r-htmltable

Homepage:
Spack package:
Versions:
1.11.2, 1.9
Build Dependencies:
r, r-stringr, r-knitr, r-magrittr, r-checkmate, r-htmlwidgets, r-rstudioapi
Link Dependencies:
r
Run Dependencies:
r, r-stringr, r-knitr, r-magrittr, r-checkmate, r-htmlwidgets, r-rstudioapi
Description:
Tables with state-of-the-art layout elements such as row spanners, column spanners, table spanners, zebra striping, and more. While allowing advanced layout, the underlying css-structure is simple in order to maximize compatibility with word processors such as 'MS Word' or 'LibreOffice'. The package also contains a few text formatting functions that help outputting text compatible with HTML/'LaTeX'.

r-htmltools

Homepage:
Spack package:
Versions:
0.3.6, 0.3.5
Build Dependencies:
r, r-digest, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-digest, r-rcpp
Description:
Tools for HTML generation and output.

r-htmlwidgets

Homepage:
Spack package:
Versions:
0.9, 0.8, 0.6
Build Dependencies:
r, r-htmltools, r-jsonlite, r-yaml
Link Dependencies:
r
Run Dependencies:
r, r-htmltools, r-jsonlite, r-yaml
Description:
A framework for creating HTML widgets that render in various contexts including the R console, 'R Markdown' documents, and 'Shiny' web applications.

r-httpcode

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
httpcode: 'HTTP' Status Code Helper

r-httpuv

Homepage:
Spack package:
Versions:
1.3.5, 1.3.3
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
Provides low-level socket and protocol support for handling HTTP and WebSocket requests directly from within R. It is primarily intended as a building block for other packages, rather than making it particularly easy to create complete web applications using httpuv alone. httpuv is built on top of the libuv and http-parser C libraries, both of which were developed by Joyent, Inc. (See LICENSE file for libuv and http- parser license information.)

r-httr

Homepage:
Spack package:
Versions:
1.3.1, 1.2.1, 1.1.0
Build Dependencies:
r, r-jsonlite, r-mime, r-curl, r-openssl, r-r6
Link Dependencies:
r
Run Dependencies:
r, r-jsonlite, r-mime, r-curl, r-openssl, r-r6
Description:
Useful tools for working with HTTP organised by HTTP verbs (GET(), POST(), etc). Configuration functions make it easy to control additional request components (authenticate(), add_headers() and so on).

r-hwriter

Homepage:
Spack package:
Versions:
1.3.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Easy-to-use and versatile functions to output R objects in HTML format.

r-hypergraph

Homepage:
Spack package:
Versions:
1.48.0
Build Dependencies:
r, r-graph
Link Dependencies:
r
Run Dependencies:
r, r-graph
Description:
A package that implements some simple capabilities for representing and manipulating hypergraphs.

r-ica

Homepage:
Spack package:
Versions:
1.0-1, 1.0-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Independent Component Analysis (ICA) using various algorithms: FastICA, Information-Maximization (Infomax), and Joint Approximate Diagonalization of Eigenmatrices (JADE).

r-igraph

Homepage:
Spack package:
Versions:
1.1.2, 1.0.1
Build Dependencies:
r, r-matrix, r-magrittr, r-pkgconfig, r-irlba, gmp, libxml2
Link Dependencies:
r, gmp, libxml2
Run Dependencies:
r, r-matrix, r-magrittr, r-pkgconfig, r-irlba
Description:
Routines for simple graphs and network analysis. It can handle large graphs very well and provides functions for generating random and regular graphs, graph visualization, centrality methods and much more.

r-illuminaio

Homepage:
Spack package:
Versions:
0.18.0
Build Dependencies:
r, r-base64
Link Dependencies:
r
Run Dependencies:
r, r-base64
Description:
Tools for parsing Illumina's microarray output files, including IDAT.

r-impute

Homepage:
Spack package:
Versions:
1.56.0, 1.50.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Imputation for microarray data (currently KNN only).

r-influencer

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
r, r-igraph, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-igraph, r-matrix
Description:
Provides functionality to compute various node centrality measures on networks. Included are functions to compute betweenness centrality (by utilizing Madduri and Bader's SNAP library), implementations of Burt's constraint and effective network size (ENS) metrics, Borgatti's algorithm to identify key players, and Valente's bridging metric. On Unix systems, the betweenness, Key Players, and bridging implementations are parallelized with OpenMP, which may run faster on systems which have OpenMP configured.

r-inline

Homepage:
Spack package:
Versions:
0.3.14
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functionality to dynamically define R functions and S4 methods with inlined C, C++ or Fortran code supporting .C and .Call calling conventions.

r-interactivedisplaybase

Homepage:
Spack package:
Versions:
1.14.0
Build Dependencies:
r, r-biocgenerics, r-shiny
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-shiny
Description:
The interactiveDisplayBase package contains the the basic methods needed to generate interactive Shiny based display methods for Bioconductor objects.

r-ipred

Homepage:
Spack package:
Versions:
0.9-5
Build Dependencies:
r, r-rpart, r-mass, r-survival, r-nnet, r-class, r-prodlim
Link Dependencies:
r
Run Dependencies:
r, r-rpart, r-mass, r-survival, r-nnet, r-class, r-prodlim
Description:
Improved predictive models by indirect classification and bagging for classification, regression and survival problems as well as resampling based estimators of prediction error.

r-iranges

Homepage:
Spack package:
Versions:
2.14.10, 2.12.0, 2.10.5
Build Dependencies:
r, r-biocgenerics, r-s4vectors
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors
Description:
Provides efficient low-level and highly reusable S4 classes for storing, manipulating and aggregating over annotated ranges of integers. Implements an algebra of range operations, including efficient algorithms for finding overlaps and nearest neighbors. Defines efficient list-like classes for storing, transforming and aggregating large grouped data, i.e., collections of atomic vectors and DataFrames.

r-irdisplay

Homepage:
Spack package:
Versions:
0.4.4
Build Dependencies:
r, r-repr
Link Dependencies:
r
Run Dependencies:
r, r-repr
Description:
An interface to the rich display capabilities of Jupyter front-ends (e.g. 'Jupyter Notebook') Designed to be used from a running IRkernel session

r-irkernel

Homepage:
Spack package:
Versions:
master
Build Dependencies:
r, r-repr, r-irdisplay, r-evaluate, r-crayon, r-pbdzmq, r-devtools, r-uuid, r-digest
Link Dependencies:
r
Run Dependencies:
r, r-repr, r-irdisplay, r-evaluate, r-crayon, r-pbdzmq, r-devtools, r-uuid, r-digest
Description:
R kernel for Jupyter

r-irlba

Homepage:
Spack package:
Versions:
2.1.2, 2.0.0
Build Dependencies:
r, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-matrix
Description:
Fast and memory efficient methods for truncated singular and eigenvalue decompositions and principal component analysis of large sparse or dense matrices.

r-isdparser

Homepage:
Spack package:
Versions:
0.3.0
Build Dependencies:
r, r-data-table, r-tibble
Link Dependencies:
r
Run Dependencies:
r, r-data-table, r-tibble
Description:
isdparser: Parse 'NOAA' Integrated Surface Data Files

r-iso

Homepage:
Spack package:
Versions:
0.0-17
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Linear order and unimodal order (univariate) isotonic regression; bivariate isotonic regression with linear order on both variables.

r-iterators

Homepage:
Spack package:
Versions:
1.0.8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Support for iterators, which allow a programmer to traverse through all the elements of a vector, list, or other collection of data.

r-janitor

Homepage:
Spack package:
Versions:
0.3.0
Build Dependencies:
r, r-dplyr, r-tidyr, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-dplyr, r-tidyr, r-magrittr
Description:
The main janitor functions can: perfectly format data.frame column names; provide quick one- and two-variable tabulations (i.e., frequency tables and crosstabs); and isolate duplicate records. Other janitor functions nicely format the tabulation results. These tabulate-and- report functions approximate popular features of SPSS and Microsoft Excel. This package follows the principles of the "tidyverse" and works well with the pipe function %>%. janitor was built with beginning-to- intermediate R users in mind and is optimized for user-friendliness. Advanced R users can already do everything covered here, but with janitor they can do it faster and save their thinking for the fun stuff.

r-jaspar2018

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Data package for JASPAR 2018. To search this databases, please use the package TFBSTools (>= 1.15.6).

r-jomo

Homepage:
Spack package:
Versions:
2.6-2
Build Dependencies:
r, r-lme4, r-survival
Link Dependencies:
r
Run Dependencies:
r, r-lme4, r-survival
Description:
Similarly to Schafer's package 'pan', 'jomo' is a package for multilevel joint modelling multiple imputation (Carpenter and Kenward, 2013) <doi:10.1002/9781119942283>. Novel aspects of 'jomo' are the possibility of handling binary and categorical data through latent normal variables, the option to use cluster-specific covariance matrices and to impute compatibly with the substantive model.

r-jpeg

Homepage:
Spack package:
Versions:
0.1-8
Build Dependencies:
r, jpeg
Link Dependencies:
r, jpeg
Run Dependencies:
r
Description:
This package provides an easy and simple way to read, write and display bitmap images stored in the JPEG format. It can read and write both files and in-memory raw vectors.

r-jsonlite

Homepage:
Spack package:
Versions:
1.5, 1.2, 1.0, 0.9.21
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A fast JSON parser and generator optimized for statistical data and the web. Started out as a fork of 'RJSONIO', but has been completely rewritten in recent versions. The package offers flexible, robust, high performance tools for working with JSON in R and is particularly powerful for building pipelines and interacting with a web API. The implementation is based on the mapping described in the vignette (Ooms, 2014). In addition to converting JSON data from/to R objects, 'jsonlite' contains functions to stream, validate, and prettify JSON data. The unit tests included with the package verify that all edge cases are encoded and decoded consistently for use with dynamic data in systems and applications.

r-kegg-db

Homepage:
Spack package:
Versions:
3.2.3
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
A set of annotation maps for KEGG assembled using data from KEGG.

r-kegggraph

Homepage:
Spack package:
Versions:
1.38.1
Build Dependencies:
r, r-graph, r-xml
Link Dependencies:
r
Run Dependencies:
r, r-graph, r-xml
Description:
KEGGGraph is an interface between KEGG pathway and graph object as well as a collection of tools to analyze, dissect and visualize these graphs. It parses the regularly updated KGML (KEGG XML) files into graph models maintaining all essential pathway attributes. The package offers functionalities including parsing, graph operation, visualization and etc.

r-keggrest

Homepage:
Spack package:
Versions:
1.18.1, 1.2.0
Build Dependencies:
r, r-httr, r-png, r-biostrings
Link Dependencies:
r
Run Dependencies:
r, r-httr, r-png, r-biostrings
Description:
This package provides functions and routines useful in the analysis of somatic signatures (cf. L. Alexandrov et al., Nature 2013). In particular, functions to perform a signature analysis with known signatures (LCD = linear combination decomposition) and a signature analysis on stratified mutational catalogue (SMC = stratify mutational catalogue) are provided.

r-kernlab

Homepage:
Spack package:
Versions:
0.9-25
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Kernel-based machine learning methods for classification, regression, clustering, novelty detection, quantile regression and dimensionality reduction. Among other methods 'kernlab' includes Support Vector Machines, Spectral Clustering, Kernel PCA, Gaussian Processes and a QP solver.

r-kernsmooth

Homepage:
Spack package:
Versions:
2.23-15
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions for kernel smoothing (and density estimation).

r-kknn

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
r, r-igraph, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-igraph, r-matrix
Description:
Weighted k-Nearest Neighbors for Classification, Regression and Clustering.

r-knitr

Homepage:
Spack package:
Versions:
1.17, 1.14, 0.6
Build Dependencies:
r, r-evaluate, r-digest, r-formatr, r-highr, r-stringr, r-markdown, r-yaml
Link Dependencies:
r
Run Dependencies:
r, r-evaluate, r-digest, r-formatr, r-highr, r-stringr, r-markdown, r-yaml
Description:
Provides a general-purpose tool for dynamic report generation in R using Literate Programming techniques.

r-ks

Homepage:
Spack package:
Versions:
1.11.2
Build Dependencies:
r, r-fnn, r-kernlab, r-mclust, r-multicool, r-mvtnorm, r-kernsmooth, r-matrix, r-mgcv
Link Dependencies:
r
Run Dependencies:
r, r-fnn, r-kernlab, r-mclust, r-multicool, r-mvtnorm, r-kernsmooth, r-matrix, r-mgcv
Description:
Kernel smoothers for univariate and multivariate data.

r-labeling

Homepage:
Spack package:
Versions:
0.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a range of axis labeling algorithms.

r-lambda-r

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A language extension to efficiently write functional programs in R. Syntax extensions include multi-part function definitions, pattern matching, guard statements, built-in (optional) type safety.

r-laplacesdemon

Homepage:
Spack package:
Versions:
16.0.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a complete environment for Bayesian inference using a variety of different samplers (see ?LaplacesDemon for an overview). The README describes the history of the package development process.

r-lars

Homepage:
Spack package:
Versions:
1.2, 1.1, 0.9-8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Efficient procedures for fitting an entire lasso sequence with the cost of a single least squares fit.

r-lattice

Homepage:
Spack package:
Versions:
0.20-35, 0.20-34
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A powerful and elegant high-level data visualization system inspired by Trellis graphics, with an emphasis on multivariate data. Lattice is sufficient for typical graphics needs, and is also flexible enough to handle most nonstandard requirements. See ?Lattice for an introduction.

r-latticeextra

Homepage:
Spack package:
Versions:
0.6-28
Build Dependencies:
r, r-lattice, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-rcolorbrewer
Description:
Building on the infrastructure provided by the lattice package, this package provides several new high-level functions and methods, as well as additional utilities such as panel and axis annotation functions.

r-lava

Homepage:
Spack package:
Versions:
1.4.7
Build Dependencies:
r, r-numderiv, r-survival
Link Dependencies:
r
Run Dependencies:
r, r-numderiv, r-survival
Description:
Estimation and simulation of latent variable models.

r-lazyeval

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An alternative approach to non-standard evaluation using formulas. Provides a full implementation of LISP style 'quasiquotation', making it easier to generate code with other code.

r-leaflet

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
r, r-base64enc, r-htmlwidgets, r-htmltools, r-magrittr, r-markdown, r-png, r-rcolorbrewer, r-raster, r-scales, r-sp
Link Dependencies:
r
Run Dependencies:
r, r-base64enc, r-htmlwidgets, r-htmltools, r-magrittr, r-markdown, r-png, r-rcolorbrewer, r-raster, r-scales, r-sp
Description:
Create and customize interactive maps using the 'Leaflet' JavaScript library and the 'htmlwidgets' package. These maps can be used directly from the R console, from 'RStudio', in Shiny apps and R Markdown documents.

r-leaps

Homepage:
Spack package:
Versions:
3.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
leaps: Regression Subset Selection

r-learnbayes

Homepage:
Spack package:
Versions:
2.15
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
LearnBayes contains a collection of functions helpful in learning the basic tenets of Bayesian statistical inference. It contains functions for summarizing basic one and two parameter posterior distributions and predictive distributions. It contains MCMC algorithms for summarizing posterior distributions defined by the user. It also contains functions for regression models, hierarchical models, Bayesian tests, and illustrations of Gibbs sampling.

r-lhs

Homepage:
Spack package:
Versions:
0.16
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a number of methods for creating and augmenting Latin Hypercube Samples.

r-limma

Homepage:
Spack package:
Versions:
3.36.2, 3.34.9, 3.32.10
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Data analysis, linear models and differential expression for microarray data.

r-lme4

Homepage:
Spack package:
Versions:
1.1-12
Build Dependencies:
r, r-matrix, r-mass, r-lattice, r-nlme, r-minqa, r-nloptr, r-rcpp, r-rcppeigen
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-mass, r-lattice, r-nlme, r-minqa, r-nloptr, r-rcpp, r-rcppeigen
Description:
Fit linear and generalized linear mixed-effects models. The models and their components are represented using S4 classes and methods. The core computational algorithms are implemented using the 'Eigen' C++ library for numerical linear algebra and 'RcppEigen' "glue".

r-lmtest

Homepage:
Spack package:
Versions:
0.9-34
Build Dependencies:
r, r-zoo
Link Dependencies:
r
Run Dependencies:
r, r-zoo
Description:
A collection of tests, data sets, and examples for diagnostic checking in linear regression models. Furthermore, some generic tools for inference in parametric models are provided.

r-locfit

Homepage:
Spack package:
Versions:
1.5-9.1
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Local regression, likelihood and density estimation.

r-log4r

Homepage:
Spack package:
Versions:
0.2
Build Dependencies:
r, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-testthat
Description:
logr4 provides an object-oriented logging system that uses an API roughly equivalent to log4j and its related variants.

r-loo

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
r, r-checkmate, r-matrixstats
Link Dependencies:
r
Run Dependencies:
r, r-checkmate, r-matrixstats
Description:
loo: Efficient Leave-One-Out Cross-Validation and WAIC for BayesianModels

r-lpsolve

Homepage:
Spack package:
Versions:
5.6.13
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Lp_solve is freely available (under LGPL 2) software for solving linear, integer and mixed integer programs. In this implementation we supply a "wrapper" function in C and some R functions that solve general linear/integer problems, assignment problems, and transportation problems. This version calls lp_solve

r-lsei

Homepage:
Spack package:
Versions:
1.2-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
It contains functions that solve least squares linear regression problems under linear equality/inequality constraints. Functions for solving quadratic programming problems are also available, which transform such problems into least squares ones first. It is developed based on the 'Fortran' program of Lawson and Hanson (1974, 1995), which is public domain and available at <http://www.netlib.org/lawson-hanson>.

r-lubridate

Homepage:
Spack package:
Versions:
1.7.1, 1.5.6
Build Dependencies:
r, r-rcpp, r-stringr
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-stringr
Description:
Functions to work with date-times and timespans: fast and user friendly parsing of date-time data, extraction and updating of components of a date-time (years, months, days, hours, minutes, and seconds), algebraic manipulation on date-time and timespan objects. The 'lubridate' package has a consistent and memorable syntax that makes working with dates easy and fun.

r-magic

Homepage:
Spack package:
Versions:
1.5-6
Build Dependencies:
r, r-abind
Link Dependencies:
r
Run Dependencies:
r, r-abind
Description:
A collection of efficient, vectorized algorithms for the creation and investigation of magic squares and hypercubes, including a variety of functions for the manipulation and analysis of arbitrarily dimensioned arrays.

r-magrittr

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a mechanism for chaining commands with a new forward-pipe operator, %>%. This operator will forward a value, or the result of an expression, into the next function call/expression. There is flexible support for the type of right-hand side expressions. For more information, see package vignette.

r-makecdfenv

Homepage:
Spack package:
Versions:
1.52.0
Build Dependencies:
r, r-affyio, r-biobase, r-affy, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-affyio, r-biobase, r-affy, r-zlibbioc
Description:
This package has two functions. One reads a Affymetrix chip description file (CDF) and creates a hash table environment containing the location/probe set membership mapping. The other creates a package that automatically loads that environment.

r-maldiquant

Homepage:
Spack package:
Versions:
1.16.4
Build Dependencies:
r, r-knitr, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-knitr, r-testthat
Description:
A complete analysis pipeline for matrix-assisted laser desorption/ionization-time-of-flight (MALDI-TOF) and other two- dimensional mass spectrometry data. In addition to commonly used plotting and processing methods it includes distinctive features, namely baseline subtraction methods such as morphological filters (TopHat) or the statistics-sensitive non-linear iterative peak-clipping algorithm (SNIP), peak alignment using warping functions, handling of replicated measurements as well as allowing spectra with different resolutions.

r-manipulatewidget

Homepage:
Spack package:
Versions:
0.10.0
Build Dependencies:
r, r-base64enc, r-codetools, r-htmltools, r-htmlwidgets, r-knitr, r-miniui, r-shiny, r-webshot
Link Dependencies:
r
Run Dependencies:
r, r-base64enc, r-codetools, r-htmltools, r-htmlwidgets, r-knitr, r-miniui, r-shiny, r-webshot
Description:
Like package 'manipulate' does for static graphics, this package helps to easily add controls like sliders, pickers, checkboxes, etc. that can be used to modify the input data or the parameters of an interactive chart created with package 'htmlwidgets'.

r-mapproj

Homepage:
Spack package:
Versions:
1.2-4
Build Dependencies:
r, r-maps
Link Dependencies:
r
Run Dependencies:
r, r-maps
Description:
Converts latitude/longitude into projected coordinates.

r-maps

Homepage:
Spack package:
Versions:
3.1.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Display of maps. Projection code and larger maps are in separate packages ('mapproj' and 'mapdata').

r-maptools

Homepage:
Spack package:
Versions:
0.8-39
Build Dependencies:
r, r-sp, r-foreign, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-sp, r-foreign, r-lattice
Description:
Set of tools for manipulating and reading geographic data, in particular ESRI shapefiles; C code used from shapelib. It includes binary access to GSHHG shoreline files. The package also provides interface wrappers for exchanging spatial objects with packages such as PBSmapping, spatstat, maps, RArcInfo, Stata tmap, WinBUGS, Mondrian, and others.

r-markdown

Homepage:
Spack package:
Versions:
0.8, 0.7.7
Build Dependencies:
r, r-mime
Link Dependencies:
r
Run Dependencies:
r, r-mime
Description:
Provides R bindings to the 'Sundown' 'Markdown' rendering library (https://github.com/vmg/sundown). 'Markdown' is a plain-text formatting syntax that can be converted to 'XHTML' or other formats. See http://en.wikipedia.org/wiki/Markdown for more information about 'Markdown'.

r-mass

Homepage:
Spack package:
Versions:
7.3-47, 7.3-45
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions and datasets to support Venables and Ripley, "Modern Applied Statistics with S" (4th edition, 2002).

r-matr

Homepage:
Spack package:
Versions:
0.9.1, 0.9
Build Dependencies:
r, r-mgraster, r-biom-utils
Link Dependencies:
r
Run Dependencies:
r, r-mgraster, r-biom-utils
Description:
Package matR (Metagenomics Analysis Tools for R) is an analysis client for the MG-RAST metagenome annotation engine, part of the US Department of Energy (DOE) Systems Biology Knowledge Base (KBase). Customized analysis and visualization tools securely access remote data and metadata within the popular open source R language and environment for statistical computing.

r-matrix

Homepage:
Spack package:
Versions:
1.2-14, 1.2-12, 1.2-11, 1.2-8, 1.2-6
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Classes and methods for dense and sparse matrices and operations on them using 'LAPACK' and 'SuiteSparse'.

r-matrixmodels

Homepage:
Spack package:
Versions:
0.4-1
Build Dependencies:
r, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-matrix
Description:
Modelling with sparse and dense 'Matrix' matrices, using modular prediction and response module classes.

r-matrixstats

Homepage:
Spack package:
Versions:
0.52.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
High-performing functions operating on rows and columns of matrices, e.g. col / rowMedians(), col / rowRanks(), and col / rowSds(). Functions optimized per data type and for subsetted calculations such that both memory usage and processing time is minimized. There are also optimized vector-based methods, e.g. binMeans(), madDiff() and weightedMedian().

r-mclust

Homepage:
Spack package:
Versions:
5.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
mclust: Gaussian Mixture Modelling for Model-Based Clustering, Classification, and Density Estimation

r-mcmcglmm

Homepage:
Spack package:
Versions:
2.25
Build Dependencies:
r, r-matrix, r-coda, r-ape, r-corpcor, r-tensora, r-cubature
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-coda, r-ape, r-corpcor, r-tensora, r-cubature
Description:
MCMC Generalised Linear Mixed Models.

r-mco

Homepage:
Spack package:
Versions:
1.0-15.1, 1.0-15
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions for multiple criteria optimization using genetic algorithms and related test problems

r-mda

Homepage:
Spack package:
Versions:
0.4-9
Build Dependencies:
r, r-class
Link Dependencies:
r
Run Dependencies:
r, r-class
Description:
Mixture and flexible discriminant analysis, multivariate adaptive regression splines (MARS), BRUTO.

r-memoise

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0
Build Dependencies:
r, r-digest
Link Dependencies:
r
Run Dependencies:
r, r-digest
Description:
Cache the results of a function so that when you call it again with the same arguments it returns the pre-computed value.

r-mergemaid

Homepage:
Spack package:
Versions:
2.48.0
Build Dependencies:
r, r-survival, r-biobase, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-survival, r-biobase, r-mass
Description:
The functions in this R extension are intended for cross-study comparison of gene expression array data. Required from the user is gene expression matrices, their corresponding gene-id vectors and other useful information, and they could be 'list','matrix', or 'ExpressionSet'. The main function is 'mergeExprs' which transforms the input objects into data in the merged format, such that common genes in different datasets can be easily found. And the function 'intcor' calculate the correlation coefficients. Other functions use the output from 'modelOutcome' to graphically display the results and cross- validate associations of gene expression data with survival.

r-methodss3

Homepage:
Spack package:
Versions:
1.7.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Methods that simplify the setup of S3 generic functions and S3 methods. Major effort has been made in making definition of methods as simple as possible with a minimum of maintenance for package developers. For example, generic functions are created automatically, if missing, and naming conflict are automatically solved, if possible. The method setMethodS3() is a good start for those who in the future may want to migrate to S4. This is a cross-platform package implemented in pure R that generates standard S3 methods.

r-mgcv

Homepage:
Spack package:
Versions:
1.8-22, 1.8-21, 1.8-20, 1.8-19, 1.8-18, 1.8-17, 1.8-16, 1.8-13
Build Dependencies:
r, r-nlme, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-nlme, r-matrix
Description:
GAMs, GAMMs and other generalized ridge regression with multiple smoothing parameter estimation by GCV, REML or UBRE/AIC. Includes a gam() function, a wide variety of smoothers, JAGS support and distributions beyond the exponential family.

r-mgraster

Homepage:
Spack package:
Versions:
0.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Convenience Functions for R Language Access to the v.1 API of the MG- RAST Metagenome Annotation Server, part of the US Department of Energy (DOE) Systems Biology Knowledge Base (KBase).

r-mice

Homepage:
Spack package:
Versions:
3.0.0
Build Dependencies:
r, r-broom, r-dplyr, r-mass, r-mitml, r-nnet, r-rcpp, r-rlang, r-rpart, r-survival, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-broom, r-dplyr, r-mass, r-mitml, r-nnet, r-rcpp, r-rlang, r-rpart, r-survival, r-lattice
Description:
Multiple imputation using Fully Conditional Specification (FCS) implemented by the MICE algorithm as described in Van Buuren and Groothuis-Oudshoorn (2011) <doi:10.18637/jss.v045.i03>. Each variable has its own imputation model. Built-in imputation models are provided for continuous data (predictive mean matching, normal), binary data (logistic regression), unordered categorical data (polytomous logistic regression) and ordered categorical data (proportional odds). MICE can also impute continuous two-level data (normal model, pan, second-level variables). Passive imputation can be used to maintain consistency between variables. Various diagnostic plots are available to inspect the quality of the imputations.

r-mime

Homepage:
Spack package:
Versions:
0.5, 0.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Guesses the MIME type from a filename extension using the data derived from /etc/mime.types in UNIX-type systems.

r-miniui

Homepage:
Spack package:
Versions:
0.1.1.1
Build Dependencies:
r, r-shiny, r-htmltools
Link Dependencies:
r
Run Dependencies:
r, r-shiny, r-htmltools
Description:
Provides UI widget and layout functions for writing Shiny apps that work well on small screens.

r-minqa

Homepage:
Spack package:
Versions:
1.2.4
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
Derivative-free optimization by quadratic approximation based on an interface to Fortran implementations by M. J. D. Powell.

r-misc3d

Homepage:
Spack package:
Versions:
0.8-4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A collection of miscellaneous 3d plots, including isosurfaces.

r-mitml

Homepage:
Spack package:
Versions:
0.3-5
Build Dependencies:
r, r-pan, r-jomo, r-haven
Link Dependencies:
r
Run Dependencies:
r, r-pan, r-jomo, r-haven
Description:
Provides tools for multiple imputation of missing data in multilevel modeling. Includes a user-friendly interface to the packages 'pan' and 'jomo', and several functions for visualization, data management and the analysis of multiply imputed data sets.

r-mixtools

Homepage:
Spack package:
Versions:
1.1.0, 1.0.4
Build Dependencies:
r, r-mass, r-segmented, r-survival
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-segmented, r-survival
Description:
mixtools: Tools for Analyzing Finite Mixture Models Analyzes finite mixture models for various parametric and semiparametric settings.

r-mlbench

Homepage:
Spack package:
Versions:
2.1-1
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
A collection of artificial and real-world machine learning benchmark problems, including, e.g., several data sets from the UCI repository.

r-mlinterfaces

Homepage:
Spack package:
Versions:
1.56.0
Build Dependencies:
r, r-biocgenerics, r-biobase, r-gdata, r-pls, r-sfsmisc, r-rda, r-genefilter, r-fpc, r-ggvis, r-shiny, r-gbm, r-rcolorbrewer, r-hwriter, r-threejs, r-mlbench
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-gdata, r-pls, r-sfsmisc, r-rda, r-genefilter, r-fpc, r-ggvis, r-shiny, r-gbm, r-rcolorbrewer, r-hwriter, r-threejs, r-mlbench
Description:
This package provides uniform interfaces to machine learning code for data in R and Bioconductor containers.

r-mlr

Homepage:
Spack package:
Versions:
2.12.1, 2.12
Build Dependencies:
r, r-paramhelpers, r-bbmisc, r-backports, r-ggplot2, r-stringi, r-checkmate, r-data-table, r-parallelmap, r-xml
Link Dependencies:
r
Run Dependencies:
r, r-paramhelpers, r-bbmisc, r-backports, r-ggplot2, r-stringi, r-checkmate, r-data-table, r-parallelmap, r-xml
Description:
Interface to a large number of classification and regression techniques, including machine-readable parameter descriptions. There is also an experimental extension for survival analysis, clustering and general, example-specific cost-sensitive learning. Generic resampling, including cross-validation, bootstrapping and subsampling. Hyperparameter tuning with modern optimization techniques, for single- and multi-objective problems. Filter and wrapper methods for feature selection. Extension of basic learners with additional operations common in machine learning, also allowing for easy nested resampling. Most operations can be parallelized.

r-mlrmbo

Homepage:
Spack package:
Versions:
1.1.1, 1.1.0
Build Dependencies:
r, r-mlr, r-paramhelpers, r-smoof, r-backports, r-bbmisc, r-checkmate, r-data-table, r-lhs, r-parallelmap
Link Dependencies:
r
Run Dependencies:
r, r-mlr, r-paramhelpers, r-smoof, r-backports, r-bbmisc, r-checkmate, r-data-table, r-lhs, r-parallelmap
Description:
Flexible and comprehensive R toolbox for model-based optimization ('MBO'), also known as Bayesian optimization. It is designed for both single- and multi-objective optimization with mixed continuous, categorical and conditional parameters. The machine learning toolbox 'mlr' provide dozens of regression learners to model the performance of the target algorithm with respect to the parameter settings. It provides many different infill criteria to guide the search process. Additional features include multi-point batch proposal, parallel execution as well as visualization and sophisticated logging mechanisms, which is especially useful for teaching and understanding of algorithm behavior. 'mlrMBO' is implemented in a modular fashion, such that single components can be easily replaced or adapted by the user for specific use cases.

r-mmwrweek

Homepage:
Spack package:
Versions:
0.1.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The first day of any MMWR week is Sunday. MMWR week numbering is sequential beginning with 1 and incrementing with each week to a maximum of 52 or 53. MMWR week #1 of an MMWR year is the first week of the year that has at least four days in the calendar year. This package provides functionality to convert Dates to MMWR day, week, and year and the reverse.

r-mnormt

Homepage:
Spack package:
Versions:
1.5-5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions are provided for computing the density and the distribution function of multivariate normal and "t" random variables, and for generating random vectors sampled from these distributions. Probabilities are computed via non-Monte Carlo methods; different routines are used in the case d=1, d=2, d>2, if d denotes the number of dimensions.

r-modelmetrics

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
Collection of metrics for evaluating models written in C++ using 'Rcpp'.

r-modelr

Homepage:
Spack package:
Versions:
0.1.1
Build Dependencies:
r, r-magrittr, r-purrr, r-lazyeval, r-tibble, r-broom, r-dplyr, r-tidyr
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-purrr, r-lazyeval, r-tibble, r-broom, r-dplyr, r-tidyr
Description:
Functions for modelling that help you seamlessly integrate modelling into a pipeline of data manipulation and visualisation.

r-modeltools

Homepage:
Spack package:
Versions:
0.2-21
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A collection of tools to deal with statistical models.

r-mpm

Homepage:
Spack package:
Versions:
1.0-22
Build Dependencies:
r, r-kernsmooth
Link Dependencies:
r
Run Dependencies:
r, r-kernsmooth
Description:
Exploratory graphical analysis of multivariate data, specifically gene expression data with different projection methods: principal component analysis, correspondence analysis, spectral map analysis.

r-multcomp

Homepage:
Spack package:
Versions:
1.4-6
Build Dependencies:
r, r-mvtnorm, r-survival, r-th-data, r-sandwich, r-codetools
Link Dependencies:
r
Run Dependencies:
r, r-mvtnorm, r-survival, r-th-data, r-sandwich, r-codetools
Description:
Simultaneous tests and confidence intervals for general linear hypotheses in parametric models, including linear, generalized linear, linear mixed effects, and survival models. The package includes demos reproducing analyzes presented in the book "Multiple Comparisons Using R" (Bretz, Hothorn, Westfall, 2010, CRC Press).

r-multicool

Homepage:
Spack package:
Versions:
0.1-9
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
Permutations of multisets in cool-lex order.

r-multitaper

Homepage:
Spack package:
Versions:
1.0-14
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
multitaper: Spectral Analysis Tools using the Multitaper Method

r-multtest

Homepage:
Spack package:
Versions:
2.32.0
Build Dependencies:
r, r-biocgenerics, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase
Description:
Resampling-based multiple hypothesis testing

r-munsell

Homepage:
Spack package:
Versions:
0.4.3
Build Dependencies:
r, r-colorspace
Link Dependencies:
r
Run Dependencies:
r, r-colorspace
Description:
Provides easy access to, and manipulation of, the Munsell colours. Provides a mapping between Munsell's original notation (e.g. "5R 5/10") and hexadecimal strings suitable for use directly in R graphics. Also provides utilities to explore slices through the Munsell colour tree, to transform Munsell colours and display colour palettes.

r-mvtnorm

Homepage:
Spack package:
Versions:
1.0-6, 1.0-5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Computes multivariate normal and t probabilities, quantiles, random deviates and densities.

r-mzid

Homepage:
Spack package:
Versions:
1.14.0
Build Dependencies:
r, r-xml, r-plyr, r-doparallel, r-foreach, r-iterators, r-protgenerics
Link Dependencies:
r
Run Dependencies:
r, r-xml, r-plyr, r-doparallel, r-foreach, r-iterators, r-protgenerics
Description:
A parser for mzIdentML files implemented using the XML package. The parser tries to be general and able to handle all types of mzIdentML files with the drawback of having less 'pretty' output than a vendor specific parser. Please contact the maintainer with any problems and supply an mzIdentML file so the problems can be fixed quickly.

r-mzr

Homepage:
Spack package:
Versions:
2.10.0
Build Dependencies:
r, r-biobase, r-biocgenerics, r-protgenerics, r-rcpp, r-zlibbioc, netcdf
Link Dependencies:
r, netcdf
Run Dependencies:
r, r-biobase, r-biocgenerics, r-protgenerics, r-rcpp, r-zlibbioc
Description:
mzR provides a unified API to the common file formats and parsers available for mass spectrometry data. It comes with a wrapper for the ISB random access parser for mass spectrometry mzXML, mzData and mzML files. The package contains the original code written by the ISB, and a subset of the proteowizard library for mzML and mzIdentML. The netCDF reading code has previously been used in XCMS.

r-nanotime

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r, r-bit64, r-rcppcctz, r-zoo
Link Dependencies:
r
Run Dependencies:
r, r-bit64, r-rcppcctz, r-zoo
Description:
Full 64-bit resolution date and time support with resolution up to nanosecond granularity is provided, with easy transition to and from the standard 'POSIXct' type.

r-ncbit

Homepage:
Spack package:
Versions:
2013.03.29
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Making NCBI taxonomic data locally available and searchable as an R object.

r-ncdf4

Homepage:
Spack package:
Versions:
1.15
Build Dependencies:
r, netcdf
Link Dependencies:
r, netcdf
Run Dependencies:
r
Description:
Provides a high-level R interface to data files written using Unidata's netCDF library (version 4 or earlier), which are binary data files that are portable across platforms and include metadata information in addition to the data sets. Using this package, netCDF files (either version 4 or "classic" version 3) can be opened and data sets read in easily. It is also easy to create new netCDF dimensions, variables, and files, in either version 3 or 4 format, and manipulate existing netCDF files. This package replaces the former ncdf package, which only worked with netcdf version 3 files. For various reasons the names of the functions have had to be changed from the names in the ncdf package. The old ncdf package is still available at the URL given below, if you need to have backward compatibility. It should be possible to have both the ncdf and ncdf4 packages installed simultaneously without a problem. However, the ncdf package does not provide an interface for netcdf version 4 files.

r-network

Homepage:
Spack package:
Versions:
1.13.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Tools to create and modify network objects. The network class can represent a range of relational data types, and supports arbitrary vertex/edge/graph attributes.

r-networkd3

Homepage:
Spack package:
Versions:
0.2.12
Build Dependencies:
r, r-htmlwidgets, r-igraph, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-htmlwidgets, r-igraph, r-magrittr
Description:
Creates 'D3' 'JavaScript' network, tree, dendrogram, and Sankey graphs from 'R'.

r-nleqslv

Homepage:
Spack package:
Versions:
3.3.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
nleqslv: Solve Systems of Nonlinear Equations

r-nlme

Homepage:
Spack package:
Versions:
3.1-131, 3.1-130, 3.1-128
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Fit and compare Gaussian linear and nonlinear mixed-effects models.

r-nloptr

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
r, r-testthat, nlopt
Link Dependencies:
r, nlopt
Run Dependencies:
r, r-testthat
Description:
nloptr is an R interface to NLopt. NLopt is a free/open-source library for nonlinear optimization, providing a common interface for a number of different free optimization routines available online as well as original implementations of various other algorithms. See http://ab- initio.mit.edu/wiki/index.php/NLopt _Introduction for more information on the available algorithms. During installation on Unix the NLopt code is downloaded and compiled from the NLopt website.

r-nmf

Homepage:
Spack package:
Versions:
0.20.6
Build Dependencies:
r, r-pkgmaker, r-registry, r-rngtools, r-cluster, r-stringr, r-digest, r-gridbase, r-colorspace, r-rcolorbrewer, r-foreach, r-doparallel, r-ggplot2, r-reshape2
Link Dependencies:
r
Run Dependencies:
r, r-pkgmaker, r-registry, r-rngtools, r-cluster, r-stringr, r-digest, r-gridbase, r-colorspace, r-rcolorbrewer, r-foreach, r-doparallel, r-ggplot2, r-reshape2
Description:
Provides a framework to perform Non-negative Matrix Factorization (NMF). The package implements a set of already published algorithms and seeding methods, and provides a framework to test, develop and plug new/custom algorithms. Most of the built-in algorithms have been optimized in C++, and the main interface function provides an easy way of performing parallel computations on multicore machines..

r-nnet

Homepage:
Spack package:
Versions:
7.3-12
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Software for feed-forward neural networks with a single hidden layer, and for multinomial log-linear models.

r-nnls

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An R interface to the Lawson-Hanson implementation of an algorithm for non-negative least squares (NNLS). Also allows the combination of non- negative and non-positive constraints.

r-nor1mix

Homepage:
Spack package:
Versions:
1.2-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Onedimensional Normal Mixture Models Classes, for, e.g., density estimation or clustering algorithms research and teaching; providing the widely used Marron-Wand densities. Efficient random number generation and graphics; now fitting to data by ML (Maximum Likelihood) or EM estimation.

r-nortest

Homepage:
Spack package:
Versions:
1.0-4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
nortest: Tests for Normality Five omnibus tests for testing the composite hypothesis of normality.

r-np

Homepage:
Spack package:
Versions:
0.60-2
Build Dependencies:
r, r-boot, r-cubature
Link Dependencies:
r
Run Dependencies:
r, r-boot, r-cubature
Description:
This package provides a variety of nonparametric (and semiparametric) kernel methods that seamlessly handle a mix of continuous, unordered, and ordered factor data types. We would like to gratefully acknowledge support from the Natural Sciences and Engineering Research Council of Canada (NSERC:www.nserc.ca), the Social Sciences and Humanities Research Council of Canada (SSHRC:www.sshrc.ca), and the Shared Hierarchical Academic Research Computing Network (SHARCNET:www.sharcnet.ca).

r-numderiv

Homepage:
Spack package:
Versions:
2016.8-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Methods for calculating (usually) accurate numerical first and second order derivatives.

r-oligoclasses

Homepage:
Spack package:
Versions:
1.38.0
Build Dependencies:
r, r-biocgenerics, r-biobase, r-iranges, r-genomicranges, r-summarizedexperiment, r-biostrings, r-affyio, r-ff, r-foreach, r-biocinstaller, r-s4vectors, r-rsqlite
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-iranges, r-genomicranges, r-summarizedexperiment, r-biostrings, r-affyio, r-ff, r-foreach, r-biocinstaller, r-s4vectors, r-rsqlite
Description:
This package contains class definitions, validity checks, and initialization methods for classes used by the oligo and crlmm packages.

r-oo

Homepage:
Spack package:
Versions:
1.21.0
Build Dependencies:
r, r-methodss3
Link Dependencies:
r
Run Dependencies:
r, r-methodss3
Description:
Methods and classes for object-oriented programming in R with or without references. Large effort has been made on making definition of methods as simple as possible with a minimum of maintenance for package developers. The package has been developed since 2001 and is now considered very stable. This is a cross-platform package implemented in pure R that defines standard S3 classes without any tricks.

r-openssl

Homepage:
Spack package:
Versions:
0.9.7, 0.9.6, 0.9.4
Build Dependencies:
r, openssl
Link Dependencies:
r, openssl
Run Dependencies:
r
Description:
Bindings to OpenSSL libssl and libcrypto, plus custom SSH pubkey parsers. Supports RSA, DSA and EC curves P-256, P-384 and P-521. Cryptographic signatures can either be created and verified manually or via x509 certificates. AES can be used in cbc, ctr or gcm mode for symmetric encryption; RSA for asymmetric (public key) encryption or EC for Diffie Hellman. High-level envelope functions combine RSA and AES for encrypting arbitrary sized data. Other utilities include key generators, hash functions (md5, sha1, sha256, etc), base64 encoder, a secure random number generator, and 'bignum' math methods for manually performing crypto calculations on large multibyte integers.

r-optparse

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
r, r-getopt
Link Dependencies:
r
Run Dependencies:
r, r-getopt
Description:
A command line parser inspired by Python's 'optparse' library to be used with Rscript to write "#!" shebang scripts that accept short and long flag/options

r-org-hs-eg-db

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
Genome wide annotation for Human, primarily based on mapping using Entrez Gene identifiers.

r-organismdbi

Homepage:
Spack package:
Versions:
1.18.1
Build Dependencies:
r, r-biocgenerics, r-annotationdbi, r-genomicfeatures, r-biobase, r-biocinstaller, r-genomicranges, r-graph, r-iranges, r-rbgl, r-dbi, r-s4vectors
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-annotationdbi, r-genomicfeatures, r-biobase, r-biocinstaller, r-genomicranges, r-graph, r-iranges, r-rbgl, r-dbi, r-s4vectors
Description:
The package enables a simple unified interface to several annotation packages each of which has its own schema by taking advantage of the fact that each of these packages implements a select methods.

r-packrat

Homepage:
Spack package:
Versions:
0.4.8-1, 0.4.7-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Manage the R packages your project depends on in an isolated, portable, and reproducible way.

r-pacman

Homepage:
Spack package:
Versions:
0.4.1
Build Dependencies:
r, r-devtools
Link Dependencies:
r
Run Dependencies:
r, r-devtools
Description:
Tools to more conveniently perform tasks associated with add-on packages. pacman conveniently wraps library and package related functions and names them in an intuitive and consistent fashion. It seeks to combine functionality from lower level functions which can speed up workflow.

r-paleotree

Homepage:
Spack package:
Versions:
3.1.3
Build Dependencies:
r, r-ape, r-phangorn, r-phytools
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-phangorn, r-phytools
Description:
Provides tools for transforming, a posteriori time-scaling, and modifying phylogenies containing extinct (i.e. fossil) lineages

r-pamr

Homepage:
Spack package:
Versions:
1.55
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Some functions for sample classification in microarrays.

r-pan

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Multiple imputation for multivariate panel or clustered data.

r-parallelmap

Homepage:
Spack package:
Versions:
1.3
Build Dependencies:
r, r-bbmisc, r-checkmate
Link Dependencies:
r
Run Dependencies:
r, r-bbmisc, r-checkmate
Description:
Unified parallelization framework for multiple back-end, designed for internal package and interactive usage. The main operation is a parallel "map" over lists. Supports local, multicore, mpi and BatchJobs mode. Allows "tagging" of the parallel operation with a level name that can be later selected by the user to switch on parallel execution for exactly this operation.

r-paramhelpers

Homepage:
Spack package:
Versions:
1.10
Build Dependencies:
r, r-bbmisc, r-checkmate
Link Dependencies:
r
Run Dependencies:
r, r-bbmisc, r-checkmate
Description:
Functions for parameter descriptions and operations in black-box optimization, tuning and machine learning. Parameters can be described (type, constraints, defaults, etc.), combined to parameter sets and can in general be programmed on. A useful OptPath object (archive) to log function evaluations is also provided.

r-party

Homepage:
Spack package:
Versions:
1.1-2
Build Dependencies:
r, r-mvtnorm, r-modeltools, r-strucchange, r-survival, r-coin, r-zoo, r-sandwich
Link Dependencies:
r
Run Dependencies:
r, r-mvtnorm, r-modeltools, r-strucchange, r-survival, r-coin, r-zoo, r-sandwich
Description:
A computational toolbox for recursive partitioning.

r-partykit

Homepage:
Spack package:
Versions:
1.1-1
Build Dependencies:
r, r-survival, r-formula
Link Dependencies:
r
Run Dependencies:
r, r-survival, r-formula
Description:
A toolkit with infrastructure for representing, summarizing, and visualizing tree-structured regression and classification models. This unified infrastructure can be used for reading/coercing tree models from different sources ('rpart', 'RWeka', 'PMML') yielding objects that share functionality for print()/plot()/predict() methods. Furthermore, new and improved reimplementations of conditional inference trees (ctree()) and model-based recursive partitioning (mob()) from the 'party' package are provided based on the new infrastructure.

r-pathview

Homepage:
Spack package:
Versions:
1.16.7
Build Dependencies:
r, r-keggrest, r-png, r-annotationdbi, r-graph, r-rgraphviz, r-xml, r-kegggraph, r-org-hs-eg-db
Link Dependencies:
r
Run Dependencies:
r, r-keggrest, r-png, r-annotationdbi, r-graph, r-rgraphviz, r-xml, r-kegggraph, r-org-hs-eg-db
Description:
Pathview is a tool set for pathway based data integration and visualization. It maps and renders a wide variety of biological data on relevant pathway graphs. All users need is to supply their data and specify the target pathway. Pathview automatically downloads the pathway graph data, parses the data file, maps user data to the pathway, and render pathway graph with the mapped data. In addition, Pathview also seamlessly integrates with pathway and gene set (enrichment) analysis tools for large-scale and fully automated analysis.

r-pbapply

Homepage:
Spack package:
Versions:
1.3-3, 1.3-2, 1.3-1, 1.3-0, 1.2-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A lightweight package that adds progress bar to vectorized R apply functions.

r-pbdzmq

Homepage:
Spack package:
Versions:
0.2-4
Build Dependencies:
r, r-r6, zeromq
Link Dependencies:
r, zeromq
Run Dependencies:
r, r-r6
Description:
'ZeroMQ' is a well-known library for high-performance asynchronous messaging in scalable, distributed applications. This package provides high level R wrapper functions to easily utilize 'ZeroMQ'. We mainly focus on interactive client/server programming frameworks. For convenience, a minimal 'ZeroMQ' library (4.1.0 rc1) is shipped with 'pbdZMQ', which can be used if no system installation of 'ZeroMQ' is available. A few wrapper functions compatible with 'rzmq' are also provided.

r-pbkrtest

Homepage:
Spack package:
Versions:
0.4-6, 0.4-4
Build Dependencies:
r, r-lme4, r-matrix, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-lme4, r-matrix, r-mass
Description:
Test in mixed effects models. Attention is on mixed effects models as implemented in the 'lme4' package. This package implements a parametric bootstrap test and a Kenward Roger modification of F-tests for linear mixed effects models and a parametric bootstrap test for generalized linear mixed models.

r-pcamethods

Homepage:
Spack package:
Versions:
1.68.0
Build Dependencies:
r, r-biobase, r-biocgenerics, r-rcpp, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biocgenerics, r-rcpp, r-mass
Description:
Provides Bayesian PCA, Probabilistic PCA, Nipals PCA, Inverse Non-Linear PCA and the conventional SVD PCA. A cluster based method for missing value estimation is included for comparison. BPCA, PPCA and NipalsPCA may be used to perform PCA on incomplete data as well as for accurate missing value estimation. A set of methods for printing and plotting the results is also provided. All PCA methods make use of the same data structure (pcaRes) to provide a common interface to the PCA results. Initiated at the Max-Planck Institute for Molecular Plant Physiology, Golm, Germany.

r-pcapp

Homepage:
Spack package:
Versions:
1.9-72, 1.9-70, 1.9-61, 1.9-60, 1.9-50
Build Dependencies:
r, r-mvtnorm
Link Dependencies:
r
Run Dependencies:
r, r-mvtnorm
Description:
Provides functions for robust PCA by projection pursuit.

r-permute

Homepage:
Spack package:
Versions:
0.9-4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A set of restricted permutation designs for freely exchangeable, line transects (time series), and spatial grid designs plus permutation of blocks (groups of samples) is provided. 'permute' also allows split-plot designs, in which the whole-plots or split-plots or both can be freely- exchangeable or one of the restricted designs. The 'permute' package is modelled after the permutation schemes of 'Canoco 3.1' (and later) by Cajo ter Braak.

r-pfam-db

Homepage:
Spack package:
Versions:
3.4.1
Build Dependencies:
r, r-annotationdbi
Link Dependencies:
r
Run Dependencies:
r, r-annotationdbi
Description:
A set of protein ID mappings for PFAM assembled using data from public repositories.

r-phangorn

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
r, r-ape, r-quadprog, r-igraph, r-matrix, r-fastmatch, r-magrittr, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-quadprog, r-igraph, r-matrix, r-fastmatch, r-magrittr, r-rcpp
Description:
Package contains methods for estimation of phylogenetic trees and networks using Maximum Likelihood, Maximum Parsimony, distance methods and Hadamard conjugation. Allows to compare trees, models selection and offers visualizations for trees and split networks.

r-phantompeakqualtools

Homepage:
Spack package:
Versions:
1.14
Build Dependencies:
r, boost, r-catools, r-snow, r-snowfall, r-bitops, r-rsamtools
Link Dependencies:
r, boost
Run Dependencies:
r, r-catools, r-snow, r-snowfall, r-bitops, r-rsamtools
Description:
Computes informative enrichment and quality measures for ChIP-seq/DNase- seq/FAIRE-seq/MNase-seq data. This is a modified version of r-spp to be used in conjunction with the phantompeakqualtools package.

r-phyloseq

Homepage:
Spack package:
Versions:
1.20.0
Build Dependencies:
r, r-biocgenerics, r-ade4, r-ape, r-biomformat, r-biostrings, r-cluster, r-data-table, r-foreach, r-ggplot2, r-igraph, r-multtest, r-plyr, r-reshape2, r-scales, r-vegan, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-ade4, r-ape, r-biomformat, r-biostrings, r-cluster, r-data-table, r-foreach, r-ggplot2, r-igraph, r-multtest, r-plyr, r-reshape2, r-scales, r-vegan, r-biobase
Description:
phyloseq provides a set of classes and tools to facilitate the import, storage, analysis, and graphical display of microbiome census data.

r-phylostratr

Homepage:
Spack package:
Versions:
20190323
Build Dependencies:
r, r-ape, r-biostrings, r-curl, r-dplyr, r-ggplot2, r-scales, r-glue, r-gridextra, r-magrittr, r-purrr, r-readr, r-reshape2, r-rhmmer, r-rlang, r-tibble, r-taxizedb, r-tidyr
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-biostrings, r-curl, r-dplyr, r-ggplot2, r-scales, r-glue, r-gridextra, r-magrittr, r-purrr, r-readr, r-reshape2, r-rhmmer, r-rlang, r-tibble, r-taxizedb, r-tidyr
Description:
Predict and explore the age of genes using phylostratigraphic methods

r-phytools

Homepage:
Spack package:
Versions:
0.6-60
Build Dependencies:
r, r-animation, r-ape, r-clustergeneration, r-coda, r-combinat, r-expm, r-mass, r-maps, r-mnormt, r-nlme, r-numderiv, r-phangorn, r-plotrix, r-scatterplot3d
Link Dependencies:
r
Run Dependencies:
r, r-animation, r-ape, r-clustergeneration, r-coda, r-combinat, r-expm, r-mass, r-maps, r-mnormt, r-nlme, r-numderiv, r-phangorn, r-plotrix, r-scatterplot3d
Description:
Phylogenetic Tools for Comparative Biology (and Other Things)

r-picante

Homepage:
Spack package:
Versions:
1.6-2, 1.6-1
Build Dependencies:
r, r-ape, r-nlme, r-vegan
Link Dependencies:
r
Run Dependencies:
r, r-ape, r-nlme, r-vegan
Description:
R tools for integrating phylogenies and ecology

r-pillar

Homepage:
Spack package:
Versions:
1.3.1, 1.3.0, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.0, 1.0.1, 1.0.0
Build Dependencies:
r, r-cli, r-crayon, r-fansi, r-rlang, r-utf8
Link Dependencies:
r
Run Dependencies:
r, r-cli, r-crayon, r-fansi, r-rlang, r-utf8
Description:
Provides a 'pillar' generic designed for formatting columns of data using the full range of colours provided by modern terminals.

r-pkgbuild

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
r, r-callr, r-cli, r-crayon, r-desc, r-prettyunits, r-r6, r-rprojroot, r-withr
Link Dependencies:
r
Run Dependencies:
r, r-callr, r-cli, r-crayon, r-desc, r-prettyunits, r-r6, r-rprojroot, r-withr
Description:
pkgbuild: Find Tools Needed to Build R Packages

r-pkgconfig

Homepage:
Spack package:
Versions:
2.0.2, 2.0.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Set configuration options on a per-package basis. Options set by a given package only apply to that package, other packages are unaffected.

r-pkgload

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
r, r-desc, r-pkgbuild, r-rlang, r-rprojroot, r-rstudioapi, r-withr
Link Dependencies:
r
Run Dependencies:
r, r-desc, r-pkgbuild, r-rlang, r-rprojroot, r-rstudioapi, r-withr
Description:
pkgload: Simulate Package Installation and Attach

r-pkgmaker

Homepage:
Spack package:
Versions:
0.27, 0.22
Build Dependencies:
r, r-registry, r-codetools, r-digest, r-stringi, r-magrittr, r-stringr, r-xtable, r-withr, r-bibtex, r-devtools, r-roxygen2, r-runit, r-testthat, r-knitr, r-rmarkdown, r-yaml, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-registry, r-codetools, r-digest, r-stringi, r-magrittr, r-stringr, r-xtable, r-withr, r-bibtex, r-devtools, r-roxygen2, r-runit, r-testthat, r-knitr, r-rmarkdown, r-yaml, r-biobase
Description:
This package provides some low-level utilities to use for package development. It currently provides managers for multiple package specific options and registries, vignette, unit test and bibtex related utilities. It serves as a base package for packages like NMF, RcppOctave, doRNG, and as an incubator package for other general purposes utilities, that will eventually be packaged separately. It is still under heavy development and changes in the interface(s) are more than likely to happen.

r-plogr

Homepage:
Spack package:
Versions:
0.2.0, 0.1-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A simple header-only logging library for C++. Add 'LinkingTo: plogr' to 'DESCRIPTION', and '#include <plogr.h>' in your C++ modules to use it.

r-plot3d

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
r, r-misc3d
Link Dependencies:
r
Run Dependencies:
r, r-misc3d
Description:
Functions for viewing 2-D and 3-D data, including perspective plots, slice plots, surface plots, scatter plots, etc. Includes data sets from oceanography.

r-plotly

Homepage:
Spack package:
Versions:
4.7.1, 4.7.0, 4.6.0, 4.5.6, 4.5.2
Build Dependencies:
r, r-ggplot2, r-httr, r-base64enc, r-htmltools, r-tidyr, r-dplyr, r-htmlwidgets, r-data-table, r-hexbin, r-purrr, r-crosstalk
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-httr, r-base64enc, r-htmltools, r-tidyr, r-dplyr, r-htmlwidgets, r-data-table, r-hexbin, r-purrr, r-crosstalk
Description:
Easily translate 'ggplot2' graphs to an interactive web-based version and/or create custom web-based visualizations directly from R.

r-plotrix

Homepage:
Spack package:
Versions:
3.6-4, 3.6-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Lots of plots, various labeling, axis and color scaling functions.

r-pls

Homepage:
Spack package:
Versions:
2.6-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Multivariate regression methods Partial Least Squares Regression (PLSR), Principal Component Regression (PCR) and Canonical Powered Partial Least Squares (CPPLS).

r-plyr

Homepage:
Spack package:
Versions:
1.8.4
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
A set of tools that solves a common set of problems: you need to break a big problem down into manageable pieces, operate on each piece and then put all the pieces back together. For example, you might want to fit a model to each spatial location or time point in your study, summarise data by panels or collapse high-dimensional arrays to simpler summary statistics. The development of 'plyr' has been generously supported by 'Becton Dickinson'.

r-pmcmr

Homepage:
Spack package:
Versions:
4.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The Kruskal and Wallis one-way analysis of variance by ranks or van der Waerden's normal score test can be employed, if the data do not meet the assumptions for one-way ANOVA. Provided that significant differences were detected by the omnibus test, one may be interested in applying post-hoc tests for pairwise multiple comparisons (such as Nemenyi's test, Dunn's test, Conover's test, van der Waerden's test). Similarly, one-way ANOVA with repeated measures that is also referred to as ANOVA with unreplicated block design can also be conducted via the Friedman- Test or the Quade-test. The consequent post-hoc pairwise multiple comparison tests according to Nemenyi, Conover and Quade are also provided in this package. Finally Durbin's test for a two-way balanced incomplete block design (BIBD) is also given in this package.

r-png

Homepage:
Spack package:
Versions:
0.1-7
Build Dependencies:
r, libpng
Link Dependencies:
r, libpng
Run Dependencies:
r
Description:
This package provides an easy and simple way to read, write and display bitmap images stored in the PNG format. It can read and write both files and in-memory raw vectors.

r-popgenome

Homepage:
Spack package:
Versions:
2.6.1
Build Dependencies:
r, r-ff
Link Dependencies:
r
Run Dependencies:
r, r-ff
Description:
PopGenome is an efficient Swiss army knife for population genetics data analysis, able to process individual loci, large sets of loci, or whole genomes.

r-popvar

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
r, r-bglr, r-qtl, r-rrblup
Link Dependencies:
r
Run Dependencies:
r, r-bglr, r-qtl, r-rrblup
Description:
PopVar: Genomic Breeding Tools: Genetic Variance Prediction andCross- Validation

r-powerlaw

Homepage:
Spack package:
Versions:
0.70.1
Build Dependencies:
r, r-vgam
Link Dependencies:
r
Run Dependencies:
r, r-vgam
Description:
An implementation of maximum likelihood estimators for a variety of heavy tailed distributions, including both the discrete and continuous power law distributions. Additionally, a goodness-of-fit based approach is used to estimate the lower cut-off for the scaling region.

r-prabclus

Homepage:
Spack package:
Versions:
2.2-6
Build Dependencies:
r, r-mclust
Link Dependencies:
r
Run Dependencies:
r, r-mclust
Description:
prabclus: Functions for Clustering of Presence-Absence, Abundance and Multilocus Genetic Data

r-praise

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Build friendly R packages that praise their users if they have done something good, or they just need it to feel better.

r-preprocesscore

Homepage:
Spack package:
Versions:
1.44.0, 1.38.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A library of core preprocessing routines

r-prettyunits

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
r, r-magrittr, r-assertthat
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-assertthat
Description:
Pretty, human readable formatting of quantities. Time intervals: 1337000 -> 15d 11h 23m 20s. Vague time intervals: 2674000 -> about a month ago. Bytes: 1337 -> 1.34 kB.

r-processx

Homepage:
Spack package:
Versions:
3.2.0, 3.1.0, 3.0.3, 2.0.0.1, 2.0.0
Build Dependencies:
r, r-assertthat, r-crayon, r-ps, r-r6, r-utils
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-crayon, r-ps, r-r6, r-utils
Description:
Tools to run system processes in the background

r-prodlim

Homepage:
Spack package:
Versions:
1.5.9
Build Dependencies:
r, r-rcpp, r-survival, r-kernsmooth, r-lava
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-survival, r-kernsmooth, r-lava
Description:
Product-Limit Estimation for Censored Event History Analysis. Fast and user friendly implementation of nonparametric estimators for censored event history (survival) analysis. Kaplan-Meier and Aalen-Johansen method.

r-progress

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
r, r-r6, r-prettyunits
Link Dependencies:
r
Run Dependencies:
r, r-r6, r-prettyunits
Description:
Configurable Progress bars, they may include percentage, elapsed time, and/or the estimated completion time. They work in terminals, in 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'. The package also provides a 'C++' 'API', that works with or without 'Rcpp'.

r-protgenerics

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
S4 generic functions needed by Bioconductor proteomics packages.

r-proto

Homepage:
Spack package:
Versions:
1.0.0, 0.3-10
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An object oriented system using object-based, also called prototype- based, rather than class-based object oriented ideas.

r-proxy

Homepage:
Spack package:
Versions:
0.4-19
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides an extensible framework for the efficient calculation of auto- and cross-proximities, along with implementations of the most popular ones.

r-pryr

Homepage:
Spack package:
Versions:
0.1.2
Build Dependencies:
r, r-stringr, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-stringr, r-rcpp
Description:
Useful tools to pry back the covers of R and understand the language at a deeper level.

r-ps

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Manipulate processes on Windows, Linux and MacOS

r-psych

Homepage:
Spack package:
Versions:
1.7.8
Build Dependencies:
r, r-mnormt, r-foreign, r-lattice, r-nlme
Link Dependencies:
r
Run Dependencies:
r, r-mnormt, r-foreign, r-lattice, r-nlme
Description:
A general purpose toolbox for personality, psychometric theory and experimental psychology. Functions are primarily for multivariate analysis and scale construction using factor analysis, principal component analysis, cluster analysis and reliability analysis, although others provide basic descriptive statistics. Item Response Theory is done using factor analysis of tetrachoric and polychoric correlations. Functions for analyzing data at multiple levels include within and between group statistics, including correlations and factor analysis. Functions for simulating and testing particular item and test structures are included. Several functions serve as a useful front end for structural equation modeling. Graphical displays of path diagrams, factor analysis and structural equation models are created using basic graphics. Some of the functions are written to support a book on psychometric theory as well as publications in personality research. For more information, see the <http://personality-project.org/r> web page.

r-ptw

Homepage:
Spack package:
Versions:
1.9-12
Build Dependencies:
r, r-nloptr
Link Dependencies:
r
Run Dependencies:
r, r-nloptr
Description:
Parametric Time Warping aligns patterns, i.e. it aims to put corresponding features at the same locations. The algorithm searches for an optimal polynomial describing the warping. It is possible to align one sample to a reference, several samples to the same reference, or several samples to several references. One can choose between calculating individual warpings, or one global warping for a set of samples and one reference. Two optimization criteria are implemented: RMS (Root Mean Square error) and WCC (Weighted Cross Correlation). Both warping of peak profiles and of peak lists are supported.

r-purrr

Homepage:
Spack package:
Versions:
0.2.4
Build Dependencies:
r, r-magrittr, r-rlang, r-tibble
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-rlang, r-tibble
Description:
A complete and consistent functional programming toolkit for R.

r-qtl

Homepage:
Spack package:
Versions:
1.44-9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
qtl: Tools for Analyzing QTL Experiments

r-quadprog

Homepage:
Spack package:
Versions:
1.5-5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package contains routines and documentation for solving quadratic programming problems.

r-quantmod

Homepage:
Spack package:
Versions:
0.4-10, 0.4-5
Build Dependencies:
r, r-xts, r-zoo, r-ttr, r-curl
Link Dependencies:
r
Run Dependencies:
r, r-xts, r-zoo, r-ttr, r-curl
Description:
Specify, build, trade, and analyse quantitative financial trading strategies.

r-quantreg

Homepage:
Spack package:
Versions:
5.29, 5.26
Build Dependencies:
r, r-sparsem, r-matrix, r-matrixmodels
Link Dependencies:
r
Run Dependencies:
r, r-sparsem, r-matrix, r-matrixmodels
Description:
Estimation and inference methods for models of conditional quantiles: Linear and nonlinear parametric and non-parametric (total variation penalized) models for conditional quantiles of a univariate response and several methods for handling censored survival data. Portfolio selection methods based on expected shortfall risk are also included.

r-quantro

Homepage:
Spack package:
Versions:
1.10.0
Build Dependencies:
r, r-biobase, r-minfi, r-doparallel, r-foreach, r-iterators, r-ggplot2, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-minfi, r-doparallel, r-foreach, r-iterators, r-ggplot2, r-rcolorbrewer
Description:
A data-driven test for the assumptions of quantile normalization using raw data such as objects that inherit eSets (e.g. ExpressionSet, MethylSet). Group level information about each sample (such as Tumor / Normal status) must also be provided because the test assesses if there are global differences in the distributions between the user-defined groups.

r-qvalue

Homepage:
Spack package:
Versions:
2.12.0, 2.8.0
Build Dependencies:
r, r-ggplot2, r-reshape2
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-reshape2
Description:
This package takes a list of p-values resulting from the simultaneous testing of many hypotheses and estimates their q-values and local FDR values. The q-value of a test measures the proportion of false positives incurred (called the false discovery rate) when that particular test is called significant. The local FDR measures the posterior probability the null hypothesis is true given the test's p-value. Various plots are automatically generated, allowing one to make sensible significance cut- offs. Several mathematical results have recently been shown on the conservative accuracy of the estimated q-values from this software. The software can be applied to problems in genomics, brain imaging, astrophysics, and data mining.

r-r6

Homepage:
Spack package:
Versions:
2.2.2, 2.2.0, 2.1.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The R6 package allows the creation of classes with reference semantics, similar to R's built-in reference classes. Compared to reference classes, R6 classes are simpler and lighter-weight, and they are not built on S4 classes so they do not require the methods package. These classes allow public and private members, and they support inheritance, even when the classes are defined in different packages.

r-randomfields

Homepage:
Spack package:
Versions:
3.1.50
Build Dependencies:
r, r-sp, r-randomfieldsutils
Link Dependencies:
r
Run Dependencies:
r, r-sp, r-randomfieldsutils
Description:
Methods for the inference on and the simulation of Gaussian fields are provided, as well as methods for the simulation of extreme value random fields.

r-randomfieldsutils

Homepage:
Spack package:
Versions:
0.3.25
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Various utilities are provided that might be used in spatial statistics and elsewhere. It delivers a method for solving linear equations that checks the sparsity of the matrix before any algorithm is used. Furthermore, it includes the Struve functions.

r-randomforest

Homepage:
Spack package:
Versions:
4.6-12
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Classification and regression based on a forest of trees using random inputs.

r-ranger

Homepage:
Spack package:
Versions:
0.8.0, 0.7.0, 0.6.0, 0.5.0, 0.4.0
Build Dependencies:
r, r-matrix, r-rcpp, r-rcppeigen
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-rcpp, r-rcppeigen
Description:
A fast implementation of Random Forests, particularly suited for high dimensional data.

r-rappdirs

Homepage:
Spack package:
Versions:
0.3.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
An easy way to determine which directories on the users computer you should use to save data, caches and logs. A port of Python's 'Appdirs' to R.

r-raster

Homepage:
Spack package:
Versions:
2.5-8
Build Dependencies:
r, r-sp, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-sp, r-rcpp
Description:
Reading, writing, manipulating, analyzing and modeling of gridded spatial data. The package implements basic and high-level functions. Processing of very large files is supported.

r-rbgl

Homepage:
Spack package:
Versions:
1.52.0
Build Dependencies:
r, r-graph
Link Dependencies:
r
Run Dependencies:
r, r-graph
Description:
A fairly extensive and comprehensive interface to the graph algorithms contained in the BOOST library.

r-rbokeh

Homepage:
Spack package:
Versions:
0.5.0
Build Dependencies:
r, r-htmlwidgets, r-maps, r-jsonlite, r-digest, r-hexbin, r-lazyeval, r-pryr, r-magrittr, r-ggplot2, r-scales, r-gistr
Link Dependencies:
r
Run Dependencies:
r, r-htmlwidgets, r-maps, r-jsonlite, r-digest, r-hexbin, r-lazyeval, r-pryr, r-magrittr, r-ggplot2, r-scales, r-gistr
Description:
R interface for creating plots in Bokeh. Bokeh by Continuum Analytics.

r-rcolorbrewer

Homepage:
Spack package:
Versions:
1.1-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides color schemes for maps (and other graphics) designed by Cynthia Brewer as described at http://colorbrewer2.org

r-rcpp

Homepage:
Spack package:
Versions:
1.0.0, 0.12.19, 0.12.18, 0.12.17, 0.12.16, 0.12.15, 0.12.14, 0.12.13, 0.12.12, 0.12.11, 0.12.9, 0.12.6, 0.12.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The 'Rcpp' package provides R functions as well as C++ classes which offer a seamless integration of R and C++. Many R data types and objects can be mapped back and forth to C++ equivalents which facilitates both writing of new code as well as easier integration of third-party libraries. Documentation about 'Rcpp' is provided by several vignettes included in this package, via the 'Rcpp Gallery' site at <http://gallery.rcpp.org>, the paper by Eddelbuettel and Francois (2011, JSS), and the book by Eddelbuettel (2013, Springer); see 'citation("Rcpp")' for details on these last two.

r-rcpparmadillo

Homepage:
Spack package:
Versions:
0.8.100.1.0
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
'Rcpp' Integration for the 'Armadillo' Templated Linear Algebra Library.

r-rcppblaze

Homepage:
Spack package:
Versions:
0.2.2
Build Dependencies:
r, r-rcpp, r-matrix, r-bh
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-matrix, r-bh
Description:
'Blaze' is an open-source, high-performance C++ math library for dense and sparse arithmetic. With its state-of-the-art Smart Expression Template implementation 'Blaze' combines the elegance and ease of use of a domain-specific language with 'HPC'-grade performance, making it one of the most intuitive and fastest C++ math libraries available. The 'Blaze' library offers: - high performance through the integration of 'BLAS' libraries and manually tuned 'HPC' math kernels - vectorization by 'SSE', 'SSE2', 'SSE3', 'SSSE3', 'SSE4', 'AVX', 'AVX2', 'AVX-512', 'FMA', and 'SVML' - parallel execution by 'OpenMP', C++11 threads and 'Boost' threads ('Boost' threads are disabled in 'RcppBlaze') - the intuitive and easy to use API of a domain specific language - unified arithmetic with dense and sparse vectors and matrices - thoroughly tested matrix and vector arithmetic - completely portable, high quality C++ source code. The 'RcppBlaze' package includes the header files from the 'Blaze' library with disabling some functionalities related to link to the thread and system libraries which make 'RcppBlaze' be a header- only library. Therefore, users do not need to install 'Blaze' and the dependency 'Boost'. 'Blaze' is licensed under the New (Revised) BSD license, while 'RcppBlaze' (the 'Rcpp' bindings/bridge to 'Blaze') is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'. Note that since 'Blaze' has committed to 'C++14' commit to 'C++14' which does not used by most R users from version 3.0, we will use the version 2.6 of 'Blaze' which is 'C++98' compatible to support the most compilers and system.

r-rcppcctz

Homepage:
Spack package:
Versions:
0.2.3
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
'Rcpp' Access to the 'CCTZ' timezone library is provided. 'CCTZ' is a C++ library for translating between absolute and civil times using the rules of a time zone. The 'CCTZ' source code, released under the Apache 2.0 License, is included in this package. See <https://github.com/google/cctz> for more details.

r-rcppcnpy

Homepage:
Spack package:
Versions:
0.2.9
Build Dependencies:
r, cnpy, r-rcpp
Link Dependencies:
r, cnpy
Run Dependencies:
r, r-rcpp
Description:
Rcpp bindings for NumPy files.

r-rcppeigen

Homepage:
Spack package:
Versions:
0.3.3.3.1, 0.3.2.9.0, 0.3.2.8.1
Build Dependencies:
r, r-matrix, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-rcpp
Description:
R and 'Eigen' integration using 'Rcpp'. 'Eigen' is a C++ template library for linear algebra: matrices, vectors, numerical solvers and related algorithms. It supports dense and sparse matrices on integer, floating point and complex numbers, decompositions of such matrices, and solutions of linear systems. Its performance on many algorithms is comparable with some of the best implementations based on 'Lapack' and level-3 'BLAS'. The 'RcppEigen' package includes the header files from the 'Eigen' C++ template library (currently version 3.2.8). Thus users do not need to install 'Eigen' itself in order to use 'RcppEigen'. Since version 3.1.1, 'Eigen' is licensed under the Mozilla Public License (version 2); earlier version were licensed under the GNU LGPL version 3 or later. 'RcppEigen' (the 'Rcpp' bindings/bridge to 'Eigen') is licensed under the GNU GPL version 2 or later, as is the rest of 'Rcpp'.

r-rcppprogress

Homepage:
Spack package:
Versions:
0.3, 0.2.1, 0.2, 0.1
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
Allows to display a progress bar in the R console for long running computations taking place in c++ code, and support for interrupting those computations even in multithreaded code, typically using OpenMP.

r-rcurl

Homepage:
Spack package:
Versions:
1.95-4.8
Build Dependencies:
r, r-bitops, curl
Link Dependencies:
r, curl
Run Dependencies:
r, r-bitops
Description:
A wrapper for 'libcurl' <http://curl.haxx.se/libcurl/> Provides functions to allow one to compose general HTTP requests and provides convenient functions to fetch URIs, get & post forms, etc. and process the results returned by the Web server. This provides a great deal of control over the HTTP/FTP/... connection and the form of the request while providing a higher-level interface than is available just using R socket connections. Additionally, the underlying implementation is robust and extensive, supporting FTP/FTPS/TFTP (uploads and downloads), SSL/HTTPS, telnet, dict, ldap, and also supports cookies, redirects, authentication, etc.

r-rda

Homepage:
Spack package:
Versions:
1.0.2-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Shrunken Centroids Regularized Discriminant Analysis for the classification purpose in high dimensional data.

r-readr

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
r, r-rcpp, r-tibble, r-hms, r-r6, r-bh
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-tibble, r-hms, r-r6, r-bh
Description:
The goal of 'readr' is to provide a fast and friendly way to read rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed to flexibly parse many types of data found in the wild, while still cleanly failing when data unexpectedly changes.

r-readxl

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0
Build Dependencies:
r, r-tibble, r-rcpp, r-cellranger
Link Dependencies:
r
Run Dependencies:
r, r-tibble, r-rcpp, r-cellranger
Description:
Import excel files into R. Supports '.xls' via the embedded 'libxls' C library <https://sourceforge.net/projects/libxls/> and '.xlsx' via the embedded 'RapidXML' C++ library <https://rapidxml.sourceforge.net>. Works on Windows, Mac and Linux without external dependencies.

r-registry

Homepage:
Spack package:
Versions:
0.3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides a generic infrastructure for creating and using registries.

r-rematch

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
r, r-covr, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-covr, r-testthat
Description:
A small wrapper on 'regexpr' to extract the matches and captured groups from the match of a regular expression to a character vector.

r-reordercluster

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
r, r-gplots, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-gplots, r-rcpp
Description:
Tools for performing the leaf reordering for the dendrogram that preserves the hierarchical clustering result and at the same time tries to group instances from the same class together.

r-reportingtools

Homepage:
Spack package:
Versions:
2.16.0
Build Dependencies:
r, r-knitr, r-biobase, r-hwriter, r-category, r-gostats, r-limma, r-lattice, r-annotationdbi, r-edger, r-annotate, r-pfam-db, r-gseabase, r-biocgenerics, r-xml, r-utils, r-deseq2, r-ggplot2, r-ggbio, r-iranges
Link Dependencies:
r
Run Dependencies:
r, r-knitr, r-biobase, r-hwriter, r-category, r-gostats, r-limma, r-lattice, r-annotationdbi, r-edger, r-annotate, r-pfam-db, r-gseabase, r-biocgenerics, r-xml, r-utils, r-deseq2, r-ggplot2, r-ggbio, r-iranges
Description:
The ReportingTools software package enables users to easily display reports of analysis results generated from sources such as microarray and sequencing data. The package allows users to create HTML pages that may be viewed on a web browser such as Safari, or in other formats readable by programs such as Excel. Users can generate tables with sortable and filterable columns, make and display plots, and link table entries to other data sources such as NCBI or larger plots within the HTML page. Using the package, users can also produce a table of contents page to link various reports together for a particular project that can be viewed in a web browser. For more examples, please visit our site: http:// research-pub.gene.com/ReportingTools.

r-repr

Homepage:
Spack package:
Versions:
0.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
String and binary representations of objects for several formats and mime types.

r-reprex

Homepage:
Spack package:
Versions:
0.1.1
Build Dependencies:
r, r-callr, r-clipr, r-knitr, r-rmarkdown, r-whisker
Link Dependencies:
r
Run Dependencies:
r, r-callr, r-clipr, r-knitr, r-rmarkdown, r-whisker
Description:
Convenience wrapper that uses the 'rmarkdown' package to render small snippets of code to target formats that include both code and output. The goal is to encourage the sharing of small, reproducible, and runnable examples on code-oriented websites, such as <http://stackoverflow.com> and <https://github.com>, or in email. 'reprex' also extracts clean, runnable R code from various common formats, such as copy/paste from an R session.

r-reshape

Homepage:
Spack package:
Versions:
0.8.7
Build Dependencies:
r, r-plyr
Link Dependencies:
r
Run Dependencies:
r, r-plyr
Description:
Flexibly restructure and aggregate data using just two functions: melt and cast.

r-reshape2

Homepage:
Spack package:
Versions:
1.4.2, 1.4.1
Build Dependencies:
r, r-plyr, r-stringr, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-plyr, r-stringr, r-rcpp
Description:
Flexibly restructure and aggregate data using just two functions: melt and dcast (or acast).

r-rex

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
r, r-lazyeval, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-lazyeval, r-magrittr
Description:
A friendly interface for the construction of regular expressions.

r-rgdal

Homepage:
Spack package:
Versions:
1.3-9, 1.2-16
Build Dependencies:
r, r-sp, gdal, proj
Link Dependencies:
r, gdal, proj
Run Dependencies:
r, r-sp
Description:
Provides bindings to the 'Geospatial' Data Abstraction Library ('GDAL') (>= 1.6.3) and access to projection/transformation operations from the 'PROJ.4' library. The 'GDAL' and 'PROJ.4' libraries are external to the package, and, when installing the package from source, must be correctly installed first. Both 'GDAL' raster and 'OGR' vector map data can be imported into R, and 'GDAL' raster data and 'OGR' vector data exported. Use is made of classes defined in the 'sp' package. Windows and Mac Intel OS X binaries (including 'GDAL', 'PROJ.4' and 'Expat') are provided on 'CRAN'.

r-rgenoud

Homepage:
Spack package:
Versions:
5.8-1.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A genetic algorithm plus derivative optimizer.

r-rgeos

Homepage:
Spack package:
Versions:
0.3-26
Build Dependencies:
r, r-sp, geos
Link Dependencies:
r, geos
Run Dependencies:
r, r-sp
Description:
Interface to Geometry Engine - Open Source ('GEOS') using the C 'API' for topology operations on geometries. The 'GEOS' library is external to the package, and, when installing the package from source, must be correctly installed first. Windows and Mac Intel OS X binaries are provided on 'CRAN'.

r-rgl

Homepage:
Spack package:
Versions:
0.99.16, 0.98.1
Build Dependencies:
r, libx11, gl, glu, r-htmlwidgets, r-htmltools, r-knitr, r-jsonlite, r-shiny, r-magrittr, r-crosstalk, r-manipulatewidget
Link Dependencies:
r, zlib, libpng, libx11, freetype, gl, glu
Run Dependencies:
r, r-htmlwidgets, r-htmltools, r-knitr, r-jsonlite, r-shiny, r-magrittr, r-crosstalk, r-manipulatewidget
Description:
Provides medium to high level functions for 3D interactive graphics, including functions modelled on base graphics (plot3d(), etc.) as well as functions for constructing representations of geometric objects (cube3d(), etc.). Output may be on screen using OpenGL, or to various standard 3D file formats including WebGL, PLY, OBJ, STL as well as 2D image formats, including PNG, Postscript, SVG, PGF.

r-rgooglemaps

Homepage:
Spack package:
Versions:
1.2.0.7
Build Dependencies:
r, r-png, r-rjsonio
Link Dependencies:
r
Run Dependencies:
r, r-png, r-rjsonio
Description:
This package serves two purposes: (i) Provide a comfortable R interface to query the Google server for static maps, and (ii) Use the map as a background image to overlay plots within R. This requires proper coordinate scaling.

r-rgraphviz

Homepage:
Spack package:
Versions:
2.20.0
Build Dependencies:
r, r-graph
Link Dependencies:
r
Run Dependencies:
r, r-graph
Description:
Interfaces R with the AT and T graphviz library for plotting R graph objects from the graph package.

r-rhdf5

Homepage:
Spack package:
Versions:
2.20.0
Build Dependencies:
r, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-zlibbioc
Description:
This R/Bioconductor package provides an interface between HDF5 and R. HDF5's main features are the ability to store and access very large and/or complex datasets and a wide variety of metadata on mass storage (disk) through a completely portable file format. The rhdf5 package is thus suited for the exchange of large and/or complex datasets between R and other software package, and for letting R applications work on datasets that are larger than the available RAM.

r-rhmmer

Homepage:
Spack package:
Versions:
0.1.0
Build Dependencies:
r, r-magrittr, r-readr, r-dplyr, r-tidyr, r-rlang, r-testthat, r-covr
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-readr, r-dplyr, r-tidyr, r-rlang, r-testthat, r-covr
Description:
rhmmer: Utilities Parsing 'HMMER' Results

r-rhtslib

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-zlibbioc, autoconf
Link Dependencies:
r
Run Dependencies:
r, r-zlibbioc
Description:
This package provides version 1.1 of the 'HTSlib' C library for high- throughput sequence analysis. The package is primarily useful to developers of other R packages who wish to make use of HTSlib. Motivation and instructions for use of this package are in the vignette, vignette(package="Rhtslib", "Rhtslib").

r-rinside

Homepage:
Spack package:
Versions:
0.2.15, 0.2.14, 0.2.13
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
C++ classes to embed R in C++ applications The 'RInside' packages makes it easier to have "R inside" your C++ application by providing a C++ wrapperclass providing the R interpreter. As R itself is embedded into your application, a shared library build of R is required. This works on Linux, OS X and even on Windows provided you use the same tools used to build R itself. Numerous examples are provided in the eight subdirectories of the examples/ directory of the installed package: standard, mpi (for parallel computing) qt (showing how to embed 'RInside' inside a Qt GUI application), wt (showing how to build a "web- application" using the Wt toolkit), armadillo (for 'RInside' use with 'RcppArmadillo') and eigen (for 'RInside' use with 'RcppEigen'). The example use GNUmakefile(s) with GNU extensions, so a GNU make is required (and will use the GNUmakefile automatically). Doxygen-generated documentation of the C++ classes is available at the 'RInside' website as well.

r-rjags

Homepage:
Spack package:
Versions:
4-8, 4-6
Build Dependencies:
r, r-coda
Link Dependencies:
r, jags
Run Dependencies:
r, r-coda
Description:
Interface to the JAGS MCMC library. Usage: $ spack load r-rjags

r-rjava

Homepage:
Spack package:
Versions:
0.9-11, 0.9-8
Build Dependencies:
r, java
Link Dependencies:
r, java
Run Dependencies:
r
Description:
Low-level interface to Java VM very much like .C/.Call and friends. Allows creation of objects, calling methods and accessing fields.

r-rjson

Homepage:
Spack package:
Versions:
0.2.15
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Converts R object into JSON objects and vice-versa.

r-rjsonio

Homepage:
Spack package:
Versions:
1.3-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This is a package that allows conversion to and from data in Javascript object notation (JSON) format. This allows R objects to be inserted into Javascript/ECMAScript/ActionScript code and allows R programmers to read and convert JSON content to R objects. This is an alternative to rjson package. Originally, that was too slow for converting large R objects to JSON and was not extensible. rjson's performance is now similar to this package, and perhaps slightly faster in some cases. This package uses methods and is readily extensible by defining methods for different classes, vectorized operations, and C code and callbacks to R functions for deserializing JSON objects to R. The two packages intentionally share the same basic interface. This package (RJSONIO) has many additional options to allow customizing the generation and processing of JSON content. This package uses libjson rather than implementing yet another JSON parser. The aim is to support other general projects by building on their work, providing feedback and benefit from their ongoing development.

r-rlang

Homepage:
Spack package:
Versions:
0.3.1, 0.3.0.1, 0.3.0, 0.2.2, 0.1.4, 0.1.2, 0.1.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A toolbox for working with base types, core R features like the condition system, and core 'Tidyverse' features like tidy evaluation.

r-rmarkdown

Homepage:
Spack package:
Versions:
1.7, 1.0
Build Dependencies:
r, r-knitr, r-yaml, r-htmltools, r-evaluate, r-base64enc, r-jsonlite, r-rprojroot, r-mime, r-stringr, r-catools
Link Dependencies:
r
Run Dependencies:
r, r-knitr, r-yaml, r-htmltools, r-evaluate, r-base64enc, r-jsonlite, r-rprojroot, r-mime, r-stringr, r-catools
Description:
Convert R Markdown documents into a variety of formats.

r-rminer

Homepage:
Spack package:
Versions:
1.4.2
Build Dependencies:
r, r-plotrix, r-lattice, r-nnet, r-kknn, r-pls, r-mass, r-mda, r-rpart, r-randomforest, r-adabag, r-party, r-cubist, r-kernlab, r-e1071, r-glmnet, r-xgboost
Link Dependencies:
r
Run Dependencies:
r, r-plotrix, r-lattice, r-nnet, r-kknn, r-pls, r-mass, r-mda, r-rpart, r-randomforest, r-adabag, r-party, r-cubist, r-kernlab, r-e1071, r-glmnet, r-xgboost
Description:
Facilitates the use of data mining algorithms in classification and regression (including time series forecasting) tasks by presenting a short and coherent set of functions.

r-rmpfr

Homepage:
Spack package:
Versions:
0.6-1
Build Dependencies:
r, r-gmp, mpfr
Link Dependencies:
r, mpfr
Run Dependencies:
r, r-gmp
Description:
Arithmetic (via S4 classes and methods) for arbitrary precision floating point numbers, including transcendental ("special") functions. To this end, Rmpfr interfaces to the LGPL'ed MPFR (Multiple Precision Floating- Point Reliable) Library which itself is based on the GMP (GNU Multiple Precision) Library.

r-rmpi

Homepage:
Spack package:
Versions:
0.6-6
Build Dependencies:
r, mpi
Link Dependencies:
r, mpi
Run Dependencies:
r
Description:
An interface (wrapper) to MPI APIs. It also provides interactive R manager and worker environment.

r-rmysql

Homepage:
Spack package:
Versions:
0.10.17, 0.10.9
Build Dependencies:
r, r-dbi, mariadb
Link Dependencies:
r, mariadb
Run Dependencies:
r, r-dbi
Description:
Implements 'DBI' Interface to 'MySQL' and 'MariaDB' Databases.

r-rngtools

Homepage:
Spack package:
Versions:
1.3.1, 1.2.4
Build Dependencies:
r, r-pkgmaker, r-stringr, r-digest
Link Dependencies:
r
Run Dependencies:
r, r-pkgmaker, r-stringr, r-digest
Description:
This package contains a set of functions for working with Random Number Generators (RNGs). In particular, it defines a generic S4 framework for getting/setting the current RNG, or RNG data that are embedded into objects for reproducibility. Notably, convenient default methods greatly facilitate the way current RNG settings can be changed.

r-rnoaa

Homepage:
Spack package:
Versions:
0.8.4
Build Dependencies:
r, r-crul, r-dplyr, r-geonames, r-ggplot2, r-gridextra, r-hoardr, r-isdparser, r-jsonlite, r-lubridate, r-rappdirs, r-scales, r-tibble, r-tidyr, r-xml, r-xml2
Link Dependencies:
r
Run Dependencies:
r, r-crul, r-dplyr, r-geonames, r-ggplot2, r-gridextra, r-hoardr, r-isdparser, r-jsonlite, r-lubridate, r-rappdirs, r-scales, r-tibble, r-tidyr, r-xml, r-xml2
Description:
rnoaa: 'NOAA' Weather Data from R

r-robust

Homepage:
Spack package:
Versions:
0.4-18
Build Dependencies:
r, r-lattice, r-mass, r-robustbase, r-rrcov, r-fit-models
Link Dependencies:
r
Run Dependencies:
r, r-lattice, r-mass, r-robustbase, r-rrcov, r-fit-models
Description:
robust: Port of the S+ Robust Library

r-robustbase

Homepage:
Spack package:
Versions:
0.92-7
Build Dependencies:
r, r-deoptimr
Link Dependencies:
r
Run Dependencies:
r, r-deoptimr
Description:
"Essential" Robust Statistics. Tools allowing to analyze data with robust methods. This includes regression methodology including model selections and multivariate statistics where we strive to cover the book "Robust Statistics, Theory and Methods" by 'Maronna, Martin and Yohai'; Wiley 2006.

r-rocr

Homepage:
Spack package:
Versions:
1.0-7
Build Dependencies:
r, r-gplots
Link Dependencies:
r
Run Dependencies:
r, r-gplots
Description:
ROC graphs, sensitivity/specificity curves, lift charts, and precision/recall plots are popular examples of trade-off visualizations for specific pairs of performance measures. ROCR is a flexible tool for creating cutoff-parameterized 2D performance curves by freely combining two from over 25 performance measures (new performance measures can be added using a standard interface). Curves from different cross- validation or bootstrapping runs can be averaged by different methods, and standard deviations, standard errors or box plots can be used to visualize the variability across the runs. The parameterization can be visualized by printing cutoff values at the corresponding curve positions, or by coloring the curve according to cutoff. All components of a performance plot can be quickly adjusted using a flexible parameter dispatching mechanism. Despite its flexibility, ROCR is easy to use, with only three commands and reasonable default values for all optional parameters.

r-rodbc

Homepage:
Spack package:
Versions:
1.3-13
Build Dependencies:
r, unixodbc
Link Dependencies:
r, unixodbc
Run Dependencies:
r
Description:
An ODBC database interface.

r-rots

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
r, r-rcpp, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-biobase
Description:
Calculates the Reproducibility-Optimized Test Statistic (ROTS) for differential testing in omics data.

r-roxygen2

Homepage:
Spack package:
Versions:
6.1.1, 5.0.1
Build Dependencies:
r, r-brew, r-commonmark, r-desc, r-digest, r-pkgload, r-purrr, r-r6, r-rcpp, r-stringi, r-stringr, r-xml2
Link Dependencies:
r
Run Dependencies:
r, r-brew, r-commonmark, r-desc, r-digest, r-pkgload, r-purrr, r-r6, r-rcpp, r-stringi, r-stringr, r-xml2
Description:
A 'Doxygen'-like in-source documentation system for Rd, collation, and 'NAMESPACE' files.

r-rpart

Homepage:
Spack package:
Versions:
4.1-11, 4.1-10
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Recursive partitioning for classification, regression and survival trees.

r-rpart-plot

Homepage:
Spack package:
Versions:
2.1.0
Build Dependencies:
r, r-rpart
Link Dependencies:
r
Run Dependencies:
r, r-rpart
Description:
Plot 'rpart' models. Extends plot.rpart() and text.rpart() in the 'rpart' package.

r-rpostgresql

Homepage:
Spack package:
Versions:
0.4-1
Build Dependencies:
r, r-dbi, postgresql
Link Dependencies:
r, postgresql
Run Dependencies:
r, r-dbi
Description:
Database interface and PostgreSQL driver for R This package provides a Database Interface (DBI) compliant driver for R to access PostgreSQL database systems. In order to build and install this package from source, PostgreSQL itself must be present your system to provide PostgreSQL functionality via its libraries and header files. These files are provided as postgresql-devel package under some Linux distributions. On Microsoft Windows system the attached libpq library source will be used. A wiki and issue tracking system for the package are available at Google Code at https://code.google.com/p/rpostgresql/.

r-rprojroot

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
r, r-backports
Link Dependencies:
r
Run Dependencies:
r, r-backports
Description:
Robust, reliable and flexible paths to files below a project root. The 'root' of a project is defined as a directory that matches a certain criterion, e.g., it contains a certain regular file.

r-rrblup

Homepage:
Spack package:
Versions:
4.6
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
rrBLUP: Ridge Regression and Other Kernels for Genomic Selection

r-rrcov

Homepage:
Spack package:
Versions:
1.4-7
Build Dependencies:
r, r-robustbase, r-mvtnorm, r-lattice, r-cluster, r-pcapp, r-mass, r-ellipse
Link Dependencies:
r
Run Dependencies:
r, r-robustbase, r-mvtnorm, r-lattice, r-cluster, r-pcapp, r-mass, r-ellipse
Description:
rrcov: Scalable Robust Estimators with High Breakdown Point

r-rrpp

Homepage:
Spack package:
Versions:
0.3.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Linear model calculations are made for many random versions of data. Using residual randomization in a permutation procedure, sums of squares are calculated over many permutations to generate empirical probability distributions for evaluating model effects. This method is described by Collyer, Sekora, & Adams (2015) <doi:10.1038/hdy.2014.75>. Additionally, coefficients, statistics, fitted values, and residuals generated over many permutations can be used for various procedures including pairwise tests, prediction, classification, and model comparison. This package should provide most tools one could need for the analysis of high- dimensional data, especially in ecology and evolutionary biology, but certainly other fields, as well.

r-rsamtools

Homepage:
Spack package:
Versions:
1.32.2, 1.28.0
Build Dependencies:
r, r-genomeinfodb, r-genomicranges, r-biostrings, r-biocgenerics, r-s4vectors, r-iranges, r-xvector, r-zlibbioc, r-bitops, r-biocparallel
Link Dependencies:
r
Run Dependencies:
r, r-genomeinfodb, r-genomicranges, r-biostrings, r-biocgenerics, r-s4vectors, r-iranges, r-xvector, r-zlibbioc, r-bitops, r-biocparallel
Description:
This package provides an interface to the 'samtools', 'bcftools', and 'tabix' utilities (see 'LICENCE') for manipulating SAM (Sequence Alignment / Map), FASTA, binary variant call (BCF) and compressed indexed tab-delimited (tabix) files.

r-rsnns

Homepage:
Spack package:
Versions:
0.4-7
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
The Stuttgart Neural Network Simulator (SNNS) is a library containing many standard implementations of neural networks. This package wraps the SNNS functionality to make it available from within R. Using the RSNNS low-level interface, all of the algorithmic functionality and flexibility of SNNS can be accessed. Furthermore, the package contains a convenient high-level interface, so that the most common neural network topologies and learning algorithms integrate seamlessly into R.

r-rsolnp

Homepage:
Spack package:
Versions:
1.16
Build Dependencies:
r, r-truncnorm
Link Dependencies:
r
Run Dependencies:
r, r-truncnorm
Description:
General Non-linear Optimization Using Augmented Lagrange Multiplier Method.

r-rsqlite

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
r, r-dbi, r-bit64, r-blob, r-memoise, r-pkgconfig, r-rcpp, r-bh, r-plogr
Link Dependencies:
r
Run Dependencies:
r, r-dbi, r-bit64, r-blob, r-memoise, r-pkgconfig, r-rcpp, r-bh, r-plogr
Description:
This package embeds the SQLite database engine in R and provides an interface compliant with the DBI package. The source for the SQLite engine (version 3.8.6) is included.

r-rstan

Homepage:
Spack package:
Versions:
2.18.2, 2.17.2, 2.10.1
Build Dependencies:
r, r-ggplot2, r-stanheaders, r-inline, r-gridextra, r-rcpp, r-rcppeigen, r-bh, r-loo, r-pkgbuild
Link Dependencies:
r
Run Dependencies:
r, r-ggplot2, r-stanheaders, r-inline, r-gridextra, r-rcpp, r-rcppeigen, r-bh, r-loo, r-pkgbuild
Description:
User-facing R functions are provided to parse, compile, test, estimate, and analyze Stan models by accessing the header-only Stan library provided by the 'StanHeaders' package. The Stan project develops a probabilistic programming language that implements full Bayesian statistical inference via Markov Chain Monte Carlo, rough Bayesian inference via variational approximation, and (optionally penalized) maximum likelihood estimation via optimization. In all three cases, automatic differentiation is used to quickly and accurately evaluate gradients without burdening the user with the need to derive the partial derivatives.

r-rstantools

Homepage:
Spack package:
Versions:
1.5.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
rstantools: Tools for Developing R Packages Interfacing with 'Stan'

r-rstudioapi

Homepage:
Spack package:
Versions:
0.7, 0.6, 0.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Access the RStudio API (if available) and provide informative error messages when it's not.

r-rtracklayer

Homepage:
Spack package:
Versions:
1.40.5, 1.36.6
Build Dependencies:
r, r-xml, r-biocgenerics, r-s4vectors, r-iranges, r-xvector, r-genomeinfodb, r-biostrings, r-zlibbioc, r-rcurl, r-rsamtools, r-genomicalignments, r-genomicranges
Link Dependencies:
r
Run Dependencies:
r, r-xml, r-biocgenerics, r-s4vectors, r-iranges, r-xvector, r-genomeinfodb, r-biostrings, r-zlibbioc, r-rcurl, r-rsamtools, r-genomicalignments, r-genomicranges
Description:
Extensible framework for interacting with multiple genome browsers (currently UCSC built-in) and manipulating annotation tracks in various formats (currently GFF, BED, bedGraph, BED15, WIG, BigWig and 2bit built-in). The user may export/import tracks to/from the supported browsers, as well as query and modify the browser state, such as the current viewport.

r-rtsne

Homepage:
Spack package:
Versions:
0.13, 0.11, 0.10
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
An R wrapper around the fast T-distributed Stochastic Neighbor Embedding implementation.

r-runit

Homepage:
Spack package:
Versions:
0.4.32
Build Dependencies:
r, r-xml
Link Dependencies:
r
Run Dependencies:
r, r-xml
Description:
RUnit: R Unit Test Framework

r-rvcheck

Homepage:
Spack package:
Versions:
0.0.9
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Check latest release version of R and R package (both in 'CRAN', 'Bioconductor' or 'Github').

r-rvest

Homepage:
Spack package:
Versions:
0.3.2
Build Dependencies:
r, r-xml2, r-httr, r-selectr, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-xml2, r-httr, r-selectr, r-magrittr
Description:
Wrappers around the 'xml2' and 'httr' packages to make it easy to download, then manipulate, HTML and XML.

r-rzmq

Homepage:
Spack package:
Versions:
0.7.7
Build Dependencies:
r, zeromq
Link Dependencies:
r, zeromq
Run Dependencies:
r
Description:
Interface to the ZeroMQ lightweight messaging kernel.

r-s4vectors

Homepage:
Spack package:
Versions:
0.18.3, 0.16.0, 0.14.7
Build Dependencies:
r, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics
Description:
The S4Vectors package defines the Vector and List virtual classes and a set of generic functions that extend the semantic of ordinary vectors and lists in R. Package developers can easily implement vector-like or list-like objects as concrete subclasses of Vector or List. In addition, a few low-level concrete subclasses of general interest (e.g. DataFrame, Rle, and Hits) are implemented in the S4Vectors package itself (many more are implemented in the IRanges package and in other Bioconductor infrastructure packages).

r-samr

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
r, r-impute, r-matrixstats
Link Dependencies:
r
Run Dependencies:
r, r-impute, r-matrixstats
Description:
Significance Analysis of Microarrays.

r-sandwich

Homepage:
Spack package:
Versions:
2.3-4
Build Dependencies:
r, r-zoo
Link Dependencies:
r
Run Dependencies:
r, r-zoo
Description:
Model-robust standard error estimators for cross-sectional, time series, and longitudinal data.

r-scales

Homepage:
Spack package:
Versions:
0.5.0, 0.4.1, 0.4.0
Build Dependencies:
r, r-rcolorbrewer, r-dichromat, r-plyr, r-munsell, r-labeling, r-rcpp, r-r6, r-viridislite
Link Dependencies:
r
Run Dependencies:
r, r-rcolorbrewer, r-dichromat, r-plyr, r-munsell, r-labeling, r-rcpp, r-r6, r-viridislite
Description:
Graphical scales map data to aesthetics, and provide methods for automatically determining breaks and labels for axes and legends.

r-scatterplot3d

Homepage:
Spack package:
Versions:
0.3-40
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
scatterplot3d: 3D Scatter Plot

r-sdmtools

Homepage:
Spack package:
Versions:
1.1-221, 1.1-20, 1.1-13, 1.1-12, 1.1-11
Build Dependencies:
r, r-utils
Link Dependencies:
r
Run Dependencies:
r, r-utils
Description:
Species Distribution Modelling Tools: Tools for processing data associated with species distribution modelling exercises This packages provides a set of tools for post processing the outcomes of species distribution modeling exercises.

r-segmented

Homepage:
Spack package:
Versions:
0.5-2.2, 0.5-1.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Given a regression model, segmented 'updates' the model by adding one or more segmented (i.e., piecewise-linear) relationships. Several variables with multiple breakpoints are allowed.

r-selectr

Homepage:
Spack package:
Versions:
0.3-1
Build Dependencies:
r, r-testthat, r-stringr, r-xml, r-xml2
Link Dependencies:
r
Run Dependencies:
r, r-testthat, r-stringr, r-xml, r-xml2
Description:
Translates a CSS3 selector into an equivalent XPath expression. This allows us to use CSS selectors when working with the XML package as it can only evaluate XPath expressions. Also provided are convenience functions useful for using CSS selectors on XML nodes. This package is a port of the Python package 'cssselect' (<https://pythonhosted.org/cssselect/>).

r-seqinr

Homepage:
Spack package:
Versions:
3.4-5, 3.3-6
Build Dependencies:
r, r-ade4, r-segmented, zlib
Link Dependencies:
r, zlib
Run Dependencies:
r, r-ade4, r-segmented
Description:
Exploratory data analysis and data visualization for biological sequence (DNA and protein) data. Includes also utilities for sequence data management under the ACNUC system.

r-sf

Homepage:
Spack package:
Versions:
0.5-5
Build Dependencies:
r, r-rcpp, r-dbi, r-units, r-classint, r-magrittr, gdal, geos, proj
Link Dependencies:
r, gdal, geos, proj
Run Dependencies:
r, r-rcpp, r-dbi, r-units, r-classint, r-magrittr
Description:
Support for simple features, a standardized way to encode spatial vector data. Binds to GDAL for reading and writing data, to GEOS for geometrical operations, and to Proj.4 for projection conversions and datum transformations.

r-sfsmisc

Homepage:
Spack package:
Versions:
1.1-0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Useful utilities ['goodies'] from Seminar fuer Statistik ETH Zurich, quite a few related to graphics; some were ported from S-plus.

r-shape

Homepage:
Spack package:
Versions:
1.4.3, 1.4.2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Functions for plotting graphical shapes such as ellipses, circles, cylinders, arrows, ...

r-shiny

Homepage:
Spack package:
Versions:
1.0.5, 0.13.2
Build Dependencies:
r, r-httpuv, r-mime, r-jsonlite, r-xtable, r-digest, r-htmltools, r-r6, r-sourcetools
Link Dependencies:
r
Run Dependencies:
r, r-httpuv, r-mime, r-jsonlite, r-xtable, r-digest, r-htmltools, r-r6, r-sourcetools
Description:
Makes it incredibly easy to build interactive web applications with R. Automatic "reactive" binding between inputs and outputs and extensive pre-built widgets make it possible to build beautiful, responsive, and powerful applications with minimal effort.

r-shinydashboard

Homepage:
Spack package:
Versions:
0.7.0, 0.6.1
Build Dependencies:
r, r-htmltools, r-shiny
Link Dependencies:
r
Run Dependencies:
r, r-htmltools, r-shiny
Description:
Create Dashboards with 'Shiny'

r-shortread

Homepage:
Spack package:
Versions:
1.34.2
Build Dependencies:
r, r-latticeextra, r-lattice, r-zlibbioc, r-hwriter, r-genomicranges, r-genomeinfodb, r-iranges, r-s4vectors, r-biobase, r-genomicalignments, r-rsamtools, r-biostrings, r-biocparallel, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-latticeextra, r-lattice, r-zlibbioc, r-hwriter, r-genomicranges, r-genomeinfodb, r-iranges, r-s4vectors, r-biobase, r-genomicalignments, r-rsamtools, r-biostrings, r-biocparallel, r-biocgenerics
Description:
This package implements sampling, iteration, and input of FASTQ files. The package includes functions for filtering and trimming reads, and for generating a quality assessment report. Data are represented as DNAStringSet-derived objects, and easily manipulated for a diversity of purposes. The package also contains legacy support for early single-end, ungapped alignment formats.

r-siggenes

Homepage:
Spack package:
Versions:
1.50.0
Build Dependencies:
r, r-biobase, r-multtest
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-multtest
Description:
Identification of differentially expressed genes and estimation of the False Discovery Rate (FDR) using both the Significance Analysis of Microarrays (SAM) and the Empirical Bayes Analyses of Microarrays (EBAM).

r-simpleaffy

Homepage:
Spack package:
Versions:
2.52.0
Build Dependencies:
r, r-biocgenerics, r-biobase, r-affy, r-genefilter, r-gcrma
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-biobase, r-affy, r-genefilter, r-gcrma
Description:
Provides high level functions for reading Affy .CEL files, phenotypic data, and then computing simple things with it, such as t-tests, fold changes and the like. Makes heavy use of the affy library. Also has some basic scatter plot functions and mechanisms for generating high resolution journal figures...

r-sm

Homepage:
Spack package:
Versions:
2.2-5.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This is software linked to the book 'Applied Smoothing Techniques for Data Analysis - The Kernel Approach with S-Plus Illustrations' Oxford University Press.

r-smoof

Homepage:
Spack package:
Versions:
1.5.1, 1.5
Build Dependencies:
r, r-paramhelpers, r-bbmisc, r-checkmate, r-ggplot2, r-rcolorbrewer, r-plot3d, r-plotly, r-mco, r-rcpp, r-rjsonio, r-rcpparmadillo
Link Dependencies:
r
Run Dependencies:
r, r-paramhelpers, r-bbmisc, r-checkmate, r-ggplot2, r-rcolorbrewer, r-plot3d, r-plotly, r-mco, r-rcpp, r-rjsonio, r-rcpparmadillo
Description:
Provides generators for a high number of both single- and multi- objective test functions which are frequently used for the benchmarking of (numerical) optimization algorithms. Moreover, it offers a set of convenient functions to generate, plot and work with objective functions.

r-sn

Homepage:
Spack package:
Versions:
1.5-0, 1.4-0, 1.3-0, 1.2-4, 1.2-3
Build Dependencies:
r, r-mnormt, r-numderiv
Link Dependencies:
r
Run Dependencies:
r, r-mnormt, r-numderiv
Description:
Build and manipulate probability distributions of the skew-normal family and some related ones, notably the skew-t family, and provide related statistical methods for data fitting and diagnostics, in the univariate and the multivariate case.

r-snow

Homepage:
Spack package:
Versions:
0.4-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r, r-rmpi
Description:
Support for simple parallel computing in R.

r-snowfall

Homepage:
Spack package:
Versions:
1.84-6.1
Build Dependencies:
r, r-snow
Link Dependencies:
r
Run Dependencies:
r, r-snow
Description:
Usability wrapper around snow for easier development of parallel R programs. This package offers e.g. extended error checks, and additional functions. All functions work in sequential mode, too, if no cluster is present or wished. Package is also designed as connector to the cluster management tool sfCluster, but can also used without it.

r-snprelate

Homepage:
Spack package:
Versions:
1.12.2
Build Dependencies:
r, r-gdsfmt
Link Dependencies:
r
Run Dependencies:
r, r-gdsfmt
Description:
Genome-wide association studies (GWAS) are widely used to investigate the genetic basis of diseases and traits, but they pose many computational challenges. We developed an R package SNPRelate to provide a binary format for single-nucleotide polymorphism (SNP) data in GWAS utilizing CoreArray Genomic Data Structure (GDS) data files. The GDS format offers the efficient operations specifically designed for integers with two bits, since a SNP could occupy only two bits. SNPRelate is also designed to accelerate two key computations on SNP data using parallel computing for multi-core symmetric multiprocessing computer architectures: Principal Component Analysis (PCA) and relatedness analysis using Identity-By-Descent measures. The SNP GDS format is also used by the GWASTools package with the support of S4 classes and generic functions. The extended GDS format is implemented in the SeqArray package to support the storage of single nucleotide variations (SNVs), insertion/deletion polymorphism (indel) and structural variation calls.

r-som

Homepage:
Spack package:
Versions:
0.3-5.1, 0.3-5, 0.3-4, 0.3-3, 0.3-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Self-Organizing Map (with application in gene clustering).

r-somaticsignatures

Homepage:
Spack package:
Versions:
2.12.1
Build Dependencies:
r, r-variantannotation, r-genomicranges, r-nmf, r-s4vectors, r-iranges, r-genomeinfodb, r-biostrings, r-ggplot2, r-ggbio, r-reshape2, r-pcamethods, r-biobase, r-proxy
Link Dependencies:
r
Run Dependencies:
r, r-variantannotation, r-genomicranges, r-nmf, r-s4vectors, r-iranges, r-genomeinfodb, r-biostrings, r-ggplot2, r-ggbio, r-reshape2, r-pcamethods, r-biobase, r-proxy
Description:
The SomaticSignatures package identifies mutational signatures of single nucleotide variants (SNVs). It provides a infrastructure related to the methodology described in Nik-Zainal (2012, Cell), with flexibility in the matrix decomposition algorithms.

r-sourcetools

Homepage:
Spack package:
Versions:
0.1.6, 0.1.5
Build Dependencies:
r, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-testthat
Description:
Tools for Reading, Tokenizing and Parsing R Code.

r-sp

Homepage:
Spack package:
Versions:
1.2-3
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
Classes and methods for spatial data; the classes document where the spatial location information resides, for 2D or 3D data. Utility functions are provided, e.g. for plotting data as maps, spatial selection, as well as methods for retrieving coordinates, for subsetting, print, summary, etc.

r-sparsem

Homepage:
Spack package:
Versions:
1.74, 1.7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Some basic linear algebra functionality for sparse matrices is provided: including Cholesky decomposition and backsolving as well as standard R subsetting and Kronecker products.

r-spatial

Homepage:
Spack package:
Versions:
7.3-11
Build Dependencies:
r, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-mass
Description:
spatial: Functions for Kriging and Point Pattern Analysis

r-spdep

Homepage:
Spack package:
Versions:
0.6-13
Build Dependencies:
r, r-sp, r-learnbayes, r-deldir, r-coda, r-gmodels, r-expm
Link Dependencies:
r
Run Dependencies:
r, r-sp, r-learnbayes, r-deldir, r-coda, r-gmodels, r-expm
Description:
A collection of functions to create spatial weights matrix objects from polygon contiguities, from point patterns by distance and tessellations, for summarizing these objects, and for permitting their use in spatial data analysis, including regional aggregation by minimum spanning tree; a collection of tests for spatial autocorrelation, including global Moran's I, APLE, Geary's C, Hubert/Mantel general cross product statistic, Empirical Bayes estimates and AssunasReis Index, Getis/Ord G and multicoloured join count statistics, local Moran's I and Getis/Ord G, saddlepoint approximations and exact tests for global and local Moran's I; and functions for estimating spatial simultaneous autoregressive (SAR) lag and error models, impact measures for lag models, weighted and unweighted SAR and CAR spatial regression models, semi-parametric and Moran eigenvector spatial filtering, GM SAR error models, and generalized spatial two stage least squares models.

r-speedglm

Homepage:
Spack package:
Versions:
0.3-2
Build Dependencies:
r, r-mass, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-matrix
Description:
Fitting linear models and generalized linear models to large data sets by updating algorithms.

r-spem

Homepage:
Spack package:
Versions:
1.18.0
Build Dependencies:
r, r-rsolnp, r-biobase
Link Dependencies:
r
Run Dependencies:
r, r-rsolnp, r-biobase
Description:
This package can optimize the parameter in S-system models given time series data

r-splancs

Homepage:
Spack package:
Versions:
2.01-40
Build Dependencies:
r, r-sp
Link Dependencies:
r
Run Dependencies:
r, r-sp
Description:
Spatial and Space-Time Point Pattern Analysis

r-splitstackshape

Homepage:
Spack package:
Versions:
1.4.4
Build Dependencies:
r, r-data-table
Link Dependencies:
r
Run Dependencies:
r, r-data-table
Description:
Stack and Reshape Datasets After Splitting Concatenated Values. Online data collection tools like Google Forms often export multiple-response questions with data concatenated in cells. The concat.split (cSplit) family of functions splits such data into separate cells. The package also includes functions to stack groups of columns and to reshape wide data, even when the data are "unbalanced" something which reshape (from base R) does not handle, and which melt and dcast from reshape2 do not easily handle.

r-sqldf

Homepage:
Spack package:
Versions:
0.4-11
Build Dependencies:
r, r-gsubfn, r-proto, r-rsqlite, r-dbi, r-chron
Link Dependencies:
r
Run Dependencies:
r, r-gsubfn, r-proto, r-rsqlite, r-dbi, r-chron
Description:
The sqldf() function is typically passed a single argument which is an SQL select statement where the table names are ordinary R data frame names. sqldf() transparently sets up a database, imports the data frames into that database, performs the SQL select or other statement and returns the result using a heuristic to determine which class to assign to each column of the returned data frame. The sqldf() or read.csv.sql() functions can also be used to read filtered files into R even if the original files are larger than R itself can handle. 'RSQLite', 'RH2', 'RMySQL' and 'RPostgreSQL' backends are supported.

r-squash

Homepage:
Spack package:
Versions:
1.0.8, 1.0.7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Color-Based Plots for Multivariate Visualization

r-sseq

Homepage:
Spack package:
Versions:
1.20.0
Build Dependencies:
r, r-catools, r-rcolorbrewer
Link Dependencies:
r
Run Dependencies:
r, r-catools, r-rcolorbrewer
Description:
Shrinkage estimation of dispersion in Negative Binomial models for RNA- seq experiments with small sample size

r-stanheaders

Homepage:
Spack package:
Versions:
2.18.1, 2.17.1, 2.10.0-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The C++ header files of the Stan project are provided by this package, but it contains no R code, vignettes, or function documentation. There is a shared object containing part of the CVODES library, but it is not accessible from R. StanHeaders is only useful for developers who want to utilize the LinkingTo directive of their package's DESCRIPTION file to build on the Stan library without incurring unnecessary dependencies. The Stan project develops a probabilistic programming language that implements full or approximate Bayesian statistical inference via Markov Chain Monte Carlo or variational methods and implements (optionally penalized) maximum likelihood estimation via optimization. The Stan library includes an advanced automatic differentiation scheme, templated statistical and linear algebra functions that can handle the automatically differentiable scalar types (and doubles, ints, etc.), and a parser for the Stan language. The 'rstan' package provides user-facing R functions to parse, compile, test, estimate, and analyze Stan models.

r-statmod

Homepage:
Spack package:
Versions:
1.4.30
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A collection of algorithms and functions to aid statistical modeling. Includes growth curve comparisons, limiting dilution analysis (aka ELDA), mixed linear models, heteroscedastic regression, inverse-Gaussian probability calculations, Gauss quadrature and a secure convergence algorithm for nonlinear models. Includes advanced generalized linear model functions that implement secure convergence, dispersion modeling and Tweedie power-law families.

r-statnet-common

Homepage:
Spack package:
Versions:
3.3.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Non-statistical utilities used by the software developed by the Statnet Project. They may also be of use to others.

r-stringi

Homepage:
Spack package:
Versions:
1.1.5, 1.1.3, 1.1.2, 1.1.1
Build Dependencies:
r, icu4c
Link Dependencies:
r, icu4c
Run Dependencies:
r
Description:
Allows for fast, correct, consistent, portable, as well as convenient character string/text processing in every locale and any native encoding. Owing to the use of the ICU library, the package provides R users with platform-independent functions known to Java, Perl, Python, PHP, and Ruby programmers. Among available features there are: pattern searching (e.g., with ICU Java-like regular expressions or the Unicode Collation Algorithm), random string generation, case mapping, string transliteration, concatenation, Unicode normalization, date-time formatting and parsing, etc.

r-stringr

Homepage:
Spack package:
Versions:
1.2.0, 1.1.0, 1.0.0
Build Dependencies:
r, r-stringi, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-stringi, r-magrittr
Description:
A consistent, simple and easy to use set of wrappers around the fantastic 'stringi' package. All function and argument names (and positions) are consistent, all functions deal with "NA"'s and zero length vectors in the same way, and the output from one function is easy to feed into the input of another.

r-strucchange

Homepage:
Spack package:
Versions:
1.5-1
Build Dependencies:
r, r-zoo, r-sandwich
Link Dependencies:
r
Run Dependencies:
r, r-zoo, r-sandwich
Description:
Testing, monitoring and dating structural changes in (linear) regression models.

r-subplex

Homepage:
Spack package:
Versions:
1.4-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Unconstrained Optimization using the Subplex Algorithm

r-summarizedexperiment

Homepage:
Spack package:
Versions:
1.10.0, 1.8.1, 1.6.5
Build Dependencies:
r, r-genomicranges, r-biobase, r-delayedarray, r-matrix, r-s4vectors, r-iranges, r-genomeinfodb, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-genomicranges, r-biobase, r-delayedarray, r-matrix, r-s4vectors, r-iranges, r-genomeinfodb, r-biocgenerics
Description:
The SummarizedExperiment container contains one or more assays, each represented by a matrix-like object of numeric or other mode. The rows typically represent genomic ranges of interest and the columns represent samples.

r-survey

Homepage:
Spack package:
Versions:
3.30-3
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Summary statistics, two-sample tests, rank tests, generalised linear models, cumulative link models, Cox models, loglinear models, and general maximum pseudolikelihood estimation for multistage stratified, cluster-sampled, unequally weighted survey samples. Variances by Taylor series linearisation or replicate weights. Post-stratification, calibration, and raking. Two-phase subsampling designs. Graphics. PPS sampling without replacement. Principal components, factor analysis.

r-survival

Homepage:
Spack package:
Versions:
2.41-3, 2.40-1, 2.39-5
Build Dependencies:
r, r-matrix
Link Dependencies:
r
Run Dependencies:
r, r-matrix
Description:
Contains the core survival analysis routines, including definition of Surv objects, Kaplan-Meier and Aalen-Johansen (multi-state) curves, Cox models, and parametric accelerated failure time models.

r-sva

Homepage:
Spack package:
Versions:
3.24.4
Build Dependencies:
r, r-mgcv, r-genefilter, r-biocparallel, r-matrixstats, r-limma
Link Dependencies:
r
Run Dependencies:
r, r-mgcv, r-genefilter, r-biocparallel, r-matrixstats, r-limma
Description:
Surrogate Variable Analysis.

r-tarifx

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
r, r-reshape2, r-plyr
Link Dependencies:
r
Run Dependencies:
r, r-reshape2, r-plyr
Description:
A collection of various utility and convenience functions.

r-taxizedb

Homepage:
Spack package:
Versions:
0.1.4
Build Dependencies:
r, r-curl, r-dbi, r-rpostgresql, r-rmysql, r-rsqlite, r-dplyr, r-dbplyr, r-magrittr, r-hoardr, r-roxygen2, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-curl, r-dbi, r-rpostgresql, r-rmysql, r-rsqlite, r-dplyr, r-dbplyr, r-magrittr, r-hoardr, r-roxygen2, r-testthat
Description:
taxizedb: Tools for Working with 'Taxonomic' Databases

r-tclust

Homepage:
Spack package:
Versions:
1.3-1, 1.2-7, 1.2-3, 1.1-03, 1.1-02
Build Dependencies:
r, r-cluster, r-mclust, r-mvtnorm, r-sn
Link Dependencies:
r
Run Dependencies:
r, r-cluster, r-mclust, r-mvtnorm, r-sn
Description:
Provides functions for robust trimmed clustering.

r-tensora

Homepage:
Spack package:
Versions:
0.36
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
The package provides convenience functions for advance linear algebra with tensors and computation with datasets of tensors on a higher level abstraction.

r-testit

Homepage:
Spack package:
Versions:
0.7, 0.5
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Provides two convenience functions assert() and test_pkg() to facilitate testing R packages.

r-testthat

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
r, r-digest, r-crayon, r-praise, r-magrittr, r-r6
Link Dependencies:
r
Run Dependencies:
r, r-digest, r-crayon, r-praise, r-magrittr, r-r6
Description:
A unit testing system designed to be fun, flexible and easy to set up.

r-tfbstools

Homepage:
Spack package:
Versions:
1.16.0
Build Dependencies:
r, r-biobase, r-biostrings, r-biocgenerics, r-biocparallel, r-bsgenome, r-catools, r-cner, r-dirichletmultinomial, r-genomeinfodb, r-genomicranges, r-gtools, r-iranges, r-dbi, r-rsqlite, r-rtracklayer, r-seqlogo, r-s4vectors, r-tfmpvalue, r-xml, r-xvector
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biostrings, r-biocgenerics, r-biocparallel, r-bsgenome, r-catools, r-cner, r-dirichletmultinomial, r-genomeinfodb, r-genomicranges, r-gtools, r-iranges, r-dbi, r-rsqlite, r-rtracklayer, r-seqlogo, r-s4vectors, r-tfmpvalue, r-xml, r-xvector
Description:
TFBSTools is a package for the analysis and manipulation of transcription factor binding sites. It includes matrices conversion between Position Frequency Matirx (PFM), Position Weight Matirx (PWM) and Information Content Matrix (ICM). It can also scan putative TFBS from sequence/alignment, query JASPAR database and provides a wrapper of de novo motif discovery software. TFBSTools is a package for the analysis and manipulation of transcription factor binding sites. It includes matrices conversion between Position Frequency Matirx (PFM), Position Weight Matirx (PWM) and Information Content Matrix (ICM). It can also scan putative TFBS from sequence/alignment, query JASPAR database and provides a wrapper of de novo motif discovery software.

r-tfmpvalue

Homepage:
Spack package:
Versions:
0.0.6
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
In putative Transcription Factor Binding Sites (TFBSs) identification from sequence/alignments, we are interested in the significance of certain match score. TFMPvalue provides the accurate calculation of P-value with score threshold for Position Weight Matrices, or the score with given P-value. This package is an interface to code originally made available by Helene Touzet and Jean-Stephane Varre, 2007, Algorithms Mol Biol:2, 15.

r-th-data

Homepage:
Spack package:
Versions:
1.0-8, 1.0-7
Build Dependencies:
r, r-survival, r-mass
Link Dependencies:
r
Run Dependencies:
r, r-survival, r-mass
Description:
Contains data sets used in other packages Torsten Hothorn maintains.

r-threejs

Homepage:
Spack package:
Versions:
0.2.2
Build Dependencies:
r, r-htmlwidgets, r-base64enc, r-matrix, r-jsonlite
Link Dependencies:
r
Run Dependencies:
r, r-htmlwidgets, r-base64enc, r-matrix, r-jsonlite
Description:
Create interactive 3D scatter plots, network plots, and globes using the 'three.js' visualization library ("http://threejs.org").

r-tibble

Homepage:
Spack package:
Versions:
2.0.1, 2.0.0, 1.4.2, 1.4.1, 1.3.4, 1.2, 1.1
Build Dependencies:
r, r-assertthat, r-lazyeval, r-rcpp, r-rlang, r-cli, r-crayon, r-pillar, r-pkgconfig
Link Dependencies:
r
Run Dependencies:
r, r-assertthat, r-lazyeval, r-rcpp, r-rlang, r-cli, r-crayon, r-pillar, r-pkgconfig
Description:
Provides a 'tbl_df' class that offers better checking and printing capabilities than traditional data frames.

r-tidycensus

Homepage:
Spack package:
Versions:
0.3.1
Build Dependencies:
r, r-httr, r-sf, r-dplyr, r-tigris, r-stringr, r-jsonlite, r-purrr, r-rvest, r-tidyr, r-rappdirs, r-readr, r-xml2, r-units
Link Dependencies:
r
Run Dependencies:
r, r-httr, r-sf, r-dplyr, r-tigris, r-stringr, r-jsonlite, r-purrr, r-rvest, r-tidyr, r-rappdirs, r-readr, r-xml2, r-units
Description:
An integrated R interface to the decennial US Census and American Community Survey APIs and the US Census Bureau's geographic boundary files. Allows R users to return Census and ACS data as tidyverse-ready data frames, and optionally returns a list-column with feature geometry for many geographies.

r-tidyr

Homepage:
Spack package:
Versions:
0.7.2, 0.5.1
Build Dependencies:
r, r-tibble, r-dplyr, r-stringi, r-magrittr, r-glue, r-rcpp, r-purrr, r-tidyselect, r-rlang
Link Dependencies:
r
Run Dependencies:
r, r-tibble, r-dplyr, r-stringi, r-magrittr, r-glue, r-rcpp, r-purrr, r-tidyselect, r-rlang
Description:
An evolution of 'reshape2'. It's designed specifically for data tidying (not general reshaping or aggregating) and works well with 'dplyr' data pipelines.

r-tidyselect

Homepage:
Spack package:
Versions:
0.2.3
Build Dependencies:
r, r-glue, r-purrr, r-rlang, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-glue, r-purrr, r-rlang, r-rcpp
Description:
A backend for the selecting functions of the 'tidyverse'. It makes it easy to implement select-like functions in your own packages in a way that is consistent with other 'tidyverse' interfaces for selection.

r-tidyverse

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
r, r-broom, r-cli, r-crayon, r-dplyr, r-dbplyr, r-forcats, r-ggplot2, r-haven, r-hms, r-httr, r-jsonlite, r-lubridate, r-magrittr, r-modelr, r-purrr, r-readr, r-readxl, r-reprex, r-rlang, r-rstudioapi, r-rvest, r-stringr, r-tibble, r-tidyr, r-xml2
Link Dependencies:
r
Run Dependencies:
r, r-broom, r-cli, r-crayon, r-dplyr, r-dbplyr, r-forcats, r-ggplot2, r-haven, r-hms, r-httr, r-jsonlite, r-lubridate, r-magrittr, r-modelr, r-purrr, r-readr, r-readxl, r-reprex, r-rlang, r-rstudioapi, r-rvest, r-stringr, r-tibble, r-tidyr, r-xml2
Description:
The 'tidyverse' is a set of packages that work in harmony because they share common data representations and 'API' design. This package is designed to make it easy to install and load multiple 'tidyverse' packages in a single step.

r-tiff

Homepage:
Spack package:
Versions:
0.1-5
Build Dependencies:
r, libjpeg, libtiff
Link Dependencies:
r, libjpeg, libtiff
Run Dependencies:
r
Description:
This package provides an easy and simple way to read, write and display bitmap images stored in the TIFF format. It can read and write both files and in-memory raw vectors.

r-tigris

Homepage:
Spack package:
Versions:
0.5.3
Build Dependencies:
r, r-stringr, r-magrittr, r-rgdal, r-rgeos, r-sp, r-rappdirs, r-maptools, r-httr, r-uuid, r-sf, r-dplyr
Link Dependencies:
r
Run Dependencies:
r, r-stringr, r-magrittr, r-rgdal, r-rgeos, r-sp, r-rappdirs, r-maptools, r-httr, r-uuid, r-sf, r-dplyr
Description:
Download TIGER/Line shapefiles from the United States Census Bureau and load into R as 'SpatialDataFrame' or 'sf' objects.

r-timedate

Homepage:
Spack package:
Versions:
3012.100
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Environment for teaching "Financial Engineering and Computational Finance". Managing chronological and calendar objects.

r-tmixclust

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
r, r-gss, r-mvtnorm, r-zoo, r-cluster, r-biocparallel, r-flexclust, r-biobase, r-spem
Link Dependencies:
r
Run Dependencies:
r, r-gss, r-mvtnorm, r-zoo, r-cluster, r-biocparallel, r-flexclust, r-biobase, r-spem
Description:
Implementation of a clustering method for time series gene expression data based on mixed-effects models with Gaussian variables and non- parametric cubic splines estimation. The method can robustly account for the high levels of noise present in typical gene expression time series datasets.

r-topgo

Homepage:
Spack package:
Versions:
2.30.1, 2.28.0
Build Dependencies:
r, r-dbi, r-matrixstats, r-lattice, r-sparsem, r-annotationdbi, r-go-db, r-biobase, r-graph, r-biocgenerics
Link Dependencies:
r
Run Dependencies:
r, r-dbi, r-matrixstats, r-lattice, r-sparsem, r-annotationdbi, r-go-db, r-biobase, r-graph, r-biocgenerics
Description:
topGO package provides tools for testing GO terms while accounting for the topology of the GO graph. Different test statistics and different methods for eliminating local similarities and dependencies between GO terms can be implemented and applied.

r-triebeard

Homepage:
Spack package:
Versions:
0.3.0
Build Dependencies:
r, r-rcpp
Link Dependencies:
r
Run Dependencies:
r, r-rcpp
Description:
triebeard: 'Radix' Trees in 'Rcpp'

r-trimcluster

Homepage:
Spack package:
Versions:
0.1-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
trimcluster: Cluster analysis with trimming

r-truncnorm

Homepage:
Spack package:
Versions:
1.0-8
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Density, probability, quantile and random number generation functions for the truncated normal distribution.

r-trust

Homepage:
Spack package:
Versions:
0.1-7
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Does local optimization using two derivatives and trust regions. Guaranteed to converge to local minimum of objective function.

r-tseries

Homepage:
Spack package:
Versions:
0.10-42
Build Dependencies:
r, r-quadprog, r-zoo, r-quantmod
Link Dependencies:
r
Run Dependencies:
r, r-quadprog, r-zoo, r-quantmod
Description:
Time series analysis and computational finance.

r-tsne

Homepage:
Spack package:
Versions:
0.1-3, 0.1-2, 0.1-1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A "pure R" implementation of the t-SNE algorithm.

r-ttr

Homepage:
Spack package:
Versions:
0.23-1
Build Dependencies:
r, r-xts, r-zoo
Link Dependencies:
r
Run Dependencies:
r, r-xts, r-zoo
Description:
Functions and data to construct technical trading rules with R.

r-udunits2

Homepage:
Spack package:
Versions:
0.13
Build Dependencies:
r, udunits2
Link Dependencies:
r, udunits2
Run Dependencies:
r
Description:
Provides simple bindings to Unidata's udunits library.

r-units

Homepage:
Spack package:
Versions:
0.4-6
Build Dependencies:
r, r-udunits2
Link Dependencies:
r
Run Dependencies:
r, r-udunits2
Description:
Support for measurement units in R vectors, matrices and arrays: automatic propagation, conversion, derivation and simplification of units; raising errors in case of unit incompatibility. Compatible with the POSIXct, Date and difftime classes. Uses the UNIDATA udunits library and unit database for unit compatibility checking and conversion.

r-urltools

Homepage:
Spack package:
Versions:
1.7.3
Build Dependencies:
r, r-rcpp, r-triebeard
Link Dependencies:
r
Run Dependencies:
r, r-rcpp, r-triebeard
Description:
urltools: Vectorised Tools for URL Handling and Parsing

r-utf8

Homepage:
Spack package:
Versions:
1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Process and print 'UTF-8' encoded international text (Unicode). Input, validate, normalize, encode, format, and display.

r-utils

Homepage:
Spack package:
Versions:
2.5.0
Build Dependencies:
r, r-oo
Link Dependencies:
r
Run Dependencies:
r, r-oo
Description:
Utility functions useful when programming and developing R packages.

r-uuid

Homepage:
Spack package:
Versions:
0.1-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Tools for generating and handling of UUIDs (Universally Unique Identifiers).

r-varselrf

Homepage:
Spack package:
Versions:
0.7-8
Build Dependencies:
r, r-randomforest
Link Dependencies:
r
Run Dependencies:
r, r-randomforest
Description:
Variable selection from random forests using both backwards variable elimination (for the selection of small sets of non-redundant variables) and selection based on the importance spectrum (somewhat similar to scree plots; for the selection of large, potentially highly-correlated variables) . Main applications in high-dimensional data (e.g., microarray data, and other genomics and proteomics applications).

r-vcd

Homepage:
Spack package:
Versions:
1.4-1
Build Dependencies:
r, r-mass, r-colorspace, r-lmtest
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-colorspace, r-lmtest
Description:
Visualization techniques, data sets, summary and inference procedures aimed particularly at categorical data. Special emphasis is given to highly extensible grid graphics. The package was package was originally inspired by the book "Visualizing Categorical Data" by Michael Friendly and is now the main support package for a new book, "Discrete Data Analysis with R" by Michael Friendly and David Meyer (2015).

r-vegan

Homepage:
Spack package:
Versions:
2.4-3
Build Dependencies:
r, r-permute
Link Dependencies:
r
Run Dependencies:
r, r-permute
Description:
Ordination methods, diversity analysis and other functions for community and vegetation ecologists.

r-vfs

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
r, r-e1071, r-nleqslv, r-knitr, r-rmarkdown, r-testthat
Link Dependencies:
r
Run Dependencies:
r, r-e1071, r-nleqslv, r-knitr, r-rmarkdown, r-testthat
Description:
VFS: Vegetated Filter Strip and Erosion Model

r-vgam

Homepage:
Spack package:
Versions:
1.0-4, 1.0-3, 1.0-2, 1.0-1, 1.0-0
Build Dependencies:
r, r-mass, r-mgcv
Link Dependencies:
r
Run Dependencies:
r, r-mass, r-mgcv
Description:
An implementation of about 6 major classes of statistical regression models.

r-vipor

Homepage:
Spack package:
Versions:
0.4.5, 0.4.4
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Plot Categorical Data Using Quasirandom Noise and Density Estimates

r-viridis

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
r, r-viridislite, r-ggplot2, r-gridextra
Link Dependencies:
r
Run Dependencies:
r, r-viridislite, r-ggplot2, r-gridextra
Description:
viridis: Default Color Maps from 'matplotlib'

r-viridislite

Homepage:
Spack package:
Versions:
0.2.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
viridisLite: Default Color Maps from 'matplotlib' (Lite Version)

r-visnetwork

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
r, r-htmlwidgets, r-htmltools, r-jsonlite, r-magrittr
Link Dependencies:
r
Run Dependencies:
r, r-htmlwidgets, r-htmltools, r-jsonlite, r-magrittr
Description:
Provides an R interface to the 'vis.js' JavaScript charting library. It allows an interactive visualization of networks.

r-vsn

Homepage:
Spack package:
Versions:
3.44.0
Build Dependencies:
r, r-biobase, r-affy, r-limma, r-lattice, r-ggplot2, r-hexbin
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-affy, r-limma, r-lattice, r-ggplot2, r-hexbin
Description:
The package implements a method for normalising microarray intensities, and works for single- and multiple-color arrays. It can also be used for data from other technologies, as long as they have similar format. The method uses a robust variant of the maximum-likelihood estimator for an additive-multiplicative error model and affine calibration. The model incorporates data calibration step (a.k.a. normalization), a model for the dependence of the variance on the mean intensity and a variance stabilizing data transformation. Differences between transformed intensities are analogous to "normalized log-ratios". However, in contrast to the latter, their variance is independent of the mean, and they are usually more sensitive and specific in detecting differential transcription.

r-webshot

Homepage:
Spack package:
Versions:
0.5.1
Build Dependencies:
r, r-magrittr, r-jsonlite, r-callr
Link Dependencies:
r
Run Dependencies:
r, r-magrittr, r-jsonlite, r-callr
Description:
webshot: Take Screenshots of Web Pages

r-whisker

Homepage:
Spack package:
Versions:
0.3-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
logicless templating, reuse templates in many programming languages including R

r-withr

Homepage:
Spack package:
Versions:
2.1.2, 1.0.2, 1.0.1
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
A set of functions to run code 'with' safely and temporarily modified global state. Many of these functions were originally a part of the 'devtools' package, this provides a simple package with limited dependencies to provide access to these functions.

r-xde

Homepage:
Spack package:
Versions:
2.22.0
Build Dependencies:
r, r-biobase, r-biocgenerics, r-genefilter, r-gtools, r-mergemaid, r-mvtnorm
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biocgenerics, r-genefilter, r-gtools, r-mergemaid, r-mvtnorm
Description:
Multi-level model for cross-study detection of differential gene expression.

r-xgboost

Homepage:
Spack package:
Versions:
0.6-4, 0.4-4
Build Dependencies:
r, r-matrix, r-data-table, r-magrittr, r-stringi, r-stringr
Link Dependencies:
r
Run Dependencies:
r, r-matrix, r-data-table, r-magrittr, r-stringi, r-stringr
Description:
Extreme Gradient Boosting, which is an efficient implementation of gradient boosting framework. This package is its R interface. The package includes efficient linear model solver and tree learning algorithms. The package can automatically do parallel computation on a single machine which could be more than 10 times faster than existing gradient boosting packages. It supports various objective functions, including regression, classification and ranking. The package is made to be extensible, so that users are also allowed to define their own objectives easily.

r-xlconnect

Homepage:
Spack package:
Versions:
0.2-12, 0.2-11
Build Dependencies:
r, r-xlconnectjars, r-rjava
Link Dependencies:
r
Run Dependencies:
r, r-xlconnectjars, r-rjava
Description:
Provides comprehensive functionality to read, write and format Excel data.

r-xlconnectjars

Homepage:
Spack package:
Versions:
0.2-12, 0.2-9
Build Dependencies:
r, r-rjava
Link Dependencies:
r
Run Dependencies:
r, r-rjava
Description:
Provides external JAR dependencies for the XLConnect package.

r-xlsx

Homepage:
Spack package:
Versions:
0.5.7
Build Dependencies:
r, r-rjava, r-xlsxjars
Link Dependencies:
r
Run Dependencies:
r, r-rjava, r-xlsxjars
Description:
Provide R functions to read/write/format Excel 2007 and Excel 97/2000/XP/2003 file formats.

r-xlsxjars

Homepage:
Spack package:
Versions:
0.6.1
Build Dependencies:
r, r-rjava
Link Dependencies:
r
Run Dependencies:
r, r-rjava
Description:
The xlsxjars package collects all the external jars required for the xlxs package. This release corresponds to POI 3.10.1.

r-xmapbridge

Homepage:
Spack package:
Versions:
1.34.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
xmapBridge can plot graphs in the X:Map genome browser. This package exports plotting files in a suitable format.

r-xml

Homepage:
Spack package:
Versions:
3.98-1.9, 3.98-1.5, 3.98-1.4
Build Dependencies:
r, libxml2
Link Dependencies:
r, libxml2
Run Dependencies:
r
Description:
Many approaches for both reading and creating XML (and HTML) documents (including DTDs), both local and accessible via HTTP or FTP. Also offers access to an 'XPath' "interpreter".

r-xml2

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
r, r-rcpp, r-bh, libxml2
Link Dependencies:
r, libxml2
Run Dependencies:
r, r-rcpp, r-bh
Description:
Work with XML files using a simple, consistent interface. Built on top of the 'libxml2' C library.

r-xnomial

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
r, r-knitr
Link Dependencies:
r
Run Dependencies:
r, r-knitr
Description:
XNomial: Exact Goodness-of-Fit Test for Multinomial Data with Fixed Probabilities

r-xtable

Homepage:
Spack package:
Versions:
1.8-2
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
Coerce data to LaTeX and HTML tables.

r-xts

Homepage:
Spack package:
Versions:
0.11-2, 0.9-7
Build Dependencies:
r, r-zoo
Link Dependencies:
r
Run Dependencies:
r, r-zoo
Description:
Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.

r-xvector

Homepage:
Spack package:
Versions:
0.20.0, 0.16.0
Build Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-zlibbioc
Link Dependencies:
r
Run Dependencies:
r, r-biocgenerics, r-s4vectors, r-iranges, r-zlibbioc
Description:
Memory efficient S4 classes for storing sequences "externally" (behind an R external pointer, or on disk).

r-yaml

Homepage:
Spack package:
Versions:
2.1.14, 2.1.13
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package implements the libyaml YAML 1.1 parser and emitter (http://pyyaml.org/wiki/LibYAML) for R.

r-yapsa

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-genomicranges, r-ggplot2, r-lsei, r-somaticsignatures, r-variantannotation, r-genomeinfodb, r-reshape2, r-gridextra, r-corrplot, r-dendextend, r-getoptlong, r-gtrellis, r-pmcmr, r-complexheatmap, r-keggrest
Link Dependencies:
r
Run Dependencies:
r, r-genomicranges, r-ggplot2, r-lsei, r-somaticsignatures, r-variantannotation, r-genomeinfodb, r-reshape2, r-gridextra, r-corrplot, r-dendextend, r-getoptlong, r-gtrellis, r-pmcmr, r-complexheatmap, r-keggrest
Description:
This package provides functions and routines useful in the analysis of somatic signatures (cf. L. Alexandrov et al., Nature 2013). In particular, functions to perform a signature analysis with known signatures (LCD = linear combination decomposition) and a signature analysis on stratified mutational catalogue (SMC = stratify mutational catalogue) are provided.

r-yaqcaffy

Homepage:
Spack package:
Versions:
1.36.0
Build Dependencies:
r, r-simpleaffy
Link Dependencies:
r
Run Dependencies:
r, r-simpleaffy
Description:
Quality control of Affymetrix GeneChip expression data and reproducibility analysis of human whole genome chips with the MAQC reference datasets.

r-yarn

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
r, r-biobase, r-biomart, r-downloader, r-edger, r-gplots, r-limma, r-matrixstats, r-preprocesscore, r-readr, r-rcolorbrewer, r-quantro
Link Dependencies:
r
Run Dependencies:
r, r-biobase, r-biomart, r-downloader, r-edger, r-gplots, r-limma, r-matrixstats, r-preprocesscore, r-readr, r-rcolorbrewer, r-quantro
Description:
Expedite large RNA-Seq analyses using a combination of previously developed tools. YARN is meant to make it easier for the user in performing basic mis-annotation quality control, filtering, and condition-aware normalization. YARN leverages many Bioconductor tools and statistical techniques to account for the large heterogeneity and sparsity found in very large RNA-seq experiments.

r-zlibbioc

Homepage:
Spack package:
Versions:
1.26.0, 1.22.0
Build Dependencies:
r
Link Dependencies:
r
Run Dependencies:
r
Description:
This package uses the source code of zlib-1.2.5 to create libraries for systems that do not have these available via other means (most Linux and Mac users should have system-level access to zlib, and no direct need for this package). See the vignette for instructions on use.

r-zoo

Homepage:
Spack package:
Versions:
1.7-14, 1.7-13
Build Dependencies:
r, r-lattice
Link Dependencies:
r
Run Dependencies:
r, r-lattice
Description:
An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.

r3d

Homepage:
Spack package:
Versions:
2018-12-19
Description:
Fast, robust polyhedral intersections, analytic integration, and conservative voxelization.

racon

Homepage:
Spack package:
Versions:
1.3.2, 1.3.1, 1.3.0, 1.2.1
Build Dependencies:
cmake, python
Description:
Ultrafast consensus module for raw de novo genome assembly of long uncorrected reads.

raft

Homepage:
Spack package:
Versions:
develop, 1.2.3
Build Dependencies:
cmake, mpi, hdf5, fftw, cuda
Link Dependencies:
mpi, hdf5, fftw, cuda
Description:
RAFT: Reconstruct Algorithms for Tomography. Toolbox under development at Brazilian Synchrotron Light Source.

ragel

Homepage:
Spack package:
Versions:
6.10
Build Dependencies:
colm
Description:
Ragel State Machine Compiler Ragel compiles executable finite state machines from regular languages. Ragel targets C, C++ and ASM. Ragel state machines can not only recognize byte sequences as regular expression machines do, but can also execute code at arbitrary points in the recognition of a regular language. Code embedding is done using inline operators that do not disrupt the regular language syntax.

raja

Homepage:
Spack package:
Versions:
develop, master, 0.8.0, 0.7.0, 0.6.0, 0.5.3, 0.5.2, 0.5.1, 0.5.0, 0.4.1, 0.4.0
Build Dependencies:
cmake, cuda
Link Dependencies:
cuda
Description:
RAJA Parallel Framework.

randfold

Homepage:
Spack package:
Versions:
2.0.1
Build Dependencies:
squid
Link Dependencies:
squid
Description:
Minimum free energy of folding randomization test software

random123

Homepage:
Spack package:
Versions:
1.09
Description:
Random123 is a library of 'counter-based' random number generators (CBRNGs), in which the Nth random number can be obtained by applying a stateless mixing function to N instead of the conventional approach of using N iterations of a stateful transformation.

randrproto

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
pkgconfig, util-macros
Description:
X Resize and Rotate Extension (RandR). This extension defines a protocol for clients to dynamically change X screens, so as to resize, rotate and reflect the root window of a screen.

range-v3

Homepage:
Spack package:
Versions:
develop, 0.5.0, 0.4.0, 0.3.7, 0.3.6, 0.3.5, 0.3.0, 0.2.6, 0.2.5, 0.2.4, 0.2.3, 0.2.2, 0.2.1, 0.2.0
Build Dependencies:
cmake, doxygen
Description:
Range v3 forms the basis of a proposal to add range support to the standard library (N4128: Ranges for the Standard Library). It also will be the reference implementation for an upcoming Technical Specification. These are the first steps toward turning ranges into an international standard.

rankstr

Homepage:
Spack package:
Versions:
master, 0.0.2
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Assign one-to-one mapping of MPI ranks to strings

rapidjson

Homepage:
Spack package:
Versions:
1.1.0, 1.0.2, 1.0.1, 1.0.0
Build Dependencies:
cmake
Description:
A fast JSON parser/generator for C++ with both SAX/DOM style API

ravel

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
cmake, muster, otf, otf2, qt
Link Dependencies:
muster, otf, otf2, qt
Description:
Ravel is a parallel communication trace visualization tool that orders events according to logical time.

raxml

Homepage:
Spack package:
Versions:
8.2.11
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
RAxML (Randomized Axelerated Maximum Likelihood) is a program for sequential and parallel Maximum Likelihood based inference of large phylogenetic trees.

ray

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Parallel genome assemblies for parallel DNA sequencing

rclone

Homepage:
Spack package:
Versions:
1.43
Build Dependencies:
go
Description:
Rclone is a command line program to sync files and directories to and from various cloud storage providers

rdma-core

Homepage:
Spack package:
Versions:
20, 17.1, 13
Build Dependencies:
cmake, pkgconfig, libnl
Link Dependencies:
libnl
Description:
RDMA core userspace libraries and daemons

rdp-classifier

Homepage:
Spack package:
Versions:
2.12
Build Dependencies:
java
Run Dependencies:
java
Description:
The RDP Classifier is a naive Bayesian classifier that can rapidly and accurately provides taxonomic assignments from domain to genus, with confidence estimates for each assignment.

re2c

Homepage:
Spack package:
Versions:
1.0.3
Description:
re2c: a free and open-source lexer generator for C and C++

readfq

Homepage:
Spack package:
Versions:
2013.04.10
Description:
Readfq is a collection of routines for parsing the FASTA/FASTQ format. It seamlessly parses both FASTA and multi-line FASTQ with a simple interface.

readline

Homepage:
Spack package:
Versions:
7.0, 6.3
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands.

recon

Homepage:
Spack package:
Versions:
1.05
Run Dependencies:
perl
Description:
RECON: a package for automated de novo identification of repeat families from genomic sequences.

recordproto

Homepage:
Spack package:
Versions:
1.14.2
Build Dependencies:
pkgconfig, util-macros
Description:
X Record Extension. This extension defines a protocol for the recording and playback of user actions in the X Window System.

redis

Homepage:
Spack package:
Versions:
5.0.3, 5.0.2, 5.0.1, 5.0.0, 4.0.13, 4.0.12, 4.0.11
Description:
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster

redset

Homepage:
Spack package:
Versions:
master, 0.0.3
Build Dependencies:
cmake, mpi, rankstr, kvtree
Link Dependencies:
mpi, rankstr, kvtree
Description:
Create MPI communicators for disparate redundancy sets

redundans

Homepage:
Spack package:
Versions:
0.14a, 0.13c
Build Dependencies:
python, py-pyscaf, py-fastaindex, py-numpy, perl, sspace-standard, bwa, last, gapcloser, parallel, snap-berkeley
Link Dependencies:
sspace-standard, bwa, last, gapcloser, parallel
Run Dependencies:
python, py-pyscaf, py-fastaindex, py-numpy, perl, snap-berkeley
Description:
Redundans pipeline assists an assembly of heterozygous genomes.

regcm

Homepage:
Spack package:
Versions:
4.7.0
Build Dependencies:
netcdf, netcdf-fortran, hdf5, mpi
Link Dependencies:
netcdf, netcdf-fortran, hdf5, mpi
Description:
RegCM, ICTP Regional Climate Model (https://ictp.it).

relax

Homepage:
Spack package:
Versions:
root6
Build Dependencies:
cmake, clhep, gsl, hepmc, root
Link Dependencies:
clhep, gsl, hepmc, root
Description:
A set of Reflex libraries for the most common used general data types in the LHC Computing Grid

relion

Homepage:
Spack package:
Versions:
develop, 3.0_beta, 2.1, 2.0.3
Build Dependencies:
cuda, cmake, mpi, fftw, fltk, libtiff
Link Dependencies:
cuda, mpi, fftw, fltk, libtiff
Description:
RELION (for REgularised LIkelihood OptimisatioN, pronounce rely-on) is a stand-alone computer program that employs an empirical Bayesian approach to refinement of (multiple) 3D reconstructions or 2D class averages in electron cryo-microscopy (cryo-EM).

rempi

Homepage:
Spack package:
Versions:
1.1.0, 1.0.0
Build Dependencies:
mpi, zlib, autoconf, automake, libtool
Link Dependencies:
mpi, zlib
Description:
ReMPI is a record-and-replay tool for MPI applications.

rename

Homepage:
Spack package:
Versions:
1.600
Build Dependencies:
perl
Run Dependencies:
perl
Description:
Perl-powered file rename script with many helpful built-ins.

rendercheck

Homepage:
Spack package:
Versions:
1.5
Build Dependencies:
libxrender, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxrender, libx11
Description:
rendercheck is a program to test a Render extension implementation against separate calculations of expected output.

renderproto

Homepage:
Spack package:
Versions:
0.11.1
Build Dependencies:
pkgconfig, util-macros
Description:
X Rendering Extension. This extension defines the protcol for a digital image composition as the foundation of a new rendering model within the X Window System.

repeatmasker

Homepage:
Spack package:
Versions:
4.0.9, 4.0.7
Build Dependencies:
perl, perl-text-soundex, hmmer, ncbi-rmblastn, trf, phrap-crossmatch-swat
Link Dependencies:
hmmer, ncbi-rmblastn, trf
Run Dependencies:
perl, perl-text-soundex, phrap-crossmatch-swat
Description:
RepeatMasker is a program that screens DNA sequences for interspersed repeats and low complexity DNA sequences.

repeatmodeler

Homepage:
Spack package:
Versions:
1.0.11
Build Dependencies:
perl, perl-json, perl-uri, perl-lwp
Run Dependencies:
perl, perl-json, perl-uri, perl-lwp, repeatmasker, recon, repeatscout, trf, nseg, ncbi-rmblastn
Description:
RepeatModeler is a de-novo repeat family identification and modeling package.

repeatscout

Homepage:
Spack package:
Versions:
1.0.5
Run Dependencies:
perl, trf, nseg
Description:
RepeatScout - De Novo Repeat Finder, Price A.L., Jones N.C. and Pevzner P.A.

resourceproto

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
pkgconfig, util-macros
Description:
X Resource Extension. This extension defines a protocol that allows a client to query the X server about its usage of various resources.

revbayes

Homepage:
Spack package:
Versions:
1.0.10, 1.0.4
Build Dependencies:
cmake, boost, mpi
Link Dependencies:
boost, mpi
Description:
Bayesian phylogenetic inference using probabilistic graphical models and an interpreted language.

rgb

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
xorg-server, xproto
Link Dependencies:
xorg-server
Description:
X color name database. This package includes both the list mapping X color names to RGB values (rgb.txt) and, if configured to use a database for color lookup, the rgb program to convert the text file into the binary database format. The "others" subdirectory contains some alternate color databases.

rhash

Homepage:
Spack package:
Versions:
1.3.5
Description:
RHash is a console utility for computing and verifying hash sums of files. It supports CRC32, MD4, MD5, SHA1, SHA256, SHA512, SHA3, Tiger, TTH, Torrent BTIH, AICH, ED2K, GOST R 34.11-94, RIPEMD-160, HAS-160, EDON-R 256/512, WHIRLPOOL and SNEFRU hash sums.

rlwrap

Homepage:
Spack package:
Versions:
0.43
Build Dependencies:
readline
Link Dependencies:
readline
Description:
rlwrap is a 'readline wrapper', a small utility that uses the GNU readline library to allow the editing of keyboard input for any command.

rmats

Homepage:
Spack package:
Versions:
4.0.2
Build Dependencies:
py-numpy, openblas
Link Dependencies:
openblas
Run Dependencies:
python, py-numpy
Description:
MATS is a computational tool to detect differential alternative splicing events from RNA-Seq data.

rmlab

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, pngwriter
Link Dependencies:
pngwriter
Description:
C++ File API for the reMarkable tablet

rna-seqc

Homepage:
Spack package:
Versions:
1.1.8, 1.1.7, 1.1.6, 1.1.5, 1.1.4
Run Dependencies:
jdk
Description:
RNA-SeQC is a java program which computes a series of quality control metrics for RNA-seq data.

rngstreams

Homepage:
Spack package:
Versions:
1.0.1
Description:
Multiple independent streams of pseudo-random numbers.

rocksdb

Homepage:
Spack package:
Versions:
develop, 5.17.2, 5.16.6, 5.15.10
Build Dependencies:
bzip2, gflags, lz4, snappy, zlib, zstd
Link Dependencies:
bzip2, gflags, lz4, snappy, zlib, zstd
Description:
RocksDB: A Persistent Key-Value Store for Flash and RAM Storage

rockstar

Homepage:
Spack package:
Versions:
develop, yt
Build Dependencies:
hdf5
Link Dependencies:
hdf5
Description:
The Rockstar Halo Finder

root

Homepage:
Spack package:
Versions:
master, 6.16.00, 6.14.08, 6.14.06, 6.14.04, 6.14.02, 6.14.00, 6.12.06, 6.10.08, 6.08.06, 6.06.08, 6.06.06, 6.06.04, 6.06.02, 5.34.38
Build Dependencies:
cmake, pkgconfig, blas, freetype, jpeg, libice, libpng, lz4, ncurses, pcre, xxhash, xz, zlib, libx11, libxext, libxft, libxpm, libsm, ftgl, glew, gl, glu, gl2ps, qt, py-numpy, avahi, davix, cfitsio, fftw, graphviz, gsl, http, jemalloc, kerberos, ldap, libcxx, mysql-client, odbc, openssl, postgresql, pythia6, python, r, r-cpp, r-inside, shadow, sqlite, tbb, unuran, vc, veccore, vdt, libxml2, xrootd
Link Dependencies:
blas, freetype, jpeg, libice, libpng, lz4, ncurses, pcre, xxhash, xz, zlib, libx11, libxext, libxft, libxpm, libsm, ftgl, glew, gl, glu, gl2ps, qt, py-numpy, avahi, davix, cfitsio, fftw, graphviz, gsl, http, jemalloc, kerberos, ldap, libcxx, mysql-client, odbc, openssl, postgresql, pythia6, shadow, sqlite, tbb, unuran, vc, veccore, vdt, libxml2, xrootd
Run Dependencies:
python, r, r-cpp, r-inside
Description:
ROOT is a data analysis framework.

rose

Homepage:
Spack package:
Versions:
master, 0.9.7
Build Dependencies:
autoconf, automake, libtool, boost, libgcrypt, java, z3
Link Dependencies:
boost, java, z3
Run Dependencies:
py-binwalk
Description:
A compiler infrastructure to build source-to-source program transformation and analysis tools. (Developed at Lawrence Livermore National Lab)

ross

Homepage:
Spack package:
Versions:
develop, 7.0.1, 7.0.0, 6.0.0
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Rensselaer Optimistic Simulation System

routino

Homepage:
Spack package:
Versions:
3.2
Build Dependencies:
zlib, bzip2
Link Dependencies:
zlib, bzip2
Description:
Routino is an application for finding a route between two points using the dataset of topographical information collected by http://www.OpenStreetMap.org.

rpcsvc-proto

Homepage:
Spack package:
Versions:
1.4
Build Dependencies:
gettext
Link Dependencies:
gettext
Description:
rpcsvc protocol definitions from glibc.

rr

Homepage:
Spack package:
Versions:
4.5.0, 4.4.0, 4.3.0
Build Dependencies:
cmake, gdb, git, zlib, pkgconfig
Link Dependencies:
gdb, git, zlib
Test Dependencies:
py-pexpect
Description:
Application execution recorder, player and debugger

rsbench

Homepage:
Spack package:
Versions:
2, 0
Description:
A mini-app to represent the multipole resonance representation lookup cross section algorithm.

rsem

Homepage:
Spack package:
Versions:
1.3.1, 1.3.0
Build Dependencies:
r, perl, python, bowtie, bowtie2, star
Link Dependencies:
bowtie, bowtie2, star
Run Dependencies:
r, perl, python
Description:
RSEM is a software package for estimating gene and isoform expression levels from RNA-Seq data.

rstart

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
xproto, pkgconfig, util-macros
Description:
This package includes both the client and server sides implementing the protocol described in the "A Flexible Remote Execution Protocol Based on rsh" paper found in the specs/ subdirectory. This software has been deprecated in favor of the X11 forwarding provided in common ssh implementations.

rsync

Homepage:
Spack package:
Versions:
3.1.3, 3.1.2, 3.1.1
Description:
An open source utility that provides fast incremental file transfer.

rtags

Homepage:
Spack package:
Versions:
2.17
Build Dependencies:
cmake, llvm, zlib, openssl, lua, bash-completion, pkgconfig
Link Dependencies:
llvm, zlib, openssl, lua, bash-completion
Description:
RTags is a client/server application that indexes C/C++ code

rtax

Homepage:
Spack package:
Versions:
0.984
Build Dependencies:
usearch
Link Dependencies:
usearch
Description:
Rapid and accurate taxonomic classification of short paired-end sequence reads from the 16S ribosomal RNA gene

ruby

Homepage:
Spack package:
Versions:
2.6.2, 2.5.3, 2.2.0
Build Dependencies:
pkgconfig, libffi, zlib, libx11, tcl, tk, openssl, readline
Link Dependencies:
libffi, zlib, libx11, tcl, tk, openssl, readline
Description:
A dynamic, open source programming language with a focus on simplicity and productivity.

ruby-gnuplot

Homepage:
Spack package:
Versions:
2.6.2
Build Dependencies:
gnuplot, ruby
Link Dependencies:
gnuplot, ruby
Description:
Utility library to aid in interacting with gnuplot from ruby

ruby-narray

Homepage:
Spack package:
Versions:
0.9.0.9
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
Numo::NArray is an Numerical N-dimensional Array class for fast processing and easy manipulation of multi-dimensional numerical data, similar to numpy.ndaray.

ruby-ronn

Homepage:
Spack package:
Versions:
0.7.3, 0.7.0
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
Ronn builds manuals. It converts simple, human readable textfiles to roff for terminal display, and also to HTML for the web.

ruby-rubyinline

Homepage:
Spack package:
Versions:
3.12.4
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
Inline allows you to write foreign code within your ruby code.

ruby-svn2git

Homepage:
Spack package:
Versions:
2.4.0
Build Dependencies:
git, subversion, ruby
Link Dependencies:
git, subversion, ruby
Description:
svn2git is a tiny utility for migrating projects from Subversion to Git while keeping the trunk, branches and tags where they should be. It uses git-svn to clone an svn repository and does some clean-up to make sure branches and tags are imported in a meaningful way, and that the code checked into master ends up being what's currently in your svn trunk rather than whichever svn branch your last commit was in.

ruby-terminal-table

Homepage:
Spack package:
Versions:
1.8.0
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
Simple, feature rich ascii table generation library

rust

Homepage:
Spack package:
Versions:
develop, 1.34.0, 1.32.0, 1.31.1, 1.31.0, 1.30.1
Build Dependencies:
llvm, curl, git, cmake, binutils, python, openssl
Link Dependencies:
llvm, curl, git, cmake, binutils, python, openssl
Description:
The rust programming language toolchain

rust-bindgen

Homepage:
Spack package:
Versions:
0.20.5
Build Dependencies:
rust, llvm
Link Dependencies:
rust, llvm
Description:
The rust programming language toolchain

sabre

Homepage:
Spack package:
Versions:
2013-09-27
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Sabre is a tool that will demultiplex barcoded reads into separate files. It will work on both single-end and paired-end data in fastq format. It simply compares the provided barcodes with each read and separates the read into its appropriate barcode file, after stripping the barcode from the read (and also stripping the quality values of the barcode bases). If a read does not have a recognized barcode, then it is put into the unknown file.

saga-gis

Homepage:
Spack package:
Versions:
develop, 7.3.0, 7.1.1, 7.1.0, 7.0.0, 6.4.0, 6.3.0, 6.2.0, 6.1.0, 6.0.0, 5.0.1, 5.0.0, 4.1.0, 4.0.0, 3.0.0, 2.3.1, 2.3.0, 2.3-lts
Build Dependencies:
autoconf, automake, libtool, m4, python, wx, gdal, proj, unixodbc, swig
Link Dependencies:
python, wx, gdal, proj, unixodbc
Description:
SAGA is a GIS for Automated Geoscientific Analyses and has been designed for an easy and effective implementation of spatial algorithms. It offers a comprehensive, growing set of geoscientific methods and provides an easily approachable user interface with many visualisation options

sailfish

Homepage:
Spack package:
Versions:
0.10.1
Build Dependencies:
cmake, boost, tbb
Link Dependencies:
boost, tbb
Description:
Sailfish is a tool for transcript quantification from RNA-seq data.

salmon

Homepage:
Spack package:
Versions:
0.12.0, 0.9.1, 0.8.2
Build Dependencies:
cmake, tbb, boost
Link Dependencies:
tbb, boost
Description:
Salmon is a tool for quantifying the expression of transcripts using RNA-seq data.

sambamba

Homepage:
Spack package:
Versions:
0.6.6
Build Dependencies:
ldc, python
Link Dependencies:
ldc
Description:
Sambamba: process your BAM data faster (bioinformatics)

samblaster

Homepage:
Spack package:
Versions:
0.1.24, 0.1.23
Description:
A tool to mark duplicates and extract discordant and split reads from sam files.

samrai

Homepage:
Spack package:
Versions:
3.12.0, 3.11.5, 3.11.4, 3.11.2, 3.11.1, 3.10.0, 3.9.1, 3.8.0, 3.7.3, 3.7.2, 3.6.3-beta, 3.5.2-beta, 3.5.0-beta, 3.4.1-beta, 3.3.3-beta, 3.3.2-beta, 2.4.4
Build Dependencies:
mpi, zlib, hdf5, m4, boost, silo
Link Dependencies:
mpi, zlib, hdf5, silo
Description:
SAMRAI (Structured Adaptive Mesh Refinement Application Infrastructure) is an object-oriented C++ software library enables exploration of numerical, algorithmic, parallel computing, and software issues associated with applying structured adaptive mesh refinement (SAMR) technology in large-scale parallel application development.

samtools

Homepage:
Spack package:
Versions:
1.9, 1.8, 1.7, 1.6, 1.5, 1.4, 1.3.1, 1.2
Build Dependencies:
ncurses, htslib, zlib, bzip2
Link Dependencies:
ncurses, htslib, zlib, bzip2
Description:
SAM Tools provide various utilities for manipulating alignments in the SAM format, including sorting, merging, indexing and generating alignments in a per-position format

sandbox

Homepage:
Spack package:
Versions:
2.12
Description:
sandbox'd LD_PRELOAD hack by Gentoo Linux

sas

Homepage:
Spack package:
Versions:
0.2.0, 0.1.4, 0.1.3
Build Dependencies:
cmake, python, llvm
Link Dependencies:
python, llvm
Description:
SAS (Static Analysis Suite) is a powerful tool for running static analysis on C++ code.

satsuma2

Homepage:
Spack package:
Versions:
2016-11-22
Build Dependencies:
cmake
Description:
Satsuma2 is an optimsed version of Satsuma, a tool to reliably align large and complex DNA sequences providing maximum sensitivity (to find all there is to find), specificity (to only find real homology) and speed (to accomodate the billions of base pairs in vertebrate genomes).

savanna

Homepage:
Spack package:
Versions:
develop, 0.5
Build Dependencies:
mpi, stc, adios, mpix-launch-swift, tau
Link Dependencies:
mpi, stc, adios, mpix-launch-swift, tau
Description:
CODARcode Savanna runtime framework for high performance, workflow management using Swift/T and ADIOS.

saws

Homepage:
Spack package:
Versions:
develop, 0.1.0
Description:
The Scientific Application Web server (SAWs) turns any C or C++ scientific or engineering application code into a webserver, allowing one to examine (and even modify) the state of the simulation with any browser from anywhere.

sbt

Homepage:
Spack package:
Versions:
1.1.6, 1.1.5, 1.1.4, 0.13.17
Build Dependencies:
java
Link Dependencies:
java
Description:
Scala Build Tool

scala

Homepage:
Spack package:
Versions:
2.12.5, 2.12.1, 2.11.11, 2.10.6
Build Dependencies:
java
Link Dependencies:
java
Description:
Scala is a general-purpose programming language providing support for functional programming and a strong static type system. Designed to be concise, many of Scala's design decisions were designed to build from criticisms of Java.

scalasca

Homepage:
Spack package:
Versions:
2.4, 2.3.1, 2.2.2, 2.1
Build Dependencies:
mpi, cubew, cube, otf2
Link Dependencies:
mpi, cubew, cube, otf2
Description:
Scalasca is a software tool that supports the performance optimization of parallel programs by measuring and analyzing their runtime behavior. The analysis identifies potential performance bottlenecks - in particular those concerning communication and synchronization - and offers guidance in exploring their causes.

scallop

Homepage:
Spack package:
Versions:
0.10.3
Build Dependencies:
clp, boost, htslib
Link Dependencies:
clp, boost, htslib
Description:
Scallop is a reference-based transcriptome assembler for RNA-seq

scalpel

Homepage:
Spack package:
Versions:
0.5.3
Build Dependencies:
cmake, perl
Link Dependencies:
cmake, perl
Description:
Scalpel is a software package for detecting INDELs (INsertions and DELetions) mutations in a reference genome which has been sequenced with next-generation sequencing technology.

scan-for-matches

Homepage:
Spack package:
Versions:
2010-7-16
Description:
scan_for_matches is a utility written in C for locating patterns in DNA or protein FASTA files.

scons

Homepage:
Spack package:
Versions:
3.0.4, 3.0.1, 2.5.1, 2.5.0
Build Dependencies:
python, py-setuptools
Link Dependencies:
python
Run Dependencies:
python
Description:
SCons is a software construction tool

scorec-core

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpi, zoltan
Link Dependencies:
mpi, zoltan
Description:
The SCOREC Core is a set of C/C++ libraries for unstructured mesh simulations on supercomputers.

scorep

Homepage:
Spack package:
Versions:
5.0, 4.1, 4.0, 3.1, 3.0, 2.0.2, 1.4.2, 1.3
Build Dependencies:
otf2, opari2, cubew, cubelib, cube, mpi, papi, pdt
Link Dependencies:
otf2, opari2, cubew, cubelib, cube, mpi, papi, pdt
Description:
The Score-P measurement infrastructure is a highly scalable and easy-to- use tool suite for profiling, event tracing, and online analysis of HPC applications.

scotch

Homepage:
Spack package:
Versions:
6.0.6, 6.0.5a, 6.0.4, 6.0.3, 6.0.0, 5.1.10b
Build Dependencies:
flex, bison, mpi, zlib
Link Dependencies:
mpi, zlib
Description:
Scotch is a software package for graph and mesh/hypergraph partitioning, graph clustering, and sparse matrix ordering.

scr

Homepage:
Spack package:
Versions:
master, 1.2.2, 1.2.1, 1.2.0
Build Dependencies:
cmake, pdsh, zlib, mpi, dtcmp, libyogrt
Link Dependencies:
zlib, mpi, dtcmp, libyogrt
Run Dependencies:
pdsh
Description:
SCR caches checkpoint data in storage on the compute nodes of a Linux cluster to provide a fast, scalable checkpoint/restart capability for MPI codes

screen

Homepage:
Spack package:
Versions:
4.6.2, 4.3.1, 4.3.0, 4.2.1, 4.2.0, 4.0.3, 4.0.2, 3.9.15, 3.9.11, 3.9.10, 3.9.9, 3.9.8, 3.9.4, 3.7.6, 3.7.4, 3.7.2, 3.7.1
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Screen is a full-screen window manager that multiplexes a physical terminal between several processes, typically interactive shells.

scripts

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
Various X related scripts.

scrnsaverproto

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
pkgconfig, util-macros
Description:
MIT Screen Saver Extension. This extension defines a protocol to control screensaver features and also to query screensaver info on specific windows.

sctk

Homepage:
Spack package:
Versions:
2.4.10, 2.4.9, 2.4.8, 2.4.0
Description:
The NIST Scoring Toolkit (SCTK) is a collection of software tools designed to score benchmark test evaluations of Automatic Speech Recognition (ASR) Systems. The toolkit is currently used by NIST, benchmark test participants, and reserchers worldwide to as a common scoring engine.

sdl2

Homepage:
Spack package:
Versions:
2.0.5
Build Dependencies:
cmake
Description:
Simple DirectMedia Layer is a cross-platform development library designed to provide low level access to audio, keyboard, mouse, joystick, and graphics hardware via OpenGL and Direct3D.

sdl2-image

Homepage:
Spack package:
Versions:
2.0.1
Build Dependencies:
sdl2
Link Dependencies:
sdl2
Description:
SDL is designed to provide the bare bones of creating a graphical program.

sdsl-lite

Homepage:
Spack package:
Versions:
2.1.1
Build Dependencies:
cmake, tar
Description:
SDSL - Succinct Data Structure Library The Succinct Data Structure Library (SDSL) is a powerful and flexible C++11 library implementing succinct data structures.

seacas

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, netcdf, cgns, matio, metis, parmetis, mpi
Link Dependencies:
netcdf, cgns, matio, metis, parmetis, mpi
Description:
The SEACAS Project contains the Exodus and IOSS libraries and a collection of applications which create, query, modify, or translate exodus databases. Default is to build the exodus and IOSS libraries and the io_shell, io_info, struc_to_unstruc apps.

sed

Homepage:
Spack package:
Versions:
4.2.2
Description:
GNU implementation of the famous stream editor.

sentieon-genomics

Homepage:
Spack package:
Versions:
201808.01
Description:
Sentieon provides complete solutions for secondary DNA analysis. Our software improves upon BWA, GATK, Mutect, and Mutect2 based pipelines. The Sentieon tools are deployable on any CPU-based computing system. Please set the path to the sentieon license server with: export SENTIEON_LICENSE=[FQDN]:[PORT] Note: A manual download is required. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

seqan

Homepage:
Spack package:
Versions:
2.4.0
Build Dependencies:
cmake, python, py-nose, py-sphinx, boost, zlib, bzip2
Link Dependencies:
boost, zlib, bzip2
Description:
SeqAn is an open source C++ library of efficient algorithms and data structures for the analysis of sequences with the focus on biological data. Our library applies a unique generic design that guarantees high performance, generality, extensibility, and integration with other libraries. SeqAn is easy to use and simplifies the development of new software tools with a minimal loss of performance

seqprep

Homepage:
Spack package:
Versions:
1.3.2
Description:
SeqPrep is a program to merge paired end Illumina reads that are overlapping into a single longer read.

seqtk

Homepage:
Spack package:
Versions:
1.3, 1.2, 1.1
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Toolkit for processing sequences in FASTA/Q formats.

serf

Homepage:
Spack package:
Versions:
1.3.9, 1.3.8
Build Dependencies:
scons, apr, apr-util, openssl, zlib
Link Dependencies:
apr, apr-util, openssl, zlib
Description:
Apache Serf - a high performance C-based HTTP client library built upon the Apache Portable Runtime (APR) library

sessreg

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
xproto, pkgconfig, util-macros
Description:
Sessreg is a simple program for managing utmp/wtmp entries for X sessions. It was originally written for use with xdm, but may also be used with other display managers such as gdm or kdm.

setxkbmap

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
libxkbfile, libx11, pkgconfig, util-macros
Link Dependencies:
libxkbfile, libx11
Description:
setxkbmap is an X11 client to change the keymaps in the X server for a specified keyboard to use the layout determined by the options listed on the command line.

sga

Homepage:
Spack package:
Versions:
0.10.15, 0.10.14, 0.10.13, 0.10.12, 0.10.11, 0.10.10, 0.10.9, 0.10.8, 0.10.3
Build Dependencies:
zlib, sparsehash, jemalloc, bamtools, autoconf, automake, libtool
Link Dependencies:
zlib, sparsehash, jemalloc, bamtools
Description:
SGA is a de novo genome assembler based on the concept of string graphs. The major goal of SGA is to be very memory efficient, which is achieved by using a compressed representation of DNA sequence reads.

shapeit

Homepage:
Spack package:
Versions:
2.837
Description:
SHAPEIT is a fast and accurate method for estimation of haplotypes (aka phasing) from genotype or sequencing data.

shared-mime-info

Homepage:
Spack package:
Versions:
1.9, 1.8
Build Dependencies:
glib, libxml2, intltool, gettext, pkgconfig
Link Dependencies:
glib, libxml2
Description:
Database of common MIME types.

shiny-server

Homepage:
Spack package:
Versions:
1.5.3.838
Build Dependencies:
cmake, python, git, r, openssl
Link Dependencies:
cmake, python, git, r, openssl
Description:
Shiny server lets you put shiny web applications and interactive documents online. Take your shiny apps and share them with your organization or the world.

shocklibs

Homepage:
Spack package:
Versions:
0.9.24
Description:
The lib for shock: An object store for scientific data.

shoremap

Homepage:
Spack package:
Versions:
3.6
Build Dependencies:
dislin
Link Dependencies:
dislin
Description:
SHOREmap is a computational tool implementing a method that enables simple and straightforward mapping-by-sequencing analysis. Whole genome resequencing of pools of recombinant mutant genomes allows directly linking phenotypic traits to causal mutations. Such an analysis, called mapping-by-sequencing, combines classical genetic mapping and next generation sequencing by relying on selection-induced patterns within genome-wide allele frequency in pooled genomes.

shortbred

Homepage:
Spack package:
Versions:
0.9.4
Build Dependencies:
blast-plus, cdhit, muscle, python, py-biopython, usearch
Link Dependencies:
blast-plus, cdhit, muscle, python, py-biopython, usearch
Description:
ShortBRED is a system for profiling protein families of interest at very high specificity in shotgun meta'omic sequencing data.

shortstack

Homepage:
Spack package:
Versions:
3.8.3
Build Dependencies:
perl, samtools, viennarna, bowtie
Link Dependencies:
samtools, viennarna, bowtie
Run Dependencies:
perl
Description:
ShortStack is a tool developed to process and analyze smallRNA-seq data with respect to a reference genome, and output a comprehensive and informative annotation of all discovered small RNA genes.

showfont

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libfs, pkgconfig, util-macros
Link Dependencies:
libfs
Description:
showfont displays data about a font from an X font server. The information shown includes font information, font properties, character metrics, and character bitmaps.

shuffile

Homepage:
Spack package:
Versions:
master, 0.0.3
Build Dependencies:
cmake, mpi, kvtree
Link Dependencies:
mpi, kvtree
Description:
Shuffle files between MPI ranks

sickle

Homepage:
Spack package:
Versions:
1.33
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Sickle is a tool that uses sliding windows along with quality and length thresholds to determine when quality is sufficiently low to trim the 3'-end of reads and also determines when the quality is sufficiently high enough to trim the 5'-end of reads.

siesta

Homepage:
Spack package:
Versions:
4.0.1, 3.2-pl-5
Build Dependencies:
mpi, blas, lapack, scalapack, netcdf, netcdf-fortran
Link Dependencies:
mpi, blas, lapack, scalapack, netcdf, netcdf-fortran
Description:
SIESTA performs electronic structure calculations and ab initio molecular dynamics simulations of molecules and solids.

signalp

Homepage:
Spack package:
Versions:
4.1f
Build Dependencies:
perl, gnuplot
Link Dependencies:
gnuplot
Run Dependencies:
perl
Description:
SignalP predicts the presence and location of signal peptide cleavage sites in amino acid sequences from different organisms: Gram-positive bacteria, Gram-negative bacteria, and eukaryotes. Note: A manual download is required for SignalP. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

signify

Homepage:
Spack package:
Versions:
23
Build Dependencies:
libbsd
Link Dependencies:
libbsd
Description:
OpenBSD tool to signs and verify signatures on files.

silo

Homepage:
Spack package:
Versions:
4.10.2-bsd, 4.10.2, 4.9, 4.8
Build Dependencies:
hdf5, mpi, qt, zlib
Link Dependencies:
hdf5, mpi, qt, zlib
Description:
Silo is a library for reading and writing a wide variety of scientific data to binary, disk files.

simgrid

Homepage:
Spack package:
Versions:
3.21, 3.20, 3.19, 3.18, 3.17, 3.16, 3.15, 3.14.159, 3.13, 3.12, 3.11, git
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
To study the behavior of large-scale distributed systems such as Grids, Clouds, HPC or P2P systems.

simplemoc

Homepage:
Spack package:
Versions:
4
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
The purpose of this mini-app is to demonstrate the performance characterterics and viability of the Method of Characteristics (MOC) for 3D neutron transport calculations in the context of full scale light water reactor simulation.

simul

Homepage:
Spack package:
Versions:
1.16, 1.15, 1.14, 1.13
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
simul is an MPI coordinated test of parallel filesystem system calls and library functions.

simulationio

Homepage:
Spack package:
Versions:
develop, 1.0.0, 0.1.0
Build Dependencies:
cmake, hdf5, julia, py-h5py, py-numpy, python, swig
Link Dependencies:
hdf5, python
Run Dependencies:
julia, py-h5py, py-numpy, python
Description:
SimulationIO: Efficient and convenient I/O for large PDE simulations

singularity

Homepage:
Spack package:
Versions:
develop, 3.1.1
Build Dependencies:
go, libuuid, libgpg-error, git
Link Dependencies:
go, libuuid, libgpg-error, git
Run Dependencies:
squashfs
Description:
Singularity is a container technology focused on building portable encapsulated environments to support "Mobility of Compute" For older versions of Singularity (pre 3.0) you should use singularity-legacy, which has a different install base (Autotools). Needs post-install chmod/chown steps to enable full functionality. See package definition for details.

singularity-legacy

Homepage:
Spack package:
Versions:
2.6.1, 2.6.0, 2.6-release, 2.5.2
Build Dependencies:
libarchive, m4, autoconf, automake, libtool
Link Dependencies:
libarchive
Description:
Singularity is a container platform focused on supporting 'Mobility of Compute'. The software changed the installation method from AutoTools to GoLang, so we have two separate package names to support that. The legacy package is pre-version 3.0.0

sirius

Homepage:
Spack package:
Versions:
6.1.5
Build Dependencies:
cmake, python, mpi, gsl, lapack, fftw, libxc, spglib, hdf5, pkgconfig, elpa, libvdwxc, scalapack
Link Dependencies:
python, mpi, gsl, lapack, fftw, libxc, spglib, hdf5, elpa, libvdwxc, scalapack
Description:
Domain specific library for electronic structure calculations

skilion-onedrive

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
dmd, curl, sqlite
Link Dependencies:
dmd, curl, sqlite
Description:
A complete tool to interact with OneDrive on Linux, developed by Skilion, following the UNIX philosophy.

sl

Homepage:
Spack package:
Versions:
5.02
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
SL: Cure your bad habit of mistyping

slate

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cuda, intel-mkl, mpi
Link Dependencies:
cuda, intel-mkl, mpi
Description:
The Software for Linear Algebra Targeting Exascale (SLATE) project is to provide fundamental dense linear algebra capabilities to the US Department of Energy and to the high-performance computing (HPC) community at large. To this end, SLATE will provide basic dense matrix operations (e.g., matrix multiplication, rank-k update, triangular solve), linear systems solvers, least square solvers, singular value and eigenvalue solvers.

sleef

Homepage:
Spack package:
Versions:
3.2
Build Dependencies:
cmake
Description:
SIMD Library for Evaluating Elementary Functions, vectorized libm and DFT.

slepc

Homepage:
Spack package:
Versions:
develop, 3.11.0, 3.10.2, 3.10.1, 3.10.0, 3.9.2, 3.9.1, 3.9.0, 3.8.2, 3.8.0, 3.7.4, 3.7.3, 3.7.1, 3.6.3, 3.6.2
Build Dependencies:
python, petsc, arpack-ng
Link Dependencies:
petsc, arpack-ng
Description:
Scalable Library for Eigenvalue Problem Computations.

slurm

Homepage:
Spack package:
Versions:
18-08-0-1, 17-11-9-2, 17-02-6-1
Build Dependencies:
curl, glib, json-c, lz4, munge, openssl, pkgconfig, readline, zlib, gtkplus, hdf5, hwloc, mariadb, pmix
Link Dependencies:
curl, glib, json-c, lz4, munge, openssl, readline, zlib, gtkplus, hdf5, hwloc, mariadb, pmix
Description:
Slurm is an open source, fault-tolerant, and highly scalable cluster management and job scheduling system for large and small Linux clusters. Slurm requires no kernel modifications for its operation and is relatively self-contained. As a cluster workload manager, Slurm has three key functions. First, it allocates exclusive and/or non-exclusive access to resources (compute nodes) to users for some duration of time so they can perform work. Second, it provides a framework for starting, executing, and monitoring work (normally a parallel job) on the set of allocated nodes. Finally, it arbitrates contention for resources by managing a queue of pending work.

smalt

Homepage:
Spack package:
Versions:
0.7.6
Description:
SMALT aligns DNA sequencing reads with a reference genome.

smof

Homepage:
Spack package:
Versions:
2.13.1
Run Dependencies:
python
Description:
Explore and analyze biological sequence data

smproxy

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libsm, libice, libxt, libxmu, pkgconfig, util-macros
Link Dependencies:
libsm, libice, libxt, libxmu
Description:
smproxy allows X applications that do not support X11R6 session management to participate in an X11R6 session.

snakemake

Homepage:
Spack package:
Versions:
3.11.2
Build Dependencies:
python, py-requests, py-setuptools, py-wrapt
Link Dependencies:
python
Run Dependencies:
python, py-requests, py-setuptools, py-wrapt
Description:
Snakemake is an MIT-licensed workflow management system.

snap

Homepage:
Spack package:
Versions:
master
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
SNAP serves as a proxy application to model the performance of a modern discrete ordinates neutral particle transport application. SNAP may be considered an update to Sweep3D, intended for hybrid computing architectures. It is modeled off the Los Alamos National Laboratory code PARTISN.

snap-berkeley

Homepage:
Spack package:
Versions:
1.0beta.18, 0.15
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
SNAP is a fast and accurate aligner for short DNA reads. It is optimized for modern read lengths of 100 bases or higher, and takes advantage of these reads to align data quickly through a hash-based indexing scheme.

snap-korf

Homepage:
Spack package:
Versions:
2013-11-29
Build Dependencies:
perl, boost, sqlite, sparsehash
Link Dependencies:
boost, sqlite, sparsehash
Run Dependencies:
perl
Description:
SNAP is a general purpose gene finding program suitable for both eukaryotic and prokaryotic genomes.

snappy

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
cmake
Test Dependencies:
googletest
Description:
A fast compressor/decompressor: https://code.google.com/p/snappy

snbone

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
metis
Link Dependencies:
metis
Description:
This application targets the primary computational solve burden of a SN, continuous finite element based transport equation solver.

sniffles

Homepage:
Spack package:
Versions:
1.0.7, 1.0.5
Build Dependencies:
cmake
Description:
Structural variation caller using third generation sequencing.

snpeff

Homepage:
Spack package:
Versions:
2017-11-24
Build Dependencies:
jdk
Run Dependencies:
jdk
Description:
SnpEff is a variant annotation and effect prediction tool. It annotates and predicts the effects of genetic variants (such as amino acid changes).

snphylo

Homepage:
Spack package:
Versions:
2016-02-04
Build Dependencies:
python, r, r-phangorn, r-gdsfmt, r-snprelate, r-getopt, muscle, phylip
Link Dependencies:
muscle, phylip
Run Dependencies:
python, r, r-phangorn, r-gdsfmt, r-snprelate, r-getopt
Description:
A pipeline to generate a phylogenetic tree from huge SNP data

snptest

Homepage:
Spack package:
Versions:
2.5.2
Description:
SNPTEST is a program for the analysis of single SNP association in genome-wide studies.

soap2

Homepage:
Spack package:
Versions:
2.21
Description:
Software for short oligonucleotide alignment.

soapdenovo-trans

Homepage:
Spack package:
Versions:
1.0.4
Description:
SOAPdenovo-Trans is a de novo transcriptome assembler basing on the SOAPdenovo framework, adapt to alternative splicing and different expression level among transcripts.

soapdenovo2

Homepage:
Spack package:
Versions:
240
Description:
SOAPdenovo is a novel short-read assembly method that can build a de novo draft assembly for the human-sized genomes. The program is specially designed to assemble Illumina GA short reads. It creates new opportunities for building reference sequences and carrying out accurate analyses of unexplored genomes in a cost effective way.

soapindel

Homepage:
Spack package:
Versions:
2.1.7.17
Build Dependencies:
perl
Run Dependencies:
perl
Description:
SOAPindel is focusing on calling indels from the next-generation paired- end sequencing data.

soapsnp

Homepage:
Spack package:
Versions:
1.03
Build Dependencies:
boost
Link Dependencies:
boost
Description:
SOAPsnp uses a method based on Bayes' theorem (the reverse probability model) to call consensus genotype by carefully considering the data quality, alignment, and recurring experimental errors.

sofa-c

Homepage:
Spack package:
Versions:
20180130
Description:
Standards of Fundamental Astronomy (SOFA) library for ANSI C.

somatic-sniper

Homepage:
Spack package:
Versions:
1.0.5.0
Build Dependencies:
cmake, ncurses
Link Dependencies:
ncurses
Description:
A tool to call somatic single nucleotide variants.

sortmerna

Homepage:
Spack package:
Versions:
2017-07-13
Build Dependencies:
cmake, zlib
Link Dependencies:
zlib
Description:
SortMeRNA is a program tool for filtering, mapping and OTU-picking NGS reads in metatranscriptomic and metagenomic data

sosflow

Homepage:
Spack package:
Versions:
spack
Build Dependencies:
cmake, libevpath, sqlite, pkgconfig, mpi
Link Dependencies:
libevpath, sqlite, pkgconfig, mpi
Description:
SOSflow provides a flexible, scalable, and programmable framework for observation, introspection, feedback, and control of HPC applications.

sowing

Homepage:
Spack package:
Versions:
1.1.25-p1, 1.1.23-p1
Description:
Sowing generates Fortran interfaces and documentation for PETSc and MPICH.

sox

Homepage:
Spack package:
Versions:
14.4.2
Build Dependencies:
bzip2, flac, id3lib, libvorbis, opus
Link Dependencies:
bzip2, flac, id3lib, libvorbis, opus
Description:
SoX, the Swiss Army knife of sound processing programs.

spades

Homepage:
Spack package:
Versions:
3.13.0, 3.12.0, 3.11.1, 3.10.1
Build Dependencies:
cmake, python, zlib, bzip2
Link Dependencies:
zlib, bzip2
Run Dependencies:
python
Description:
SPAdes - St. Petersburg genome assembler - is intended for both standard isolates and single-cell MDA bacteria assemblies.

span-lite

Homepage:
Spack package:
Versions:
0.5.0, 0.4.0, 0.3.0, 0.2.0, 0.1.0
Build Dependencies:
cmake
Description:
A single-file header-only version of a C++20-like span for C++98, C++11 and later

spark

Homepage:
Spack package:
Versions:
2.3.0, 2.1.0, 2.0.2, 2.0.0, 1.6.2, 1.6.1, 1.6.0
Build Dependencies:
java, hadoop
Run Dependencies:
java, hadoop
Description:
Apache Spark is a fast and general engine for large-scale data processing.

sparsehash

Homepage:
Spack package:
Versions:
2.0.3
Description:
Sparse and dense hash-tables for C++ by Google

sparta

Homepage:
Spack package:
Versions:
1.25
Build Dependencies:
bowtie2, python, py-scipy, py-numpy
Link Dependencies:
bowtie2
Run Dependencies:
python, py-scipy, py-numpy
Description:
small RNA-PARE Target Analyzer (sPARTA) is a tool which utilizes high- throughput sequencing to profile genome-wide cleavage products.

spdlog

Homepage:
Spack package:
Versions:
1.2.1, 1.2.0, 1.1.0, 1.0.0, 0.17.0, 0.16.3, 0.16.2, 0.16.1, 0.16.0, 0.14.0, 0.13.0, 0.12.0, 0.11.0, 0.10.0, 0.9.0
Build Dependencies:
cmake
Description:
Very fast, header only, C++ logging library

spectrum-mpi

Homepage:
Spack package:
Description:
IBM MPI implementation from Spectrum MPI.

speex

Homepage:
Spack package:
Versions:
1.2.0
Description:
Speex is an Open Source/Free Software patent-free audio compression format designed for speech.

spglib

Homepage:
Spack package:
Versions:
1.10.3, 1.10.0
Build Dependencies:
cmake
Description:
C library for finding and handling crystal symmetries.

sph2pipe

Homepage:
Spack package:
Versions:
2.5
Build Dependencies:
cmake
Description:
Sph2pipe is a portable tool for converting SPHERE files to other formats.

spherepack

Homepage:
Spack package:
Versions:
3.2
Description:
SPHEREPACK - A Package for Modeling Geophysical Processes

spindle

Homepage:
Spack package:
Versions:
0.8.1
Build Dependencies:
launchmon
Link Dependencies:
launchmon
Description:
Spindle improves the library-loading performance of dynamically linked HPC applications. Without Spindle large MPI jobs can overload on a shared file system when loading dynamically linked libraries, causing site-wide performance problems.

spm

Homepage:
Spack package:
Versions:
12_r7219
Build Dependencies:
zip
Run Dependencies:
matlab
Description:
Statistical Parametric Mapping refers to the construction and assessment of spatially extended statistical processes used to test hypotheses about functional imaging data. These ideas have been instantiated in software that is called SPM.

spot

Homepage:
Spack package:
Versions:
1.99.3, 1.2.6
Build Dependencies:
python, boost
Link Dependencies:
python, boost
Description:
Spot is a C++11 library for omega-automata manipulation and model checking.

sqlite

Homepage:
Spack package:
Versions:
3.28.0, 3.27.2, 3.27.1, 3.27.0, 3.26.0
Build Dependencies:
readline
Link Dependencies:
readline
Description:
SQLite3 is an SQL database engine in a C library. Programs that link the SQLite3 library can have SQL database access without running a separate RDBMS process.

sqlitebrowser

Homepage:
Spack package:
Versions:
3.10.1
Build Dependencies:
cmake, sqlite, qt
Link Dependencies:
sqlite, qt
Description:
DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite.

squashfs

Homepage:
Spack package:
Versions:
4.3, 4.2, 4.1, 4.0
Build Dependencies:
m4, autoconf, automake, libtool, zlib
Link Dependencies:
zlib
Description:
Squashfs - read only compressed filesystem

squid

Homepage:
Spack package:
Versions:
1.9g
Description:
C function library for sequence analysis.

sra-toolkit

Homepage:
Spack package:
Versions:
2.9.6, 2.9.2, 2.8.2-1
Description:
The NCBI SRA Toolkit enables reading ("dumping") of sequencing files from the SRA database and writing ("loading") files into the .sra format.

ssht

Homepage:
Spack package:
Versions:
1.2b1
Build Dependencies:
fftw
Link Dependencies:
fftw
Description:
The SSHT code provides functionality to perform fast and exact spin spherical harmonic transforms.

sspace-longread

Homepage:
Spack package:
Versions:
1.1
Build Dependencies:
perl
Run Dependencies:
perl
Description:
SSPACE-LongRead is a stand-alone program for scaffolding pre-assembled contigs using long reads Note: A manual download is required for SSPACE- LongRead. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

sspace-standard

Homepage:
Spack package:
Versions:
3.0
Build Dependencies:
perl, perl-perl4-corelibs
Run Dependencies:
perl, perl-perl4-corelibs
Description:
SSPACE standard is a stand-alone program for scaffolding pre-assembled contigs using NGS paired-read data Note: A manual download is required for SSPACE-Standard. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

sst-core

Homepage:
Spack package:
Versions:
develop, 8.0.0
Build Dependencies:
autoconf, automake, libtool, m4, python, zlib, mpi, boost
Link Dependencies:
python, mpi
Description:
The Structural Simulation Toolkit (SST) was developed to explore innovations in highly concurrent systems where the ISA, microarchitecture, and memory interact with the programming model and communications system

sst-dumpi

Homepage:
Spack package:
Versions:
master, 6.1.0
Build Dependencies:
autoconf, automake, libtool, m4
Description:
The DUMPI package provides libraries to collect and read traces of MPI applications. Traces are created by linking an application with a library that uses the PMPI interface to intercept MPI calls. DUMPI records signatures of all MPI-1 and MPI-2 subroutine calls, return values, request information, and PAPI counters.

sst-macro

Homepage:
Spack package:
Versions:
develop, 8.0.0, 6.1.0
Build Dependencies:
boost, autoconf, automake, libtool, m4, binutils, zlib, otf2, llvm, mpi, sst-core
Link Dependencies:
boost, zlib, otf2, llvm, mpi, sst-core
Description:
The Structural Simulation Toolkit Macroscale Element Library simulates large-scale parallel computer architectures for the coarse-grained study of distributed-memory applications. The simulator is driven from either a trace file or skeleton application. SST/macro's modular architecture can be extended with additional network models, trace file formats, software services, and processor models.

stacks

Homepage:
Spack package:
Versions:
2.3b, 1.46
Build Dependencies:
perl, sparsehash, zlib
Link Dependencies:
sparsehash, zlib
Run Dependencies:
perl
Description:
Stacks is a software pipeline for building loci from short-read sequences, such as those generated on the Illumina platform.

staden-io-lib

Homepage:
Spack package:
Versions:
1.14.8
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Io_lib is a library for reading/writing various bioinformatics file formats.

star

Homepage:
Spack package:
Versions:
2.7.0e, 2.7.0d, 2.6.1b, 2.6.1a, 2.6.0c, 2.6.0b, 2.6.0a, 2.5.4b, 2.5.4a, 2.5.3a, 2.5.2b, 2.5.2a, 2.4.2a
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
STAR is an ultrafast universal RNA-seq aligner.

star-ccm-plus

Homepage:
Spack package:
Versions:
11.06.010_02
Description:
STAR-CCM+ (Computational Continuum Mechanics) CFD solver.

startup-notification

Homepage:
Spack package:
Versions:
0.12
Build Dependencies:
libx11, libxcb, xcb-util
Link Dependencies:
libx11, libxcb, xcb-util
Description:
startup-notification contains a reference implementation of the freedesktop startup notification protocol.

stat

Homepage:
Spack package:
Versions:
develop, 4.0.1, 4.0.0, 3.0.1, 3.0.0, 2.2.0, 2.1.0, 2.0.0
Build Dependencies:
autoconf, automake, libtool, dyninst, fast-global-file-status, graphlib, graphviz, launchmon, mrnet, python, py-pygtk, py-xdot, swig, mpi
Link Dependencies:
dyninst, fast-global-file-status, graphlib, graphviz, launchmon, mrnet, python, py-xdot, swig, mpi
Run Dependencies:
graphviz, py-pygtk, py-enum34
Description:
Library to create, manipulate, and export graphs Graphlib.

stata

Homepage:
Spack package:
Versions:
15
Build Dependencies:
libpng
Link Dependencies:
libpng
Description:
STATA is a general-purpose statistical software package developed by StataCorp.

stc

Homepage:
Spack package:
Versions:
develop, 0.8.2
Build Dependencies:
java, ant, turbine, zsh, autoconf, automake, libtool
Run Dependencies:
java, turbine, zsh
Description:
STC: The Swift-Turbine Compiler

steps

Homepage:
Spack package:
Versions:
develop, 3.3.0, 3.2.0
Build Dependencies:
cmake, blas, lapack, mpi, petsc, python, py-cython
Link Dependencies:
blas, lapack, mpi, petsc, python, py-cython
Description:
STochastic Engine for Pathway Simulation

stow

Homepage:
Spack package:
Versions:
2.2.2, 2.2.0, 2.1.3, 2.1.2, 2.1.1, 2.1.0
Build Dependencies:
perl
Link Dependencies:
perl
Description:
GNU Stow: a symlink farm manager GNU Stow is a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place.

strace

Homepage:
Spack package:
Versions:
5.0, 4.21
Description:
Strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state.

stream

Homepage:
Spack package:
Versions:
5.10
Description:
The STREAM benchmark is a simple synthetic benchmark program that measures sustainable memory bandwidth (in MB/s) and the corresponding computation rate for simple vector kernels.

strelka

Homepage:
Spack package:
Versions:
2.8.2
Build Dependencies:
cmake, python, zlib, bzip2, boost
Link Dependencies:
cmake, python, zlib, bzip2, boost
Description:
Somatic and germline small variant caller for mapped sequencing data.

stress

Homepage:
Spack package:
Versions:
1.0.4
Description:
stress is a deliberately simple workload generator for POSIX systems. It imposes a configurable amount of CPU, memory, I/O, and disk stress on the system. It is written in C, and is free software licensed under the GPLv2.

string-view-lite

Homepage:
Spack package:
Versions:
1.2.0, 1.1.0, 1.0.0, 0.2.0, 0.1.0
Build Dependencies:
cmake
Description:
A single-file header-only version of a C++17-like string_view for C++98, C++11 and later

stringtie

Homepage:
Spack package:
Versions:
1.3.4d, 1.3.4a, 1.3.3b
Build Dependencies:
samtools
Link Dependencies:
samtools
Description:
StringTie is a fast and highly efficient assembler of RNA-Seq alignments into potential transcripts.

structure

Homepage:
Spack package:
Versions:
2.3.4
Build Dependencies:
jdk
Run Dependencies:
jdk
Description:
Structure is a free software package for using multi-locus genotype data to investigate population structure.

strumpack

Homepage:
Spack package:
Versions:
master, 3.1.1, 3.1.0, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.2.0
Build Dependencies:
cmake, mpi, blas, lapack, scalapack, metis, parmetis, scotch
Link Dependencies:
mpi, blas, lapack, scalapack, metis, parmetis, scotch
Description:
STRUMPACK -- STRUctured Matrix PACKage - provides linear solvers for sparse matrices and for dense rank-structured matrices, i.e., matrices that exhibit some kind of low-rank property. It provides a distributed memory fully algebraic sparse solver and preconditioner. The preconditioner is mostly aimed at large sparse linear systems which result from the discretization of a partial differential equation, but is not limited to any particular type of problem. STRUMPACK also provides preconditioned GMRES and BiCGStab iterative solvers.

sublime-text

Homepage:
Spack package:
Versions:
3.2.1.3207, 3.1.1.3176, 3.0.3126, 2.0.2
Run Dependencies:
gtkplus, glib, libx11, pcre, libffi, libxcb, libxau
Description:
Sublime Text is a sophisticated text editor for code, markup and prose.

subread

Homepage:
Spack package:
Versions:
1.6.2, 1.6.0, 1.5.2
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
The Subread software package is a tool kit for processing next-gen sequencing data.

subversion

Homepage:
Spack package:
Versions:
1.9.7, 1.9.6, 1.9.5, 1.9.3, 1.8.17, 1.8.13
Build Dependencies:
apr, apr-util, zlib, sqlite, serf, perl, swig, perl-term-readkey
Link Dependencies:
apr, apr-util, zlib, sqlite, serf, perl, swig, perl-term-readkey
Description:
Apache Subversion - an open source version control system.

suite-sparse

Homepage:
Spack package:
Versions:
5.3.0, 5.2.0, 5.1.0, 4.5.5, 4.5.4, 4.5.3, 4.5.1
Build Dependencies:
blas, lapack, cmake, metis, tbb, cuda
Link Dependencies:
blas, lapack, metis, tbb, cuda
Description:
SuiteSparse is a suite of sparse matrix algorithms

sumaclust

Homepage:
Spack package:
Versions:
1.0.20
Description:
Sumaclust aims to cluster sequences in a way that is fast and exact at the same time.

sundials

Homepage:
Spack package:
Versions:
4.1.0, 4.0.1, 3.2.1, 3.2.0, 3.1.2, 3.1.1, 3.1.0, 3.0.0, 2.7.0, 2.6.2
Build Dependencies:
cmake, mpi, cuda, raja, blas, lapack, suite-sparse, petsc, hypre, superlu-mt
Link Dependencies:
mpi, cuda, raja, blas, lapack, suite-sparse, petsc, hypre, superlu-mt
Description:
SUNDIALS (SUite of Nonlinear and DIfferential/ALgebraic equation Solvers)

superlu

Homepage:
Spack package:
Versions:
5.2.1, 4.3
Build Dependencies:
cmake, blas
Link Dependencies:
blas
Description:
SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations on high performance machines. SuperLU is designed for sequential machines.

superlu-dist

Homepage:
Spack package:
Versions:
develop, 6.1.1, 6.1.0, 6.0.0, 5.4.0, 5.3.0, 5.2.2, 5.2.1, 5.1.3, 5.1.2, 5.1.0, 5.0.0, xsdk-0.2.0
Build Dependencies:
cmake, mpi, blas, lapack, parmetis, metis
Link Dependencies:
mpi, blas, lapack, parmetis, metis
Description:
A general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations on high performance machines.

superlu-mt

Homepage:
Spack package:
Versions:
3.1
Build Dependencies:
blas
Link Dependencies:
blas
Description:
SuperLU is a general purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations on high performance machines. SuperLU_MT is designed for shared memory parallel machines.

supernova

Homepage:
Spack package:
Versions:
2.1.1, 2.0.1
Build Dependencies:
bcl2fastq2
Link Dependencies:
bcl2fastq2
Description:
Supernova is a software package for de novo assembly from Chromium Linked-Reads that are made from a single whole-genome library from an individual DNA source. A key feature of Supernova is that it creates diploid assemblies, thus separately representing maternal and paternal chromosomes over very long distances. Almost all other methods instead merge homologous chromosomes into single incorrect 'consensus' sequences. Supernova is the only practical method for creating diploid assemblies of large genomes. To install this package, you will need to go to the supernova download page of supernova, register with your email address and download supernova yourself. Spack will search your current directory for the download file. Alternatively, add this file yo a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

sw4lite

Homepage:
Spack package:
Versions:
develop, 1.1, 1.0
Build Dependencies:
blas, lapack, mpi
Link Dependencies:
blas, lapack, mpi
Description:
Sw4lite is a bare bone version of SW4 intended for testing performance optimizations in a few important numerical kernels of SW4.

swap-assembler

Homepage:
Spack package:
Versions:
0.4
Build Dependencies:
mpich
Link Dependencies:
mpich
Description:
A scalable and fully parallelized genome assembler.

swarm

Homepage:
Spack package:
Versions:
2.1.13
Description:
A robust and fast clustering method for amplicon-based studies.

swfft

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
mpi, fftw
Link Dependencies:
mpi, fftw
Description:
A stand-alone version of HACC's distributed-memory, pencil-decomposed, parallel 3D FFT.

swiftsim

Homepage:
Spack package:
Versions:
0.7.0, 0.3.0
Build Dependencies:
autoconf, automake, libtool, m4, mpi, metis, hdf5
Link Dependencies:
mpi, metis, hdf5
Description:
SPH With Inter-dependent Fine-grained Tasking (SWIFT) provides astrophysicists with a state of the art framework to perform particle based simulations.

swig

Homepage:
Spack package:
Versions:
3.0.12, 3.0.11, 3.0.10, 3.0.8, 3.0.2, 2.0.12, 2.0.2, 1.3.40
Build Dependencies:
pcre
Link Dependencies:
pcre
Description:
SWIG is an interface compiler that connects programs written in C and C++ with scripting languages such as Perl, Python, Ruby, and Tcl. It works by taking the declarations found in C/C++ header files and using them to generate the wrapper code that scripting languages need to access the underlying C/C++ code. In addition, SWIG provides a variety of customization features that let you tailor the wrapping process to suit your application.

symengine

Homepage:
Spack package:
Versions:
develop, 0.4.0, 0.3.0, 0.2.0, 0.1.0
Build Dependencies:
cmake, boost, gmp, llvm, mpc, mpfr, flint, piranha
Link Dependencies:
boost, gmp, llvm, mpc, mpfr, flint, piranha
Description:
SymEngine is a fast symbolic manipulation library, written in C++.

sympol

Homepage:
Spack package:
Versions:
0.1.8
Build Dependencies:
cmake, bliss, boost, gmp, lrslib
Link Dependencies:
bliss, boost, gmp, lrslib
Description:
SymPol is a C++ tool to work with symmetric polyhedra

sz

Homepage:
Spack package:
Versions:
develop, 2.0.2.0, 1.4.13.5, 1.4.13.4, 1.4.13.3, 1.4.13.2, 1.4.13.0, 1.4.12.3, 1.4.12.1, 1.4.11.1, 1.4.11.0, 1.4.10.0, 1.4.9.2
Description:
Error-bounded Lossy Compressor for HPC Data.

tabix

Homepage:
Spack package:
Versions:
2013-12-16
Build Dependencies:
perl, python
Run Dependencies:
perl, python
Description:
Generic indexer for TAB-delimited genome position files

talass

Homepage:
Spack package:
Versions:
2018-10-29
Build Dependencies:
cmake
Description:
TALASS: Topological Analysis of Large-Scale Simulations This package compiles the talass tool chain thar implements various topological algorithms to analyze large scale data. The package is organized hierarchical FileFormat < Statistics < StreamingTopology and any of the subsets can be build stand- alone.

talloc

Homepage:
Spack package:
Versions:
2.1.9
Description:
Talloc provides a hierarchical, reference counted memory pool system with destructors. It is the core memory allocator used in Samba.

tantan

Homepage:
Spack package:
Versions:
13
Description:
tantan is a tool to mask simple regions (low complexity and short-period tandem repeats) in DNA, RNA, and protein sequences.

tar

Homepage:
Spack package:
Versions:
1.31, 1.30, 1.29, 1.28
Description:
GNU Tar provides the ability to create tar archives, as well as various other kinds of manipulation.

targetp

Homepage:
Spack package:
Versions:
1.1b
Build Dependencies:
chlorop, signalp
Link Dependencies:
chlorop, signalp
Run Dependencies:
perl, awk
Description:
TargetP predicts the subcellular location of eukaryotic protein sequences. Note: A manual download is required for TargetP. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

task

Homepage:
Spack package:
Versions:
2.5.1, 2.4.4
Build Dependencies:
cmake, gnutls, libuuid
Link Dependencies:
gnutls, libuuid
Description:
Feature-rich console based todo list manager

taskd

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
cmake, libuuid, gnutls
Link Dependencies:
libuuid, gnutls
Description:
TaskWarrior task synchronization daemon

tasmanian

Homepage:
Spack package:
Versions:
develop, 6.0, 5.1, 5.0
Build Dependencies:
cmake, python, py-numpy, mpi, blas, cuda, magma
Link Dependencies:
python
Run Dependencies:
python, py-numpy, mpi, blas, cuda, magma
Description:
The Toolkit for Adaptive Stochastic Modeling and Non-Intrusive ApproximatioN is a robust library for high dimensional integration and interpolation as well as parameter calibration.

tassel

Homepage:
Spack package:
Versions:
2017-07-22
Build Dependencies:
java, perl
Run Dependencies:
java, perl
Description:
TASSEL is a software package to evaluate traits associations, evolutionary patterns, and linkage disequilibrium.

tau

Homepage:
Spack package:
Versions:
develop, 2.28, 2.27.2p1, 2.27.2, 2.27.1, 2.27, 2.26.3, 2.26.2, 2.26.1, 2.26, 2.25, 2.24.1, 2.24, 2.23.1
Build Dependencies:
pdt, scorep, otf2, likwid, papi, binutils, python, libunwind, mpi, cuda, gasnet
Link Dependencies:
pdt, scorep, otf2, likwid, papi, binutils, python, libunwind, mpi, cuda, gasnet
Description:
A portable profiling and tracing toolkit for performance analysis of parallel programs written in Fortran, C, C++, UPC, Java, Python.

tcl

Homepage:
Spack package:
Versions:
8.6.8, 8.6.6, 8.6.5, 8.6.4, 8.6.3, 8.5.19
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more. Open source and business-friendly, Tcl is a mature yet evolving language that is truly cross platform, easily deployed and highly extensible.

tcl-itcl

Homepage:
Spack package:
Versions:
4.0.4
Build Dependencies:
tcl
Link Dependencies:
tcl
Description:
[incr Tcl] is the most widely used O-O system for Tcl. The name is a play on C++, and [incr Tcl] provides a similar object model, including multiple inheritence and public and private classes and variables.

tcl-tcllib

Homepage:
Spack package:
Versions:
1.19, 1.18, 1.17, 1.16, 1.15, 1.14
Build Dependencies:
tcl
Link Dependencies:
tcl
Description:
Tcllib is a collection of utility modules for Tcl. These modules provide a wide variety of functionality, from implementations of standard data structures to implementations of common networking protocols. The intent is to collect commonly used function into a single library, which users can rely on to be available and stable.

tcl-tclxml

Homepage:
Spack package:
Versions:
3.2, 3.1
Build Dependencies:
tcl, tcl-tcllib, libxml2, libxslt
Link Dependencies:
tcl, tcl-tcllib, libxml2, libxslt
Description:
TclXML is an API for parsing XML documents using the Tcl scripting language. It is also a package including a DOM implementation (TclDOM) and XSL Transformations (TclXSLT). These allow Tcl scripts to read, manipulate and write XML documents.

tclap

Homepage:
Spack package:
Versions:
1.2.2, 1.2.1
Description:
Templatized C++ Command Line Parser

tcoffee

Homepage:
Spack package:
Versions:
2017-08-17
Build Dependencies:
perl, blast-plus, dialign-tx, viennarna, clustalw, tmalign, muscle, mafft, pcma, poamsa, probconsrna
Link Dependencies:
blast-plus, dialign-tx, viennarna, clustalw, tmalign, muscle, mafft, pcma, poamsa, probconsrna
Run Dependencies:
perl
Description:
T-Coffee is a multiple sequence alignment program.

tcptrace

Homepage:
Spack package:
Versions:
6.6.7
Build Dependencies:
bison, flex, libpcap
Link Dependencies:
libpcap
Description:
tcptrace is a tool written by Shawn Ostermann at Ohio University for analysis of TCP dump files. It can take as input the files produced by several popular packet-capture programs, including tcpdump, snoop, etherpeek, HP Net Metrix, and WinDump.

tcsh

Homepage:
Spack package:
Versions:
6.20.00
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Tcsh is an enhanced but completely compatible version of csh, the C shell. Tcsh is a command language interpreter which can be used both as an interactive login shell and as a shell script command processor. Tcsh includes a command line editor, programmable word completion, spelling correction, a history mechanism, job control and a C language like syntax.

tealeaf

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
Proxy Application. TeaLeaf is a mini-app that solves the linear heat conduction equation on a spatially decomposed regularly grid using a 5 point stencil with implicit solvers.

templight

Homepage:
Spack package:
Versions:
develop, 2019.01.09, 2018.07.20
Build Dependencies:
cmake, python, py-lit
Link Dependencies:
python
Run Dependencies:
py-lit
Description:
Templight is a Clang-based tool to profile the time and memory consumption of template instantiations and to perform interactive debugging sessions to gain introspection into the template instantiation process.

templight-tools

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
Supporting tools for the Templight Profiler

tetgen

Homepage:
Spack package:
Versions:
1.5.0, 1.4.3
Description:
TetGen is a program and library that can be used to generate tetrahedral meshes for given 3D polyhedral domains. TetGen generates exact constrained Delaunay tetrahedralizations, boundary conforming Delaunay meshes, and Voronoi paritions.

tethex

Homepage:
Spack package:
Versions:
develop, 0.0.7
Build Dependencies:
cmake
Description:
Tethex is designed to convert triangular (in 2D) or tetrahedral (in 3D) Gmsh's mesh to quadrilateral or hexahedral one respectively. These meshes can be used in software packages working with hexahedrals only - for example, deal.II.

texinfo

Homepage:
Spack package:
Versions:
6.5, 6.3, 6.0, 5.2, 5.1, 5.0
Build Dependencies:
perl
Link Dependencies:
perl
Description:
Texinfo is the official documentation format of the GNU project. It was invented by Richard Stallman and Bob Chassell many years ago, loosely based on Brian Reid's Scribe and other formatting languages of the time. It is used by many non-GNU projects as well.

texlive

Homepage:
Spack package:
Versions:
live
Build Dependencies:
perl
Description:
TeX Live is a free software distribution for the TeX typesetting system. Heads up, it's is not a reproducible installation.

tfel

Homepage:
Spack package:
Versions:
master, 3.2.1, 3.2.0, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.0.4, rliv-3.2, rliv-3.1, rliv-3.0, rliv-2.0, rliv-1.2
Build Dependencies:
cmake, java, python, boost
Link Dependencies:
java, python, boost
Run Dependencies:
python
Description:
The TFEL project is a collaborative development of CEA (French Alternative Energies and Atomic Energy Commission) and EDF (Electricite de France). It mostly contains the MFront code generator which translates a set of closely related domain specific languages into plain C++ on top of the TFEL libraries. MFront handles material properties, mechanical behaviours and simple point-wise models. Interfaces are provided for several finite element solvers, such as: Abaqus/Standard, Abaqus/Explicit, Ansys APDL, Cast3M, Europlexus, Code_Aster, CalculiX and a few others. MFront comes with an handy easy-to-use tool called MTest that can test the local behaviour of a material, by imposing independent constraints on each component of the strain or the stress.

the-platinum-searcher

Homepage:
Spack package:
Versions:
head
Build Dependencies:
go
Link Dependencies:
go
Description:
Fast parallel recursive grep alternative

the-silver-searcher

Homepage:
Spack package:
Versions:
2.1.0, 0.32.0, 0.30.0
Build Dependencies:
pcre, xz, zlib, pkgconfig
Link Dependencies:
pcre, xz, zlib
Description:
Fast recursive grep alternative

thornado-mini

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
mpi, hdf5, lapack
Link Dependencies:
mpi, hdf5, lapack
Description:
Code to solve the equation of radiative transfer in the multi-group two- moment approximation

thrift

Homepage:
Spack package:
Versions:
0.11.0, 0.10.0, 0.9.3, 0.9.2
Build Dependencies:
pkgconfig, java, autoconf, automake, libtool, boost, bison, flex, openssl, python, zlib, libevent
Link Dependencies:
java, boost, openssl, python, zlib, libevent
Description:
Software framework for scalable cross-language services development. Thrift combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

thrust

Homepage:
Spack package:
Versions:
1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9.0, 1.8.2
Description:
Thrust is a parallel algorithms library which resembles the C++ Standard Template Library (STL).

tig

Homepage:
Spack package:
Versions:
2.2.2
Build Dependencies:
ncurses
Link Dependencies:
ncurses
Description:
Text-mode interface for git

time

Homepage:
Spack package:
Versions:
1.9
Description:
The time command runs another program, then displays information about the resources used by that program.

tinyxml

Homepage:
Spack package:
Versions:
2.6.2
Build Dependencies:
cmake
Description:
Simple, small, efficient, C++ XML parser

tinyxml2

Homepage:
Spack package:
Versions:
4.0.1, 4.0.0, 3.0.0, 2.2.0, 2.1.0, 2.0.2
Build Dependencies:
cmake
Description:
Simple, small, efficient, C++ XML parser

tioga

Homepage:
Spack package:
Versions:
master
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Topology Independent Overset Grid Assembly (TIOGA)

tk

Homepage:
Spack package:
Versions:
8.6.8, 8.6.6, 8.6.5, 8.6.3
Build Dependencies:
tcl, libx11
Link Dependencies:
tcl, libx11
Description:
Tk is a graphical user interface toolkit that takes developing desktop applications to a higher level than conventional approaches. Tk is the standard GUI not only for Tcl, but for many other dynamic languages, and can produce rich, native applications that run unchanged across Windows, Mac OS X, Linux and more.

tldd

Homepage:
Spack package:
Versions:
master, 2018-10-05
Build Dependencies:
pstreams
Link Dependencies:
pstreams
Description:
A program similar to ldd(1) but showing the output as a tree.

tmalign

Homepage:
Spack package:
Versions:
2016-05-25
Description:
TM-align is an algorithm for sequence-order independent protein structure comparisons.

tmhmm

Homepage:
Spack package:
Versions:
2.0c
Run Dependencies:
perl
Description:
Transmembrane helices in proteins Note: A manual download is required for TMHMM. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

tmux

Homepage:
Spack package:
Versions:
2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 1.9a
Build Dependencies:
libevent, ncurses
Link Dependencies:
libevent, ncurses
Description:
Tmux is a terminal multiplexer. What is a terminal multiplexer? It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal. And do a lot more.

tmuxinator

Homepage:
Spack package:
Versions:
0.6.11
Build Dependencies:
ruby
Link Dependencies:
ruby
Description:
A session configuration creator and manager for tmux

tophat

Homepage:
Spack package:
Versions:
2.1.2, 2.1.1
Build Dependencies:
autoconf, automake, libtool, m4, boost
Link Dependencies:
boost
Run Dependencies:
bowtie2
Description:
Spliced read mapper for RNA-Seq.

tppred

Homepage:
Spack package:
Versions:
2.0
Build Dependencies:
emboss
Link Dependencies:
emboss
Run Dependencies:
python, py-scikit-learn
Description:
TPPRED is a software package for the prediction of mitochondrial targeting peptides from protein primary sequence.

tracer

Homepage:
Spack package:
Versions:
develop, 2.2
Build Dependencies:
mpi, codes, otf2
Link Dependencies:
mpi, codes, otf2
Description:
Trace Replay and Network Simulation Framework

transabyss

Homepage:
Spack package:
Versions:
1.5.5
Build Dependencies:
abyss, python, py-igraph, blat
Link Dependencies:
abyss, blat
Run Dependencies:
python, py-igraph
Description:
De novo assembly of RNAseq data using ABySS

transdecoder

Homepage:
Spack package:
Versions:
5.5.0, 3.0.1
Build Dependencies:
perl
Run Dependencies:
perl, perl-uri-escape
Description:
TransDecoder identifies candidate coding regions within transcript sequences, such as those generated by de novo RNA-Seq transcript assembly using Trinity, or constructed based on RNA-Seq alignments to the genome using Tophat and Cufflinks.

transposome

Homepage:
Spack package:
Versions:
0.11.2
Build Dependencies:
perl, blast-plus
Link Dependencies:
perl, blast-plus
Run Dependencies:
perl
Description:
A toolkit for annotation of transposable element families from unassembled sequence reads.

transset

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
transset is an utility for setting opacity property.

trapproto

Homepage:
Spack package:
Versions:
3.4.3
Description:
X.org TrapProto protocol headers.

tree

Homepage:
Spack package:
Versions:
1.7.0
Description:
Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty. Tree has been ported and reported to work under the following operating systems: Linux, FreeBSD, OS X, Solaris, HP/UX, Cygwin, HP Nonstop and OS/2.

treesub

Homepage:
Spack package:
Versions:
0.2, 0.1
Build Dependencies:
ant
Run Dependencies:
jdk, paml, raxml, figtree
Description:
A small program (which glues together other programs) that allows a user to input a codon alignment in FASTA format and produce an annotated phylogenetic tree showing which substitutions occurred on a given branch. Originally written for colleagues at the MRC NIMR.

trf

Homepage:
Spack package:
Versions:
4.09, 4.07b
Description:
Tandem Repeats Finder is a program to locate and display tandem repeats in DNA sequences. Note: A manual download is required for TRF. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

triangle

Homepage:
Spack package:
Versions:
1.6
Description:
Triangle is a two-dimensional mesh generator and Delaunay triangulator. Triangle generates exact Delaunay triangulations, constrained Delaunay triangulations, conforming Delaunay triangulations, Voronoi diagrams, and high-quality triangular meshes.

trilinos

Homepage:
Spack package:
Versions:
develop, master, 12.14.1, 12.12.1, 12.10.1, 12.8.1, 12.6.4, 12.6.3, 12.6.2, 12.6.1, 12.4.2, 12.2.1, 12.0.1, 11.14.3, 11.14.2, 11.14.1, xsdk-0.2.0
Build Dependencies:
cmake, blas, lapack, boost, matio, glm, metis, suite-sparse, zlib, mpi, netcdf, parallel-netcdf, parmetis, cgns, mumps, scalapack, superlu-dist, superlu, hypre, hdf5, python, py-numpy, swig
Link Dependencies:
blas, lapack, boost, matio, glm, metis, suite-sparse, zlib, mpi, netcdf, parallel-netcdf, parmetis, cgns, mumps, scalapack, superlu-dist, superlu, hypre, hdf5, python, swig
Run Dependencies:
py-numpy
Description:
The Trilinos Project is an effort to develop algorithms and enabling technologies within an object-oriented software framework for the solution of large-scale, complex multi-physics engineering and scientific problems. A unique design feature of Trilinos is its focus on packages.

trilinos-catalyst-ioss-adapter

Homepage:
Spack package:
Versions:
develop, master
Build Dependencies:
cmake, bison, flex, paraview, py-numpy, netcdf
Link Dependencies:
paraview, netcdf
Run Dependencies:
py-numpy
Description:
Adapter for Trilinos Seacas Ioss and Paraview Catalyst

trimal

Homepage:
Spack package:
Versions:
1.4.1
Description:
A tool for automated alignment trimming in large-scale phylogenetic analyses

trimgalore

Homepage:
Spack package:
Versions:
0.6.1, 0.6.0, 0.4.5, 0.4.4
Build Dependencies:
perl, py-cutadapt, fastqc
Link Dependencies:
fastqc
Run Dependencies:
perl, py-cutadapt
Description:
Trim Galore! is a wrapper around Cutadapt and FastQC to consistently apply adapter and quality trimming to FastQ files, with extra functionality for RRBS data.

trimmomatic

Homepage:
Spack package:
Versions:
0.38, 0.36, 0.33
Run Dependencies:
java
Description:
A flexible read trimming tool for Illumina NGS data.

trinity

Homepage:
Spack package:
Versions:
2.6.6
Build Dependencies:
java, bowtie2, jellyfish, salmon, perl, autoconf, automake, libtool
Link Dependencies:
bowtie2, jellyfish, salmon
Run Dependencies:
java, perl, blast-plus, bowtie, r, r-tidyverse, r-edger, r-deseq2, r-ape, r-gplots, r-biobase, r-qvalue, rsem, kallisto, fastqc, samtools, py-numpy, express, perl-dbfile, perl-uri-escape, r-fastcluster, r-ctc, r-goseq, r-glimma, r-rots, r-goplot, r-argparse, r-sm
Description:
Trinity, developed at the Broad Institute and the Hebrew University of Jerusalem, represents a novel method for the efficient and robust de novo reconstruction of transcriptomes from RNA-seq data. Trinity combines three independent software modules: Inchworm, Chrysalis, and Butterfly, applied sequentially to process large volumes of RNA-seq reads. Trinity partitions the sequence data into many individual de Bruijn graphs, each representing the transcriptional complexity at a given gene or locus, and then processes each graph independently to extract full-length splicing isoforms and to tease apart transcripts derived from paralogous genes.

trinotate

Homepage:
Spack package:
Versions:
3.1.1
Run Dependencies:
trinity, transdecoder, sqlite, ncbi-rmblastn, hmmer, perl, lighttpd, perl-dbi, perl-cgi, perl-dbd-sqlite
Description:
Trinotate is a comprehensive annotation suite designed for automatic functional annotation of transcriptomes, particularly de novo assembled transcriptomes, from model or non-model organisms

trnascan-se

Homepage:
Spack package:
Versions:
2.0.0
Description:
Seaching for tRNA genes in genomic sequence

turbine

Homepage:
Spack package:
Versions:
develop, 1.2.3, 1.2.1, 1.1.0
Build Dependencies:
adlbx, tcl, zsh, swig, python, r, r-rinside, hdf5, mpi, autoconf, automake, libtool, m4
Link Dependencies:
adlbx, python, r, r-rinside, hdf5, mpi
Run Dependencies:
tcl, zsh, m4
Description:
Turbine: The Swift/T runtime

turbomole

Homepage:
Spack package:
Versions:
7.0.2
Description:
TURBOMOLE: Program Package for ab initio Electronic Structure Calculations. Note: Turbomole requires purchase of a license to download. Go to the Turbomole home page, http://www.turbomole-gmbh.com, for details. Spack will search the current directory for this file. It is probably best to add this file to a Spack mirror so that it can be found from anywhere. For information on setting up a Spack mirror see http://spack.readthedocs.io/en/latest/mirrors.html

tut

Homepage:
Spack package:
Versions:
2016-12-19
Build Dependencies:
python
Description:
TUT is a small and portable unit test framework for C++.

twm

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
libx11, libxext, libxt, libxmu, libice, libsm, xproto, bison, flex, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxt, libxmu, libice, libsm
Description:
twm is a window manager for the X Window System. It provides titlebars, shaped windows, several forms of icon management, user-defined macro functions, click-to-type and pointer-driven keyboard focus, and user- specified key and pointer button bindings.

tycho2

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
A neutral particle transport mini-app to study performance of sweeps on unstructured, 3D tetrahedral meshes.

typhon

Homepage:
Spack package:
Versions:
develop, 3.0.2, 3.0.1, 3.0
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
Typhon is a distributed communications library for unstructured mesh applications.

typhonio

Homepage:
Spack package:
Versions:
develop, 1.6_CMake
Build Dependencies:
cmake, mpi, hdf5
Link Dependencies:
mpi, hdf5
Description:
TyphonIO is a library of routines that perform input/output (I/O) of scientific data within application codes

uberftp

Homepage:
Spack package:
Versions:
2_8, 2_7, 2_6
Build Dependencies:
globus-toolkit
Link Dependencies:
globus-toolkit
Description:
UberFTP is an interactive (text-based) client for GridFTP

ucx

Homepage:
Spack package:
Versions:
1.5.0, 1.4.0, 1.3.1, 1.3.0, 1.2.2, 1.2.1
Build Dependencies:
numactl, rdma-core
Link Dependencies:
numactl, rdma-core
Description:
a communication library implementing high-performance messaging for MPI/PGAS frameworks

udunits2

Homepage:
Spack package:
Versions:
2.2.24, 2.2.23, 2.2.21
Build Dependencies:
expat
Link Dependencies:
expat
Description:
Automated units conversion

ufo-core

Homepage:
Spack package:
Versions:
0.14.0
Build Dependencies:
cmake, glib, json-glib
Link Dependencies:
glib, json-glib
Description:
The UFO data processing framework is a C library suited to build general purpose streams data processing on heterogeneous architectures such as CPUs, GPUs or clusters. This package contains the run-time system and development files.

ufo-filters

Homepage:
Spack package:
Versions:
0.14.1
Build Dependencies:
cmake, ufo-core
Link Dependencies:
ufo-core
Description:
The UFO data processing framework is a C library suited to build general purpose streams data processing on heterogeneous architectures such as CPUs, GPUs or clusters. This package contains filter plugins.

umpire

Homepage:
Spack package:
Versions:
develop, master, 0.3.3, 0.3.2, 0.3.1, 0.3.0, 0.2.4, 0.2.3, 0.2.2, 0.2.1, 0.2.0, 0.1.4, 0.1.3
Build Dependencies:
cmake, cuda
Link Dependencies:
cuda
Description:
An application-focused API for memory management on NUMA & GPU architectures

unblur

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
zlib, jpeg, libtiff, gsl, jbigkit, fftw
Link Dependencies:
zlib, jpeg, libtiff, gsl, jbigkit, fftw
Description:
Unblur is used to align the frames of movies recorded on an electron microscope to reduce image blurring due to beam-induced motion.

uncrustify

Homepage:
Spack package:
Versions:
0.67, 0.61
Build Dependencies:
cmake
Description:
Source Code Beautifier for C, C++, C#, ObjectiveC, Java, and others.

unibilium

Homepage:
Spack package:
Versions:
1.2.0
Build Dependencies:
libtool
Description:
A terminfo parsing library

unifycr

Homepage:
Spack package:
Versions:
develop, 0.2.0
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, flatcc, gotcha, leveldb, margo, mpi, hdf5, numactl
Link Dependencies:
flatcc, gotcha, leveldb, margo, mpi, hdf5, numactl
Description:
User level file system that enables applications to use node-local storage as burst buffers for shared files. Supports scalable and efficient aggregation of I/O bandwidth from burst buffers while having the same life cycle as a batch-submitted job. UnifyCR is designed to support common I/O workloads, including checkpoint/restart. While primarily designed for N-N write/read, UnifyCR compliments its functionality with the support for N-1 write/read.

unison

Homepage:
Spack package:
Versions:
2.48.4
Build Dependencies:
ocaml
Description:
Unison is a file-synchronization tool for OSX, Unix, and Windows. It allows two replicas of a collection of files and directories to be stored on different hosts (or different disks on the same host), modified separately, and then brought up to date by propagating the changes in each replica to the other.

units

Homepage:
Spack package:
Versions:
2.13
Build Dependencies:
python
Run Dependencies:
python
Description:
GNU units converts between different systems of units

unixodbc

Homepage:
Spack package:
Versions:
2.3.4
Build Dependencies:
libiconv, libtool
Link Dependencies:
libiconv, libtool
Description:
ODBC is an open specification for providing application developers with a predictable API with which to access Data Sources. Data Sources include SQL Servers and any Data Source with an ODBC Driver.

unuran

Homepage:
Spack package:
Versions:
1.8.1
Build Dependencies:
gsl, rngstreams
Link Dependencies:
gsl, rngstreams
Description:
Universal Non-Uniform Random number generator.

unzip

Homepage:
Spack package:
Versions:
6.0
Description:
Unzip is a compression and file packaging/archive utility.

usearch

Homepage:
Spack package:
Versions:
10.0.240
Description:
USEARCH is a unique sequence analysis tool with thousands of users world-wide. Note: A manual download is required for USEARCH. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

util-linux

Homepage:
Spack package:
Versions:
2.29.2, 2.29.1, 2.25
Build Dependencies:
python, pkgconfig
Link Dependencies:
python, pkgconfig
Description:
Util-linux is a suite of essential utilities for any Linux system.

util-macros

Homepage:
Spack package:
Versions:
1.19.1, 1.19.0
Description:
This is a set of autoconf macros used by the configure.ac scripts in other Xorg modular packages, and is needed to generate new versions of their configure scripts with autoconf.

uuid

Homepage:
Spack package:
Versions:
1.6.2
Description:
OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID).

uvw

Homepage:
Spack package:
Versions:
1.14.0, 1.13.0, 1.12.0
Build Dependencies:
cmake, doxygen
Link Dependencies:
libuv
Description:
uvw is a header-only, event based, tiny and easy to use libuv wrapper in modern C++.

valgrind

Homepage:
Spack package:
Versions:
develop, 3.14.0, 3.13.0, 3.12.0, 3.11.0, 3.10.1, 3.10.0
Build Dependencies:
mpi, boost, autoconf, automake, libtool
Link Dependencies:
mpi, boost
Description:
An instrumentation framework for building dynamic analysis. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools. Valgrind is Open Source / Free Software, and is freely available under the GNU General Public License, version 2.

vampirtrace

Homepage:
Spack package:
Versions:
5.14.4
Build Dependencies:
mpi, otf, papi, zlib
Link Dependencies:
mpi, otf, papi, zlib
Description:
VampirTrace is an open source library that allows detailed logging of program execution for parallel applications using message passing (MPI) and threads (OpenMP, Pthreads).

vardictjava

Homepage:
Spack package:
Versions:
1.5.1, 1.4.4
Run Dependencies:
java
Description:
VarDictJava is a variant discovery program written in Java. It is a partial Java port of VarDict variant caller.

varscan

Homepage:
Spack package:
Versions:
2.4.2
Build Dependencies:
java
Run Dependencies:
java
Description:
Variant calling and somatic mutation/CNV detection for next-generation sequencing data

vc

Homepage:
Spack package:
Versions:
1.3.0, 1.2.0, 1.1.0
Build Dependencies:
cmake
Description:
SIMD Vector Classes for C++

vcftools

Homepage:
Spack package:
Versions:
0.1.14
Build Dependencies:
perl, zlib
Link Dependencies:
zlib
Run Dependencies:
perl
Description:
VCFtools is a program package designed for working with VCF files, such as those generated by the 1000 Genomes Project. The aim of VCFtools is to provide easily accessible methods for working with complex genetic variation data in the form of VCF files.

vcsh

Homepage:
Spack package:
Versions:
1.20151229-1, 1.20151229, 1.20150502, 1.20141026, 1.20141025
Run Dependencies:
git
Description:
config manager based on git

vdt

Homepage:
Spack package:
Versions:
0.4.3, 0.3.9, 0.3.8, 0.3.7, 0.3.6
Build Dependencies:
cmake
Description:
Vectorised math. A collection of fast and inline implementations of mathematical functions.

vecgeom

Homepage:
Spack package:
Versions:
01.00.00, 00.05.00, 0.3.rc
Build Dependencies:
cmake
Description:
The vectorized geometry library for particle-detector simulation (toolkits).

veclibfort

Homepage:
Spack package:
Versions:
develop, 0.4.2
Description:
Lightweight but flexible shim designed to rectify the incompatibilities between the Accelerate/vecLib BLAS and LAPACK libraries shipped with macOS and FORTRAN code compiled with modern compilers such as GNU Fortran.

vegas2

Homepage:
Spack package:
Versions:
2
Build Dependencies:
plink
Link Dependencies:
plink
Run Dependencies:
perl, r, r-mvtnorm, r-corpcor
Description:
"VEGAS2 is an extension that uses 1,000 Genomes data to model SNP correlations across the autosomes and chromosome X

veloc

Homepage:
Spack package:
Versions:
master, 1.1, 1.0rc1, 1.0
Build Dependencies:
cmake, boost, libpthread-stubs, mpi, er, axl, pdsh
Link Dependencies:
boost, libpthread-stubs, mpi, er, axl, pdsh
Description:
Very-Low Overhead Checkpointing System. VELOC is a multi-level checkpoint-restart runtime for HPC supercomputing infrastructures

velvet

Homepage:
Spack package:
Versions:
1.2.10
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Velvet is a de novo genomic assembler specially designed for short read sequencing technologies.

verilator

Homepage:
Spack package:
Versions:
3.920, 3.904
Build Dependencies:
bison, flex, perl
Link Dependencies:
flex
Run Dependencies:
perl
Description:
Verilator is the fastest free Verilog HDL simulator. It compiles synthesizable Verilog (not test-bench code!), plus some PSL, SystemVerilog and Synthesis assertions into C++ or SystemC code. It is designed for large projects where fast simulation performance is of primary concern, and is especially well suited to generate executable models of CPUs for embedded software design teams. Please do not download this program if you are expecting a full featured replacement for NC-Verilog, VCS or another commercial Verilog simulator or Verilog compiler for a little project! (Try Icarus instead.) However, if you are looking for a path to migrate synthesizable Verilog to C++ or SystemC, and writing just a touch of C code and Makefiles doesn't scare you off, this is the free Verilog compiler for you. Verilator supports the synthesis subset of Verilog, plus initial statements, proper blocking/non-blocking assignments, functions, tasks, multi-dimensional arrays, and signed numbers. It also supports very simple forms of SystemVerilog assertions and coverage analysis. Verilator supports the more important Verilog 2005 constructs, and some SystemVerilog features, with additional constructs being added as users request them. Verilator has been used to simulate many very large multi-million gate designs with thousands of modules.

verrou

Homepage:
Spack package:
Versions:
develop, 2.1.0, 2.0.0, 1.1.0
Build Dependencies:
autoconf, automake, libtool, m4, python
Link Dependencies:
python
Run Dependencies:
python
Description:
A floating-point error checker. Verrou helps you look for floating-point round-off errors in programs. It implements a stochastic floating-point arithmetic based on random rounding: all floating-point operations are perturbed by randomly switching rounding modes. This can be seen as an asynchronous variant of the CESTAC method, or a subset of Monte Carlo Arithmetic, performing only output randomization through random rounding.

videoproto

Homepage:
Spack package:
Versions:
2.3.3
Build Dependencies:
pkgconfig, util-macros
Description:
X Video Extension. This extension provides a protocol for a video output mechanism, mainly to rescale video playback in the video controller hardware.

viennarna

Homepage:
Spack package:
Versions:
2.4.3, 2.3.5
Build Dependencies:
perl, python, libsvm, gsl
Link Dependencies:
libsvm, gsl
Run Dependencies:
perl, python
Description:
The ViennaRNA Package consists of a C code library and several stand- alone programs for the prediction and comparison of RNA secondary structures.

viewres

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxaw, libxmu, libxt, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt
Description:
viewres displays a tree showing the widget class hierarchy of the Athena Widget Set (libXaw).

vigra

Homepage:
Spack package:
Versions:
1.11.1
Build Dependencies:
cmake, libtiff, libpng, libjpeg, hdf5, fftw, openexr, py-numpy, boost, py-sphinx, doxygen, python, py-nose
Link Dependencies:
libtiff, libpng, libjpeg, hdf5, fftw, openexr, boost, python
Run Dependencies:
py-numpy
Test Dependencies:
py-nose
Description:
VIGRA stands for "Vision with Generic Algorithms". It's an image processing and analysis library that puts its main emphasis on customizable algorithms and data structures

vim

Homepage:
Spack package:
Versions:
8.1.0338, 8.1.0001, 8.0.1376, 8.0.0503, 8.0.0454, 8.0.0134, 7.4.2367
Build Dependencies:
python, ruby, lua, perl, libx11, libsm, libxpm, libxt, libxtst, ncurses
Link Dependencies:
python, ruby, lua, perl, libx11, libsm, libxpm, libxt, libxtst, ncurses
Run Dependencies:
cscope
Description:
Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems. Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. It's not just for programmers, though. Vim is perfect for all kinds of text editing, from composing email to editing configuration files.

virtualgl

Homepage:
Spack package:
Versions:
2.5.2
Build Dependencies:
cmake, libjpeg-turbo, glu
Link Dependencies:
libjpeg-turbo, glu
Description:
VirtualGL redirects 3D commands from a Unix/Linux OpenGL application onto a server-side GPU and converts the rendered 3D images into a video stream with which remote clients can interact to view and control the 3D application in real time.

visit

Homepage:
Spack package:
Versions:
2.13.0, 2.12.3, 2.12.2, 2.10.3, 2.10.2, 2.10.1
Build Dependencies:
cmake, vtk, qt, qwt, python, silo, hdf5, mpi
Link Dependencies:
vtk, qt, qwt, python, silo, hdf5, mpi
Description:
VisIt is an Open Source, interactive, scalable, visualization, animation and analysis tool.

vizglow

Homepage:
Spack package:
Versions:
2.2alpha20, 2.2alpha17, 2.2alpha15
Build Dependencies:
zlib, freetype, fontconfig, libxrender, xterm, libcanberra
Link Dependencies:
zlib, freetype, fontconfig, libxrender, xterm, libcanberra
Description:
VizGlow software tool is used for high-fidelity multi-dimensional modeling of non-equilibrium plasma discharges. Note: VizGlow is licensed software. You will need to create an account on the EsgeeTech homepage and download VizGlow yourself. Spack will search your current directory for a file of this format. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

vmatch

Homepage:
Spack package:
Versions:
2.3.0
Description:
Vmatch is a versatile software tool for efficiently solving large scale sequence matching tasks

voropp

Homepage:
Spack package:
Versions:
0.4.6
Description:
Voro++ is a open source software library for the computation of the Voronoi diagram, a widely-used tessellation that has applications in many scientific fields.

votca-csg

Homepage:
Spack package:
Versions:
develop, 1.5, 1.4.1, 1.4
Build Dependencies:
cmake, votca-tools, gromacs, hdf5
Link Dependencies:
votca-tools, gromacs, hdf5
Description:
Versatile Object-oriented Toolkit for Coarse-graining Applications (VOTCA) is a package intended to reduce the amount of routine work when doing systematic coarse-graining of various systems. The core is written in C++. This package contains the VOTCA coarse-graining engine.

votca-ctp

Homepage:
Spack package:
Versions:
develop, 1.5
Build Dependencies:
cmake, votca-tools, votca-csg, gsl
Link Dependencies:
votca-tools, votca-csg, gsl
Description:
Versatile Object-oriented Toolkit for Coarse-graining Applications (VOTCA) is a package intended to reduce the amount of routine work when doing systematic coarse-graining of various systems. The core is written in C++. This package contains the VOTCA charge transport engine.

votca-tools

Homepage:
Spack package:
Versions:
develop, 1.5, 1.4.1, 1.4
Build Dependencies:
cmake, expat, fftw, gsl, eigen, boost, sqlite
Link Dependencies:
expat, fftw, gsl, eigen, boost, sqlite
Description:
Versatile Object-oriented Toolkit for Coarse-graining Applications (VOTCA) is a package intended to reduce the amount of routine work when doing systematic coarse-graining of various systems. The core is written in C++. This package contains the basic tools library of VOTCA.

votca-xtp

Homepage:
Spack package:
Versions:
develop, 1.5, 1.4.1
Build Dependencies:
cmake, votca-tools, votca-csg, votca-ctp, libxc, ceres-solver
Link Dependencies:
votca-tools, votca-csg, votca-ctp, libxc, ceres-solver
Description:
Versatile Object-oriented Toolkit for Coarse-graining Applications (VOTCA) is a package intended to reduce the amount of routine work when doing systematic coarse-graining of various systems. The core is written in C++. This package contains the VOTCA exciton transport engine.

vpfft

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
eigen, fftw, mpi
Link Dependencies:
eigen, fftw, mpi
Description:
Proxy Application. VPFFT is an implementation of a mesoscale micromechanical materials model. By solving the viscoplasticity model, VPFFT simulates the evolution of a material under deformation. The solution time to the viscoplasticity model, described by a set of partial differential equations, is significantly reduced by the application of Fast Fourier Transform in the VPFFT algorithm.

vpic

Homepage:
Spack package:
Versions:
develop
Build Dependencies:
cmake, mpi
Link Dependencies:
mpi
Description:
VPIC is a general purpose particle-in-cell simulation code for modeling kinetic plasmas in one, two, or three spatial dimensions. It employs a second-order, explicit, leapfrog algorithm to update charged particle positions and velocities in order to solve the relativistic kinetic equation for each species in the plasma, along with a full Maxwell description for the electric and magnetic fields evolved via a second- order finite-difference-time-domain (FDTD) solve.

vsearch

Homepage:
Spack package:
Versions:
2.4.3
Build Dependencies:
m4, autoconf, automake, libtool
Description:
VSEARCH is a versatile open-source tool for metagenomics.

vt

Homepage:
Spack package:
Versions:
0.577
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
A tool set for short variant discovery in genetic sequence data.

vtk

Homepage:
Spack package:
Versions:
8.1.2, 8.1.1, 8.0.1, 7.1.0, 7.0.0, 6.3.0, 6.1.0
Build Dependencies:
cmake, python, gl, glx, mesa, qt, mpi, boost, ffmpeg, expat, freetype, glew, hdf5, libjpeg, jsoncpp, libxml2, lz4, netcdf, netcdf-cxx, libpng, libtiff, zlib
Link Dependencies:
python, gl, glx, mesa, qt, mpi, boost, ffmpeg, expat, freetype, glew, hdf5, libjpeg, jsoncpp, libxml2, lz4, netcdf, netcdf-cxx, libpng, libtiff, zlib
Run Dependencies:
py-mpi4py
Description:
The Visualization Toolkit (VTK) is an open-source, freely available software system for 3D computer graphics, image processing and visualization.

vtkh

Homepage:
Spack package:
Versions:
develop, 0.1.0
Build Dependencies:
cmake, mpi, intel-tbb, cuda, vtkm
Link Dependencies:
mpi, intel-tbb, cuda, vtkm
Description:
VTK-h is a toolkit of scientific visualization algorithms for emerging processor architectures. VTK-h brings together several projects like VTK-m and DIY2 to provide a toolkit with hybrid parallel capabilities.

vtkm

Homepage:
Spack package:
Versions:
master, 1.3.0, 1.2.0, 1.1.0
Build Dependencies:
cuda, cmake, tbb, mpi
Link Dependencies:
cuda, cmake, tbb, mpi
Description:
VTK-m is a toolkit of scientific visualization algorithms for emerging processor architectures. VTK-m supports the fine-grained concurrency for data analysis and visualization algorithms required to drive extreme scale computing by providing abstract models for data and execution that can be applied to a variety of algorithms across many different processor architectures.

wannier90

Homepage:
Spack package:
Versions:
2.1.0, 2.0.1
Build Dependencies:
mpi, lapack, blas
Link Dependencies:
mpi, lapack, blas
Description:
Wannier90 calculates maximally-localised Wannier functions (MLWFs). Wannier90 is released under the GNU General Public License.

warpx

Homepage:
Spack package:
Versions:
master, dev
Build Dependencies:
mpi, fftw
Link Dependencies:
mpi, fftw
Description:
WarpX is an advanced electromagnetic Particle-In-Cell code. It supports many features including Perfectly-Matched Layers (PML) and mesh refinement. In addition, WarpX is a highly-parallel and highly-optimized code and features hybrid OpenMP/MPI parallelization, advanced vectorization techniques and load balancing capabilities.

wcslib

Homepage:
Spack package:
Versions:
5.18
Build Dependencies:
gmake, flex, cfitsio, libx11
Link Dependencies:
cfitsio, libx11
Description:
WCSLIB a C implementation of the coordinate transformations defined in the FITS WCS papers.

wget

Homepage:
Spack package:
Versions:
1.20.3, 1.19.1, 1.17, 1.16
Build Dependencies:
gnutls, openssl, gettext, python, zlib, libpsl, pcre, perl, pkgconfig
Link Dependencies:
gnutls, openssl, zlib, libpsl, pcre
Test Dependencies:
valgrind
Description:
GNU Wget is a free software package for retrieving files using HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a non- interactive commandline tool, so it may easily be called from scripts, cron jobs, terminals without X-Windows support, etc.

wgsim

Homepage:
Spack package:
Versions:
2011.10.17
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Wgsim is a small tool for simulating sequence reads from a reference genome. It is able to simulate diploid genomes with SNPs and insertion/deletion (INDEL) polymorphisms, and simulate reads with uniform substitution sequencing errors. It does not generate INDEL sequencing errors, but this can be partly compensated by simulating INDEL polymorphisms.

windowswmproto

Homepage:
Spack package:
Versions:
1.0.4
Description:
This module provides the definition of the WindowsWM extension to the X11 protocol, used for coordination between an X11 server and the Microsoft Windows native window manager. WindowsWM is only intended to be used on Cygwin when running a rootless XWin server.

wireshark

Homepage:
Spack package:
Versions:
2.6.0
Build Dependencies:
cmake, bison, cares, doxygen, flex, git, glib, gnutls, libgcrypt, libmaxminddb, libtool, libpcap, lua, krb5, pkgconfig, libsmi, libssh, nghttp2, portaudio, qt, gtkplus3, gtkplus, adwaita-icon-theme
Link Dependencies:
cares, glib, gnutls, libgcrypt, libmaxminddb, libpcap, lua, krb5, libsmi, libssh, nghttp2, portaudio, qt, gtkplus3, gtkplus, adwaita-icon-theme
Description:
Graphical network analyzer and capture tool

wordnet

Homepage:
Spack package:
Versions:
3.0
Build Dependencies:
tk, tcl
Link Dependencies:
tk, tcl
Description:
WordNet is a large lexical database of English. Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms (synsets), each expressing a distinct concept.

workrave

Homepage:
Spack package:
Versions:
1_10_20, 1_10_19, 1_10_18, 1_10_17, 1_10_16, 1_10_15, 1_10_14, 1_10_13, 1_10_12, 1_10_10
Build Dependencies:
autoconf, automake, libtool, m4, libx11, py-cheetah, glib, glibmm, gtkplus, gtkmm, libsigcpp
Link Dependencies:
libx11, py-cheetah, glib, glibmm, gtkplus, gtkmm, libsigcpp
Description:
Workrave is a program that assists in the recovery and prevention of Repetitive Strain Injury (RSI). The program frequently alerts you to take micro-pauses, rest breaks and restricts you to your daily limit. The program runs on GNU/Linux and Microsoft Windows.

wt

Homepage:
Spack package:
Versions:
master, 3.3.7
Build Dependencies:
cmake, pkgconfig, boost, openssl, libharu, sqlite, mariadb, postgresql, pango, zlib
Link Dependencies:
boost, openssl, libharu, sqlite, mariadb, postgresql, pango, zlib
Description:
Wt, C++ Web Toolkit. Wt is a C++ library for developing web applications.

wtdbg2

Homepage:
Spack package:
Versions:
2.3
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
A fuzzy Bruijn graph approach to long noisy reads assembly

wx

Homepage:
Spack package:
Versions:
develop, 3.1.0, 3.0.2, 3.0.1
Build Dependencies:
pkgconfig, gtkplus
Link Dependencies:
gtkplus
Description:
wxWidgets is a C++ library that lets developers create applications for Windows, Mac OS X, Linux and other platforms with a single code base. It has popular language bindings for Python, Perl, Ruby and many other languages, and unlike other cross-platform toolkits, wxWidgets gives applications a truly native look and feel because it uses the platform's native API rather than emulating the GUI. It's also extensive, free, open-source and mature.

wxpropgrid

Homepage:
Spack package:
Versions:
1.4.15
Build Dependencies:
wx
Link Dependencies:
wx
Description:
wxPropertyGrid is a property sheet control for wxWidgets. In other words, it is a specialized two-column grid for editing properties such as strings, numbers, flagsets, string arrays, and colours.

x11perf

Homepage:
Spack package:
Versions:
1.6.0
Build Dependencies:
libx11, libxmu, libxrender, libxft, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxmu, libxrender, libxft
Description:
Simple X server performance benchmarker.

xapian-core

Homepage:
Spack package:
Versions:
1.4.3
Build Dependencies:
zlib
Link Dependencies:
zlib
Description:
Xapian is a highly adaptable toolkit which allows developers to easily add advanced indexing and search facilities to their own applications. It supports the Probabilistic Information Retrieval model and also supports a rich set of boolean query operators.

xauth

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
libx11, libxau, libxext, libxmu, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxau, libxext, libxmu, xproto
Description:
The xauth program is used to edit and display the authorization information used in connecting to the X server.

xbacklight

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
libxcb, xcb-util, pkgconfig, util-macros
Link Dependencies:
libxcb, xcb-util
Description:
Xbacklight is used to adjust the backlight brightness where supported. It uses the RandR extension to find all outputs on the X server supporting backlight brightness control and changes them all in the same way.

xbiff

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxaw, libxmu, libxext, libx11, xbitmaps, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxext, libx11
Description:
xbiff provides graphical notification of new e-mail. It only handles mail stored in a filesystem accessible file, not via IMAP, POP or other remote access protocols.

xbitmaps

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
pkgconfig, util-macros
Description:
The xbitmaps package contains bitmap images used by multiple applications built in Xorg.

xbraid

Homepage:
Spack package:
Versions:
2.2.0
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
XBraid: Parallel time integration with Multigrid

xcalc

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libxaw, libxt, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt, libx11
Description:
xcalc is a scientific calculator X11 client that can emulate a TI-30 or an HP-10C.

xcb-demo

Homepage:
Spack package:
Versions:
0.1
Build Dependencies:
libxcb, xcb-util, xcb-util-image, xcb-util-wm, pkgconfig
Link Dependencies:
libxcb, xcb-util, xcb-util-image, xcb-util-wm
Description:
xcb-demo: A collection of demo programs that use the XCB library.

xcb-proto

Homepage:
Spack package:
Versions:
1.13, 1.12, 1.11
Description:
xcb-proto provides the XML-XCB protocol descriptions that libxcb uses to generate the majority of its code and API.

xcb-util

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
libxcb, pkgconfig
Link Dependencies:
libxcb
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-cursor

Homepage:
Spack package:
Versions:
0.1.3
Build Dependencies:
libxcb, xcb-util-renderutil, xcb-util-image, pkgconfig
Link Dependencies:
libxcb, xcb-util-renderutil, xcb-util-image
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-errors

Homepage:
Spack package:
Versions:
1.0
Build Dependencies:
libxcb, xcb-proto, pkgconfig
Link Dependencies:
libxcb
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-image

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
libxcb, xcb-util, xproto, pkgconfig
Link Dependencies:
libxcb, xcb-util
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-keysyms

Homepage:
Spack package:
Versions:
0.4.0
Build Dependencies:
libxcb, xproto, pkgconfig
Link Dependencies:
libxcb
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-renderutil

Homepage:
Spack package:
Versions:
0.3.9
Build Dependencies:
libxcb, pkgconfig
Link Dependencies:
libxcb
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-wm

Homepage:
Spack package:
Versions:
0.4.1
Build Dependencies:
m4, libxcb, pkgconfig
Link Dependencies:
libxcb
Description:
The XCB util modules provides a number of libraries which sit on top of libxcb, the core X protocol library, and some of the extension libraries. These experimental libraries provide convenience functions and interfaces which make the raw X protocol more usable. Some of the libraries also provide client-side code which is not strictly part of the X protocol but which have traditionally been provided by Xlib.

xcb-util-xrm

Homepage:
Spack package:
Versions:
1.2
Build Dependencies:
autoconf, automake, libtool, m4, pkgconfig, libxcb
Link Dependencies:
libxcb
Description:
XCB util-xrm module provides the 'xrm' library, i.e. utility functions for the X resource manager.

xclip

Homepage:
Spack package:
Versions:
0.13
Build Dependencies:
libxmu, libx11, autoconf, automake, libtool, m4
Link Dependencies:
libxmu, libx11
Description:
xclip is a command line utility that is designed to run on any system with an X11 implementation. It provides an interface to X selections ("the clipboard") from the command line. It can read data from standard in or a file and place it in an X selection for pasting into other X applications. xclip can also print an X selection to standard out, which can then be redirected to a file or another program.

xclipboard

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libxaw, libxmu, libxt, libx11, libxkbfile, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11, libxkbfile
Description:
xclipboard is used to collect and display text selections that are sent to the CLIPBOARD by other clients. It is typically used to save CLIPBOARD selections for later use. It stores each CLIPBOARD selection as a separate string, each of which can be selected.

xclock

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
libxaw, libxmu, libx11, libxrender, libxft, libxkbfile, libxt, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libx11, libxrender, libxft, libxkbfile, libxt
Description:
xclock is the classic X Window System clock utility. It displays the time in analog or digital form, continuously updated at a frequency which may be specified by the user.

xcmiscproto

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
pkgconfig, util-macros
Description:
XC-MISC Extension. This extension defines a protocol that provides Xlib two ways to query the server for available resource IDs.

xcmsdb

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
xcmsdb is used to load, query, or remove Device Color Characterization data stored in properties on the root window of the screen as specified in section 7, Device Color Characterization, of the X11 Inter-Client Communication Conventions Manual (ICCCM).

xcompmgr

Homepage:
Spack package:
Versions:
1.1.7
Build Dependencies:
libxcomposite, libxfixes, libxdamage, libxrender, libxext, pkgconfig, util-macros
Link Dependencies:
libxcomposite, libxfixes, libxdamage, libxrender, libxext
Description:
xcompmgr is a sample compositing manager for X servers supporting the XFIXES, DAMAGE, RENDER, and COMPOSITE extensions. It enables basic eye- candy effects.

xconsole

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libxaw, libxmu, libxt, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11, xproto
Description:
xconsole displays in a X11 window the messages which are usually sent to /dev/console.

xcursor-themes

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxcursor, xcursorgen, pkgconfig, util-macros
Link Dependencies:
libxcursor
Description:
This is a default set of cursor themes for use with libXcursor, originally created for the XFree86 Project, and now shipped as part of the X.Org software distribution.

xcursorgen

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libx11, libxcursor, libpng, pkgconfig, util-macros
Link Dependencies:
libx11, libxcursor, libpng
Description:
xcursorgen prepares X11 cursor sets for use with libXcursor.

xdbedizzy

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
libx11, libxext, pkgconfig, util-macros
Link Dependencies:
libx11, libxext
Description:
xdbedizzy is a demo of the X11 Double Buffer Extension (DBE) creating a double buffered spinning scene.

xditview

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxaw, libxmu, libxt, libx11, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
xditview displays ditroff output on an X display.

xdm

Homepage:
Spack package:
Versions:
1.1.11
Build Dependencies:
libxmu, libx11, libxau, libxinerama, libxft, libxpm, libxaw, libxdmcp, libxt, libxext, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11, libxau, libxinerama, libxft, libxpm, libxaw, libxdmcp, libxt, libxext
Description:
X Display Manager / XDMCP server.

xdpyinfo

Homepage:
Spack package:
Versions:
1.3.2
Build Dependencies:
libxext, libx11, libxtst, libxcb, xproto, recordproto, inputproto, fixesproto, pkgconfig, util-macros
Link Dependencies:
libxext, libx11, libxtst, libxcb
Description:
xdpyinfo is a utility for displaying information about an X server. It is used to examine the capabilities of a server, the predefined values for various parameters used in communicating between clients and the server, and the different types of screens, visuals, and X11 protocol extensions that are available.

xdriinfo

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, expat, libxshmfence, libxext, libxdamage, libxfixes, pcre, glproto, pkgconfig, util-macros
Link Dependencies:
libx11, expat, libxshmfence, libxext, libxdamage, libxfixes, pcre
Description:
xdriinfo - query configuration information of X11 DRI drivers.

xedit

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libxaw, libxmu, libxt, libx11, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
Xedit is a simple text editor for X.

xerces-c

Homepage:
Spack package:
Versions:
3.2.2, 3.2.1, 3.1.4
Link Dependencies:
libiconv, icu4c
Description:
Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.

xeus

Homepage:
Spack package:
Versions:
develop, 0.15.0, 0.14.1
Build Dependencies:
cmake, zeromq, cppzmq, cryptopp, xtl, nlohmann-json, libuuid
Link Dependencies:
zeromq, cppzmq, cryptopp, xtl, nlohmann-json, libuuid
Description:
QuantStack C++ implementation of Jupyter kernel protocol

xev

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libxrandr, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxrandr, libx11
Description:
xev creates a window and then asks the X server to send it X11 events whenever anything happens to the window (such as it being moved, resized, typed in, clicked in, etc.). You can also attach it to an existing window. It is useful for seeing what causes events to occur and to display the information that they contain; it is essentially a debugging and development tool, and should not be needed in normal usage.

xextproto

Homepage:
Spack package:
Versions:
7.3.0
Build Dependencies:
pkgconfig, util-macros
Description:
X Protocol Extensions.

xeyes

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
libx11, libxt, libxext, libxmu, libxrender, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libxext, libxmu, libxrender
Description:
xeyes - a follow the mouse X demo, using the X SHAPE extension

xf86bigfontproto

Homepage:
Spack package:
Versions:
1.2.0
Description:
X.org XF86BigFontProto protocol headers.

xf86dga

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxxf86dga, pkgconfig, util-macros
Link Dependencies:
libx11, libxxf86dga
Description:
dga is a simple test client for the XFree86-DGA extension.

xf86dgaproto

Homepage:
Spack package:
Versions:
2.1
Description:
X.org XF86DGAProto protocol headers.

xf86driproto

Homepage:
Spack package:
Versions:
2.1.1
Build Dependencies:
pkgconfig, util-macros
Description:
XFree86 Direct Rendering Infrastructure Extension. This extension defines a protocol to allow user applications to access the video hardware without requiring data to be passed through the X server.

xf86miscproto

Homepage:
Spack package:
Versions:
0.9.3
Description:
This package includes the protocol definitions of the "XFree86-Misc" extension to the X11 protocol. The "XFree86-Misc" extension is supported by the XFree86 X server and versions of the Xorg X server prior to Xorg 1.6.

xf86rushproto

Homepage:
Spack package:
Versions:
1.1.2
Description:
X.org XF86RushProto protocol headers.

xf86vidmodeproto

Homepage:
Spack package:
Versions:
2.3.1
Build Dependencies:
pkgconfig, util-macros
Description:
XFree86 Video Mode Extension. This extension defines a protocol for dynamically configuring modelines and gamma.

xfd

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
libxaw, fontconfig, libxft, libxrender, libxmu, libxt, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, fontconfig, libxft, libxrender, libxmu, libxt
Description:
xfd - display all the characters in a font using either the X11 core protocol or libXft2.

xfindproxy

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libice, libxt, xproto, xproxymanagementprotocol, pkgconfig, util-macros
Link Dependencies:
libice, libxt
Description:
xfindproxy is used to locate available X11 proxy services. It utilizes the Proxy Management Protocol to communicate with a proxy manager. The proxy manager keeps track of all available proxy services, starts new proxies when necessary, and makes sure that proxies are shared whenever possible.

xfontsel

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libxaw, libxmu, libxt, libx11, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
xfontsel application provides a simple way to display the X11 core protocol fonts known to your X server, examine samples of each, and retrieve the X Logical Font Description ("XLFD") full name for a font.

xfs

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libxfont, font-util, xproto, fontsproto, xtrans, pkgconfig, util-macros
Link Dependencies:
libxfont, font-util
Description:
X Font Server.

xfsinfo

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libfs, xproto, pkgconfig, util-macros
Link Dependencies:
libfs
Description:
xfsinfo is a utility for displaying information about an X font server. It is used to examine the capabilities of a server, the predefined values for various parameters used in communicating between clients and the server, and the font catalogues and alternate servers that are available.

xfwp

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libice, xproto, xproxymanagementprotocol, pkgconfig, util-macros
Link Dependencies:
libice
Description:
xfwp proxies X11 protocol connections, such as through a firewall.

xgamma

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libx11, libxxf86vm, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxxf86vm
Description:
xgamma allows X users to query and alter the gamma correction of a monitor via the X video mode extension (XFree86-VidModeExtension).

xgboost

Homepage:
Spack package:
Versions:
0.81
Build Dependencies:
cuda, cmake
Link Dependencies:
cuda
Description:
Scalable, Portable and Distributed Gradient Boosting (GBDT, GBRT or GBM) Library, for Python, R, Java, Scala, C++ and more. Runs on single machine, Hadoop, Spark, Flink and DataFlow

xgc

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libxaw, libxt, flex, bison, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt
Description:
xgc is an X11 graphics demo that shows various features of the X11 core protocol graphics primitives.

xhmm

Homepage:
Spack package:
Versions:
20160104
Build Dependencies:
lapack
Link Dependencies:
lapack
Description:
The XHMM C++ software suite was written to call copy number variation (CNV) from next-generation sequencing projects, where exome capture was used (or targeted sequencing, more generally).

xhost

Homepage:
Spack package:
Versions:
1.0.7
Build Dependencies:
libx11, libxmu, libxau, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxmu, libxau
Description:
xhost is used to manage the list of host names or user names allowed to make connections to the X server.

xineramaproto

Homepage:
Spack package:
Versions:
1.2.1
Build Dependencies:
pkgconfig, util-macros
Description:
X Xinerama Extension. This is an X extension that allows multiple physical screens controlled by a single X server to appear as a single screen.

xinit

Homepage:
Spack package:
Versions:
1.3.4
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
The xinit program is used to start the X Window System server and a first client program on systems that are not using a display manager such as xdm.

xinput

Homepage:
Spack package:
Versions:
1.6.2
Build Dependencies:
libx11, libxext, libxi, libxrandr, libxinerama, inputproto, fixesproto, randrproto, xineramaproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxext, libxi, libxrandr, libxinerama
Description:
xinput is a utility to configure and test XInput devices.

xios

Homepage:
Spack package:
Versions:
develop, 1.0
Build Dependencies:
netcdf, netcdf-fortran, hdf5, mpi, boost, blitz, perl, perl-uri-escape, gmake
Link Dependencies:
netcdf, netcdf-fortran, hdf5, mpi, boost, blitz
Description:
XML-IO-SERVER library for IO management of climate models.

xkbcomp

Homepage:
Spack package:
Versions:
1.3.1
Build Dependencies:
libx11, libxkbfile, xproto, bison, pkgconfig, util-macros
Link Dependencies:
libx11, libxkbfile
Description:
The X Keyboard (XKB) Extension essentially replaces the core protocol definition of a keyboard. The extension makes it possible to specify clearly and explicitly most aspects of keyboard behaviour on a per-key basis, and to track more closely the logical and physical state of a keyboard. It also includes a number of keyboard controls designed to make keyboards more accessible to people with physical impairments.

xkbdata

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
xkbcomp
Description:
The XKB data files for the various keyboard models, layouts, and locales.

xkbevd

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libxkbfile, libx11, bison, pkgconfig, util-macros
Link Dependencies:
libxkbfile, libx11
Description:
XKB event daemon demo.

xkbprint

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxkbfile, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxkbfile, libx11
Description:
xkbprint generates a printable or encapsulated PostScript description of an XKB keyboard description.

xkbutils

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxaw, libxt, libx11, xproto, inputproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt, libx11
Description:
xkbutils is a collection of small utilities utilizing the XKeyboard (XKB) extension to the X11 protocol.

xkeyboard-config

Homepage:
Spack package:
Versions:
2.18
Build Dependencies:
libx11, libxslt, pkgconfig, intltool, xproto
Link Dependencies:
libx11
Description:
This project provides a consistent, well-structured, frequently released, open source database of keyboard configuration data. The project is targeted to XKB-based systems.

xkill

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libx11, libxmu, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxmu
Description:
xkill is a utility for forcing the X server to close connections to clients. This program is very dangerous, but is useful for aborting programs that have displayed undesired windows on a user's screen.

xload

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
libxaw, libxmu, libxt, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
xload displays a periodically updating histogram of the system load average.

xlsatoms

Homepage:
Spack package:
Versions:
1.1.2
Build Dependencies:
libxcb, libx11, pkgconfig, util-macros
Link Dependencies:
libxcb, libx11
Description:
xlsatoms lists the interned atoms defined on an X11 server.

xlsclients

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libxcb, libx11, pkgconfig, util-macros
Link Dependencies:
libxcb, libx11
Description:
xlsclients is a utility for listing information about the client applications running on a X11 server.

xlsfonts

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
xlsfonts lists fonts available from an X server via the X11 core protocol.

xmag

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libxaw, libxmu, libxt, libx11, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
xmag displays a magnified snapshot of a portion of an X11 screen.

xman

Homepage:
Spack package:
Versions:
1.1.4
Build Dependencies:
libxaw, libxt, xproto, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt
Description:
xman is a graphical manual page browser using the Athena Widgets (Xaw) toolkit.

xmessage

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxaw, libxt, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt
Description:
xmessage displays a message or query in a window. The user can click on an "okay" button to dismiss it or can select one of several buttons to answer a question. xmessage can also exit after a specified time.

xmh

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxaw, libxmu, libxt, libx11, xbitmaps, pkgconfig, util-macros
Link Dependencies:
libxaw, libxmu, libxt, libx11
Description:
The xmh program provides a graphical user interface to the MH Message Handling System. To actually do things with your mail, it makes calls to the MH package.

xmlf90

Homepage:
Spack package:
Versions:
1.5.2
Build Dependencies:
autoconf, automake, libtool, m4
Description:
xmlf90 is a suite of libraries to handle XML in Fortran.

xmlto

Homepage:
Spack package:
Versions:
0.0.28
Build Dependencies:
libxslt
Link Dependencies:
libxslt
Description:
Utility xmlto is a simple shell script for converting XML files to various formats. It serves as easy to use command line frontend to make fine output without remembering many long options and searching for the syntax of the backends.

xmodmap

Homepage:
Spack package:
Versions:
1.0.9
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
The xmodmap program is used to edit and display the keyboard modifier map and keymap table that are used by client applications to convert event keycodes into keysyms. It is usually run from the user's session startup script to configure the keyboard according to personal tastes.

xmore

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
libxaw, libxt, pkgconfig, util-macros
Link Dependencies:
libxaw, libxt
Description:
xmore - plain text display program for the X Window System.

xorg-cf-files

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
pkgconfig
Description:
The xorg-cf-files package contains the data files for the imake utility, defining the known settings for a wide variety of platforms (many of which have not been verified or tested in over a decade), and for many of the libraries formerly delivered in the X.Org monolithic releases.

xorg-docs

Homepage:
Spack package:
Versions:
1.7.1
Build Dependencies:
pkgconfig, util-macros, xorg-sgml-doctools, xmlto
Description:
This package provides miscellaneous documentation for the X Window System that doesn't better fit into other packages. The preferred documentation format for these documents is DocBook XML.

xorg-gtest

Homepage:
Spack package:
Versions:
0.7.1
Build Dependencies:
libx11, libxi, xorg-server, pkgconfig, util-macros
Link Dependencies:
libx11, libxi, xorg-server
Description:
Provides a Google Test environment for starting and stopping a X server for testing purposes.

xorg-sgml-doctools

Homepage:
Spack package:
Versions:
1.11
Build Dependencies:
pkgconfig, util-macros
Description:
This package provides a common set of SGML entities and XML/CSS style sheets used in building/formatting the documentation provided in other X.Org packages.

xphelloworld

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libx11, libxaw, libxprintapputil, libxprintutil, libxp, libxt, pkgconfig, util-macros
Link Dependencies:
libx11, libxaw, libxprintapputil, libxprintutil, libxp, libxt
Description:
Xprint sample applications.

xplor-nih

Homepage:
Spack package:
Versions:
2.45
Build Dependencies:
python
Run Dependencies:
python
Description:
XPLOR-NIH is a structure determination program. Note: A manual download is required for XPLOR-NIH. Spack will search your current directory for the download file. Alternatively, add this file to a mirror so that Spack can find it. For instructions on how to set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html

xplsprinters

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libxp, libxprintutil, libx11, pkgconfig, util-macros
Link Dependencies:
libxp, libxprintutil, libx11
Description:
List Xprint printers.

xpr

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libxmu, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11
Description:
xpr takes as input a window dump file produced by xwd and formats it for output on various types of printers.

xprehashprinterlist

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libxp, libx11, pkgconfig, util-macros
Link Dependencies:
libxp, libx11
Description:
Rehash list of Xprint printers.

xprop

Homepage:
Spack package:
Versions:
1.2.2
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
xprop is a command line tool to display and/or set window and font properties of an X server.

xproto

Homepage:
Spack package:
Versions:
7.0.31, 7.0.29
Build Dependencies:
pkgconfig, util-macros
Description:
X Window System Core Protocol. This package provides the headers and specification documents defining the X Window System Core Protocol, Version 11. It also includes a number of headers that aren't purely protocol related, but are depended upon by many other X Window System packages to provide common definitions and porting layer.

xproxymanagementprotocol

Homepage:
Spack package:
Versions:
1.0.3
Description:
The Proxy Management Protocol is an ICE based protocol that provides a way for application servers to easily locate proxy services available to them.

xqilla

Homepage:
Spack package:
Versions:
2.3.3
Build Dependencies:
xerces-c
Link Dependencies:
xerces-c
Description:
XQilla is an XQuery and XPath 2 library and command line utility written in C++, implemented on top of the Xerces-C library.

xrandr

Homepage:
Spack package:
Versions:
1.5.0
Build Dependencies:
libxrandr, libxrender, libx11, randrproto, xproto, pkgconfig, util-macros
Link Dependencies:
libxrandr, libxrender, libx11, randrproto
Description:
xrandr - primitive command line interface to X11 Resize, Rotate, and Reflect (RandR) extension.

xrdb

Homepage:
Spack package:
Versions:
1.1.0
Build Dependencies:
libxmu, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11
Description:
xrdb - X server resource database utility.

xrefresh

Homepage:
Spack package:
Versions:
1.0.5
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
xrefresh - refresh all or part of an X screen.

xrootd

Homepage:
Spack package:
Versions:
4.8.5, 4.8.4, 4.8.3, 4.8.2, 4.8.1, 4.8.0, 4.7.1, 4.7.0, 4.6.1, 4.6.0, 4.5.0, 4.4.1, 4.4.0, 4.3.0
Build Dependencies:
cmake, bzip2, libxml2, openssl, python, readline, xz, zlib
Link Dependencies:
bzip2, libxml2, openssl, python, readline, xz, zlib
Description:
The XROOTD project aims at giving high performance, scalable fault tolerant access to data repositories of many kinds.

xrx

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libx11, libxt, libxext, libxau, libice, libxaw, xtrans, xproxymanagementprotocol, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libxext, libxau, libice, libxaw
Description:
The remote execution (RX) service specifies a MIME format for invoking applications remotely, for example via a World Wide Web browser. This RX format specifies a syntax for listing network services required by the application, for example an X display server. The requesting Web browser must identify specific instances of the services in the request to invoke the application.

xsbench

Homepage:
Spack package:
Versions:
18, 14, 13
Build Dependencies:
mpi
Link Dependencies:
mpi
Description:
XSBench is a mini-app representing a key computational kernel of the Monte Carlo neutronics application OpenMC. A full explanation of the theory and purpose of XSBench is provided in docs/XSBench_Theory.pdf.

xscope

Homepage:
Spack package:
Versions:
1.4.1
Build Dependencies:
xproto, xtrans, pkgconfig, util-macros
Description:
XSCOPE -- a program to monitor X11/Client conversations.

xsd

Homepage:
Spack package:
Versions:
4.0.0
Build Dependencies:
xerces-c, libtool
Link Dependencies:
xerces-c
Description:
CodeSynthesis XSD is an open-source, cross-platform W3C XML Schema to C++ data binding compiler. It support in-memory and event-driven XML processing models and is available for a wide range of C++ compilers and platforms.

xsdk

Homepage:
Spack package:
Versions:
develop, 0.4.0, 0.3.0, xsdk-0.2.0
Build Dependencies:
hypre, mfem, superlu-dist, trilinos, petsc, dealii, pflotran, alquimia, sundials, plasma, magma, amrex, slepc, omega-h, strumpack, pumi, tasmanian, phist
Link Dependencies:
hypre, mfem, superlu-dist, trilinos, petsc, dealii, pflotran, alquimia, sundials, plasma, magma, amrex, slepc, omega-h, strumpack, pumi, tasmanian, phist
Description:
Xsdk is a suite of Department of Energy (DOE) packages for numerical simulation. This is a Spack bundle package that installs the xSDK packages

xsdktrilinos

Homepage:
Spack package:
Versions:
develop, 12.8.1, 12.6.4, xsdk-0.2.0
Build Dependencies:
cmake, mpi, hypre, petsc, trilinos
Link Dependencies:
mpi, hypre, petsc, trilinos
Description:
xSDKTrilinos contains the portions of Trilinos that depend on PETSc because they would cause a circular dependency if built as part of Trilinos.

xset

Homepage:
Spack package:
Versions:
1.2.3
Build Dependencies:
libxmu, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11
Description:
User preference utility for X.

xsetmode

Homepage:
Spack package:
Versions:
1.0.0
Build Dependencies:
libxi, libx11, pkgconfig, util-macros
Link Dependencies:
libxi, libx11
Description:
Set the mode for an X Input device.

xsetpointer

Homepage:
Spack package:
Versions:
1.0.1
Build Dependencies:
libxi, libx11, inputproto, pkgconfig, util-macros
Link Dependencies:
libxi, libx11
Description:
Set an X Input device as the main pointer.

xsetroot

Homepage:
Spack package:
Versions:
1.1.1
Build Dependencies:
libxmu, libx11, libxcursor, xbitmaps, xproto, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11, libxcursor
Description:
xsetroot - root window parameter setting utility for X.

xsimd

Homepage:
Spack package:
Versions:
develop, 4.0.0, 3.1.0
Build Dependencies:
cmake
Test Dependencies:
googletest
Description:
C++ wrappers for SIMD intrinsics

xsm

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libx11, libxt, libice, libsm, libxaw, pkgconfig, util-macros
Link Dependencies:
libx11, libxt, libice, libsm, libxaw
Description:
X Session Manager.

xstdcmap

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxmu, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxmu, libx11
Description:
The xstdcmap utility can be used to selectively define standard colormap properties. It is intended to be run from a user's X startup script to create standard colormap definitions in order to facilitate sharing of scarce colormap resources among clients using PseudoColor visuals.

xtensor

Homepage:
Spack package:
Versions:
develop, 0.15.1, 0.13.1
Build Dependencies:
cmake, xtl, xsimd
Link Dependencies:
xtl, xsimd
Description:
Multi-dimensional arrays with broadcasting and lazy computing

xtensor-python

Homepage:
Spack package:
Versions:
develop, 0.17.0
Build Dependencies:
cmake, xtensor, xtl, py-pybind11, py-numpy, python
Link Dependencies:
xtensor, xtl, py-pybind11, py-numpy, python
Run Dependencies:
python
Description:
Python bindings for the xtensor C++ multi-dimensional array library

xterm

Homepage:
Spack package:
Versions:
327
Build Dependencies:
libxft, fontconfig, libxaw, libxmu, libxt, libx11, libxinerama, libxpm, libice, freetype, libxrender, libxext, libsm, libxcb, libxau, bzip2, pkgconfig
Link Dependencies:
libxft, fontconfig, libxaw, libxmu, libxt, libx11, libxinerama, libxpm, libice, freetype, libxrender, libxext, libsm, libxcb, libxau, bzip2
Description:
The xterm program is a terminal emulator for the X Window System. It provides DEC VT102 and Tektronix 4014 compatible terminals for programs that can't use the window system directly.

xtl

Homepage:
Spack package:
Versions:
develop, 0.4.0, 0.3.4, 0.3.3
Build Dependencies:
cmake
Description:
QuantStack tools library

xtrans

Homepage:
Spack package:
Versions:
1.3.5
Build Dependencies:
pkgconfig, util-macros
Description:
xtrans is a library of code that is shared among various X packages to handle network protocol transport in a modular fashion, allowing a single place to add new transport types. It is used by the X server, libX11, libICE, the X font server, and related components.

xtrap

Homepage:
Spack package:
Versions:
1.0.2
Build Dependencies:
libx11, libxtrap, pkgconfig, util-macros
Link Dependencies:
libx11, libxtrap
Description:
XTrap sample clients.

xts

Homepage:
Spack package:
Versions:
0.99.1
Build Dependencies:
libx11, libxext, libxi, libxtst, libxau, libxt, libxmu, libxaw, xtrans, bdftopcf, mkfontdir, perl, xset, xdpyinfo
Link Dependencies:
libx11, libxext, libxi, libxtst, libxau, libxt, libxmu, libxaw
Description:
This is a revamped version of X Test Suite (XTS) which removes some of the ugliness of building and running the tests.

xvidtune

Homepage:
Spack package:
Versions:
1.0.3
Build Dependencies:
libxxf86vm, libxt, libxaw, libxmu, libx11, pkgconfig, util-macros
Link Dependencies:
libxxf86vm, libxt, libxaw, libxmu, libx11
Description:
xvidtune is a client interface to the X server video mode extension (XFree86-VidModeExtension).

xvinfo

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libxv, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxv, libx11
Description:
xvinfo prints out the capabilities of any video adaptors associated with the display that are accessible through the X-Video extension.

xwd

Homepage:
Spack package:
Versions:
1.0.6
Build Dependencies:
libx11, libxkbfile, xproto, pkgconfig, util-macros
Link Dependencies:
libx11, libxkbfile
Description:
xwd - dump an image of an X window.

xwininfo

Homepage:
Spack package:
Versions:
1.1.3
Build Dependencies:
libxcb, libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libxcb, libx11
Description:
xwininfo prints information about windows on an X server. Various information is displayed depending on which options are selected.

xwud

Homepage:
Spack package:
Versions:
1.0.4
Build Dependencies:
libx11, xproto, pkgconfig, util-macros
Link Dependencies:
libx11
Description:
xwud allows X users to display in a window an image saved in a specially formatted dump file, such as produced by xwd.

xxhash

Homepage:
Spack package:
Versions:
0.6.5, 0.6.4, 0.6.3, 0.6.2, 0.6.1, 0.6.0, 0.5.1, 0.5.0
Description:
xxHash is an Extremely fast Hash algorithm, running at RAM speed limits. It successfully completes the SMHasher test suite which evaluates collision, dispersion and randomness qualities of hash functions. Code is highly portable, and hashes are identical on all platforms (little / big endian).

xz

Homepage:
Spack package:
Versions:
5.2.4, 5.2.3, 5.2.2, 5.2.0
Description:
XZ Utils is free general-purpose data compression software with high compression ratio. XZ Utils were written for POSIX-like systems, but also work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils.

yajl

Homepage:
Spack package:
Versions:
develop, 2.1.0
Build Dependencies:
cmake
Description:
Yet Another JSON Library (YAJL)

yambo

Homepage:
Spack package:
Versions:
4.2.2, 4.2.1, 4.2.0
Build Dependencies:
blas, lapack, mpi, netcdf, hdf5, fftw, scalapack, netcdf-fortran, libxc
Link Dependencies:
blas, lapack, mpi, netcdf, hdf5, fftw, scalapack, netcdf-fortran, libxc
Description:
Yambo is a FORTRAN/C code for Many-Body calculations in solid state and molecular physics. Yambo relies on the Kohn-Sham wavefunctions generated by two DFT public codes: abinit, and PWscf. The code was originally developed in the Condensed Matter Theoretical Group of the Physics Department at the University of Rome "Tor Vergata" by Andrea Marini. Previous to its release under the GPL license, yambo was known as SELF.

yaml-cpp

Homepage:
Spack package:
Versions:
develop, 0.6.2, 0.5.3
Build Dependencies:
cmake, boost
Link Dependencies:
boost
Description:
A YAML parser and emitter in C++

yara

Homepage:
Spack package:
Versions:
3.9.0
Build Dependencies:
autoconf, automake, libtool, m4
Description:
YARA is a tool aimed at (but not limited to) helping malware researchers to identify and classify malware samples

yasm

Homepage:
Spack package:
Versions:
develop, 1.3.0
Build Dependencies:
autoconf, automake, libtool, m4
Link Dependencies:
autoconf, automake, libtool, m4
Description:
Yasm is a complete rewrite of the NASM-2.11.06 assembler. It supports the x86 and AMD64 instruction sets, accepts NASM and GAS assembler syntaxes and outputs binary, ELF32 and ELF64 object formats.

yorick

Homepage:
Spack package:
Versions:
master, 2.2.04, f90-plugin
Build Dependencies:
libx11
Link Dependencies:
libx11
Description:
Yorick is an interpreted programming language for scientific simulations or calculations, postprocessing or steering large simulation codes, interactive scientific graphics, and reading, writing, or translating files of numbers. Yorick includes an interactive graphics package, and a binary file package capable of translating to and from the raw numeric formats of all modern computers. Yorick is written in ANSI C and runs on most operating systems (*nix systems, MacOS X, Windows).

z3

Homepage:
Spack package:
Versions:
4.5.0, 4.4.1, 4.4.0
Build Dependencies:
python
Link Dependencies:
python
Description:
Z3 is a theorem prover from Microsoft Research. It is licensed under the MIT license.

zeromq

Homepage:
Spack package:
Versions:
develop, 4.2.5, 4.2.2, 4.1.4, 4.1.2, 4.1.1, 4.0.7, 4.0.6, 4.0.5
Build Dependencies:
libsodium, autoconf, automake, libtool, pkgconfig
Link Dependencies:
libsodium
Description:
The ZMQ networking/concurrency library and core API

zfp

Homepage:
Spack package:
Versions:
0.5.4, 0.5.2, 0.5.1, 0.5.0
Description:
zfp is an open source C/C++ library for high-fidelity, high-throughput lossy compression of floating-point and integer multi-dimensional arrays.

zip

Homepage:
Spack package:
Versions:
3.0
Build Dependencies:
bzip2
Link Dependencies:
bzip2
Description:
Zip is a compression and file packaging/archive utility.

zlib

Homepage:
Spack package:
Versions:
1.2.11, 1.2.8, 1.2.3
Description:
A free, general-purpose, legally unencumbered lossless data-compression library.

zoltan

Homepage:
Spack package:
Versions:
3.83, 3.8, 3.6, 3.3
Build Dependencies:
mpi, parmetis, metis
Link Dependencies:
mpi, parmetis, metis
Description:
The Zoltan library is a toolkit of parallel combinatorial algorithms for parallel, unstructured, and/or adaptive scientific applications. Zoltan's largest component is a suite of dynamic load-balancing and partitioning algorithms that increase applications' parallel performance by reducing idle time. Zoltan also has graph coloring and graph ordering algorithms, which are useful in task schedulers and parallel preconditioners.

zsh

Homepage:
Spack package:
Versions:
5.4.2, 5.3.1, 5.1.1
Build Dependencies:
pcre, ncurses
Link Dependencies:
pcre, ncurses
Description:
Zsh is a shell designed for interactive use, although it is also a powerful scripting language. Many of the useful features of bash, ksh, and tcsh were incorporated into zsh; many original features were added.

zstd

Homepage:
Spack package:
Versions:
1.4.0, 1.3.8, 1.3.0, 1.1.2
Description:
Zstandard, or zstd as short version, is a fast lossless compression algorithm, targeting real-time compression scenarios at zlib-level and better compression ratios.

Chaining Spack Installations

You can point your Spack installation to another installation to use any packages that are installed there. To register the other Spack instance, you can add it as an entry to upstreams.yaml:

upstreams:
  spack-instance-1:
    install_tree: /path/to/other/spack/opt/spack
  spack-instance-2:
    install_tree: /path/to/another/spack/opt/spack

install_tree must point to the opt/spack directory inside of the Spack base directory.

Once the upstream Spack instance has been added, spack find will automatically check the upstream instance when querying installed packages, and new package installations for the local Spack install will use any dependencies that are installed in the upstream instance.

This other instance of Spack has no knowledge of the local Spack instance and may not have the same permissions or ownership as the local Spack instance. This has the following consequences:

  1. Upstream Spack instances are not locked. Therefore it is up to users to make sure that the local instance is not using an upstream instance when it is being modified.

  2. Users should not uninstall packages from the upstream instance. Since the upstream instance doesn't know about the local instance, it cannot prevent the uninstallation of packages which the local instance depends on.

Other details about upstream installations:

  1. If a package is installed both locally and upstream, the local installation will always be used as a dependency. This can occur if the local Spack installs a package which is not present in the upstream, but later on the upstream Spack instance also installs that package.

  2. If an upstream Spack instance registers and installs an external package, the local Spack instance will treat this the same as a Spack-installed package. This feature will only work if the upstream Spack instance includes the upstream functionality (i.e. if its commit is after March 27, 2019).

Using Multiple Upstream Spack Instances

A single Spack instance can use multiple upstream Spack installations. Spack will search upstream instances in the order you list them in your configuration. If your installation refers to instances X and Y, in that order, then instance X must list Y as an upstream in its own upstreams.yaml.

Using Modules for Upstream Packages

The local Spack instance does not generate modules for packages which are installed upstream. The local Spack instance can be configured to use the modules generated by the upstream Spack instance.

There are two requirements to use the modules created by an upstream Spack instance: firstly the upstream instance must do a spack module tcl refresh, which generates an index file that maps installed packages to their modules; secondly, the local Spack instance must add a modules entry to the configuration:

upstreams:
  spack-instance-1:
    install_tree: /path/to/other/spack/opt/spack
    modules:
      tcl: /path/to/other/spack/share/spack/modules

Each time new packages are installed in the upstream Spack instance, the upstream Spack maintainer should run spack module tcl refresh (or the corresponding command for the type of module they intend to use).

注釈

Spack can generate modules that automatically load the modules of dependency packages. Spack cannot currently do this for modules in upstream packages.

Custom Extensions

警告

The support for extending Spack with custom commands is still experimental. Users should expect APIs or prescribed directory structures to change at any time.

Spack extensions permit you to extend Spack capabilities by deploying your own custom commands or logic in an arbitrary location on your filesystem. This might be extremely useful e.g. to develop and maintain a command whose purpose is too specific to be considered for reintegration into the mainline or to evolve a command through its early stages before starting a discussion to merge it upstream. From Spack's point of view an extension is any path in your filesystem which respects a prescribed naming and layout for files:

spack-scripting/ # The top level directory must match the format 'spack-{extension_name}'
├── pytest.ini # Optional file if the extension ships its own tests
├── scripting # Folder that may contain modules that are needed for the extension commands
│   └── cmd # Folder containing extension commands
│       └── filter.py # A new command that will be available
├── tests # Tests for this extension
│   ├── conftest.py
│   └── test_filter.py
└── templates # Templates that may be needed by the extension

In the example above the extension named scripting adds an additional command (filter) and unit tests to verify its behavior. The code for this example can be obtained by cloning the corresponding git repository:

$ pwd
/home/user
$ mkdir tmp && cd tmp
$ git clone https://github.com/alalazo/spack-scripting.git
Cloning into 'spack-scripting'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 11 (delta 0), reused 11 (delta 0), pack-reused 0
Receiving objects: 100% (11/11), done.

As you can see by inspecting the sources, Python modules that are part of the extension can import any core Spack module.

Configure Spack to Use Extensions

To make your current Spack instance aware of extensions you should add their root paths to config.yaml. In the case of our example this means ensuring that:

config:
  extensions:
  - /home/user/tmp/spack-scripting

is part of your configuration file. Once this is setup any command that the extension provides will be available from the command line:

$ spack filter --help
usage: spack filter [-h] [--installed | --not-installed]
                    [--explicit | --implicit] [--output OUTPUT]
                    ...

filter specs based on their properties

positional arguments:
  specs            specs to be filtered

optional arguments:
  -h, --help       show this help message and exit
  --installed      select installed specs
  --not-installed  select specs that are not yet installed
  --explicit       select specs that were installed explicitly
  --implicit       select specs that are not installed or were installed implicitly
  --output OUTPUT  where to dump the result

The corresponding unit tests can be run giving the appropriate options to spack test:

$ spack test --extension=scripting

============================================================== test session starts ===============================================================
platform linux2 -- Python 2.7.15rc1, pytest-3.2.5, py-1.4.34, pluggy-0.4.0
rootdir: /home/mculpo/tmp/spack-scripting, inifile: pytest.ini
collected 5 items

tests/test_filter.py ...XX
============================================================ short test summary info =============================================================
XPASS tests/test_filter.py::test_filtering_specs[flags3-specs3-expected3]
XPASS tests/test_filter.py::test_filtering_specs[flags4-specs4-expected4]

=========================================================== slowest 20 test durations ============================================================
3.74s setup    tests/test_filter.py::test_filtering_specs[flags0-specs0-expected0]
0.17s call     tests/test_filter.py::test_filtering_specs[flags3-specs3-expected3]
0.16s call     tests/test_filter.py::test_filtering_specs[flags2-specs2-expected2]
0.15s call     tests/test_filter.py::test_filtering_specs[flags1-specs1-expected1]
0.13s call     tests/test_filter.py::test_filtering_specs[flags4-specs4-expected4]
0.08s call     tests/test_filter.py::test_filtering_specs[flags0-specs0-expected0]
0.04s teardown tests/test_filter.py::test_filtering_specs[flags4-specs4-expected4]
0.00s setup    tests/test_filter.py::test_filtering_specs[flags4-specs4-expected4]
0.00s setup    tests/test_filter.py::test_filtering_specs[flags3-specs3-expected3]
0.00s setup    tests/test_filter.py::test_filtering_specs[flags1-specs1-expected1]
0.00s setup    tests/test_filter.py::test_filtering_specs[flags2-specs2-expected2]
0.00s teardown tests/test_filter.py::test_filtering_specs[flags2-specs2-expected2]
0.00s teardown tests/test_filter.py::test_filtering_specs[flags1-specs1-expected1]
0.00s teardown tests/test_filter.py::test_filtering_specs[flags0-specs0-expected0]
0.00s teardown tests/test_filter.py::test_filtering_specs[flags3-specs3-expected3]
====================================================== 3 passed, 2 xpassed in 4.51 seconds =======================================================

Contribution Guide

This guide is intended for developers or administrators who want to contribute a new package, feature, or bugfix to Spack. It assumes that you have at least some familiarity with Git VCS and Github. The guide will show a few examples of contributing workflows and discuss the granularity of pull-requests (PRs). It will also discuss the tests your PR must pass in order to be accepted into Spack.

First, what is a PR? Quoting Bitbucket's tutorials:

Pull requests are a mechanism for a developer to notify team members that they have completed a feature. The pull request is more than just a notification—it’s a dedicated forum for discussing the proposed feature.

Important is completed feature. The changes one proposes in a PR should correspond to one feature/bugfix/extension/etc. One can create PRs with changes relevant to different ideas, however reviewing such PRs becomes tedious and error prone. If possible, try to follow the one-PR-one-package/feature rule.

Spack uses a rough approximation of the Git Flow branching model. The develop branch contains the latest contributions, and master is always tagged and points to the latest stable release. Therefore, when you send your request, make develop the destination branch on the Spack repository.

Continuous Integration

Spack uses Travis CI for Continuous Integration testing. This means that every time you submit a pull request, a series of tests will be run to make sure you didn't accidentally introduce any bugs into Spack. Your PR will not be accepted until it passes all of these tests. While you can certainly wait for the results of these tests after submitting a PR, we recommend that you run them locally to speed up the review process.

注釈

Oftentimes, Travis will fail for reasons other than a problem with your PR. For example, apt-get, pip, or homebrew will fail to download one of the dependencies for the test suite, or a transient bug will cause the unit tests to timeout. If Travis fails, click the "Details" link and click on the test(s) that is failing. If it doesn't look like it is failing for reasons related to your PR, you have two options. If you have write permissions for the Spack repository, you should see a "Restart job" button on the right-hand side. If not, you can close and reopen your PR to rerun all of the tests. If the same test keeps failing, there may be a problem with your PR. If you notice that every recent PR is failing with the same error message, it may be that Travis is down or one of Spack's dependencies put out a new release that is causing problems. If this is the case, please file an issue.

If you take a look in $SPACK_ROOT/.travis.yml, you'll notice that we test against Python 2.6, 2.7, and 3.4-3.7 on both macOS and Linux. We currently perform 3 types of tests:

Unit Tests

Unit tests ensure that core Spack features like fetching or spec resolution are working as expected. If your PR only adds new packages or modifies existing ones, there's very little chance that your changes could cause the unit tests to fail. However, if you make changes to Spack's core libraries, you should run the unit tests to make sure you didn't break anything.

Since they test things like fetching from VCS repos, the unit tests require git, mercurial, and subversion to run. Make sure these are installed on your system and can be found in your PATH. All of these can be installed with Spack or with your system package manager.

To run all of the unit tests, use:

$ spack test

These tests may take several minutes to complete. If you know you are only modifying a single Spack feature, you can run a single unit test at a time:

$ spack test architecture

This allows you to develop iteratively: make a change, test that change, make another change, test that change, etc. To get a list of all available unit tests, run:

$ spack test --list
architecture               mirror          spec_dag          build_env     mirror             log
build_environment          module_parsing  spec_semantics    buildcache    module             common
build_system_guess         multimethod     spec_set          cd            print_shell_vars   dotkit
build_systems              namespace_trie  spec_syntax       clean         providers          lmod
cc                         optional_deps   spec_yaml         commands      python             tcl
cmd_extensions             package_hash    stage             config        release_jobs       editor
compilers                  package_sanity  svn_fetch         debug         resource           environment
concretize                 packages        tengine           dependencies  spec               executable
concretize_preferences     packaging       test_activations  dependents    test_compiler_cmd  file_cache
config                     patch           url_fetch         env           uninstall          log_parser
database                   pattern         url_parse         find          url                prefix
directory_layout           permissions     url_substitution  flake8        versions           spack_lock_wrapper
environment_modifications  provider_index  variant           gpg           view               spack_yaml
flag_handlers              python_version  versions          graph         arguments          util_string
git_fetch                  relocate        views             help          file_list
graph                      repo            web               info          filesystem
hg_fetch                   sbang           activate          install       lang
install                    schema          arch              license       link_tree
make_executable            spack_yaml      blame             list          lock

A more detailed list of available unit tests can be found by running spack test --long-list.

By default, pytest captures the output of all unit tests. If you add print statements to a unit test and want to see the output, simply run:

$ spack test -s -k architecture

Unit tests are crucial to making sure bugs aren't introduced into Spack. If you are modifying core Spack libraries or adding new functionality, please consider adding new unit tests or strengthening existing tests.

注釈

There is also a run-unit-tests script in share/spack/qa that runs the unit tests. Afterwards, it reports back to Codecov with the percentage of Spack that is covered by unit tests. This script is designed for Travis CI. If you want to run the unit tests yourself, we suggest you use spack test.

Flake8 Tests

Spack uses Flake8 to test for PEP 8 conformance. PEP 8 is a series of style guides for Python that provide suggestions for everything from variable naming to indentation. In order to limit the number of PRs that were mostly style changes, we decided to enforce PEP 8 conformance. Your PR needs to comply with PEP 8 in order to be accepted.

Testing for PEP 8 compliance is easy. Simply run the spack flake8 command:

$ spack flake8

spack flake8 has a couple advantages over running flake8 by hand:

  1. It only tests files that you have modified since branching off of develop.

  2. It works regardless of what directory you are in.

  3. It automatically adds approved exemptions from the flake8 checks. For example, URLs are often longer than 80 characters, so we exempt them from line length checks. We also exempt lines that start with "homepage", "url", "version", "variant", "depends_on", and "extends" in package.py files.

More approved flake8 exemptions can be found here.

If all is well, you'll see something like this:

$ run-flake8-tests
Dependencies found.
=======================================================
flake8: running flake8 code checks on spack.

Modified files:

  var/spack/repos/builtin/packages/hdf5/package.py
  var/spack/repos/builtin/packages/hdf/package.py
  var/spack/repos/builtin/packages/netcdf/package.py
=======================================================
Flake8 checks were clean.

However, if you aren't compliant with PEP 8, flake8 will complain:

var/spack/repos/builtin/packages/netcdf/package.py:26: [F401] 'os' imported but unused
var/spack/repos/builtin/packages/netcdf/package.py:61: [E303] too many blank lines (2)
var/spack/repos/builtin/packages/netcdf/package.py:106: [E501] line too long (92 > 79 characters)
Flake8 found errors.

Most of the error messages are straightforward, but if you don't understand what they mean, just ask questions about them when you submit your PR. The line numbers will change if you add or delete lines, so simply run spack flake8 again to update them.

ちなみに

Try fixing flake8 errors in reverse order. This eliminates the need for multiple runs of spack flake8 just to re-compute line numbers and makes it much easier to fix errors directly off of the Travis output.

警告

Flake8 and pep8-naming require a number of dependencies in order to run. If you installed py-flake8 and py-pep8-naming, the easiest way to ensure the right packages are on your PYTHONPATH is to run:

spack activate py-flake8
spack activate pep8-naming

so that all of the dependencies are symlinked to a central location. If you see an error message like:

Traceback (most recent call last):
  File: "/usr/bin/flake8", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

that means Flake8 couldn't find setuptools in your PYTHONPATH.

Documentation Tests

Spack uses Sphinx to build its documentation. In order to prevent things like broken links and missing imports, we added documentation tests that build the documentation and fail if there are any warning or error messages.

Building the documentation requires several dependencies, all of which can be installed with Spack:

  • sphinx

  • sphinxcontrib-programoutput

  • sphinx-rtd-theme

  • graphviz

  • git

  • mercurial

  • subversion

警告

Sphinx has several required dependencies. If you installed py-sphinx with Spack, make sure to add all of these dependencies to your PYTHONPATH. The easiest way to do this is to run:

$ spack activate py-sphinx
$ spack activate py-sphinx-rtd-theme
$ spack activate py-sphinxcontrib-programoutput

so that all of the dependencies are symlinked to a central location. If you see an error message like:

Extension error:
Could not import extension sphinxcontrib.programoutput (exception: No module named sphinxcontrib.programoutput)
make: *** [html] Error 1

that means Sphinx couldn't find py-sphinxcontrib-programoutput in your PYTHONPATH.

Once all of the dependencies are installed, you can try building the documentation:

$ cd "$SPACK_ROOT/lib/spack/docs"
$ make clean
$ make

If you see any warning or error messages, you will have to correct those before your PR is accepted.

注釈

There is also a run-doc-tests script in share/spack/qa. The only difference between running this script and running make by hand is that the script will exit immediately if it encounters an error or warning. This is necessary for Travis CI. If you made a lot of documentation changes, it is much quicker to run make by hand so that you can see all of the warnings at once.

If you are editing the documentation, you should obviously be running the documentation tests. But even if you are simply adding a new package, your changes could cause the documentation tests to fail:

package_list.rst:8745: WARNING: Block quote ends without a blank line; unexpected unindent.

At first, this error message will mean nothing to you, since you didn't edit that file. Until you look at line 8745 of the file in question:

Description:
   NetCDF is a set of software libraries and self-describing, machine-
  independent data formats that support the creation, access, and sharing
  of array-oriented scientific data.

Our documentation includes a list of all Spack packages. If you add a new package, its docstring is added to this page. The problem in this case was that the docstring looked like:

class Netcdf(Package):
    """
    NetCDF is a set of software libraries and self-describing,
    machine-independent data formats that support the creation,
    access, and sharing of array-oriented scientific data.
    """

Docstrings cannot start with a newline character, or else Sphinx will complain. Instead, they should look like:

class Netcdf(Package):
    """NetCDF is a set of software libraries and self-describing,
    machine-independent data formats that support the creation,
    access, and sharing of array-oriented scientific data."""

Documentation changes can result in much more obfuscated warning messages. If you don't understand what they mean, feel free to ask when you submit your PR.

Coverage

Spack uses Codecov to generate and report unit test coverage. This helps us tell what percentage of lines of code in Spack are covered by unit tests. Although code covered by unit tests can still contain bugs, it is much less error prone than code that is not covered by unit tests.

Codecov provides browser extensions for Google Chrome, Firefox, and Opera. These extensions integrate with GitHub and allow you to see coverage line-by-line when viewing the Spack repository. If you are new to Spack, a great way to get started is to write unit tests to increase coverage!

Unlike with Travis, Codecov tests are not required to pass in order for your PR to be merged. If you modify core Spack libraries, we would greatly appreciate unit tests that cover these changed lines. Otherwise, we have no way of knowing whether or not your changes introduce a bug. If you make substantial changes to the core, we may request unit tests to increase coverage.

注釈

If the only files you modified are package files, we do not care about coverage on your PR. You may notice that the Codecov tests fail even though you didn't modify any core files. This means that Spack's overall coverage has increased since you branched off of develop. This is a good thing! If you really want to get the Codecov tests to pass, you can rebase off of the latest develop, but again, this is not required.

Git Workflows

Spack is still in the beta stages of development. Most of our users run off of the develop branch, and fixes and new features are constantly being merged. So how do you keep up-to-date with upstream while maintaining your own local differences and contributing PRs to Spack?

Branching

The easiest way to contribute a pull request is to make all of your changes on new branches. Make sure your develop is up-to-date and create a new branch off of it:

$ git checkout develop
$ git pull upstream develop
$ git branch <descriptive_branch_name>
$ git checkout <descriptive_branch_name>

Here we assume that the local develop branch tracks the upstream develop branch of Spack. This is not a requirement and you could also do the same with remote branches. But for some it is more convenient to have a local branch that tracks upstream.

Normally we prefer that commits pertaining to a package <package-name> have a message <package-name>: descriptive message. It is important to add descriptive message so that others, who might be looking at your changes later (in a year or maybe two), would understand the rationale behind them.

Now, you can make your changes while keeping the develop branch pure. Edit a few files and commit them by running:

$ git add <files_to_be_part_of_the_commit>
$ git commit --message <descriptive_message_of_this_particular_commit>

Next, push it to your remote fork and create a PR:

$ git push origin <descriptive_branch_name> --set-upstream

GitHub provides a tutorial on how to file a pull request. When you send the request, make develop the destination branch.

If you need this change immediately and don't have time to wait for your PR to be merged, you can always work on this branch. But if you have multiple PRs, another option is to maintain a Frankenstein branch that combines all of your other branches:

$ git co develop
$ git branch <your_modified_develop_branch>
$ git checkout <your_modified_develop_branch>
$ git merge <descriptive_branch_name>

This can be done with each new PR you submit. Just make sure to keep this local branch up-to-date with upstream develop too.

Cherry-Picking

What if you made some changes to your local modified develop branch and already committed them, but later decided to contribute them to Spack? You can use cherry-picking to create a new branch with only these commits.

First, check out your local modified develop branch:

$ git checkout <your_modified_develop_branch>

Now, get the hashes of the commits you want from the output of:

$ git log

Next, create a new branch off of upstream develop and copy the commits that you want in your PR:

$ git checkout develop
$ git pull upstream develop
$ git branch <descriptive_branch_name>
$ git checkout <descriptive_branch_name>
$ git cherry-pick <hash>
$ git push origin <descriptive_branch_name> --set-upstream

Now you can create a PR from the web-interface of GitHub. The net result is as follows:

  1. You patched your local version of Spack and can use it further.

  2. You "cherry-picked" these changes in a stand-alone branch and submitted it as a PR upstream.

Should you have several commits to contribute, you could follow the same procedure by getting hashes of all of them and cherry-picking to the PR branch.

注釈

It is important that whenever you change something that might be of importance upstream, create a pull request as soon as possible. Do not wait for weeks/months to do this, because:

  1. you might forget why you modified certain files

  2. it could get difficult to isolate this change into a stand-alone clean PR.

Rebasing

Other developers are constantly making contributions to Spack, possibly on the same files that your PR changed. If their PR is merged before yours, it can create a merge conflict. This means that your PR can no longer be automatically merged without a chance of breaking your changes. In this case, you will be asked to rebase on top of the latest upstream develop.

First, make sure your develop branch is up-to-date:

$ git checkout develop
$ git pull upstream develop

Now, we need to switch to the branch you submitted for your PR and rebase it on top of develop:

$ git checkout <descriptive_branch_name>
$ git rebase develop

Git will likely ask you to resolve conflicts. Edit the file that it says can't be merged automatically and resolve the conflict. Then, run:

$ git add <file_that_could_not_be_merged>
$ git rebase --continue

You may have to repeat this process multiple times until all conflicts are resolved. Once this is done, simply force push your rebased branch to your remote fork:

$ git push --force origin <descriptive_branch_name>

Rebasing with cherry-pick

You can also perform a rebase using cherry-pick. First, create a temporary backup branch:

$ git checkout <descriptive_branch_name>
$ git branch tmp

If anything goes wrong, you can always go back to your tmp branch. Now, look at the logs and save the hashes of any commits you would like to keep:

$ git log

Next, go back to the original branch and reset it to develop. Before doing so, make sure that you local develop branch is up-to-date with upstream:

$ git checkout develop
$ git pull upstream develop
$ git checkout <descriptive_branch_name>
$ git reset --hard develop

Now you can cherry-pick relevant commits:

$ git cherry-pick <hash1>
$ git cherry-pick <hash2>

Push the modified branch to your fork:

$ git push --force origin <descriptive_branch_name>

If everything looks good, delete the backup branch:

$ git branch --delete --force tmp

Re-writing History

Sometimes you may end up on a branch that has diverged so much from develop that it cannot easily be rebased. If the current commits history is more of an experimental nature and only the net result is important, you may rewrite the history.

First, merge upstream develop and reset you branch to it. On the branch in question, run:

$ git merge develop
$ git reset develop

At this point your branch will point to the same commit as develop and thereby the two are indistinguishable. However, all the files that were previously modified will stay as such. In other words, you do not lose the changes you made. Changes can be reviewed by looking at diffs:

$ git status
$ git diff

The next step is to rewrite the history by adding files and creating commits:

$ git add <files_to_be_part_of_commit>
$ git commit --message <descriptive_message>

After all changed files are committed, you can push the branch to your fork and create a PR:

$ git push origin --set-upstream

Packaging Guide

This guide is intended for developers or administrators who want to package software so that Spack can install it. It assumes that you have at least some familiarity with Python, and that you've read the basic usage guide, especially the part about specs.

There are two key parts of Spack:

  1. Specs: expressions for describing builds of software, and

  2. Packages: Python modules that describe how to build software according to a spec.

Specs allow a user to describe a particular build in a way that a package author can understand. Packages allow the packager to encapsulate the build logic for different versions, compilers, options, platforms, and dependency combinations in one place. Essentially, a package translates a spec into build logic.

Packages in Spack are written in pure Python, so you can do anything in Spack that you can do in Python. Python was chosen as the implementation language for two reasons. First, Python is becoming ubiquitous in the scientific software community. Second, it's a modern language and has many powerful features to help make package writing easy.

Creating & editing packages

spack create

The spack create command creates a directory with the package name and generates a package.py file with a boilerplate package template. If given a URL pointing to a tarball or other software archive, spack create is smart enough to determine basic information about the package, including its name and build system. In most cases, spack create plus a few modifications is all you need to get a package working.

Here's an example:

$ spack create https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2

Spack examines the tarball URL and tries to figure out the name of the package to be created. If the name contains uppercase letters, these are automatically converted to lowercase. If the name contains underscores or periods, these are automatically converted to dashes.

Spack also searches for additional versions located in the same directory of the website. Spack prompts you to tell you how many versions it found and asks you how many you would like to download and checksum:

$ spack create https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
==> This looks like a URL for gmp
==> Found 16 versions of gmp:

  6.1.2   https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
  6.1.1   https://gmplib.org/download/gmp/gmp-6.1.1.tar.bz2
  6.1.0   https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2
  ...
  5.0.0   https://gmplib.org/download/gmp/gmp-5.0.0.tar.bz2

How many would you like to checksum? (default is 1, q to abort)

Spack will automatically download the number of tarballs you specify (starting with the most recent) and checksum each of them.

You do not have to download all of the versions up front. You can always choose to download just one tarball initially, and run spack checksum later if you need more versions.

Let's say you download 3 tarballs:

How many would you like to checksum? (default is 1, q to abort) 3
==> Downloading...
==> Fetching https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
######################################################################## 100.0%
==> Fetching https://gmplib.org/download/gmp/gmp-6.1.1.tar.bz2
######################################################################## 100.0%
==> Fetching https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2
######################################################################## 100.0%
==> Checksummed 3 versions of gmp:
==> This package looks like it uses the autotools build system
==> Created template for gmp package
==> Created package file: /Users/Adam/spack/var/spack/repos/builtin/packages/gmp/package.py

Spack automatically creates a directory in the appropriate repository, generates a boilerplate template for your package, and opens up the new package.py in your favorite $EDITOR:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#
# This is a template package file for Spack.  We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
#     spack install gmp
#
# You can edit this file again by typing:
#
#     spack edit gmp
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *


class Gmp(AutotoolsPackage):
    """FIXME: Put a proper description of your package here."""

    # FIXME: Add a proper url for your package's homepage here.
    homepage = "http://www.example.com"
    url      = "https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2"

    version('6.1.2', '8ddbb26dc3bd4e2302984debba1406a5')
    version('6.1.1', '4c175f86e11eb32d8bf9872ca3a8e11d')
    version('6.1.0', '86ee6e54ebfc4a90b643a65e402c4048')

    # FIXME: Add dependencies if required.
    # depends_on('foo')

    def configure_args(self):
        # FIXME: Add arguments other than --prefix
        # FIXME: If not needed delete the function
        args = []
        return args

The tedious stuff (creating the class, checksumming archives) has been done for you. You'll notice that spack create correctly detected that gmp uses the Autotools build system. It created a new Gmp package that subclasses the AutotoolsPackage base class. This base class provides basic installation methods common to all Autotools packages:

./configure --prefix=/path/to/installation/directory

make
make check
make install

For most Autotools packages, this is sufficient. If you need to add additional arguments to the ./configure call, add them via the configure_args function.

In the generated package, the download url attribute is already set. All the things you still need to change are marked with FIXME labels. You can delete the commented instructions between the license and the first import statement after reading them. The rest of the tasks you need to do are as follows:

  1. Add a description.

    Immediately inside the package class is a docstring in triple-quotes ("""). It is used to generate the description shown when users run spack info.

  2. Change the homepage to a useful URL.

    The homepage is displayed when users run spack info so that they can learn more about your package.

  3. Add depends_on() calls for the package's dependencies.

    depends_on tells Spack that other packages need to be built and installed before this one. See Dependencies.

  4. Get the installation working.

    Your new package may require specific flags during configure. These can be added via configure_args. Specifics will differ depending on the package and its build system. Implementing the install method is covered in detail later.

Passing a URL to spack create is a convenient and easy way to get a basic package template, but what if your software is licensed and cannot be downloaded from a URL? You can still create a boilerplate package.py by telling spack create what name you want to use:

$ spack create --name intel

This will create a simple intel package with an install() method that you can craft to install your package.

What if spack create <url> guessed the wrong name or build system? For example, if your package uses the Autotools build system but does not come with a configure script, Spack won't realize it uses Autotools. You can overwrite the old package with --force and specify a name with --name or a build system template to use with --template:

$ spack create --name gmp https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2
$ spack create --force --template autotools https://gmplib.org/download/gmp/gmp-6.1.2.tar.bz2

注釈

If you are creating a package that uses the Autotools build system but does not come with a configure script, you'll need to add an autoreconf method to your package that explains how to generate the configure script. You may also need the following dependencies:

depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool',  type='build')
depends_on('m4',       type='build')

A complete list of available build system templates can be found by running spack create --help.

spack edit

One of the easiest ways to learn how to write packages is to look at existing ones. You can edit a package file by name with the spack edit command:

$ spack edit gmp

So, if you used spack create to create a package, then saved and closed the resulting file, you can get back to it with spack edit. The gmp package actually lives in $SPACK_ROOT/var/spack/repos/builtin/packages/gmp/package.py, but spack edit provides a much simpler shortcut and saves you the trouble of typing the full path.

Naming & directory structure

This section describes how packages need to be named, and where they live in Spack's directory structure. In general, spack create handles creating package files for you, so you can skip most of the details here.

var/spack/repos/builtin/packages

A Spack installation directory is structured like a standard UNIX install prefix (bin, lib, include, var, opt, etc.). Most of the code for Spack lives in $SPACK_ROOT/lib/spack. Packages themselves live in $SPACK_ROOT/var/spack/repos/builtin/packages.

If you cd to that directory, you will see directories for each package:

$ cd $SPACK_ROOT/var/spack/repos/builtin/packages && ls
abinit
abyss
accfft
ack
activeharmony
acts-core
adept-utils
adios
adios2
adlbx
...

Each directory contains a file called package.py, which is where all the python code for the package goes. For example, the libelf package lives in:

$SPACK_ROOT/var/spack/repos/builtin/packages/libelf/package.py

Alongside the package.py file, a package may contain extra directories or files (like patches) that it needs to build.

Package Names

Packages are named after the directory containing package.py. So, libelf's package.py lives in a directory called libelf. The package.py file defines a class called Libelf, which extends Spack's Package class. For example, here is $SPACK_ROOT/var/spack/repos/builtin/packages/libelf/package.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from spack import *

class Libelf(Package):
    """ ... description ... """
    homepage = ...
    url = ...
    version(...)
    depends_on(...)

    def install():
        ...

The directory name (libelf) determines the package name that users should provide on the command line. e.g., if you type any of these:

$ spack info libelf
$ spack versions libelf
$ spack install libelf@0.8.13

Spack sees the package name in the spec and looks for libelf/package.py in var/spack/repos/builtin/packages. Likewise, if you run spack install py-numpy, Spack looks for py-numpy/package.py.

Spack uses the directory name as the package name in order to give packagers more freedom in naming their packages. Package names can contain letters, numbers, and dashes. Using a Python identifier (e.g., a class name or a module name) would make it difficult to support these options. So, you can name a package 3proxy or foo-bar and Spack won't care. It just needs to see that name in the packages directory.

Package class names

Spack loads package.py files dynamically, and it needs to find a special class name in the file for the load to succeed. The class name (Libelf in our example) is formed by converting words separated by - in the file name to CamelCase. If the name starts with a number, we prefix the class name with _. Here are some examples:

Module Name

Class Name

foo-bar

FooBar

3proxy

_3proxy

In general, you won't have to remember this naming convention because spack create and spack edit handle the details for you.

Trusted Downloads

Spack verifies that the source code it downloads is not corrupted or compromised; or at least, that it is the same version the author of the Spack package saw when the package was created. If Spack uses a download method it can verify, we say the download method is trusted. Trust is important for all downloads: Spack has no control over the security of the various sites from which it downloads source code, and can never assume that any particular site hasn't been compromised.

Trust is established in different ways for different download methods. For the most common download method --- a single-file tarball --- the tarball is checksummed. Git downloads using commit= are trusted implicitly, as long as a hash is specified.

Spack also provides untrusted download methods: tarball URLs may be supplied without a checksum, or Git downloads may specify a branch or tag instead of a hash. If the user does not control or trust the source of an untrusted download, it is a security risk. Unless otherwise specified by the user for special cases, Spack should by default use only trusted download methods.

Unfortunately, Spack does not currently provide that guarantee. It does provide the following mechanisms for safety:

  1. By default, Spack will only install a tarball package if it has a checksum and that checksum matches. You can override this with spack install --no-checksum.

  2. Numeric versions are almost always tarball downloads, whereas non-numeric versions not named develop frequently download untrusted branches or tags from a version control system. As long as a package has at least one numeric version, and no non-numeric version named develop, Spack will prefer it over any non-numeric versions.

Checksums

For tarball downloads, Spack can currently support checksums using the MD5, SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 algorithms. It determines the algorithm to use based on the hash length.

Versions and fetching

The most straightforward way to add new versions to your package is to add a line like this in the package class:

class Foo(Package):

    url = "http://example.com/foo-1.0.tar.gz"

    version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
    version('8.2.0', '1c9f62f0778697a09d36121ead88e08e')
    version('8.1.2', 'd47dd09ed7ae6e7fd6f9a816d7f5fdf6')

Versions should be listed in descending order, from newest to oldest.

Date Versions

If you wish to use dates as versions, it is best to use the format @yyyy-mm-dd. This will ensure they sort in the correct order.

Alternately, you might use a hybrid release-version / date scheme. For example, @1.3_2016-08-31 would mean the version from the 1.3 branch, as of August 31, 2016.

Version URLs

By default, each version's URL is extrapolated from the url field in the package. For example, Spack is smart enough to download version 8.2.1 of the Foo package above from http://example.com/foo-8.2.1.tar.gz.

If the URL is particularly complicated or changes based on the release, you can override the default URL generation algorithm by defining your own url_for_version() function. For example, the download URL for OpenMPI contains the major.minor version in one spot and the major.minor.patch version in another:

https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.1.tar.bz2

In order to handle this, you can define a url_for_version() function like so:

    def url_for_version(self, version):
        url = "http://www.open-mpi.org/software/ompi/v{0}/downloads/openmpi-{1}.tar.bz2"
        return url.format(version.up_to(2), version)

With the use of this url_for_version(), Spack knows to download OpenMPI 2.1.1 from http://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.1.tar.bz2 but download OpenMPI 1.10.7 from http://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.7.tar.bz2.

You'll notice that OpenMPI's url_for_version() function makes use of a special Version function called up_to(). When you call version.up_to(2) on a version like 1.10.0, it returns 1.10. version.up_to(1) would return 1. This can be very useful for packages that place all X.Y.* versions in a single directory and then places all X.Y.Z versions in a sub-directory.

There are a few Version properties you should be aware of. We generally prefer numeric versions to be separated by dots for uniformity, but not all tarballs are named that way. For example, icu4c separates its major and minor versions with underscores, like icu4c-57_1-src.tgz. The value 57_1 can be obtained with the use of the version.underscored property. Note that Python properties don't need parentheses. There are other separator properties as well:

Property

Result

version.dotted

1.2.3

version.dashed

1-2-3

version.underscored

1_2_3

version.joined

123

注釈

Python properties don't need parentheses. version.dashed is correct. version.dashed() is incorrect.

In addition, these version properties can be combined with up_to(). For example:

>>> version = Version('1.2.3')
>>> version.up_to(2).dashed
Version('1-2')
>>> version.underscored.up_to(2)
Version('1_2')

As you can see, order is not important. Just keep in mind that up_to() and the other version properties return Version objects, not strings.

If a URL cannot be derived systematically, or there is a special URL for one of its versions, you can add an explicit URL for a particular version:

version('8.2.1', '4136d7b4c04df68b686570afa26988ac',
        url='http://example.com/foo-8.2.1-special-version.tar.gz')

When you supply a custom URL for a version, Spack uses that URL verbatim and does not perform extrapolation. The order of precedence of these methods is:

  1. package-level url

  2. url_for_version()

  3. version-specific url

so if your package contains a url_for_version(), it can be overridden by a version-specific url.

If your package does not contain a package-level url or url_for_version(), Spack can determine which URL to download from even if only some of the versions specify their own url. Spack will use the nearest URL before the requested version. This is useful for packages that have an easy to extrapolate URL, but keep changing their URL format every few releases. With this method, you only need to specify the url when the URL changes.

Skipping the expand step

Spack normally expands archives (e.g. *.tar.gz and *.zip) automatically after downloading them. If you want to skip this step (e.g., for self-extracting executables and other custom archive types), you can add expand=False to a version directive.

version('8.2.1', '4136d7b4c04df68b686570afa26988ac',
        url='http://example.com/foo-8.2.1-special-version.sh', expand=False)

When expand is set to False, Spack sets the current working directory to the directory containing the downloaded archive before it calls your install method. Within install, the path to the downloaded archive is available as self.stage.archive_file.

Here is an example snippet for packages distributed as self-extracting archives. The example sets permissions on the downloaded file to make it executable, then runs it with some arguments.

def install(self, spec, prefix):
    set_executable(self.stage.archive_file)
    installer = Executable(self.stage.archive_file)
    installer('--prefix=%s' % prefix, 'arg1', 'arg2', 'etc.')

Download caching

Spack maintains a cache (described here) which saves files retrieved during package installations to avoid re-downloading in the case that a package is installed with a different specification (but the same version) or reinstalled on account of a change in the hashing scheme.

Version comparison

Most Spack versions are numeric, a tuple of integers; for example, apex@0.1, ferret@6.96 or py-netcdf@1.2.3.1. Spack knows how to compare and sort numeric versions.

Some Spack versions involve slight extensions of numeric syntax; for example, py-sphinx-rtd-theme@0.1.10a0. In this case, numbers are always considered to be "newer" than letters. This is for consistency with RPM.

Spack versions may also be arbitrary non-numeric strings; any string here will suffice; for example, @develop, @master, @local. Versions are compared as follows. First, a version string is split into multiple fields based on delimiters such as ., - etc. Then matching fields are compared using the rules below:

  1. The following develop-like strings are greater (newer) than all numbers and are ordered as develop > master > head > trunk.

  2. Numbers are all less than the chosen develop-like strings above, and are sorted numerically.

  3. All other non-numeric versions are less than numeric versions, and are sorted alphabetically.

The logic behind this sort order is two-fold:

  1. Non-numeric versions are usually used for special cases while developing or debugging a piece of software. Keeping most of them less than numeric versions ensures that Spack chooses numeric versions by default whenever possible.

  2. The most-recent development version of a package will usually be newer than any released numeric versions. This allows the @develop version to satisfy dependencies like depends_on(abc, when="@x.y.z:")

Version selection

When concretizing, many versions might match a user-supplied spec. For example, the spec python matches all available versions of the package python. Similarly, python@3: matches all versions of Python3. Given a set of versions that match a spec, Spack concretization uses the following priorities to decide which one to use:

  1. If the user provided a list of versions in packages.yaml, the first matching version in that list will be used.

  2. If one or more versions is specified as preferred=True, in either packages.yaml or package.py, the largest matching version will be used. ("Latest" is defined by the sort order above).

  3. If no preferences in particular are specified in the package or in packages.yaml, then the largest matching non-develop version will be used. By avoiding @develop, this prevents users from accidentally installing a @develop version.

  4. If all else fails and @develop is the only matching version, it will be used.

spack checksum

If you want to add new versions to a package you've already created, this is automated with the spack checksum command. Here's an example for libelf:

$ spack checksum libelf
==> Found 16 versions of libelf.
  0.8.13    http://www.mr511.de/software/libelf-0.8.13.tar.gz
  0.8.12    http://www.mr511.de/software/libelf-0.8.12.tar.gz
  0.8.11    http://www.mr511.de/software/libelf-0.8.11.tar.gz
  0.8.10    http://www.mr511.de/software/libelf-0.8.10.tar.gz
  0.8.9     http://www.mr511.de/software/libelf-0.8.9.tar.gz
  0.8.8     http://www.mr511.de/software/libelf-0.8.8.tar.gz
  0.8.7     http://www.mr511.de/software/libelf-0.8.7.tar.gz
  0.8.6     http://www.mr511.de/software/libelf-0.8.6.tar.gz
  0.8.5     http://www.mr511.de/software/libelf-0.8.5.tar.gz
  ...
  0.5.2     http://www.mr511.de/software/libelf-0.5.2.tar.gz

How many would you like to checksum? (default is 1, q to abort)

This does the same thing that spack create does, but it allows you to go back and add new versions easily as you need them (e.g., as they're released). It fetches the tarballs you ask for and prints out a list of version commands ready to copy/paste into your package file:

==> Checksummed new versions of libelf:
    version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
    version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
    version('0.8.11', 'e931910b6d100f6caa32239849947fbf')
    version('0.8.10', '9db4d36c283d9790d8fa7df1f4d7b4d9')

By default, Spack will search for new tarball downloads by scraping the parent directory of the tarball you gave it. So, if your tarball is at http://example.com/downloads/foo-1.0.tar.gz, Spack will look in http://example.com/downloads/ for links to additional versions. If you need to search another path for download links, you can supply some extra attributes that control how your package finds new versions. See the documentation on list_url and list_depth.

注釈

  • This command assumes that Spack can extrapolate new URLs from an existing URL in the package, and that Spack can find similar URLs on a webpage. If that's not possible, e.g. if the package's developers don't name their tarballs consistently, you'll need to manually add version calls yourself.

  • For spack checksum to work, Spack needs to be able to import your package in Python. That means it can't have any syntax errors, or the import will fail. Use this once you've got your package in working order.

Finding new versions

You've already seen the homepage and url package attributes:

1
2
3
4
5
6
7
8
from spack import *


class Mpich(Package):
   """MPICH is a high performance and widely portable implementation of
      the Message Passing Interface (MPI) standard."""
   homepage = "http://www.mpich.org"
   url      = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"

These are class-level attributes used by Spack to show users information about the package, and to determine where to download its source code.

Spack uses the tarball URL to extrapolate where to find other tarballs of the same package (e.g. in spack checksum, but this does not always work. This section covers ways you can tell Spack to find tarballs elsewhere.

list_url

When spack tries to find available versions of packages (e.g. with spack checksum), it spiders the parent directory of the tarball in the url attribute. For example, for libelf, the url is:

url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"

Here, Spack spiders http://www.mr511.de/software/ to find similar tarball links and ultimately to make a list of available versions of libelf.

For many packages, the tarball's parent directory may be unlistable, or it may not contain any links to source code archives. In fact, many times additional package downloads aren't even available in the same directory as the download URL.

For these, you can specify a separate list_url indicating the page to search for tarballs. For example, libdwarf has the homepage as the list_url, because that is where links to old versions are:

1
2
3
4
class Libdwarf(Package):
    homepage = "http://www.prevanders.net/dwarf.html"
    url      = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
    list_url = homepage

list_depth

libdwarf and many other packages have a listing of available versions on a single webpage, but not all do. For example, mpich has a tarball URL that looks like this:

url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"

But its downloads are in many different subdirectories of http://www.mpich.org/static/downloads/. So, we need to add a list_url and a list_depth attribute:

1
2
3
4
5
class Mpich(Package):
    homepage   = "http://www.mpich.org"
    url        = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
    list_url   = "http://www.mpich.org/static/downloads/"
    list_depth = 1

By default, Spack only looks at the top-level page available at list_url. list_depth = 1 tells it to follow up to 1 level of links from the top-level page. Note that here, this implies 1 level of subdirectories, as the mpich website is structured much like a filesystem. But list_depth really refers to link depth when spidering the page.

Fetching from code repositories

For some packages, source code is provided in a Version Control System (VCS) repository rather than in a tarball. Spack can fetch packages from VCS repositories. Currently, Spack supports fetching with Git, Mercurial (hg), Subversion (svn), and Go.

To fetch a package from a source repository, Spack needs to know which VCS to use and where to download from. Much like with url, package authors can specify a class-level git, hg, svn, or go attribute containing the correct download location.

Many packages developed with Git have both a Git repository as well as release tarballs available for download. Packages can define both a class-level tarball URL and VCS. For example:

class Trilinos(CMakePackage):

    homepage = "https://trilinos.org/"
    url      = "https://github.com/trilinos/Trilinos/archive/trilinos-release-12-12-1.tar.gz"
    git      = "https://github.com/trilinos/Trilinos.git"

    version('develop', branch='develop')
    version('master',  branch='master')
    version('12.12.1', 'ecd4606fa332212433c98bf950a69cc7')
    version('12.10.1', '667333dbd7c0f031d47d7c5511fd0810')
    version('12.8.1',  '9f37f683ee2b427b5540db8a20ed6b15')

If a package contains both a url and git class-level attribute, Spack decides which to use based on the arguments to the version() directive. Versions containing a specific branch, tag, or revision are assumed to be for VCS download methods, while versions containing a checksum are assumed to be for URL download methods.

Like url, if a specific version downloads from a different repository than the default repo, it can be overridden with a version-specific argument.

注釈

In order to reduce ambiguity, each package can only have a single VCS top-level attribute in addition to url. In the rare case that a package uses multiple VCS, a fetch strategy can be specified for each version. For example, the rockstar package contains:

class Rockstar(MakefilePackage):

    homepage = "https://bitbucket.org/gfcstanford/rockstar"

    version('develop', git='https://bitbucket.org/gfcstanford/rockstar.git')
    version('yt', hg='https://bitbucket.org/MatthewTurk/rockstar')

Git

Git fetching supports the following parameters to version:

  • git: URL of the git repository, if different than the class-level git.

  • branch: Name of a branch to fetch.

  • tag: Name of a tag to fetch.

  • commit: SHA hash (or prefix) of a commit to fetch.

  • submodules: Also fetch submodules recursively when checking out this repository.

Only one of tag, branch, or commit can be used at a time.

Default branch

To fetch a repository's default branch:

class Example(Package):

    git = "https://github.com/example-project/example.git"

    version('develop')

This download method is untrusted, and is not recommended. Aside from HTTPS, there is no way to verify that the repository has not been compromised, and the commit you get when you install the package likely won't be the same commit that was used when the package was first written. Additionally, the default branch may change. It is best to at least specify a branch name.

Branches

To fetch a particular branch, use the branch parameter:

version('experimental', branch='experimental')

This download method is untrusted, and is not recommended. Branches are moving targets, so the commit you get when you install the package likely won't be the same commit that was used when the package was first written.

Tags

To fetch from a particular tag, use tag instead:

version('1.0.1', tag='v1.0.1')

This download method is untrusted, and is not recommended. Although tags are generally more stable than branches, Git allows tags to be moved. Many developers use tags to denote rolling releases, and may move the tag when a bug is patched.

Commits

Finally, to fetch a particular commit, use commit:

version('2014-10-08', commit='9d38cd4e2c94c3cea97d0e2924814acc')

This doesn't have to be a full hash; you can abbreviate it as you'd expect with git:

version('2014-10-08', commit='9d38cd')

This download method is trusted. It is the recommended way to securely download from a Git repository.

It may be useful to provide a saner version for commits like this, e.g. you might use the date as the version, as done above. Or, if you know the commit at which a release was cut, you can use the release version. It's up to the package author to decide what makes the most sense. Although you can use the commit hash as the version number, this is not recommended, as it won't sort properly.

Submodules

You can supply submodules=True to cause Spack to fetch submodules recursively along with the repository at fetch time. For more information about git submodules see the manpage of git: man git-submodule.

version('1.0.1', tag='v1.0.1', submodules=True)

GitHub

If a project is hosted on GitHub, any valid Git branch, tag, or hash may be downloaded as a tarball. This is accomplished simply by constructing an appropriate URL. Spack can checksum any package downloaded this way, thereby producing a trusted download. For example, the following downloads a particular hash, and then applies a checksum.

version('1.9.5.1.1', 'd035e4bc704d136db79b43ab371b27d2',
        url='https://www.github.com/jswhit/pyproj/tarball/0be612cc9f972e38b50a90c946a9b353e2ab140f')

Mercurial

Fetching with Mercurial works much like Git, but you use the hg parameter.

Default branch

Add the hg attribute with no revision passed to version:

class Example(Package):

    hg = "https://bitbucket.org/example-project/example"

    version('develop')

This download method is untrusted, and is not recommended. As with Git's default fetching strategy, there is no way to verify the integrity of the download.

Revisions

To fetch a particular revision, use the revision parameter:

version('1.0', revision='v1.0')

Unlike git, which has special parameters for different types of revisions, you can use revision for branches, tags, and commits when you fetch with Mercurial. Like Git, fetching specific branches or tags is an untrusted download method, and is not recommended. The recommended fetch strategy is to specify a particular commit hash as the revision.

Subversion

To fetch with subversion, use the svn and revision parameters.

Fetching the head

Simply add an svn parameter to the package:

class Example(Package):

    svn = "https://outreach.scidac.gov/svn/example/trunk"

    version('develop')

This download method is untrusted, and is not recommended for the same reasons as mentioned above.

Fetching a revision

To fetch a particular revision, add a revision argument to the version directive:

version('develop', revision=128)

This download method is untrusted, and is not recommended.

Unfortunately, Subversion has no commit hashing scheme like Git and Mercurial do, so there is no way to guarantee that the download you get is the same as the download used when the package was created. Use at your own risk.

Subversion branches are handled as part of the directory structure, so you can check out a branch or tag by changing the URL. If you want to package multiple branches, simply add a svn argument to each version directive.

Go

Go isn't a VCS, it is a programming language with a builtin command, go get, that fetches packages and their dependencies automatically. It can clone a Git repository, or download from another source location. For example:

class ThePlatinumSearcher(Package):

    homepage = "https://github.com/monochromegane/the_platinum_searcher"
    go       = "github.com/monochromegane/the_platinum_searcher/..."

    version('head')

Go cannot be used to fetch a particular commit or branch, it always downloads the head of the repository. This download method is untrusted, and is not recommended. Use another fetch strategy whenever possible.

and is not recommended. Use another fetch strategy whenever possible.

Variants

Many software packages can be configured to enable optional features, which often come at the expense of additional dependencies or longer build-times. To be flexible enough and support a wide variety of use cases, Spack permits to expose to the end-user the ability to choose which features should be activated in a package at the time it is installed. The mechanism to be employed is the spack.directives.variant() directive.

Boolean variants

In their simplest form variants are boolean options specified at the package level:

class Hdf5(AutotoolsPackage):
    ...
    variant(
        'shared', default=True, description='Builds a shared version of the library'
    )

with a default value and a description of their meaning / use in the package. Variants can be tested in any context where a spec constraint is expected. In the example above the shared variant is tied to the build of shared dynamic libraries. To pass the right option at configure time we can branch depending on its value:

def configure_args(self):
    ...
    if '+shared' in self.spec:
        extra_args.append('--enable-shared')
    else:
        extra_args.append('--disable-shared')
        extra_args.append('--enable-static-exec')

As explained in Variants the constraint +shared means that the boolean variant is set to True, while ~shared means it is set to False. Another common example is the optional activation of an extra dependency which requires to use the variant in the when argument of spack.directives.depends_on():

class Hdf5(AutotoolsPackage):
    ...
    variant('szip', default=False, description='Enable szip support')
    depends_on('szip', when='+szip')

as shown in the snippet above where szip is modeled to be an optional dependency of hdf5.

Multi-valued variants

If need be, Spack can go beyond Boolean variants and permit an arbitrary number of allowed values. This might be useful when modeling options that are tightly related to each other. The values in this case are passed to the spack.directives.variant() directive as a tuple:

class Blis(Package):
    ...
    variant(
        'threads', default='none', description='Multithreading support',
        values=('pthreads', 'openmp', 'none'), multi=False
    )

In the example above the argument multi is set to False to indicate that only one among all the variant values can be active at any time. This constraint is enforced by the parser and an error is emitted if a user specifies two or more values at the same time:

$ spack spec blis threads=openmp,pthreads
Input spec
--------------------------------
blis threads=openmp,pthreads

Concretized
--------------------------------
==> Error: multiple values are not allowed for variant "threads"

Another useful note is that Python's None is not allowed as a default value and therefore it should not be used to denote that no feature was selected. Users should instead select another value, like 'none', and handle it explicitly within the package recipe if need be:

if self.spec.variants['threads'].value == 'none':
   options.append('--no-threads')

In cases where multiple values can be selected at the same time multi should be set to True:

class Gcc(AutotoolsPackage):
    ...
    variant(
        'languages', default='c,c++,fortran',
        values=('ada', 'brig', 'c', 'c++', 'fortran',
                'go', 'java', 'jit', 'lto', 'objc', 'obj-c++'),
        multi=True,
        description='Compilers and runtime libraries to build'
    )

Within a package recipe a multi-valued variant is tested using a key=value syntax:

if 'languages=jit' in spec:
    options.append('--enable-host-shared')
Complex validation logic for variant values

To cover complex use cases, the spack.directives.variant() directive could accept as the values argument a full-fledged object which has default and other arguments of the directive embedded as attributes.

An example, already implemented in Spack's core, is spack.variant.DisjointSetsOfValues. This class is used to implement a few convenience functions, like spack.variant.any_combination_of():

class Adios(AutotoolsPackage):
    ...
    variant(
        'staging',
        values=any_combination_of('flexpath', 'dataspaces'),
        description='Enable dataspaces and/or flexpath staging transports'
    )

that allows any combination of the specified values, and also allows the user to specify 'none' (as a string) to choose none of them. The objects returned by these functions can be modified at will by chaining method calls to change the default value, customize the error message or other similar operations:

class Mvapich2(AutotoolsPackage):
    ...
    variant(
        'process_managers',
        description='List of the process managers to activate',
        values=disjoint_sets(
            ('auto',), ('slurm',), ('hydra', 'gforker', 'remshell')
        ).prohibit_empty_set().with_error(
            "'slurm' or 'auto' cannot be activated along with "
            "other process managers"
        ).with_default('auto').with_non_feature_values('auto'),
    )

Resources (expanding extra tarballs)

Some packages (most notably compilers) provide optional features if additional resources are expanded within their source tree before building. In Spack it is possible to describe such a need with the resource directive :

resource(
   name='cargo',
   git='https://github.com/rust-lang/cargo.git',
   tag='0.10.0',
   destination='cargo'
)

Based on the keywords present among the arguments the appropriate FetchStrategy will be used for the resource. The keyword destination is relative to the source root of the package and should point to where the resource is to be expanded.

Licensed software

In order to install licensed software, Spack needs to know a few more details about a package. The following class attributes should be defined.

license_required

Boolean. If set to True, this software requires a license. If set to False, all of the following attributes will be ignored. Defaults to False.

license_comment

String. Contains the symbol used by the license manager to denote a comment. Defaults to #.

license_files

List of strings. These are files that the software searches for when looking for a license. All file paths must be relative to the installation directory. More complex packages like Intel may require multiple licenses for individual components. Defaults to the empty list.

license_vars

List of strings. Environment variables that can be set to tell the software where to look for a license if it is not in the usual location. Defaults to the empty list.

license_url

String. A URL pointing to license setup instructions for the software. Defaults to the empty string.

For example, let's take a look at the package for the PGI compilers.

# Licensing
license_required = True
license_comment  = '#'
license_files    = ['license.dat']
license_vars     = ['PGROUPD_LICENSE_FILE', 'LM_LICENSE_FILE']
license_url      = 'http://www.pgroup.com/doc/pgiinstall.pdf'

As you can see, PGI requires a license. Its license manager, FlexNet, uses the # symbol to denote a comment. It expects the license file to be named license.dat and to be located directly in the installation prefix. If you would like the installation file to be located elsewhere, simply set PGROUPD_LICENSE_FILE or LM_LICENSE_FILE after installation. For further instructions on installation and licensing, see the URL provided.

Let's walk through a sample PGI installation to see exactly what Spack is and isn't capable of. Since PGI does not provide a download URL, it must be downloaded manually. It can either be added to a mirror or located in the current directory when spack install pgi is run. See ミラー for instructions on setting up a mirror.

After running spack install pgi, the first thing that will happen is Spack will create a global license file located at $SPACK_ROOT/etc/spack/licenses/pgi/license.dat. It will then open up the file using the editor set in $EDITOR, or vi if unset. It will look like this:

# A license is required to use pgi.
#
# The recommended solution is to store your license key in this global
# license file. After installation, the following symlink(s) will be
# added to point to this file (relative to the installation prefix):
#
#   license.dat
#
# Alternatively, use one of the following environment variable(s):
#
#   PGROUPD_LICENSE_FILE
#   LM_LICENSE_FILE
#
# If you choose to store your license in a non-standard location, you may
# set one of these variable(s) to the full pathname to the license file, or
# port@host if you store your license keys on a dedicated license server.
# You will likely want to set this variable in a module file so that it
# gets loaded every time someone tries to use pgi.
#
# For further information on how to acquire a license, please refer to:
#
#   http://www.pgroup.com/doc/pgiinstall.pdf
#
# You may enter your license below.

You can add your license directly to this file, or tell FlexNet to use a license stored on a separate license server. Here is an example that points to a license server called licman1:

SERVER licman1.mcs.anl.gov 00163eb7fba5 27200
USE_SERVER

If your package requires the license to install, you can reference the location of this global license using self.global_license_file. After installation, symlinks for all of the files given in license_files will be created, pointing to this global license. If you install a different version or variant of the package, Spack will automatically detect and reuse the already existing global license.

If the software you are trying to package doesn't rely on license files, Spack will print a warning message, letting the user know that they need to set an environment variable or pointing them to installation documentation.

Patches

Depending on the host architecture, package version, known bugs, or other issues, you may need to patch your software to get it to build correctly. Like many other package systems, spack allows you to store patches alongside your package files and apply them to source code after it's downloaded.

patch

You can specify patches in your package file with the patch() directive. patch looks like this:

class Mvapich2(Package):
    ...
    patch('ad_lustre_rwcontig_open_source.patch', when='@1.9:')

The first argument can be either a URL or a filename. It specifies a patch file that should be applied to your source. If the patch you supply is a filename, then the patch needs to live within the spack source tree. For example, the patch above lives in a directory structure like this:

$SPACK_ROOT/var/spack/repos/builtin/packages/
    mvapich2/
        package.py
        ad_lustre_rwcontig_open_source.patch

If you supply a URL instead of a filename, you need to supply a sha256 checksum, like this:

patch('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch',
      sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866')

Spack includes the hashes of patches in its versioning information, so that the same package with different patches applied will have different hash identifiers. To ensure that the hashing scheme is consistent, you must use a sha256 checksum for the patch. Patches will be fetched from their URLs, checked, and applied to your source code. You can use the spack sha256 command to generate a checksum for a patch file or URL.

Spack can also handle compressed patches. If you use these, Spack needs a little more help. Specifically, it needs two checksums: the sha256 of the patch and archive_sha256 for the compressed archive. archive_sha256 helps Spack ensure that the downloaded file is not corrupted or malicious, before running it through a tool like tar or zip. The sha256 of the patch is still required so that it can be included in specs. Providing it in the package file ensures that Spack won't have to download and decompress patches it won't end up using at install time. Both the archive and patch checksum are checked when patch archives are downloaded.

patch('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch.gz',
      sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
      archive_sha256='4e8092a161ec6c3a1b5253176fcf33ce7ba23ee2ff27c75dbced589dabacd06e')

patch keyword arguments are described below.

sha256, archive_sha256

Hashes of downloaded patch and compressed archive, respectively. Only needed for patches fetched from URLs.

when

If supplied, this is a spec that tells spack when to apply the patch. If the installed package spec matches this spec, the patch will be applied. In our example above, the patch is applied when mvapich is at version 1.9 or higher.

level

This tells spack how to run the patch command. By default, the level is 1 and spack runs patch -p 1. If level is 2, spack will run patch -p 2, and so on.

A lot of people are confused by level, so here's a primer. If you look in your patch file, you may see something like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--- a/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 12:05:44.806417000 -0800
+++ b/src/mpi/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 11:53:03.295622000 -0800
@@ -8,7 +8,7 @@
  *   Copyright (C) 2008 Sun Microsystems, Lustre group
  \*/

-#define _XOPEN_SOURCE 600
+//#define _XOPEN_SOURCE 600
 #include <stdlib.h>
 #include <malloc.h>
 #include "ad_lustre.h"

Lines 1-2 show paths with synthetic a/ and b/ prefixes. These are placeholders for the two mvapich2 source directories that diff compared when it created the patch file. This is git's default behavior when creating patch files, but other programs may behave differently.

-p1 strips off the first level of the prefix in both paths, allowing the patch to be applied from the root of an expanded mvapich2 archive. If you set level to 2, it would strip off src, and so on.

It's generally easier to just structure your patch file so that it applies cleanly with -p1, but if you're using a patch you didn't create yourself, level can be handy.

working_dir

This tells spack where to run the patch command. By default, the working directory is the source path of the stage (.). However, sometimes patches are made with respect to a subdirectory and this is where the working directory comes in handy. Internally, the working directory is given to patch via the -d option. Let's take the example patch from above and assume for some reason, it can only be downloaded in the following form:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--- a/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 12:05:44.806417000 -0800
+++ b/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 11:53:03.295622000 -0800
@@ -8,7 +8,7 @@
  *   Copyright (C) 2008 Sun Microsystems, Lustre group
  \*/

-#define _XOPEN_SOURCE 600
+//#define _XOPEN_SOURCE 600
 #include <stdlib.h>
 #include <malloc.h>
 #include "ad_lustre.h"

Hence, the patch needs to applied in the src/mpi subdirectory, and the working_dir='src/mpi' option would exactly do that.

Patch functions

In addition to supplying patch files, you can write a custom function to patch a package's source. For example, the py-pyside package contains some custom code for tweaking the way the PySide build handles RPATH:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    def patch(self):
        """Undo PySide RPATH handling and add Spack RPATH."""
        # Figure out the special RPATH
        pypkg = self.spec['python'].package
        rpath = self.rpath
        rpath.append(os.path.join(
            self.prefix, pypkg.site_packages_dir, 'PySide'))

        # Add Spack's standard CMake args to the sub-builds.
        # They're called BY setup.py so we have to patch it.
        filter_file(
            r'OPTION_CMAKE,',
            r'OPTION_CMAKE, ' + (
                '"-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=FALSE", '
                '"-DCMAKE_INSTALL_RPATH=%s",' % ':'.join(rpath)),
            'setup.py')

        # PySide tries to patch ELF files to remove RPATHs
        # Disable this and go with the one we set.
        if self.spec.satisfies('@1.2.4:'):
            rpath_file = 'setup.py'
        else:
            rpath_file = 'pyside_postinstall.py'

        filter_file(r'(^\s*)(rpath_cmd\(.*\))', r'\1#\2', rpath_file)

        # TODO: rpath handling for PySide 1.2.4 still doesn't work.
        # PySide can't find the Shiboken library, even though it comes
        # bundled with it and is installed in the same directory.

        # PySide does not provide official support for
        # Python 3.5, but it should work fine
        filter_file("'Programming Language :: Python :: 3.4'",
                    "'Programming Language :: Python :: 3.4',\r\n        "
                    "'Programming Language :: Python :: 3.5'",
                    "setup.py")

A patch function, if present, will be run after patch files are applied and before install() is run.

You could put this logic in install(), but putting it in a patch function gives you some benefits. First, spack ensures that the patch() function is run once per code checkout. That means that if you run install, hit ctrl-C, and run install again, the code in the patch function is only run once. Also, you can tell Spack to run only the patching part of the build using the spack patch command.

Dependency patching

So far we've covered how the patch directive can be used by a package to patch its own source code. Packages can also specify patches to be applied to their dependencies, if they require special modifications. As with all packages in Spack, a patched dependency library can coexist with other versions of that library. See the section on depends_on for more details.

Inspecting patches

If you want to better understand the patches that Spack applies to your packages, you can do that using spack spec, spack find, and other query commands. Let's look at m4. If you run spack spec m4, you can see the patches that would be applied to m4:

$ spack spec m4
Input spec
--------------------------------
m4

Concretized
--------------------------------
m4@1.4.18%clang@9.0.0-apple patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv arch=darwin-highsierra-x86_64
    ^libsigsegv@2.11%clang@9.0.0-apple arch=darwin-highsierra-x86_64

You can also see patches that have been applied to installed packages with spack find -v:

$ spack find -v m4
==> 1 installed package
-- darwin-highsierra-x86_64 / clang@9.0.0-apple -----------------
m4@1.4.18 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00,c0a408fbffb7255fcc75e26bd8edab116fc81d216bfd18b473668b7739a4158e,fc9b61654a3ba1a8d6cd78ce087e7c96366c290bc8d2c299f09828d793b853c8 +sigsegv

In both cases above, you can see that the patches' sha256 hashes are stored on the spec as a variant. As mentioned above, this means that you can have multiple, differently-patched versions of a package installed at once.

You can look up a patch by its sha256 hash (or a short version of it) using the spack resource show command:

$ spack resource show 3877ab54
3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00
    path:       /home/spackuser/src/spack/var/spack/repos/builtin/packages/m4/gnulib-pgi.patch
    applies to: builtin.m4

spack resource show looks up downloadable resources from package files by hash and prints out information about them. Above, we see that the 3877ab54 patch applies to the m4 package. The output also tells us where to find the patch.

Things get more interesting if you want to know about dependency patches. For example, when dealii is built with boost@1.68.0, it has to patch boost to work correctly. If you didn't know this, you might wonder where the extra boost patches are coming from:

$ spack spec dealii ^boost@1.68.0 ^hdf5+fortran | grep '\^boost'
    ^boost@1.68.0
        ^boost@1.68.0%clang@9.0.0-apple+atomic+chrono~clanglibcpp cxxstd=default +date_time~debug+exception+filesystem+graph~icu+iostreams+locale+log+math~mpi+multithreaded~numpy patches=2ab6c72d03dec6a4ae20220a9dfd5c8c572c5294252155b85c6874d97c323199,b37164268f34f7133cbc9a4066ae98fda08adf51e1172223f6a969909216870f ~pic+program_options~python+random+regex+serialization+shared+signals~singlethreaded+system~taggedlayout+test+thread+timer~versionedlayout+wave arch=darwin-highsierra-x86_64
$ spack resource show b37164268
b37164268f34f7133cbc9a4066ae98fda08adf51e1172223f6a969909216870f
    path:       /home/spackuser/src/spack/var/spack/repos/builtin/packages/dealii/boost_1.68.0.patch
    applies to: builtin.boost
    patched by: builtin.dealii

Here you can see that the patch is applied to boost by dealii, and that it lives in dealii's directory in Spack's builtin package repository.

Handling RPATHs

Spack installs each package in a way that ensures that all of its dependencies are found when it runs. It does this using RPATHs. An RPATH is a search path, stored in a binary (an executable or library), that tells the dynamic loader where to find its dependencies at runtime. You may be familiar with LD_LIBRARY_PATH on Linux or DYLD_LIBRARY_PATH on Mac OS X. RPATH is similar to these paths, in that it tells the loader where to find libraries. Unlike them, it is embedded in the binary and not set in each user's environment.

RPATHs in Spack are handled in one of three ways:

  1. For most packages, RPATHs are handled automatically using Spack's compiler wrappers. These wrappers are set in standard variables like CC, CXX, F77, and FC, so most build systems (autotools and many gmake systems) pick them up and use them.

  2. CMake also respects Spack's compiler wrappers, but many CMake builds have logic to overwrite RPATHs when binaries are installed. Spack provides the std_cmake_args variable, which includes parameters necessary for CMake build use the right installation RPATH. It can be used like this when cmake is invoked:

    class MyPackage(Package):
        ...
        def install(self, spec, prefix):
            cmake('..', *std_cmake_args)
            make()
            make('install')
    
  3. If you need to modify the build to add your own RPATHs, you can use the self.rpath property of your package, which will return a list of all the RPATHs that Spack will use when it links. You can see this how this is used in the PySide example above.

Parallel builds

By default, Spack will invoke make() with a -j <njobs> argument, so that builds run in parallel. It figures out how many jobs to run by determining how many cores are on the host machine. Specifically, it uses the number of CPUs reported by Python's multiprocessing.cpu_count().

If a package does not build properly in parallel, you can override this setting by adding parallel = False to your package. For example, OpenSSL's build does not work in parallel, so its package looks like this:

1
2
3
4
5
6
7
8
class Openssl(Package):
    homepage = "http://www.openssl.org"
    url      = "http://www.openssl.org/source/openssl-1.0.1h.tar.gz"

    version('1.0.1h', '8d6d684a9430d5cc98a62a5d8fbda8cf')
    depends_on("zlib")

    parallel = False

Similarly, you can disable parallel builds only for specific make commands, as libdwarf does:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Libelf(Package):
    ...

    def install(self, spec, prefix):
        configure("--prefix=" + prefix,
                  "--enable-shared",
                  "--disable-dependency-tracking",
                  "--disable-debug")
        make()

        # The mkdir commands in libelf's install can fail in parallel
        make("install", parallel=False)

The first make will run in parallel here, but the second will not. If you set parallel to False at the package level, then each call to make() will be sequential by default, but packagers can call make(parallel=True) to override it.

Dependencies

We've covered how to build a simple package, but what if one package relies on another package to build? How do you express that in a package file? And how do you refer to the other package in the build script for your own package?

Spack makes this relatively easy. Let's take a look at the libdwarf package to see how it's done:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Libdwarf(Package):
    homepage = "http://www.prevanders.net/dwarf.html"
    url      = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
    list_url = homepage

    version('20130729', '4cc5e48693f7b93b7aa0261e63c0e21d')
    ...

    depends_on("libelf")

    def install(self, spec, prefix):
        ...

depends_on()

The highlighted depends_on('libelf') call tells Spack that it needs to build and install the libelf package before it builds libdwarf. This means that in your install() method, you are guaranteed that libelf has been built and installed successfully, so you can rely on it for your libdwarf build.

Dependency specs

depends_on doesn't just take the name of another package. It can take a full spec as well. This means that you can restrict the versions or other configuration options of libelf that libdwarf will build with. For example, suppose that in the libdwarf package you write:

depends_on('libelf@0.8')

Now libdwarf will require libelf at exactly version 0.8. You can also specify a requirement for a particular variant or for specific compiler flags:

depends_on('libelf@0.8+debug')
depends_on('libelf debug=True')
depends_on('libelf cppflags="-fPIC"')

Both users and package authors can use the same spec syntax to refer to different package configurations. Users use the spec syntax on the command line to find installed packages or to install packages with particular constraints, and package authors can use specs to describe relationships between packages.

Version ranges

Although some packages require a specific version for their dependencies, most can be built with a range of version. For example, if you are writing a package for a legacy Python module that only works with Python 2.4 through 2.6, this would look like:

depends_on('python@2.4:2.6')

Version ranges in Spack are inclusive, so 2.4:2.6 means any version greater than or equal to 2.4 and up to and including 2.6. If you want to specify that a package works with any version of Python 3, this would look like:

depends_on('python@3:')

Here we leave out the upper bound. If you want to say that a package requires Python 2, you can similarly leave out the lower bound:

depends_on('python@:2.9')

Notice that we didn't use @:3. Version ranges are inclusive, so @:3 means "up to and including 3".

What if a package can only be built with Python 2.6? You might be inclined to use:

depends_on('python@2.6')

However, this would be wrong. Spack assumes that all version constraints are absolute, so it would try to install Python at exactly 2.6. The correct way to specify this would be:

depends_on('python@2.6.0:2.6.999')

A spec can contain multiple version ranges separated by commas. For example, if you need Boost 1.59.0 or newer, but there are known issues with 1.64.0, 1.65.0, and 1.66.0, you can say:

depends_on('boost@1.59.0:1.63,1.65.1,1.67.0:')

Dependency types

Not all dependencies are created equal, and Spack allows you to specify exactly what kind of a dependency you need. For example:

depends_on('cmake', type='build')
depends_on('py-numpy', type=('build', 'run'))
depends_on('libelf', type=('build', 'link'))

The following dependency types are available:

  • "build": made available during the project's build. The package will be added to PATH, the compiler include paths, and PYTHONPATH. Other projects which depend on this one will not have these modified (building project X doesn't need project Y's build dependencies).

  • "link": the project is linked to by the project. The package will be added to the current package's rpath.

  • "run": the project is used by the project at runtime. The package will be added to PATH and PYTHONPATH.

One of the advantages of the build dependency type is that although the dependency needs to be installed in order for the package to be built, it can be uninstalled without concern afterwards. link and run disallow this because uninstalling the dependency would break the package.

If the dependency type is not specified, Spack uses a default of ('build', 'link'). This is the common case for compiler languages. Non-compiled packages like Python modules commonly use ('build', 'run'). This means that the compiler wrappers don't need to inject the dependency's prefix/lib directory, but the package needs to be in PATH and PYTHONPATH during the build process and later when a user wants to run the package.

Dependency patching

Some packages maintain special patches on their dependencies, either to add new features or to fix bugs. This typically makes a package harder to maintain, and we encourage developers to upstream (contribute back) their changes rather than maintaining patches. However, in some cases it's not possible to upstream. Maybe the dependency's developers don't accept changes, or maybe they just haven't had time to integrate them.

For times like these, Spack's depends_on directive can optionally take a patch or list of patches:

class SpecialTool(Package):
    ...
    depends_on('binutils', patches='special-binutils-feature.patch')
    ...

Here, the special-tool package requires a special feature in binutils, so it provides an extra patches=<filename> keyword argument. This is similar to the patch directive, with one small difference. Here, special-tool is responsible for the patch, so it should live in special-tool's directory in the package repository, not the binutils directory.

If you need something more sophisticated than this, you can simply nest a patch() directive inside of depends_on:

class SpecialTool(Package):
    ...
    depends_on(
        'binutils',
        patches=patch('special-binutils-feature.patch',
                      level=3,
                      when='@:1.3'),   # condition on binutils
        when='@2.0:')                  # condition on special-tool
    ...

Note that there are two optional when conditions here -- one on the patch directive and the other on depends_on. The condition in the patch directive applies to binutils (the package being patched), while the condition in depends_on applies to special-tool. See patch directive for details on all the arguments the patch directive can take.

Finally, if you need multiple patches on a dependency, you can provide a list for patches, e.g.:

class SpecialTool(Package):
    ...
    depends_on(
        'binutils',
        patches=[
            'binutils-bugfix1.patch',
            'binutils-bugfix2.patch',
            patch('https://example.com/special-binutils-feature.patch',
                  sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
                  when='@:1.3')],
        when='@2.0:')
    ...

As with patch directives, patches are applied in the order they appear in the package file (or in this case, in the list).

注釈

You may wonder whether dependency patching will interfere with other packages that depend on binutils. It won't.

As described in patching, Patching a package adds the sha256 of the patch to the package's spec, which means it will have a different unique hash than other versions without the patch. The patched version coexists with unpatched versions, and Spack's support for handling_rpaths guarantees that each installation finds the right version. If two packages depend on binutils patched the same way, they can both use a single installation of binutils.

setup_dependent_environment()

Spack provides a mechanism for dependencies to provide variables that can be used in their dependents' build. Any package can declare a setup_dependent_environment() function, and this function will be called before the install() method of any dependent packages. This allows dependencies to set up environment variables and other properties to be used by dependents.

The function declaration should look like this:

1
2
    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
        spack_env.set('QTDIR', self.prefix)

Here, the Qt package sets the QTDIR environment variable so that packages that depend on a particular Qt installation will find it.

The arguments to this function are:

  • spack_env: List of environment modifications to be applied when the dependent package is built within Spack.

  • run_env: List of environment modifications to be applied when the dependent package is run outside of Spack. These are added to the resulting module file.

  • dependent_spec: The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent's state. Note that this package's spec is available as self.spec.

A good example of using these is in the Python package:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
        """Set PYTHONPATH to include the site-packages directory for the
        extension and any other python extensions it depends on."""

        # If we set PYTHONHOME, we must also ensure that the corresponding
        # python is found in the build environment. This to prevent cases
        # where a system provided python is run against the standard libraries
        # of a Spack built python. See issue #7128
        spack_env.set('PYTHONHOME', self.home)

        path = os.path.dirname(self.command.path)
        if not is_system_path(path):
            spack_env.prepend_path('PATH', path)

        python_paths = []
        for d in dependent_spec.traverse(
                deptype=('build', 'run', 'test')):
            if d.package.extends(self.spec):
                python_paths.append(join_path(d.prefix,
                                              self.site_packages_dir))

        pythonpath = ':'.join(python_paths)
        spack_env.set('PYTHONPATH', pythonpath)

        # For run time environment set only the path for
        # dependent_spec and prepend it to PYTHONPATH
        if dependent_spec.package.extends(self.spec):
            run_env.prepend_path('PYTHONPATH', join_path(
                dependent_spec.prefix, self.site_packages_dir))

The first thing that happens here is that the python command is inserted into module scope of the dependent. This allows most python packages to have a very simple install method, like this:

def install(self, spec, prefix):
    python('setup.py', 'install', '--prefix={0}'.format(prefix))

Python's setup_dependent_environment method also sets up some other variables, creates a directory, and sets up the PYTHONPATH so that dependent packages can find their dependencies at build time.

Conflicts

Sometimes packages have known bugs, or limitations, that would prevent them to build e.g. against other dependencies or with certain compilers. Spack makes it possible to express such constraints with the conflicts directive.

Adding the following to a package:

conflicts('%intel', when='@1.2')

we express the fact that the current package cannot be built with the Intel compiler when we are trying to install version "1.2". The when argument can be omitted, in which case the conflict will always be active. Conflicts are always evaluated after the concretization step has been performed, and if any match is found a detailed error message is shown to the user.

Extensions

Spack's support for package extensions is documented extensively in spack module tcl loads. This section documents how to make your own extendable packages and extensions.

To support extensions, a package needs to set its extendable property to True, e.g.:

class Python(Package):
    ...
    extendable = True
    ...

To make a package into an extension, simply add simply add an extends call in the package definition, and pass it the name of an extendable package:

class PyNumpy(Package):
    ...
    extends('python')
    ...

Now, the py-numpy package can be used as an argument to spack activate. When it is activated, all the files in its prefix will be symbolically linked into the prefix of the python package.

Some packages produce a Python extension, but are only compatible with Python 3, or with Python 2. In those cases, a depends_on() declaration should be made in addition to the extends() declaration:

class Icebin(Package):
    extends('python', when='+python')
    depends_on('python@3:', when='+python')

Many packages produce Python extensions for some variants, but not others: they should extend python only if the appropriate variant(s) are selected. This may be accomplished with conditional extends() declarations:

class FooLib(Package):
    variant('python', default=True, description= \
        'Build the Python extension Module')
    extends('python', when='+python')
    ...

Sometimes, certain files in one package will conflict with those in another, which means they cannot both be activated (symlinked) at the same time. In this case, you can tell Spack to ignore those files when it does the activation:

class PySncosmo(Package):
    ...
    # py-sncosmo binaries are duplicates of those from py-astropy
    extends('python', ignore=r'bin/.*')
    depends_on('py-astropy')
    ...

The code above will prevent everything in the $prefix/bin/ directory from being linked in at activation time.

注釈

You can call either depends_on or extends on any one package, but not both. For example you cannot both depends_on('python') and extends(python) in the same package. extends implies depends_on.

Views

As covered in Filesystem Views, the spack view command can be used to symlink a number of packages into a merged prefix. The methods of PackageViewMixin can be overridden to customize how packages are added to views. Generally this can be used to create copies of specific files rather than symlinking them when symlinking does not work. For example, Python overrides add_files_to_view in order to create a copy of the python binary since the real path of the Python executable is used to detect extensions; as a consequence python extension packages (those inheriting from PythonPackage) likewise override add_files_to_view in order to rewrite shebang lines which point to the Python interpreter.

Activation & deactivation

Adding an extension to a view is referred to as an activation. If the view is maintained in the Spack installation prefix of the extendee this is called a global activation. Activations may involve updating some centralized state that is maintained by the extendee package, so there can be additional work for adding extensions compared with non-extension packages.

Spack's Package class has default activate and deactivate implementations that handle symbolically linking extensions' prefixes into a specified view. Extendable packages can override these methods to add custom activate/deactivate logic of their own. For example, the activate and deactivate methods in the Python class handle symbolic linking of extensions, but they also handle details surrounding Python's .pth files, and other aspects of Python packaging.

Spack's extensions mechanism is designed to be extensible, so that other packages (like Ruby, R, Perl, etc.) can provide their own custom extension management logic, as they may not handle modules the same way that Python does.

Let's look at Python's activate function:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
    def activate(self, ext_pkg, view, **args):
        ignore = self.python_ignore(ext_pkg, args)
        args.update(ignore=ignore)

        super(Python, self).activate(ext_pkg, view, **args)

        extensions_layout = view.extensions_layout
        exts = extensions_layout.extension_map(self.spec)
        exts[ext_pkg.name] = ext_pkg.spec

        self.write_easy_install_pth(exts, prefix=view.get_projection_for_spec(
            self.spec
        ))

This function is called on the extendee (Python). It first calls activate in the superclass, which handles symlinking the extension package's prefix into the specified view. It then does some special handling of the easy-install.pth file, part of Python's setuptools.

Deactivate behaves similarly to activate, but it unlinks files:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
    def deactivate(self, ext_pkg, view, **args):
        args.update(ignore=self.python_ignore(ext_pkg, args))

        super(Python, self).deactivate(ext_pkg, view, **args)

        extensions_layout = view.extensions_layout
        exts = extensions_layout.extension_map(self.spec)
        # Make deactivate idempotent
        if ext_pkg.name in exts:
            del exts[ext_pkg.name]
            self.write_easy_install_pth(exts,
                                        prefix=view.get_projection_for_spec(
                                            self.spec
                                        ))

Both of these methods call some custom functions in the Python package. See the source for Spack's Python package for details.

Activation arguments

You may have noticed that the activate function defined above takes keyword arguments. These are the keyword arguments from extends(), and they are passed to both activate and deactivate.

This capability allows an extension to customize its own activation by passing arguments to the extendee. Extendees can likewise implement custom activate() and deactivate() functions to suit their needs.

The only keyword argument supported by default is the ignore argument, which can take a regex, list of regexes, or a predicate to determine which files not to symlink during activation.

Virtual dependencies

In some cases, more than one package can satisfy another package's dependency. One way this can happen is if a package depends on a particular interface, but there are multiple implementations of the interface, and the package could be built with any of them. A very common interface in HPC is the Message Passing Interface (MPI), which is used in many large-scale parallel applications.

MPI has several different implementations (e.g., MPICH, OpenMPI, and MVAPICH) and scientific applications can be built with any one of them. Complicating matters, MPI does not have a standardized ABI, so a package built with one implementation cannot simply be relinked with another implementation. Many package managers handle interfaces like this by requiring many similar package files, e.g., foo, foo-mvapich, foo-mpich, but Spack avoids this explosion of package files by providing support for virtual dependencies.

provides

In Spack, mpi is handled as a virtual package. A package like mpileaks can depend on it just like any other package, by supplying a depends_on call in the package definition. For example:

1
2
3
4
5
6
7
8
9
class Mpileaks(Package):
    homepage = "https://github.com/hpc/mpileaks"
    url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"

    version('1.0', '8838c574b39202a57d7c2d68692718aa')

    depends_on("mpi")
    depends_on("adept-utils")
    depends_on("callpath")

Here, callpath and adept-utils are concrete packages, but there is no actual package file for mpi, so we say it is a virtual package. The syntax of depends_on, is the same for both. If we look inside the package file of an MPI implementation, say MPICH, we'll see something like this:

class Mpich(Package):
    provides('mpi')
    ...

The provides("mpi") call tells Spack that the mpich package can be used to satisfy the dependency of any package that depends_on('mpi').

Versioned Interfaces

Just as you can pass a spec to depends_on, so can you pass a spec to provides to add constraints. This allows Spack to support the notion of versioned interfaces. The MPI standard has gone through many revisions, each with new functions added, and each revision of the standard has a version number. Some packages may require a recent implementation that supports MPI-3 functions, but some MPI versions may only provide up to MPI-2. Others may need MPI 2.1 or higher. You can indicate this by adding a version constraint to the spec passed to provides:

provides("mpi@:2")

Suppose that the above provides call is in the mpich2 package. This says that mpich2 provides MPI support up to version 2, but if a package depends_on("mpi@3"), then Spack will not build that package with mpich2.

provides when

The same package may provide different versions of an interface depending on its version. Above, we simplified the provides call in mpich to make the explanation easier. In reality, this is how mpich calls provides:

provides('mpi@:3', when='@3:')
provides('mpi@:1', when='@1:')

The when argument to provides allows you to specify optional constraints on the providing package, or the provider. The provider only provides the declared virtual spec when it matches the constraints in the when clause. Here, when mpich is at version 3 or higher, it provides MPI up to version 3. When mpich is at version 1 or higher, it provides the MPI virtual package at version 1.

The when qualifier ensures that Spack selects a suitably high version of mpich to satisfy some other package that depends_on a particular version of MPI. It will also prevent a user from building with too low a version of mpich. For example, suppose the package foo declares this:

class Foo(Package):
    ...
    depends_on('mpi@2')

Suppose a user invokes spack install like this:

$ spack install foo ^mpich@1.0

Spack will fail with a constraint violation, because the version of MPICH requested is too low for the mpi requirement in foo.

Abstract & concrete specs

Now that we've seen how spec constraints can be specified on the command line and within package definitions, we can talk about how Spack puts all of this information together. When you run this:

$ spack install mpileaks ^callpath@1.0+debug ^libelf@0.8.11

Spack parses the command line and builds a spec from the description. The spec says that mpileaks should be built with the callpath library at 1.0 and with the debug option enabled, and with libelf version 0.8.11. Spack will also look at the depends_on calls in all of these packages, and it will build a spec from that. The specs from the command line and the specs built from package descriptions are then combined, and the constraints are checked against each other to make sure they're satisfiable.

What we have after this is done is called an abstract spec. An abstract spec is partially specified. In other words, it could describe more than one build of a package. Spack does this to make things easier on the user: they should only have to specify as much of the package spec as they care about. Here's an example partial spec DAG, based on the constraints above:

mpileaks
    ^callpath@1.0+debug
        ^dyninst
            ^libdwarf
                ^libelf@0.8.11
        ^mpi

digraph { mpileaks -> mpi mpileaks -> "callpath@1.0+debug" -> mpi "callpath@1.0+debug" -> dyninst dyninst -> libdwarf -> "libelf@0.8.11" dyninst -> "libelf@0.8.11" }

This diagram shows a spec DAG output as a tree, where successive levels of indentation represent a depends-on relationship. In the above DAG, we can see some packages annotated with their constraints, and some packages with no annotations at all. When there are no annotations, it means the user doesn't care what configuration of that package is built, just so long as it works.

Concretization

An abstract spec is useful for the user, but you can't install an abstract spec. Spack has to take the abstract spec and "fill in" the remaining unspecified parts in order to install. This process is called concretization. Concretization happens in between the time the user runs spack install and the time the install() method is called. The concretized version of the spec above might look like this:

mpileaks@2.3%gcc@4.7.3 arch=linux-debian7-x86_64
    ^callpath@1.0%gcc@4.7.3+debug arch=linux-debian7-x86_64
        ^dyninst@8.1.2%gcc@4.7.3 arch=linux-debian7-x86_64
            ^libdwarf@20130729%gcc@4.7.3 arch=linux-debian7-x86_64
                ^libelf@0.8.11%gcc@4.7.3 arch=linux-debian7-x86_64
        ^mpich@3.0.4%gcc@4.7.3 arch=linux-debian7-x86_64

digraph { "mpileaks@2.3\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-debian7-x86_64" "mpileaks@2.3\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-debian7-x86_64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-debian7-x86_64" "callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-debian7-x86_64" -> "dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64" "dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libdwarf@20130729\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-debian7-x86_64" "dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-debian7-x86_64" }

Here, all versions, compilers, and platforms are filled in, and there is a single version (no version ranges) for each package. All decisions about configuration have been made, and only after this point will Spack call the install() method for your package.

Concretization in Spack is based on certain selection policies that tell Spack how to select, e.g., a version, when one is not specified explicitly. Concretization policies are discussed in more detail in 設定ファイル. Sites using Spack can customize them to match the preferences of their own users.

spack spec

For an arbitrary spec, you can see the result of concretization by running spack spec. For example:

$ spack spec dyninst@8.0.1
dyninst@8.0.1
    ^libdwarf
        ^libelf

dyninst@8.0.1%gcc@4.7.3 arch=linux-debian7-x86_64
    ^libdwarf@20130729%gcc@4.7.3 arch=linux-debian7-x86_64
        ^libelf@0.8.13%gcc@4.7.3 arch=linux-debian7-x86_64

This is useful when you want to know exactly what Spack will do when you ask for a particular spec.

Concretization Policies

A user may have certain preferences for how packages should be concretized on their system. For example, one user may prefer packages built with OpenMPI and the Intel compiler. Another user may prefer packages be built with MVAPICH and GCC.

See the Concretization Preferences section for more details.

Conflicting Specs

Suppose a user needs to install package C, which depends on packages A and B. Package A builds a library with a Python2 extension, and package B builds a library with a Python3 extension. Packages A and B cannot be loaded together in the same Python runtime:

class A(Package):
    variant('python', default=True, 'enable python bindings')
    depends_on('python@2.7', when='+python')
    def install(self, spec, prefix):
        # do whatever is necessary to enable/disable python
        # bindings according to variant

class B(Package):
    variant('python', default=True, 'enable python bindings')
    depends_on('python@3.2:', when='+python')
    def install(self, spec, prefix):
        # do whatever is necessary to enable/disable python
        # bindings according to variant

Package C needs to use the libraries from packages A and B, but does not need either of the Python extensions. In this case, package C should simply depend on the ~python variant of A and B:

class C(Package):
    depends_on('A~python')
    depends_on('B~python')

This may require that A or B be built twice, if the user wishes to use the Python extensions provided by them: once for +python and once for ~python. Other than using a little extra disk space, that solution has no serious problems.

Implementing the installation procedure

The last element of a package is its installation procedure. This is where the real work of installation happens, and it's the main part of the package you'll need to customize for each piece of software.

Defining an installation procedure means overriding a set of methods or attributes that will be called at some point during the installation of the package. The package base class, usually specialized for a given build system, determines the actual set of entities available for overriding. The classes that are currently provided by Spack are:

Base Class

Purpose

Package

General base class not specialized for any build system

MakefilePackage

Specialized class for packages built invoking hand-written Makefiles

AutotoolsPackage

Specialized class for packages built using GNU Autotools

CMakePackage

Specialized class for packages built using CMake

CudaPackage

A helper class for packages that use CUDA. It is intended to be used in combination with others

QMakePackage

Specialized class for packages build using QMake

SConsPackage

Specialized class for packages built using SCons

WafPackage

Specialized class for packages built using Waf

RPackage

Specialized class for R extensions

OctavePackage

Specialized class for Octave packages

PythonPackage

Specialized class for Python extensions

PerlPackage

Specialized class for Perl extensions

IntelPackage

Specialized class for licensed Intel software

注釈

Choice of the appropriate base class for a package

In most cases packagers don't have to worry about the selection of the right base class for a package, as spack create will make the appropriate choice on their behalf. In those rare cases where manual intervention is needed we need to stress that a package base class depends on the build system being used, not the language of the package. For example, a Python extension installed with CMake would extends('python') and subclass from CMakePackage.

Installation pipeline

When a user runs spack install, Spack:

  1. Fetches an archive for the correct version of the software.

  2. Expands the archive.

  3. Sets the current working directory to the root directory of the expanded archive.

Then, depending on the base class of the package under consideration, it will execute a certain number of phases that reflect the way a package of that type is usually built. The name and order in which the phases will be executed can be obtained either reading the API docs at build_systems, or using the spack info command:

$ spack info m4
AutotoolsPackage:    m4
Homepage:            https://www.gnu.org/software/m4/m4.html

Safe versions:
    1.4.17    ftp://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz

Variants:
    Name       Default   Description

    sigsegv    on        Build the libsigsegv dependency

Installation Phases:
    autoreconf    configure    build    install

Build Dependencies:
    libsigsegv

...

Typically, phases have default implementations that fit most of the common cases:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    def configure(self, spec, prefix):
        """Runs configure with the arguments specified in
        :py:meth:`~.AutotoolsPackage.configure_args`
        and an appropriately set prefix.
        """
        options = getattr(self, 'configure_flag_args', [])
        options += ['--prefix={0}'.format(prefix)]
        options += self.configure_args()

        with working_dir(self.build_directory, create=True):
            inspect.getmodule(self).configure(*options)

It is thus just sufficient for a packager to override a few build system specific helper methods or attributes to provide, for instance, configure arguments:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    def configure_args(self):
        spec = self.spec
        args = ['--enable-c++']

        if spec.satisfies('%clang') and not spec.satisfies('platform=darwin'):
            args.append('LDFLAGS=-rtlib=compiler-rt')

        if spec.satisfies('%arm') and not spec.satisfies('platform=darwin'):
            args.append('LDFLAGS=-rtlib=compiler-rt')

        if spec.satisfies('%intel'):
            args.append('CFLAGS=-no-gcc')

        if '+sigsegv' in spec:
            args.append('--with-libsigsegv-prefix={0}'.format(
                spec['libsigsegv'].prefix))
        else:
            args.append('--without-libsigsegv-prefix')

        # http://lists.gnu.org/archive/html/bug-m4/2016-09/msg00002.html
        arch = spec.architecture
        if (arch.platform == 'darwin' and arch.os == 'sierra' and
            '%gcc' in spec):
            args.append('ac_cv_type_struct_sched_param=yes')

        return args

注釈

Each specific build system has a list of attributes that can be overridden to fine-tune the installation of a package without overriding an entire phase. To have more information on them the place to go is the API docs of the build_systems module.

Overriding an entire phase

In extreme cases it may be necessary to override an entire phase. Regardless of the build system, the signature is the same. For example, the signature for the install phase is:

class Foo(Package):
    def install(self, spec, prefix):
        ...
self

For those not used to Python instance methods, this is the package itself. In this case it's an instance of Foo, which extends Package. For API docs on Package objects, see Package.

spec

This is the concrete spec object created by Spack from an abstract spec supplied by the user. It describes what should be installed. It will be of type Spec.

prefix

This is the path that your install method should copy build targets into. It acts like a string, but it's actually its own special type, Prefix.

The arguments spec and prefix are passed only for convenience, as they always correspond to self.spec and self.spec.prefix respectively.

As mentioned in The build environment, you will usually not need to refer to dependencies explicitly in your package file, as the compiler wrappers take care of most of the heavy lifting here. There will be times, though, when you need to refer to the install locations of dependencies, or when you need to do something different depending on the version, compiler, dependencies, etc. that your package is built with. These parameters give you access to this type of information.

The build environment

In general, you should not have to do much differently in your install method than you would when installing a package on the command line. In fact, you may need to do less than you would on the command line.

Spack tries to set environment variables and modify compiler calls so that it appears to the build system that you're building with a standard system install of everything. Obviously that's not going to cover all build systems, but it should make it easy to port packages to Spack if they use a standard build system. Usually with autotools or cmake, building and installing is easy. With builds that use custom Makefiles, you may need to add logic to modify the makefiles.

The remainder of the section covers the way Spack's build environment works.

Forking install()

To give packagers free reign over their install environment, Spack forks a new process each time it invokes a package's install() method. This allows packages to have a sandboxed build environment, without impacting the environments ofother jobs that the main Spack process runs. Packages are free to change the environment or to modify Spack internals, because each install() call has its own dedicated process.

Environment variables

Spack sets a number of standard environment variables that serve two purposes:

  1. Make build systems use Spack's compiler wrappers for their builds.

  2. Allow build systems to find dependencies more easily

The Compiler environment variables that Spack sets are:

Variable

Purpose

CC

C compiler

CXX

C++ compiler

F77

Fortran 77 compiler

FC

Fortran 90 and above compiler

Spack sets these variables so that they point to compiler wrappers. These are covered in their own section below.

All of these are standard variables respected by most build systems. If your project uses Autotools or CMake, then it should pick them up automatically when you run configure or cmake in the install() function. Many traditional builds using GNU Make and BSD make also respect these variables, so they may work with these systems.

If your build system does not automatically pick these variables up from the environment, then you can simply pass them on the command line or use a patch as part of your build process to get the correct compilers into the project's build system. There are also some file editing commands you can use -- these are described later in the section on file manipulation.

In addition to the compiler variables, these variables are set before entering install() so that packages can locate dependencies easily:

PATH

Set to point to /bin directories of dependencies

CMAKE_PREFIX_PATH

Path to dependency prefixes for CMake

PKG_CONFIG_PATH

Path to any pkgconfig directories for dependencies

PYTHONPATH

Path to site-packages dir of any python dependencies

PATH is set up to point to dependencies /bin directories so that you can use tools installed by dependency packages at build time. For example, $MPICH_ROOT/bin/mpicc is frequently used by dependencies of mpich.

CMAKE_PREFIX_PATH contains a colon-separated list of prefixes where cmake will search for dependency libraries and headers. This causes all standard CMake find commands to look in the paths of your dependencies, so you do not have to manually specify arguments like -DDEPENDENCY_DIR=/path/to/dependency to cmake. More on this is in the CMake documentation.

PKG_CONFIG_PATH is for packages that attempt to discover dependencies using the GNU pkg-config tool. It is similar to CMAKE_PREFIX_PATH in that it allows a build to automatically discover its dependencies.

If you want to see the environment that a package will build with, or if you want to run commands in that environment to test them out, you can use the spack env command, documented below.

Failing the build

Sometimes you don't want a package to successfully install unless some condition is true. You can explicitly cause the build to fail from install() by raising an InstallError, for example:

if spec.architecture.startswith('darwin'):
    raise InstallError('This package does not build on Mac OS X!')

Shell command functions

Recall the install method from libelf:

1
2
    def install(self, spec, prefix):
        make('install', parallel=False)

Normally in Python, you'd have to write something like this in order to execute shell commands:

import subprocess
subprocess.check_call('configure', '--prefix={0}'.format(prefix))

We've tried to make this a bit easier by providing callable wrapper objects for some shell commands. By default, configure, cmake, and make wrappers are are provided, so you can call them more naturally in your package files.

If you need other commands, you can use which to get them:

sed = which('sed')
sed('s/foo/bar/', filename)

The which function will search the PATH for the application.

Callable wrappers also allow spack to provide some special features. For example, in Spack, make is parallel by default, and Spack figures out the number of cores on your machine and passes an appropriate value for -j<numjobs> when it calls make (see the parallel package attribute <attribute_parallel>). In a package file, you can supply a keyword argument, parallel=False, to the make wrapper to disable parallel make. In the libelf package, this allows us to avoid race conditions in the library's build system.

Compiler flags

Compiler flags set by the user through the Spec object can be passed to the build in one of three ways. By default, the build environment injects these flags directly into the compiler commands using Spack's compiler wrappers. In cases where the build system requires knowledge of the compiler flags, they can be registered with the build system by alternatively passing them through environment variables or as build system arguments. The flag_handler method can be used to change this behavior.

Packages can override the flag_handler method with one of three built-in flag_handlers. The built-in flag_handlers are named inject_flags, env_flags, and build_system_flags. The inject_flags method is the default. The env_flags method puts all of the flags into the environment variables that make uses as implicit variables ('CFLAGS', 'CXXFLAGS', etc.). The build_system_flags method adds the flags as arguments to the invocation of configure or cmake, respectively.

警告

Passing compiler flags using build system arguments is only supported for CMake and Autotools packages. Individual packages may also differ in whether they properly respect these arguments.

Individual packages may also define their own flag_handler methods. The flag_handler method takes the package instance (self), the name of the flag, and a list of the values of the flag. It will be called on each of the six compiler flags supported in Spack. It should return a triple of (injf, envf, bsf) where injf is a list of flags to inject via the Spack compiler wrappers, envf is a list of flags to set in the appropriate environment variables, and bsf is a list of flags to pass to the build system as arguments.

警告

Passing a non-empty list of flags to bsf for a build system that does not support build system arguments will result in an error.

Here are the definitions of the three built-in flag handlers:

def inject_flags(pkg, name, flags):
    return (flags, None, None)

def env_flags(pkg, name, flags):
    return (None, flags, None)

def build_system_flags(pkg, name, flags):
    return (None, None, flags)

注釈

Returning [] and None are equivalent in a flag_handler method.

Packages can override the default behavior either by specifying one of the built-in flag handlers,

flag_handler = env_flags

or by implementing the flag_handler method. Suppose for a package Foo we need to pass cflags, cxxflags, and cppflags through the environment, the rest of the flags through compiler wrapper injection, and we need to add -lbar to ldlibs. The following flag handler method accomplishes that.

def flag_handler(self, name, flags):
    if name in ['cflags', 'cxxflags', 'cppflags']:
        return (None, flags, None)
    elif name == 'ldlibs':
        flags.append('-lbar')
    return (flags, None, None)

Because these methods can pass values through environment variables, it is important not to override these variables unnecessarily (E.g. setting env['CFLAGS']) in other package methods when using non-default flag handlers. In the setup_environment and setup_dependent_environment methods, use the append_flags method of the EnvironmentModifications class to append values to a list of flags whenever the flag handler is env_flags. If the package passes flags through the environment or the build system manually (in the install method, for example), we recommend using the default flag handler, or removing manual references and implementing a custom flag handler method that adds the desired flags to export as environment variables or pass to the build system. Manual flag passing is likely to interfere with the env_flags and build_system_flags methods.

In rare circumstances such as compiling and running small unit tests, a package developer may need to know what are the appropriate compiler flags to enable features like OpenMP, c++11, c++14 and alike. To that end the compiler classes in spack implement the following properties: openmp_flag, cxx98_flag, cxx11_flag, cxx14_flag, and cxx17_flag, which can be accessed in a package by self.compiler.cxx11_flag and alike. Note that the implementation is such that if a given compiler version does not support this feature, an error will be produced. Therefore package developers can also use these properties to assert that a compiler supports the requested feature. This is handy when a package supports additional variants like

variant('openmp', default=True, description="Enable OpenMP support.")

Blas, Lapack and ScaLapack libraries

Multiple packages provide implementations of Blas, Lapack and ScaLapack routines. The names of the resulting static and/or shared libraries differ from package to package. In order to make the install() method independent of the choice of Blas implementation, each package which provides it implements @property def blas_libs(self): to return an object of LibraryList type which simplifies usage of a set of libraries. The same applies to packages which provide Lapack and ScaLapack. Package developers are requested to use this interface. Common usage cases are:

  1. Space separated list of full paths

lapack_blas = spec['lapack'].libs + spec['blas'].libs
options.append(
   '--with-blas-lapack-lib={0}'.format(lapack_blas.joined())
)
  1. Names of libraries and directories which contain them

blas = spec['blas'].libs
options.extend([
  '-DBLAS_LIBRARY_NAMES={0}'.format(';'.join(blas.names)),
  '-DBLAS_LIBRARY_DIRS={0}'.format(';'.join(blas.directories))
])
  1. Search and link flags

math_libs = spec['scalapack'].libs + spec['lapack'].libs + spec['blas'].libs
options.append(
  '-DMATH_LIBS:STRING={0}'.format(math_libs.ld_flags)
)

For more information, see documentation of LibraryList class.

Prefix objects

Spack passes the prefix parameter to the install method so that you can pass it to configure, cmake, or some other installer, e.g.:

configure('--prefix={0}'.format(prefix))

For the most part, prefix objects behave exactly like strings. For packages that do not have their own install target, or for those that implement it poorly (like libdwarf), you may need to manually copy things into particular directories under the prefix. For this, you can refer to standard subdirectories without having to construct paths yourself, e.g.:

def install(self, spec, prefix):
    mkdirp(prefix.bin)
    install('foo-tool', prefix.bin)

    mkdirp(prefix.include)
    install('foo.h', prefix.include)

    mkdirp(prefix.lib)
    install('libfoo.a', prefix.lib)

Attributes of this object are created on the fly when you request them, so any of the following will work:

Prefix Attribute

Location

prefix.bin

$prefix/bin

prefix.lib64

$prefix/lib64

prefix.share.man

$prefix/share/man

prefix.foo.bar.baz

$prefix/foo/bar/baz

Of course, this only works if your file or directory is a valid Python variable name. If your file or directory contains dashes or dots, use join instead:

prefix.lib.join('libz.a')

Spec objects

When install is called, most parts of the build process are set up for you. The correct version's tarball has been downloaded and expanded. Environment variables like CC and CXX are set to point to the correct compiler and version. An install prefix has already been selected and passed in as prefix. In most cases this is all you need to get configure, cmake, or another install working correctly.

There will be times when you need to know more about the build configuration. For example, some software requires that you pass special parameters to configure, like --with-libelf=/path/to/libelf or --with-mpich. You might also need to supply special compiler flags depending on the compiler. All of this information is available in the spec.

Testing spec constraints

You can test whether your spec is configured a certain way by using the satisfies method. For example, if you want to check whether the package's version is in a particular range, you can use specs to do that, e.g.:

configure_args = [
    '--prefix={0}'.format(prefix)
]

if spec.satisfies('@1.2:1.4'):
    configure_args.append("CXXFLAGS='-DWITH_FEATURE'")

configure(*configure_args)

This works for compilers, too:

if spec.satisfies('%gcc'):
    configure_args.append('CXXFLAGS="-g3 -O3"')
if spec.satisfies('%intel'):
    configure_args.append('CXXFLAGS="-xSSE2 -fast"')

Or for combinations of spec constraints:

if spec.satisfies('@1.2%intel'):
    tty.error("Version 1.2 breaks when using Intel compiler!")

You can also do similar satisfaction tests for dependencies:

if spec.satisfies('^dyninst@8.0'):
    configure_args.append('CXXFLAGS=-DSPECIAL_DYNINST_FEATURE')

This could allow you to easily work around a bug in a particular dependency version.

You can use satisfies() to test for particular dependencies, e.g. foo.satisfies('^openmpi@1.2') or foo.satisfies('^mpich'), or you can use Python's built-in in operator:

if 'libelf' in spec:
    print "this package depends on libelf"

This is useful for virtual dependencies, as you can easily see what implementation was selected for this build:

if 'openmpi' in spec:
    configure_args.append('--with-openmpi')
elif 'mpich' in spec:
    configure_args.append('--with-mpich')
elif 'mvapich' in spec:
    configure_args.append('--with-mvapich')

It's also a bit more concise than satisfies. The difference between the two functions is that satisfies() tests whether spec constraints overlap at all, while in tests whether a spec or any of its dependencies satisfy the provided spec.

Accessing Dependencies

You may need to get at some file or binary that's in the installation prefix of one of your dependencies. You can do that by sub-scripting the spec:

spec['mpi']

The value in the brackets needs to be some package name, and spec needs to depend on that package, or the operation will fail. For example, the above code will fail if the spec doesn't depend on mpi. The value returned is itself just another Spec object, so you can do all the same things you would do with the package's own spec:

spec['mpi'].prefix.bin
spec['mpi'].version

Multimethods and @when

Spack allows you to make multiple versions of instance functions in packages, based on whether the package's spec satisfies particular criteria.

The @when annotation lets packages declare multiple versions of methods like install() that depend on the package's spec. For example:

class SomePackage(Package):
    ...

    def install(self, prefix):
        # Do default install

    @when('arch=chaos_5_x86_64_ib')
    def install(self, prefix):
        # This will be executed instead of the default install if
        # the package's sys_type() is chaos_5_x86_64_ib.

    @when('arch=linux-debian7-x86_64')
    def install(self, prefix):
        # This will be executed if the package's sys_type() is
        # linux-debian7-x86_64.

In the above code there are three versions of install(), two of which are specialized for particular platforms. The version that is called depends on the architecture of the package spec.

Note that this works for methods other than install, as well. So, if you only have part of the install that is platform specific, you could do something more like this:

class SomePackage(Package):
   ...
    # virtual dependence on MPI.
    # could resolve to mpich, mpich2, OpenMPI
    depends_on('mpi')

    def setup(self):
        # do nothing in the default case
        pass

    @when('^openmpi')
    def setup(self):
        # do something special when this is built with OpenMPI for
        # its MPI implementations.

    def install(self, prefix):
        # Do common install stuff
        self.setup()
        # Do more common install stuff

You can write multiple @when specs that satisfy the package's spec, for example:

class SomePackage(Package):
    ...
    depends_on('mpi')

    def setup_mpi(self):
        # the default, called when no @when specs match
        pass

    @when('^mpi@3:')
    def setup_mpi(self):
        # this will be called when mpi is version 3 or higher
        pass

    @when('^mpi@2:')
    def setup_mpi(self):
        # this will be called when mpi is version 2 or higher
        pass

    @when('^mpi@1:')
    def setup_mpi(self):
        # this will be called when mpi is version 1 or higher
        pass

In situations like this, the first matching spec, in declaration order will be called. As before, if no @when spec matches, the default method (the one without the @when decorator) will be called.

警告

The default version of decorated methods must always come first. Otherwise it will override all of the platform-specific versions. There's not much we can do to get around this because of the way decorators work.

Compiler wrappers

As mentioned, CC, CXX, F77, and FC are set to point to Spack's compiler wrappers. These are simply called cc, c++, f77, and f90, and they live in $SPACK_ROOT/lib/spack/env.

$SPACK_ROOT/lib/spack/env is added first in the PATH environment variable when install() runs so that system compilers are not picked up instead.

All of these compiler wrappers point to a single compiler wrapper script that figures out which real compiler it should be building with. This comes either from spec concretization or from a user explicitly asking for a particular compiler using, e.g., %intel on the command line.

In addition to invoking the right compiler, the compiler wrappers add flags to the compile line so that dependencies can be easily found. These flags are added for each dependency, if they exist:

Compile-time library search paths * -L$dep_prefix/lib * -L$dep_prefix/lib64

Runtime library search paths (RPATHs) * $rpath_flag$dep_prefix/lib * $rpath_flag$dep_prefix/lib64

Include search paths * -I$dep_prefix/include

An example of this would be the libdwarf build, which has one dependency: libelf. Every call to cc in the libdwarf build will have -I$LIBELF_PREFIX/include, -L$LIBELF_PREFIX/lib, and $rpath_flag$LIBELF_PREFIX/lib inserted on the command line. This is done transparently to the project's build system, which will just think it's using a system where libelf is readily available. Because of this, you do not have to insert extra -I, -L, etc. on the command line.

Another useful consequence of this is that you often do not have to add extra parameters on the configure line to get autotools to find dependencies. The libdwarf install method just calls configure like this:

configure("--prefix=" + prefix)

Because of the -L and -I arguments, configure will successfully find libdwarf.h and libdwarf.so, without the packager having to provide --with-libdwarf=/path/to/libdwarf on the command line.

注釈

For most compilers, $rpath_flag is -Wl,-rpath,. However, NAG passes its flags to GCC instead of passing them directly to the linker. Therefore, its $rpath_flag is doubly wrapped: -Wl,-Wl,,-rpath,. $rpath_flag can be overriden on a compiler specific basis in lib/spack/spack/compilers/$compiler.py.

The compiler wrappers also pass the compiler flags specified by the user from the command line (cflags, cxxflags, fflags, cppflags, ldflags, and/or ldlibs). They do not override the canonical autotools flags with the same names (but in ALL-CAPS) that may be passed into the build by particularly challenging package scripts.

MPI support in Spack

It is common for high performance computing software/packages to use the Message Passing Interface ( MPI). As a result of conretization, a given package can be built using different implementations of MPI such as Openmpi, MPICH or IntelMPI. That is, when your package declares that it depends_on('mpi'), it can be built with any of these mpi implementations. In some scenarios, to configure a package, one has to provide it with appropriate MPI compiler wrappers such as mpicc, mpic++. However different implementations of MPI may have different names for those wrappers.

Spack provides an idiomatic way to use MPI compilers in your package. To use MPI wrappers to compile your whole build, do this in your install() method:

env['CC'] = spec['mpi'].mpicc
env['CXX'] = spec['mpi'].mpicxx
env['F77'] = spec['mpi'].mpif77
env['FC'] = spec['mpi'].mpifc

That's all. A longer explanation of why this works is below.

We don't try to force any particular build method on packagers. The decision to use MPI wrappers depends on the way the package is written, on common practice, and on "what works". Loosely, There are three types of MPI builds:

  1. Some build systems work well without the wrappers and can treat MPI as an external library, where the person doing the build has to supply includes/libs/etc. This is fairly uncommon.

  2. Others really want the wrappers and assume you're using an MPI "compiler" – i.e., they have no mechanism to add MPI includes/libraries/etc.

  3. CMake's FindMPI needs the compiler wrappers, but it uses them to extract –I / -L / -D arguments, then treats MPI like a regular library.

Note that some CMake builds fall into case 2 because they either don't know about or don't like CMake's FindMPI support – they just assume an MPI compiler. Also, some autotools builds fall into case 3 (e.g. here is an autotools version of CMake's FindMPI).

Given all of this, we leave the use of the wrappers up to the packager. Spack will support all three ways of building MPI packages.

Packaging Conventions

As mentioned above, in the install() method, CC, CXX, F77, and FC point to Spack's wrappers around the chosen compiler. Spack's wrappers are not the MPI compiler wrappers, though they do automatically add –I, –L, and –Wl,-rpath args for dependencies in a similar way. The MPI wrappers are a bit different in that they also add -l arguments for the MPI libraries, and some add special -D arguments to trigger build options in MPI programs.

For case 1 above, you generally don't need to do more than patch your Makefile or add configure args as you normally would.

For case 3, you don't need to do much of anything, as Spack puts the MPI compiler wrappers in the PATH, and the build will find them and interrogate them.

For case 2, things are a bit more complicated, as you'll need to tell the build to use the MPI compiler wrappers instead of Spack's compiler wrappers. All it takes some lines like this:

env['CC'] = spec['mpi'].mpicc
env['CXX'] = spec['mpi'].mpicxx
env['F77'] = spec['mpi'].mpif77
env['FC'] = spec['mpi'].mpifc

Or, if you pass CC, CXX, etc. directly to your build with, e.g., --with-cc=<path>, you'll want to substitute spec['mpi'].mpicc in there instead, e.g.:

configure('—prefix=%s' % prefix,
          '—with-cc=%s' % spec['mpi'].mpicc)

Now, you may think that doing this will lose the includes, library paths, and RPATHs that Spack's compiler wrapper get you, but we've actually set things up so that the MPI compiler wrappers use Spack's compiler wrappers when run from within Spack. So using the MPI wrappers should really be as simple as the code above.

spec['mpi']

Ok, so how does all this work?

If your package has a virtual dependency like mpi, then referring to spec['mpi'] within install() will get you the concrete mpi implementation in your dependency DAG. That is a spec object just like the one passed to install, only the MPI implementations all set some additional properties on it to help you out. E.g., in mvapich2, you'll find this:

    def setup_dependent_package(self, module, dependent_spec):
        self.spec.mpicc  = join_path(self.prefix.bin, 'mpicc')
        self.spec.mpicxx = join_path(self.prefix.bin, 'mpicxx')
        self.spec.mpifc  = join_path(self.prefix.bin, 'mpif90')
        self.spec.mpif77 = join_path(self.prefix.bin, 'mpif77')
        self.spec.mpicxx_shared_libs = [
            join_path(self.prefix.lib, 'libmpicxx.{0}'.format(dso_suffix)),
            join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix))
        ]

That code allows the mvapich2 package to associate an mpicc property with the mvapich2 node in the DAG, so that dependents can access it. openmpi and mpich do similar things. So, no matter what MPI you're using, spec['mpi'].mpicc gets you the location of the MPI compilers. This allows us to have a fairly simple polymorphic interface for information about virtual dependencies like MPI.

Wrapping wrappers

Spack likes to use its own compiler wrappers to make it easy to add RPATHs to builds, and to try hard to ensure that your builds use the right dependencies. This doesn't play nicely by default with MPI, so we have to do a couple tricks.

  1. If we build MPI with Spack's wrappers, mpicc and friends will be installed with hard-coded paths to Spack's wrappers, and using them from outside of Spack will fail because they only work within Spack. To fix this, we patch mpicc and friends to use the regular compilers. Look at the filter_compilers method in mpich, openmpi, or mvapich2 for details.

  2. We still want to use the Spack compiler wrappers when Spack is calling mpicc. Luckily, wrappers in all mainstream MPI implementations provide environment variables that allow us to dynamically set the compiler to be used by mpicc, mpicxx, etc. Denis pasted some code from this below – Spack's build environment sets MPICC, MPICXX, etc. for mpich derivatives and OMPI_CC, OMPI_CXX, etc. for OpenMPI. This makes the MPI compiler wrappers use the Spack compiler wrappers so that your dependencies still get proper RPATHs even if you use the MPI wrappers.

MPI on Cray machines

The Cray programming environment notably uses ITS OWN compiler wrappers, which function like MPI wrappers. On Cray systems, the CC, cc, and ftn wrappers ARE the MPI compiler wrappers, and it's assumed that you'll use them for all of your builds. So on Cray we don't bother with mpicc, mpicxx, etc, Spack MPI implementations set spec['mpi'].mpicc to point to Spack's wrappers, which wrap the Cray wrappers, which wrap the regular compilers and include MPI flags. That may seem complicated, but for packagers, that means the same code for using MPI wrappers will work, even on even on a Cray:

env['CC'] = spec['mpi'].mpicc

This is because on Cray, spec['mpi'].mpicc is just spack_cc.

Checking an installation

By default, Spack assumes that a build has failed if nothing is written to the install prefix, and that it has succeeded if anything (a file, a directory, etc.) is written to the install prefix after install() completes.

Consider a simple autotools build like this:

def install(self, spec, prefix):
    configure("--prefix={0}".format(prefix))
    make()
    make("install")

If you are using using standard autotools or CMake, configure and make will not write anything to the install prefix. Only make install writes the files, and only once the build is already complete.

sanity_check_is_file and sanity_check_is_dir

Unfortunately, many builds of scientific software modify the install prefix before make install. Builds like this can falsely report that they were successfully installed if an error occurs before the install is complete but after files have been written to the prefix.

You can optionally specify sanity checks to deal with this problem. Add properties like this to your package:

class MyPackage(Package):
    ...

    sanity_check_is_file = ['include/libelf.h']
    sanity_check_is_dir  = [lib]

    def install(self, spec, prefix):
        configure("--prefix=" + prefix)
        make()
        make("install")

Now, after install() runs, Spack will check whether $prefix/include/libelf.h exists and is a file, and whether $prefix/lib exists and is a directory. If the checks fail, then the build will fail and the install prefix will be removed. If they succeed, Spack considers the build successful and keeps the prefix in place.

Build-time tests

Sometimes packages finish to build "correctly" and issues with their run-time behavior are discovered only at a later stage, maybe after a full software stack relying on them has already been built. To avoid situations of that kind it's possible to write build-time tests that will be executed only if the option --run-tests of spack install has been activated.

The proper way to write these tests is relying on two decorators that come with any base class listed in Implementing the installation procedure.

@run_after('build')
@on_package_attributes(run_tests=True)
def check_build(self):
     # Custom implementation goes here
     pass

The first decorator run_after('build') schedules this function to be invoked after the build phase has been executed, while the second one makes the invocation conditional on the fact that self.run_tests == True. It is also possible to schedule a function to be invoked before a given phase using the run_before decorator.

注釈

Default implementations for build-time tests

Packages that are built using specific build systems may already have a default implementation for build-time tests. For instance AutotoolsPackage based packages will try to invoke make test and make check if Spack is asked to run tests. More information on each class is available in the the build_systems documentation.

警告

The API for adding tests is not yet considered stable and may change drastically in future releases.

File manipulation functions

Many builds are not perfect. If a build lacks an install target, or if it does not use systems like CMake or autotools, which have standard ways of setting compilers and options, you may need to edit files or install some files yourself to get them working with Spack.

You can do this with standard Python code, and Python has rich libraries with functions for file manipulation and filtering. Spack also provides a number of convenience functions of its own to make your life even easier. These functions are described in this section.

All of the functions in this section can be included by simply running:

from spack import *

This is already part of the boilerplate for packages created with spack create.

Filtering functions

filter_file(regex, repl, *filenames, **kwargs)

Works like sed but with Python regular expression syntax. Takes a regular expression, a replacement, and a set of files. repl can be a raw string or a callable function. If it is a raw string, it can contain \1, \2, etc. to refer to capture groups in the regular expression. If it is a callable, it is passed the Python MatchObject and should return a suitable replacement string for the particular match.

Examples:

  1. Filtering a Makefile to force it to use Spack's compiler wrappers:

    filter_file(r'^CC\s*=.*',  spack_cc,  'Makefile')
    filter_file(r'^CXX\s*=.*', spack_cxx, 'Makefile')
    filter_file(r'^F77\s*=.*', spack_f77, 'Makefile')
    filter_file(r'^FC\s*=.*',  spack_fc,  'Makefile')
    
  2. Replacing #!/usr/bin/perl with #!/usr/bin/env perl in bib2xhtml:

    filter_file(r'#!/usr/bin/perl',
                '#!/usr/bin/env perl', prefix.bin.bib2xhtml)
    
  3. Switching the compilers used by mpich's MPI wrapper scripts from cc, etc. to the compilers used by the Spack build:

    filter_file('CC="cc"', 'CC="%s"' % self.compiler.cc,
                prefix.bin.mpicc)
    
    filter_file('CXX="c++"', 'CXX="%s"' % self.compiler.cxx,
                prefix.bin.mpicxx)
    
change_sed_delimiter(old_delim, new_delim, *filenames)

Some packages, like TAU, have a build system that can't install into directories with, e.g. '@' in the name, because they use hard-coded sed commands in their build.

change_sed_delimiter finds all sed search/replace commands and change the delimiter. e.g., if the file contains commands that look like s///, you can use this to change them to s@@@.

Example of changing s/// to s@@@ in TAU:

change_sed_delimiter('@', ';', 'configure')
change_sed_delimiter('@', ';', 'utils/FixMakefile')
change_sed_delimiter('@', ';', 'utils/FixMakefile.sed.default')

File functions

ancestor(dir, n=1)

Get the nth ancestor of the directory dir.

can_access(path)

True if we can read and write to the file at path. Same as native python os.access(file_name, os.R_OK|os.W_OK).

install(src, dest)

Install a file to a particular location. For example, install a header into the include directory under the install prefix:

install('my-header.h', prefix.include)
join_path(*paths)

An alias for os.path.join. This joins paths using the OS path separator.

mkdirp(*paths)

Create each of the directories in paths, creating any parent directories if they do not exist.

working_dir(dirname, kwargs)

This is a Python Context Manager that makes it easier to work with subdirectories in builds. You use this with the Python with statement to change into a working directory, and when the with block is done, you change back to the original directory. Think of it as a safe pushd / popd combination, where popd is guaranteed to be called at the end, even if exceptions are thrown.

Example usage:

  1. The libdwarf build first runs configure and make in a subdirectory called libdwarf. It then implements the installation code itself. This is natural with working_dir:

    with working_dir('libdwarf'):
        configure("--prefix=" + prefix, "--enable-shared")
        make()
        install('libdwarf.a',  prefix.lib)
    
  2. Many CMake builds require that you build "out of source", that is, in a subdirectory. You can handle creating and cd'ing to the subdirectory like the LLVM package does:

    with working_dir('spack-build', create=True):
        cmake('..',
              '-DLLVM_REQUIRES_RTTI=1',
              '-DPYTHON_EXECUTABLE=/usr/bin/python',
              '-DPYTHON_INCLUDE_DIR=/usr/include/python2.6',
              '-DPYTHON_LIBRARY=/usr/lib64/libpython2.6.so',
              *std_cmake_args)
        make()
        make("install")
    

    The create=True keyword argument causes the command to create the directory if it does not exist.

touch(path)

Create an empty file at path.

Style guidelines for packages

The following guidelines are provided, in the interests of making Spack packages work in a consistent manner:

Variant Names

Spack packages with variants similar to already-existing Spack packages should use the same name for their variants. Standard variant names are:

Name

Default

Description

shared

True

Build shared libraries

static

True

Build static libraries

mpi

True

Use MPI

python

False

Build Python extension

If specified in this table, the corresponding default should be used when declaring a variant.

Version Lists

Spack packages should list supported versions with the newest first.

Packaging workflow commands

When you are building packages, you will likely not get things completely right the first time.

The spack install command performs a number of tasks before it finally installs each package. It downloads an archive, expands it in a temporary directory, and only then gives control to the package's install() method. If the build doesn't go as planned, you may want to clean up the temporary directory, or if the package isn't downloading properly, you might want to run only the fetch stage of the build.

A typical package workflow might look like this:

$ spack edit mypackage
$ spack install mypackage
... build breaks! ...
$ spack clean mypackage
$ spack edit mypackage
$ spack install mypackage
... repeat clean/install until install works ...

Below are some commands that will allow you some finer-grained control over the install process.

spack fetch

The first step of spack install. Takes a spec and determines the correct download URL to use for the requested package version, then downloads the archive, checks it against an MD5 checksum, and stores it in a staging directory if the check was successful. The staging directory will be located under $SPACK_HOME/var/spack.

When run after the archive has already been downloaded, spack fetch is idempotent and will not download the archive again.

spack stage

The second step in spack install after spack fetch. Expands the downloaded archive in its temporary directory, where it will be built by spack install. Similar to fetch, if the archive has already been expanded, stage is idempotent.

spack patch

After staging, Spack applies patches to downloaded packages, if any have been specified in the package file. This command will run the install process through the fetch, stage, and patch phases. Spack keeps track of whether patches have already been applied and skips this step if they have been. If Spack discovers that patches didn't apply cleanly on some previous run, then it will restage the entire package before patching.

spack restage

Restores the source code to pristine state, as it was before building.

Does this in one of two ways:

  1. If the source was fetched as a tarball, deletes the entire build directory and re-expands the tarball.

  2. If the source was checked out from a repository, this deletes the build directory and checks it out again.

spack clean

Cleans up all of Spack's temporary and cached files. This can be used to recover disk space if temporary files from interrupted or failed installs accumulate in the staging area.

When called with --stage or without arguments this removes all staged files.

When called with --downloads this will clear all resources cached during installs.

When called with --user-cache this will remove caches in the user home directory, including cached virtual indices.

To remove all of the above, the command can be called with --all.

When called with positional arguments, cleans up temporary files only for a particular package. If fetch, stage, or install are run again after this, Spack's build process will start from scratch.

Keeping the stage directory on success

By default, spack install will delete the staging area once a package has been successfully built and installed. Use --keep-stage to leave the build directory intact:

$ spack install --keep-stage <spec>

This allows you to inspect the build directory and potentially debug the build. You can use clean later to get rid of the unwanted temporary files.

Keeping the install prefix on failure

By default, spack install will delete any partially constructed install prefix if anything fails during install(). If you want to keep the prefix anyway (e.g. to diagnose a bug), you can use --keep-prefix:

$ spack install --keep-prefix <spec>

Note that this may confuse Spack into thinking that the package has been installed properly, so you may need to use spack uninstall --force to get rid of the install prefix before you build again:

$ spack uninstall --force <spec>

Graphing dependencies

spack graph

Spack provides the spack graph command for graphing dependencies. The command by default generates an ASCII rendering of a spec's dependency graph. For example:

$ spack graph hdf5
o  hdf5
|\
| o  openmpi
|/| 
| |\
| | o  hwloc
| |/| 
| | |\
| | | |\
| | | o |  libxml2
| |_|/| | 
|/| |/| | 
| | | |\ \
o | | | | |  zlib
 / / / / /
| | o | |  xz
| |  / /
| | | o  libpciaccess
| | |/| 
| |/| | 
| | | |\
| | | o |  util-macros
| | |  /
o | | |  numactl
|\ \ \ \
| |\ \ \ \
| | |_|_|/
| |/| | | 
| | |\ \ \
| | o | | |  automake
| | |\| | | 
| | | o | |  autoconf
| |_|/| | | 
|/| |/ / /
| | o | |  perl
| | o | |  gdbm
| | o | |  readline
| | o | |  ncurses
| | |/ /
| | o |  pkgconf
| |  /
| o |  libtool
|/ /
o |  m4
o |  libsigsegv
 /
o  libiconv

At the top is the root package in the DAG, with dependency edges emerging from it. On a color terminal, the edges are colored by which dependency they lead to.

$ spack graph --deptype=link hdf5
o  hdf5
|\
| o  openmpi
|/| 
| |\
| | o  hwloc
| |/| 
| | |\
| | o |  libxml2
| |/| | 
|/| | | 
| | |\ \
o | | | |  zlib
 / / / /
| o | |  xz
|  / /
o | |  numactl
 / /
| o  libpciaccess
| 
o  libiconv

The deptype argument tells Spack what types of dependencies to graph. By default it includes link and run dependencies but not build dependencies. Supplying --deptype=link will show only link dependencies. The default is --deptype=all, which is equivalent to --deptype=build,link,run,test. Options for deptype include:

  • Any combination of build, link, run, and test separated by commas.

  • all for all types of dependencies.

You can also use spack graph to generate graphs in the widely used Dot format. For example:

$ spack graph --dot hdf5
digraph G {
  labelloc = "b"
  rankdir = "TB"
  ranksep = "5"
node[
     fontname=Monaco,
     penwidth=2,
     fontsize=12,
     margin=.1,
     shape=box,
     fillcolor=lightblue,
     style="rounded,filled"]

  "guz5buq7nzkcixynql243u4ucye4mtyv" [label="hdf5/guz5buq"]
  "7flhg2ud3smax7gsphdhob4ucimjztlr" [label="openmpi/7flhg2u"]
  "pbcn3p2f6zqypyceohqyb2iloqcu57bk" [label="hwloc/pbcn3p2"]
  "cmn6yii6vkzjrapeabvbcna3qqqx6web" [label="libpciaccess/cmn6yii"]
  "jdxbjftheiotj6solpomva7dowrhlerl" [label="libtool/jdxbjft"]
  "olv5tj5h5wttoqa52zduhuj46apmakbg" [label="m4/olv5tj5"]
  "ywasfr4aapg3seh3af667xcbaac7cx5n" [label="libsigsegv/ywasfr4"]
  "azscwdopqzv4picsufqwfbvr6mwejkim" [label="pkgconf/azscwdo"]
  "gs6ag7ktdoiirb62t7bcagjw62szrrg2" [label="util-macros/gs6ag7k"]
  "rbuffvam2e6rkhx2hm2jfphxtcbarbtv" [label="libxml2/rbuffva"]
  "viytb2ptz5qx7fax3dajccmwod6bwxzm" [label="libiconv/viytb2p"]
  "rrennauh5rwpd7mw4dz36lcw44xtkuaa" [label="xz/rrennau"]
  "smoyzzo2qhzpn6mg6rd3l2p7b23enshg" [label="zlib/smoyzzo"]
  "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn" [label="numactl/yvxocdy"]
  "fbgfsafbxmi5rirzfksqccqohfojonk6" [label="autoconf/fbgfsaf"]
  "ioh2jcxomxtumyup3jtsaaitigeovy6c" [label="perl/ioh2jcx"]
  "cyx4faxjefkoy4jaome42keqsmyjvy3z" [label="gdbm/cyx4fax"]
  "motgnr22wv3zbo37flh5eimd36ifunpv" [label="readline/motgnr2"]
  "3cvxm5csh43lgnjkzjge7slh3de5f43i" [label="ncurses/3cvxm5c"]
  "h5u4mzozx3yipvr3ror3hprc7m4yhlxu" [label="automake/h5u4mzo"]

  "7flhg2ud3smax7gsphdhob4ucimjztlr" -> "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn"
  "ioh2jcxomxtumyup3jtsaaitigeovy6c" -> "cyx4faxjefkoy4jaome42keqsmyjvy3z"
  "rbuffvam2e6rkhx2hm2jfphxtcbarbtv" -> "smoyzzo2qhzpn6mg6rd3l2p7b23enshg"
  "7flhg2ud3smax7gsphdhob4ucimjztlr" -> "pbcn3p2f6zqypyceohqyb2iloqcu57bk"
  "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn" -> "olv5tj5h5wttoqa52zduhuj46apmakbg"
  "fbgfsafbxmi5rirzfksqccqohfojonk6" -> "ioh2jcxomxtumyup3jtsaaitigeovy6c"
  "cmn6yii6vkzjrapeabvbcna3qqqx6web" -> "gs6ag7ktdoiirb62t7bcagjw62szrrg2"
  "cyx4faxjefkoy4jaome42keqsmyjvy3z" -> "motgnr22wv3zbo37flh5eimd36ifunpv"
  "pbcn3p2f6zqypyceohqyb2iloqcu57bk" -> "cmn6yii6vkzjrapeabvbcna3qqqx6web"
  "3cvxm5csh43lgnjkzjge7slh3de5f43i" -> "azscwdopqzv4picsufqwfbvr6mwejkim"
  "pbcn3p2f6zqypyceohqyb2iloqcu57bk" -> "azscwdopqzv4picsufqwfbvr6mwejkim"
  "rbuffvam2e6rkhx2hm2jfphxtcbarbtv" -> "viytb2ptz5qx7fax3dajccmwod6bwxzm"
  "olv5tj5h5wttoqa52zduhuj46apmakbg" -> "ywasfr4aapg3seh3af667xcbaac7cx5n"
  "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn" -> "h5u4mzozx3yipvr3ror3hprc7m4yhlxu"
  "rbuffvam2e6rkhx2hm2jfphxtcbarbtv" -> "rrennauh5rwpd7mw4dz36lcw44xtkuaa"
  "pbcn3p2f6zqypyceohqyb2iloqcu57bk" -> "rbuffvam2e6rkhx2hm2jfphxtcbarbtv"
  "jdxbjftheiotj6solpomva7dowrhlerl" -> "olv5tj5h5wttoqa52zduhuj46apmakbg"
  "motgnr22wv3zbo37flh5eimd36ifunpv" -> "3cvxm5csh43lgnjkzjge7slh3de5f43i"
  "guz5buq7nzkcixynql243u4ucye4mtyv" -> "7flhg2ud3smax7gsphdhob4ucimjztlr"
  "cmn6yii6vkzjrapeabvbcna3qqqx6web" -> "azscwdopqzv4picsufqwfbvr6mwejkim"
  "h5u4mzozx3yipvr3ror3hprc7m4yhlxu" -> "ioh2jcxomxtumyup3jtsaaitigeovy6c"
  "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn" -> "jdxbjftheiotj6solpomva7dowrhlerl"
  "cmn6yii6vkzjrapeabvbcna3qqqx6web" -> "jdxbjftheiotj6solpomva7dowrhlerl"
  "guz5buq7nzkcixynql243u4ucye4mtyv" -> "smoyzzo2qhzpn6mg6rd3l2p7b23enshg"
  "fbgfsafbxmi5rirzfksqccqohfojonk6" -> "olv5tj5h5wttoqa52zduhuj46apmakbg"
  "h5u4mzozx3yipvr3ror3hprc7m4yhlxu" -> "fbgfsafbxmi5rirzfksqccqohfojonk6"
  "rbuffvam2e6rkhx2hm2jfphxtcbarbtv" -> "azscwdopqzv4picsufqwfbvr6mwejkim"
  "pbcn3p2f6zqypyceohqyb2iloqcu57bk" -> "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn"
  "7flhg2ud3smax7gsphdhob4ucimjztlr" -> "smoyzzo2qhzpn6mg6rd3l2p7b23enshg"
  "yvxocdy2kcxvvgatrrst3sqzyt7yxhgn" -> "fbgfsafbxmi5rirzfksqccqohfojonk6"
}

This graph can be provided as input to other graphing tools, such as those in Graphviz. If you have graphviz installed, you can write straight to PDF like this:

$ spack graph --dot hdf5 | dot -Tpdf > hdf5.pdf

Interactive shell support

Spack provides some limited shell support to make life easier for packagers. You can enable these commands by sourcing a setup file in the share/spack directory. For bash or ksh, run:

export SPACK_ROOT=/path/to/spack
. $SPACK_ROOT/share/spack/setup-env.sh

For csh and tcsh run:

setenv SPACK_ROOT /path/to/spack
source $SPACK_ROOT/share/spack/setup-env.csh

spack cd will then be available.

spack cd

spack cd allows you to quickly cd to pertinent directories in Spack. Suppose you've staged a package but you want to modify it before you build it:

$ spack stage libelf
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
######################################################################## 100.0%
==> Staging archive: ~/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64/libelf-0.8.13.tar.gz
==> Created stage in ~/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64.
$ spack cd libelf
$ pwd
~/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64/libelf-0.8.13

spack cd here changed the current working directory to the directory containing the expanded libelf source code. There are a number of other places you can cd to in the spack directory hierarchy:

$ spack cd --help
usage: spack cd [-h] [-m | -r | -i | -p | -P | -s | -S | -b | -e ENV] ...

cd to spack directories in the shell

positional arguments:
  spec               spec of package to fetch directory for

optional arguments:
  -h, --help         show this help message and exit
  -m, --module-dir   spack python module directory
  -r, --spack-root   spack installation root
  -i, --install-dir  install prefix for spec (spec need not be installed)
  -p, --package-dir  directory enclosing a spec's package.py file
  -P, --packages     top-level packages directory for Spack
  -s, --stage-dir    stage directory for a spec
  -S, --stages       top level stage directory
  -b, --build-dir    checked out or expanded source directory for a spec (requires it to be staged first)
  -e ENV, --env ENV  location of an environment managed by spack

Some of these change directory into package-specific locations (stage directory, install directory, package directory) and others change to core spack locations. For example, spack cd --module-dir will take you to the main python source directory of your spack install.

spack env

spack env functions much like the standard unix env command, but it takes a spec as an argument. You can use it to see the environment variables that will be set when a particular build runs, for example:

$ spack env mpileaks@1.1%intel

This will display the entire environment that will be set when the mpileaks@1.1%intel build runs.

To run commands in a package's build environment, you can simply provide them after the spec argument to spack env:

$ spack cd mpileaks@1.1%intel
$ spack env mpileaks@1.1%intel ./configure

This will cd to the build directory and then run configure in the package's build environment.

spack location

spack location is the same as spack cd but it does not require shell support. It simply prints out the path you ask for, rather than cd'ing to it. In bash, this:

$ cd $(spack location --build-dir <spec>)

is the same as:

$ spack cd --build-dir <spec>

spack location is intended for use in scripts or makefiles that need to know where packages are installed. e.g., in a makefile you might write:

DWARF_PREFIX = $(spack location --install-dir libdwarf)
CXXFLAGS += -I$DWARF_PREFIX/include
CXXFLAGS += -L$DWARF_PREFIX/lib

Build System Configuration Support

Imagine a developer creating a CMake or Autotools-based project in a local directory, which depends on libraries A-Z. Once Spack has installed those dependencies, one would like to run cmake with appropriate command line and environment so CMake can find them. The spack setup command does this conveniently, producing a CMake configuration that is essentially the same as how Spack would have configured the project. This can be demonstrated with a usage example:

$ cd myproject
$ spack setup myproject@local
$ mkdir build; cd build
$ ../spconfig.py ..
$ make
$ make install

Notes:

  • Spack must have myproject/package.py in its repository for this to work.

  • spack setup produces the executable script spconfig.py in the local directory, and also creates the module file for the package. spconfig.py is normally run from the user's out-of-source build directory.

  • The version number given to spack setup is arbitrary, just like spack diy. myproject/package.py does not need to have any valid downloadable versions listed (typical when a project is new).

  • spconfig.py produces a CMake configuration that does not use the Spack wrappers. Any resulting binaries will not use RPATH, unless the user has enabled it. This is recommended for development purposes, not production.

  • spconfig.py is human readable, and can serve as a developer reference of what dependencies are being used.

  • make install installs the package into the Spack repository, where it may be used by other Spack packages.

  • CMake-generated makefiles re-run CMake in some circumstances. Use of spconfig.py breaks this behavior, requiring the developer to manually re-run spconfig.py when a CMakeLists.txt file has changed.

CMakePackage

In order to enable spack setup functionality, the author of myproject/package.py must subclass from CMakePackage instead of the standard Package superclass. Because CMake is standardized, the packager does not need to tell Spack how to run cmake; make; make install. Instead the packager only needs to create (optional) methods configure_args() and configure_env(), which provide the arguments (as a list) and extra environment variables (as a dict) to provide to the cmake command. Usually, these will translate variant flags into CMake definitions. For example:

def configure_args(self):
    spec = self.spec
    return [
        '-DUSE_EVERYTRACE=%s' % ('YES' if '+everytrace' in spec else 'NO'),
        '-DBUILD_PYTHON=%s' % ('YES' if '+python' in spec else 'NO'),
        '-DBUILD_GRIDGEN=%s' % ('YES' if '+gridgen' in spec else 'NO'),
        '-DBUILD_COUPLER=%s' % ('YES' if '+coupler' in spec else 'NO'),
        '-DUSE_PISM=%s' % ('YES' if '+pism' in spec else 'NO')
    ]

If needed, a packager may also override methods defined in StagedPackage (see below).

StagedPackage

CMakePackage is implemented by subclassing the StagedPackage superclass, which breaks down the standard Package.install() method into several sub-stages: setup, configure, build and install. Details:

  • Instead of implementing the standard install() method, package authors implement the methods for the sub-stages install_setup(), install_configure(), install_build(), and install_install().

  • The spack install command runs the sub-stages configure, build and install in order. (The setup stage is not run by default; see below).

  • The spack setup command runs the sub-stages setup and a dummy install (to create the module file).

  • The sub-stage install methods take no arguments (other than self). The arguments spec and prefix to the standard install() method may be accessed via self.spec and self.prefix.

GNU Autotools

The setup functionality is currently only available for CMake-based packages. Extending this functionality to GNU Autotools-based packages would be easy (and should be done by a developer who actively uses Autotools). Packages that use non-standard build systems can gain setup functionality by subclassing StagedPackage directly.

Build Systems

Spack defines a number of classes which understand how to use common build systems (Makefiles, CMake, etc.). Spack package definitions can inherit these classes in order to streamline their builds.

This guide provides information specific to each particular build system. It assumes that you've read the Packaging Guide and expands on these ideas for each distinct build system that Spack supports:

MakefilePackage

The most primitive build system a package can use is a plain Makefile. Makefiles are simple to write for small projects, but they usually require you to edit the Makefile to set platform and compiler-specific variables.

Phases

The MakefilePackage base class comes with 3 phases:

  1. edit - edit the Makefile

  2. build - build the project

  3. install - install the project

By default, edit does nothing, but you can override it to replace hard-coded Makefile variables. The build and install phases run:

$ make
$ make install

Important files

The main file that matters for a MakefilePackage is the Makefile. This file will be named one of the following ways:

  • GNUmakefile (only works with GNU Make)

  • Makefile (most common)

  • makefile

Some Makefiles also include other configuration files. Check for an include directive in the Makefile.

Build system dependencies

Spack assumes that the operating system will have a valid make utility installed already, so you don't need to add a dependency on make. However, if the package uses a GNUmakefile or the developers recommend using GNU Make, you should add a dependency on gmake:

depends_on('gmake', type='build')

Types of Makefile packages

Most of the work involved in packaging software that uses Makefiles involves overriding or replacing hard-coded variables. Many packages make the mistake of hard-coding compilers, usually for GCC or Intel. This is fine if you happen to be using that particular compiler, but Spack is designed to work with any compiler, and you need to ensure that this is the case.

Depending on how the Makefile is designed, there are 4 common strategies that can be used to set or override the appropriate variables:

Environment variables

Make has multiple types of assignment operators. Some Makefiles use = to assign variables. The only way to override these variables is to edit the Makefile or override them on the command-line. However, Makefiles that use ?= for assignment honor environment variables. Since Spack already sets CC, CXX, F77, and FC, you won't need to worry about setting these variables. If there are any other variables you need to set, you can do this in the edit method:

def edit(self, spec, prefix):
    env['PREFIX'] = prefix
    env['BLASLIB'] = spec['blas'].libs.ld_flags

cbench is a good example of a simple package that does this, while esmf is a good example of a more complex package.

Command-line arguments

If the Makefile ignores environment variables, the next thing to try is command-line arguments. You can do this by overriding the build_targets attribute. If you don't need access to the spec, you can do this like so:

build_targets = ['CC=cc']

If you do need access to the spec, you can create a property like so:

@property
def build_targets(self):
    spec = self.spec

    return [
        'CC=cc',
        'BLASLIB={0}'.format(spec['blas'].libs.ld_flags),
    ]

cloverleaf is a good example of a package that uses this strategy.

Edit Makefile

Some Makefiles are just plain stubborn and will ignore command-line variables. The only way to ensure that these packages build correctly is to directly edit the Makefile. Spack provides a FileFilter class and a filter_file method to help with this. For example:

def edit(self, spec, prefix):
    makefile = FileFilter('Makefile')

    makefile.filter('CC = gcc',  'CC = cc')
    makefile.filter('CXX = g++', 'CC = c++')

stream is a good example of a package that involves editing a Makefile to set the appropriate variables.

Config file

More complex packages often involve Makefiles that include a configuration file. These configuration files are primarily composed of variables relating to the compiler, platform, and the location of dependencies or names of libraries. Since these config files are dependent on the compiler and platform, you will often see entire directories of examples for common compilers and architectures. Use these examples to help determine what possible values to use.

If the config file is long and only contains one or two variables that need to be modified, you can use the technique above to edit the config file. However, if you end up needing to modify most of the variables, it may be easier to write a new file from scratch.

If each variable is independent of each other, a dictionary works well for storing variables:

def edit(self, spec, prefix):
    config = {
        'CC': 'cc',
        'MAKE': 'make',
    }

    if '+blas' in spec:
        config['BLAS_LIBS'] = spec['blas'].libs.joined()

    with open('make.inc', 'w') as inc:
        for key in config:
            inc.write('{0} = {1}\n'.format(key, config[key]))

elk is a good example of a package that uses a dictionary to store configuration variables.

If the order of variables is important, it may be easier to store them in a list:

def edit(self, spec, prefix):
    config = [
        'INSTALL_DIR = {0}'.format(prefix),
        'INCLUDE_DIR = $(INSTALL_DIR)/include',
        'LIBRARY_DIR = $(INSTALL_DIR)/lib',
    ]

    with open('make.inc', 'w') as inc:
        for var in config:
            inc.write('{0}\n'.format(var))

hpl is a good example of a package that uses a list to store configuration variables.

Variables to watch out for

The following is a list of common variables to watch out for. The first two sections are implicit variables defined by Make and will always use the same name, while the rest are user-defined variables and may vary from package to package.

  • Compilers

    This includes variables such as CC, CXX, F77, F90, and FC, as well as variables related to MPI compiler wrappers, like MPICC and friends.

  • Compiler flags

    This includes variables for specific compilers, like CFLAGS, CXXFLAGS, F77FLAGS, F90FLAGS, FCFLAGS, and CPPFLAGS. These variables are often hard-coded to contain flags specific to a certain compiler. If these flags don't work for every compiler, you may want to consider filtering them.

  • Variables that enable or disable features

    This includes variables like MPI, OPENMP, PIC, and DEBUG. These flags often require you to create a variant so that you can either build with or without MPI support, for example. These flags are often compiler-dependent. You should replace them with the appropriate compiler flags, such as self.compiler.openmp_flag or self.compiler.pic_flag.

  • Platform flags

    These flags control the type of architecture that the executable is compiler for. Watch out for variables like PLAT or ARCH.

  • Dependencies

    Look out for variables that sound like they could be used to locate dependencies, such as JAVA_HOME, JPEG_ROOT, or ZLIBDIR. Also watch out for variables that control linking, such as LIBS, LDFLAGS, and INCLUDES. These variables need to be set to the installation prefix of a dependency, or to the correct linker flags to link to that dependency.

  • Installation prefix

    If your Makefile has an install target, it needs some way of knowing where to install. By default, many packages install to /usr or /usr/local. Since many Spack users won't have sudo privileges, it is imperative that each package is installed to the proper prefix. Look for variables like PREFIX or INSTALL.

Makefiles in a sub-directory

Not every package places their Makefile in the root of the package tarball. If the Makefile is in a sub-directory like src, you can tell Spack where to locate it like so:

build_directory = 'src'

Manual installation

Not every Makefile includes an install target. If this is the case, you can override the default install method to manually install the package:

def install(self, spec, prefix):
    mkdir(prefix.bin)
    install('foo', prefix.bin)
    install_tree('lib', prefix.lib)

External documentation

For more information on reading and writing Makefiles, see: https://www.gnu.org/software/make/manual/make.html

SConsPackage

SCons is a general-purpose build system that does not rely on Makefiles to build software. SCons is written in Python, and handles all building and linking itself.

As far as build systems go, SCons is very non-uniform. It provides a common framework for developers to write build scripts, but the build scripts themselves can vary drastically. Some developers add subcommands like:

$ scons clean
$ scons build
$ scons test
$ scons install

Others don't add any subcommands. Some have configuration options that can be specified through variables on the command line. Others don't.

Phases

As previously mentioned, SCons allows developers to add subcommands like build and install, but by default, installation usually looks like:

$ scons
$ scons install

To facilitate this, the SConsPackage base class provides the following phases:

  1. build - build the package

  2. install - install the package

Package developers often add unit tests that can be invoked with scons test or scons check. Spack provides a test method to handle this. Since we don't know which one the package developer chose, the test method does nothing by default, but can be easily overridden like so:

def test(self):
    scons('check')

Important files

SCons packages can be identified by their SConstruct files. These files handle everything from setting up subcommands and command-line options to linking and compiling.

One thing to look for is the EnsureSConsVersion function:

EnsureSConsVersion(2, 3, 0)

This means that SCons 2.3.0 is the earliest release that will work. You should specify this in a depends_on statement.

Build system dependencies

At the bare minimum, packages that use the SCons build system need a scons dependency. Since this is always the case, the SConsPackage base class already contains:

depends_on('scons', type='build')

If you want to specify a particular version requirement, you can override this in your package:

depends_on('scons@2.3.0:', type='build')

Finding available options

The first place to start when looking for a list of valid options to build a package is scons --help. Some packages like kahip don't bother overwriting the default SCons help message, so this isn't very useful, but other packages like serf print a list of valid command-line variables:

$ scons --help
scons: Reading SConscript files ...
Checking for GNU-compatible C compiler...yes
scons: done reading SConscript files.

PREFIX: Directory to install under ( /path/to/PREFIX )
    default: /usr/local
    actual: /usr/local

LIBDIR: Directory to install architecture dependent libraries under ( /path/to/LIBDIR )
    default: $PREFIX/lib
    actual: /usr/local/lib

APR: Path to apr-1-config, or to APR's install area ( /path/to/APR )
    default: /usr
    actual: /usr

APU: Path to apu-1-config, or to APR's install area ( /path/to/APU )
    default: /usr
    actual: /usr

OPENSSL: Path to OpenSSL's install area ( /path/to/OPENSSL )
    default: /usr
    actual: /usr

ZLIB: Path to zlib's install area ( /path/to/ZLIB )
    default: /usr
    actual: /usr

GSSAPI: Path to GSSAPI's install area ( /path/to/GSSAPI )
    default: None
    actual: None

DEBUG: Enable debugging info and strict compile warnings (yes|no)
    default: False
    actual: False

APR_STATIC: Enable using a static compiled APR (yes|no)
    default: False
    actual: False

CC: Command name or path of the C compiler
    default: None
    actual: gcc

CFLAGS: Extra flags for the C compiler (space-separated)
    default: None
    actual:

LIBS: Extra libraries passed to the linker, e.g. "-l<library1> -l<library2>" (space separated)
    default: None
    actual: None

LINKFLAGS: Extra flags for the linker (space-separated)
    default: None
    actual:

CPPFLAGS: Extra flags for the C preprocessor (space separated)
    default: None
    actual: None

Use scons -H for help about command-line options.

More advanced packages like cantera use scons --help to print a list of subcommands:

$ scons --help
scons: Reading SConscript files ...

SCons build script for Cantera

Basic usage:
    'scons help' - print a description of user-specifiable options.

    'scons build' - Compile Cantera and the language interfaces using
                    default options.

    'scons clean' - Delete files created while building Cantera.

    '[sudo] scons install' - Install Cantera.

    '[sudo] scons uninstall' - Uninstall Cantera.

    'scons test' - Run all tests which did not previously pass or for which the
                   results may have changed.

    'scons test-reset' - Reset the passing status of all tests.

    'scons test-clean' - Delete files created while running the tests.

    'scons test-help' - List available tests.

    'scons test-NAME' - Run the test named "NAME".

    'scons <command> dump' - Dump the state of the SCons environment to the
                             screen instead of doing <command>, e.g.
                             'scons build dump'. For debugging purposes.

    'scons samples' - Compile the C++ and Fortran samples.

    'scons msi' - Build a Windows installer (.msi) for Cantera.

    'scons sphinx' - Build the Sphinx documentation

    'scons doxygen' - Build the Doxygen documentation

You'll notice that cantera provides a scons help subcommand. Running scons help prints a list of valid command-line variables.

Passing arguments to scons

Now that you know what arguments the project accepts, you can add them to the package build phase. This is done by overriding build_args like so:

def build_args(self, spec, prefix):
    args = [
      'PREFIX={0}'.format(prefix),
      'ZLIB={0}'.format(spec['zlib'].prefix),
    ]

    if '+debug' in spec:
        args.append('DEBUG=yes')
    else:
        args.append('DEBUG=no')

    return args

SConsPackage also provides an install_args function that you can override to pass additional arguments to scons install.

Compiler wrappers

By default, SCons builds all packages in a separate execution environment, and doesn't pass any environment variables from the user environment. Even changes to PATH are not propagated unless the package developer does so.

This is particularly troublesome for Spack's compiler wrappers, which depend on environment variables to manage dependencies and linking flags. In many cases, SCons packages are not compatible with Spack's compiler wrappers, and linking must be done manually.

First of all, check the list of valid options for anything relating to environment variables. For example, cantera has the following option:

* env_vars: [ string ]
    Environment variables to propagate through to SCons. Either the
    string "all" or a comma separated list of variable names, e.g.
    'LD_LIBRARY_PATH,HOME'.
    - default: 'LD_LIBRARY_PATH,PYTHONPATH'

In the case of cantera, using env_vars=all allows us to use Spack's compiler wrappers. If you don't see an option related to environment variables, try using Spack's compiler wrappers by passing spack_cc, spack_cxx, and spack_fc via the CC, CXX, and FC arguments, respectively. If you pass them to the build and you see an error message like:

Spack compiler must be run from Spack! Input 'SPACK_PREFIX' is missing.

you'll know that the package isn't compatible with Spack's compiler wrappers. In this case, you'll have to use the path to the actual compilers, which are stored in self.compiler.cc and friends. Note that this may involve passing additional flags to the build to locate dependencies, a task normally done by the compiler wrappers. serf is an example of a package with this limitation.

External documentation

For more information on the SCons build system, see: http://scons.org/documentation.html

WafPackage

Like SCons, Waf is a general-purpose build system that does not rely on Makefiles to build software.

Phases

The WafPackage base class comes with the following phases:

  1. configure - configure the project

  2. build - build the project

  3. install - install the project

By default, these phases run:

$ python waf configure --prefix=/path/to/installation/prefix
$ python waf build
$ python waf install

Each of these are standard Waf commands and can be found by running:

$ python waf --help

Each phase provides a <phase> function that runs:

$ python waf -j<jobs> <phase>

where <jobs> is the number of parallel jobs to build with. Each phase also has a <phase_args> function that can pass arguments to this call. All of these functions are empty except for the configure_args function, which passes --prefix=/path/to/installation/prefix.

Testing

WafPackage also provides test and installtest methods, which are run after the build and install phases, respectively. By default, these phases do nothing, but you can override them to run package-specific unit tests. For example, the py-py2cairo package uses:

def installtest(self):
    with working_dir('test'):
        pytest = which('py.test')
        pytest()

Important files

Each Waf package comes with a custom waf build script, written in Python. This script contains instructions to build the project.

The package also comes with a wscript file. This file is used to override the default configure, build, and install phases to customize the Waf project. It also allows developers to override the default ./waf --help message. Check this file to find useful information about dependencies and the minimum versions that are supported.

Build system dependencies

WafPackage does not require waf to build. waf is only needed to create the ./waf script. Since ./waf is a Python script, Python is needed to build the project. WafPackage adds the following dependency automatically:

depends_on('python@2.5:', type='build')

Waf only supports Python 2.5 and up.

Passing arguments to waf

As previously mentioned, each phase comes with a <phase_args> function that can be used to pass arguments to that particular phase. For example, if you need to pass arguments to the build phase, you can use:

def build_args(self, spec, prefix):
    args = []

    if self.run_tests:
        args.append('--test')

    return args

A list of valid options can be found by running ./waf --help.

External documentation

For more information on the Waf build system, see: https://waf.io/book/

AutotoolsPackage

Autotools is a GNU build system that provides a build-script generator. By running the platform-independent ./configure script that comes with the package, you can generate a platform-dependent Makefile.

Phases

The AutotoolsPackage base class comes with the following phases:

  1. autoreconf - generate the configure script

  2. configure - generate the Makefiles

  3. build - build the package

  4. install - install the package

Most of the time, the autoreconf phase will do nothing, but if the package is missing a configure script, autoreconf will generate one for you.

The other phases run:

$ ./configure --prefix=/path/to/installation/prefix
$ make
$ make check  # optional
$ make install
$ make installcheck  # optional

Of course, you may need to add a few arguments to the ./configure line.

Important files

The most important file for an Autotools-based package is the configure script. This script is automatically generated by Autotools and generates the appropriate Makefile when run.

警告

Watch out for fake Autotools packages!

Autotools is a very popular build system, and many people are used to the classic steps to install a package:

$ ./configure
$ make
$ make install

For this reason, some developers will write their own configure scripts that have nothing to do with Autotools. These packages may not accept the same flags as other Autotools packages, so it is better to use the Package base class and create a custom build system. You can tell if a package uses Autotools by running ./configure --help and comparing the output to other known Autotools packages. You should also look for files like:

  • configure.ac

  • configure.in

  • Makefile.am

Packages that don't use Autotools aren't likely to have these files.

Build system dependencies

Whether or not your package requires Autotools to install depends on how the source code is distributed. Most of the time, when developers distribute tarballs, they will already contain the configure script necessary for installation. If this is the case, your package does not require any Autotools dependencies.

However, a basic rule of version control systems is to never commit code that can be generated. The source code repository itself likely does not have a configure script. Developers typically write (or auto-generate) a configure.ac script that contains configuration preferences and a Makefile.am script that contains build instructions. Then, autoconf is used to convert configure.ac into configure, while automake is used to convert Makefile.am into Makefile.in. Makefile.in is used by configure to generate a platform-dependent Makefile for you. The following diagram provides a high-level overview of the process:

_images/Autoconf-automake-process.svg

GNU autoconf and automake process for generating makefiles by Jdthood under CC BY-SA 3.0

If a configure script is not present in your tarball, you will need to generate one yourself. Luckily, Spack already has an autoreconf phase to do most of the work for you. By default, the autoreconf phase runs:

$ libtoolize
$ aclocal
$ autoreconf --install --verbose --force

All you need to do is add a few Autotools dependencies to the package. Most stable releases will come with a configure script, but if you check out a commit from the develop branch, you would want to add:

depends_on('autoconf', type='build', when='@develop')
depends_on('automake', type='build', when='@develop')
depends_on('libtool',  type='build', when='@develop')
depends_on('m4',       type='build', when='@develop')

In some cases, developers might need to distribute a patch that modifies one of the files used to generate configure or Makefile.in. In this case, these scripts will need to be regenerated. It is preferable to regenerate these manually using the patch, and then create a new patch that directly modifies configure. That way, Spack can use the secondary patch and additional build system dependencies aren't necessary.

force_autoreconf

If for whatever reason you really want to add the original patch and tell Spack to regenerate configure, you can do so using the following setting:

force_autoreconf = True

This line tells Spack to wipe away the existing configure script and generate a new one. If you only need to do this for a single version, this can be done like so:

@property
def force_autoreconf(self):
    return self.version == Version('1.2.3'):

Finding configure flags

Once you have a configure script present, the next step is to determine what option flags are available. These flags can be found by running:

$ ./configure --help

configure will display a list of valid flags separated into some or all of the following sections:

  • Configuration

  • Installation directories

  • Fine tuning of the installation directories

  • Program names

  • X features

  • System types

  • Optional Features

  • Optional Packages

  • Some influential environment variables

For the most part, you can ignore all but the last 3 sections. The "Optional Features" sections lists flags that enable/disable features you may be interested in. The "Optional Packages" section often lists dependencies and the flags needed to locate them. The "environment variables" section lists environment variables that the build system uses to pass flags to the compiler and linker.

Addings flags to configure

For most of the flags you encounter, you will want a variant to optionally enable/disable them. You can then optionally pass these flags to the configure call by overriding the configure_args function like so:

def configure_args(self):
    args = []

    if '+mpi' in self.spec:
        args.append('--enable-mpi')
    else:
        args.append('--disable-mpi')

    return args

Note that we are explicitly disabling MPI support if it is not requested. This is important, as many Autotools packages will enable options by default if the dependencies are found, and disable them otherwise. We want Spack installations to be as deterministic as possible. If two users install a package with the same variants, the goal is that both installations work the same way. See here and here for a rationale as to why these so-called "automagic" dependencies are a problem.

By default, Autotools installs packages to /usr. We don't want this, so Spack automatically adds --prefix=/path/to/installation/prefix to your list of configure_args. You don't need to add this yourself.

Helper functions

You may have noticed that most of the Autotools flags are of the form --enable-foo, --disable-bar, --with-baz=<prefix>, or --without-baz. Since these flags are so common, Spack provides a couple of helper functions to make your life easier.

TODO: document with_or_without and enable_or_disable.

Configure script in a sub-directory

Occasionally, developers will hide their source code and configure script in a subdirectory like src. If this happens, Spack won't be able to automatically detect the build system properly when running spack create. You will have to manually change the package base class and tell Spack where the configure script resides. You can do this like so:

configure_directory = 'src'

Building out of source

Some packages like gcc recommend building their software in a different directory than the source code to prevent build pollution. This can be done using the build_directory variable:

build_directory = 'spack-build'

By default, Spack will build the package in the same directory that contains the configure script

Build and install targets

For most Autotools packages, the usual:

$ configure
$ make
$ make install

is sufficient to install the package. However, if you need to run make with any other targets, for example, to build an optional library or build the documentation, you can add these like so:

build_targets = ['all', 'docs']
install_targets = ['install', 'docs']

Testing

Autotools-based packages typically provide unit testing via the check and installcheck targets. If you build your software with spack install --test=root, Spack will check for the presence of a check or test target in the Makefile and run make check for you. After installation, it will check for an installcheck target and run make installcheck if it finds one.

External documentation

For more information on the Autotools build system, see: https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html

CMakePackage

Like Autotools, CMake is a widely-used build-script generator. Designed by Kitware, CMake is the most popular build system for new C, C++, and Fortran projects, and many older projects are switching to it as well.

Unlike Autotools, CMake can generate build scripts for builders other than Make: Ninja, Visual Studio, etc. It is therefore cross-platform, whereas Autotools is Unix-only.

Phases

The CMakePackage base class comes with the following phases:

  1. cmake - generate the Makefile

  2. build - build the package

  3. install - install the package

By default, these phases run:

$ mkdir spack-build
$ cd spack-build
$ cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/installation/prefix
$ make
$ make test  # optional
$ make install

A few more flags are passed to cmake by default, including flags for setting the build type and flags for locating dependencies. Of course, you may need to add a few arguments yourself.

Important files

A CMake-based package can be identified by the presence of a CMakeLists.txt file. This file defines the build flags that can be passed to the cmake invocation, as well as linking instructions. If you are familiar with CMake, it can prove very useful for determining dependencies and dependency version requirements.

One thing to look for is the cmake_minimum_required function:

cmake_minimum_required(VERSION 2.8.12)

This means that CMake 2.8.12 is the earliest release that will work. You should specify this in a depends_on statement.

CMake-based packages may also contain CMakeLists.txt in subdirectories. This modularization helps to manage complex builds in a hierarchical fashion. Sometimes these nested CMakeLists.txt require additional dependencies not mentioned in the top-level file.

There's also usually a cmake or CMake directory containing additional macros, find scripts, etc. These may prove useful in determining dependency version requirements.

Build system dependencies

Every package that uses the CMake build system requires a cmake dependency. Since this is always the case, the CMakePackage base class already contains:

depends_on('cmake', type='build')

If you need to specify a particular version requirement, you can override this in your package:

depends_on('cmake@2.8.12:', type='build')

Finding cmake flags

To get a list of valid flags that can be passed to cmake, run the following command in the directory that contains CMakeLists.txt:

$ cmake . -LAH

CMake will start by checking for compilers and dependencies. Eventually it will begin to list build options. You'll notice that most of the build options at the top are prefixed with CMAKE_. You can safely ignore most of these options as Spack already sets them for you. This includes flags needed to locate dependencies, RPATH libraries, set the installation directory, and set the build type.

The rest of the flags are the ones you should consider adding to your package. They often include flags to enable/disable support for certain features and locate specific dependencies. One thing you'll notice that makes CMake different from Autotools is that CMake has an understanding of build flag hierarchy. That is, certain flags will not display unless their parent flag has been selected. For example, flags to specify the lib and include directories for a package might not appear unless CMake found the dependency it was looking for. You may need to manually specify certain flags to explore the full depth of supported build flags, or check the CMakeLists.txt yourself.

Adding flags to cmake

To add additional flags to the cmake call, simply override the cmake_args function:

def cmake_args(self):
    args = []

    if '+hdf5' in self.spec:
        args.append('-DDETECT_HDF5=ON')
    else:
        args.append('-DDETECT_HDF5=OFF')

    return args

Generators

CMake and Autotools are build-script generation tools; they "generate" the Makefiles that are used to build a software package. CMake actually supports multiple generators, not just Makefiles. Another common generator is Ninja. To switch to the Ninja generator, simply add:

generator = 'Ninja'

CMakePackage defaults to "Unix Makefiles". If you switch to the Ninja generator, make sure to add:

depends_on('ninja', type='build')

to the package as well. Aside from that, you shouldn't need to do anything else. Spack will automatically detect that you are using Ninja and run:

$ cmake .. -G Ninja
$ ninja
$ ninja install

Spack currently only supports "Unix Makefiles" and "Ninja" as valid generators, but it should be simple to add support for alternative generators. For more information on CMake generators, see: https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html

CMAKE_BUILD_TYPE

Every CMake-based package accepts a -DCMAKE_BUILD_TYPE flag to dictate which level of optimization to use. In order to ensure uniformity across packages, the CMakePackage base class adds a variant to control this:

variant('build_type', default='RelWithDebInfo',
        description='CMake build type',
        values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))

However, not every CMake package accepts all four of these options. Grep the CMakeLists.txt file to see if the default values are missing or replaced. For example, the dealii package overrides the default variant with:

variant('build_type', default='DebugRelease',
        description='The build type to build',
        values=('Debug', 'Release', 'DebugRelease'))

For more information on CMAKE_BUILD_TYPE, see: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html

CMakeLists.txt in a sub-directory

Occasionally, developers will hide their source code and CMakeLists.txt in a subdirectory like src. If this happens, Spack won't be able to automatically detect the build system properly when running spack create. You will have to manually change the package base class and tell Spack where CMakeLists.txt resides. You can do this like so:

root_cmakelists_dir = 'src'

Note that this path is relative to the root of the extracted tarball, not to the build_directory. It defaults to the current directory.

Building out of source

By default, Spack builds every CMakePackage in a spack-build sub-directory. If, for whatever reason, you would like to build in a different sub-directory, simply override build_directory like so:

build_directory = 'my-build'

Build and install targets

For most CMake packages, the usual:

$ cmake
$ make
$ make install

is sufficient to install the package. However, if you need to run make with any other targets, for example, to build an optional library or build the documentation, you can add these like so:

build_targets = ['all', 'docs']
install_targets = ['install', 'docs']

Testing

CMake-based packages typically provide unit testing via the test target. If you build your software with --test=root, Spack will check for the presence of a test target in the Makefile and run make test for you. If you want to run a different test instead, simply override the check method.

External documentation

For more information on the CMake build system, see: https://cmake.org/cmake/help/latest/

MesonPackage

Much like Autotools and CMake, Meson is a build system. But it is meant to be both fast and as user friendly as possible. GNOME's goal is to port modules to use the Meson build system.

Phases

The MesonPackage base class comes with the following phases:

  1. meson - generate ninja files

  2. build - build the project

  3. install - install the project

By default, these phases run:

$ mkdir spack-build
$ cd spack-build
$ meson .. --prefix=/path/to/installation/prefix
$ ninja
$ ninja test  # optional
$ ninja install

Any of these phases can be overridden in your package as necessary. There is also a check method that looks for a test target in the build file. If a test target exists and the user runs:

$ spack install --test=root <meson-package>

Spack will run ninja test after the build phase.

Important files

Packages that use the Meson build system can be identified by the presence of a meson.build file. This file declares things like build instructions and dependencies.

One thing to look for is the meson_version key that gets passed to the project function:

project('gtk+', 'c',
     version: '3.94.0',
     default_options: [
       'buildtype=debugoptimized',
       'warning_level=1',
       # We only need c99, but glib needs GNU-specific features
       # https://github.com/mesonbuild/meson/issues/2289
       'c_std=gnu99',
     ],
     meson_version: '>= 0.43.0',
     license: 'LGPLv2.1+')

This means that Meson 0.43.0 is the earliest release that will work. You should specify this in a depends_on statement.

Build system dependencies

At the bare minimum, packages that use the Meson build system need meson and `ninja` dependencies. Since this is always the case, the MesonPackage base class already contains:

depends_on('meson', type='build')
depends_on('ninja', type='build')

If you need to specify a particular version requirement, you can override this in your package:

depends_on('meson@0.43.0:', type='build')
depends_on('ninja', type='build')

Finding meson flags

To get a list of valid flags that can be passed to meson, run the following command in the directory that contains meson.build:

$ meson setup --help

Passing arguments to meson

If you need to pass any arguments to the meson call, you can override the meson_args method like so:

def meson_args(self):
    return ['--default-library=both']

This method can be used to pass flags as well as variables.

External documentation

For more information on the Meson build system, see: https://mesonbuild.com/index.html

QMakePackage

Much like Autotools and CMake, QMake is a build-script generator designed by the developers of Qt. In its simplest form, Spack's QMakePackage runs the following steps:

$ qmake
$ make
$ make check  # optional
$ make install

QMake does not appear to have a standardized way of specifying the installation directory, so you may have to set environment variables or edit *.pro files to get things working properly.

Phases

The QMakePackage base class comes with the following phases:

  1. qmake - generate Makefiles

  2. build - build the project

  3. install - install the project

By default, these phases run:

$ qmake
$ make
$ make install

Any of these phases can be overridden in your package as necessary. There is also a check method that looks for a check target in the Makefile. If a check target exists and the user runs:

$ spack install --test=root <qmake-package>

Spack will run make check after the build phase.

Important files

Packages that use the QMake build system can be identified by the presence of a <project-name>.pro file. This file declares things like build instructions and dependencies.

One thing to look for is the minQtVersion function:

minQtVersion(5, 6, 0)

This means that Qt 5.6.0 is the earliest release that will work. You should specify this in a depends_on statement.

Build system dependencies

At the bare minimum, packages that use the QMake build system need a qt dependency. Since this is always the case, the QMakePackage base class already contains:

depends_on('qt', type='build')

If you want to specify a particular version requirement, or need to link to the qt libraries, you can override this in your package:

depends_on('qt@5.6.0:')

Passing arguments to qmake

If you need to pass any arguments to the qmake call, you can override the qmake_args method like so:

def qmake_args(self):
    return ['-recursive']

This method can be used to pass flags as well as variables.

External documentation

For more information on the QMake build system, see: http://doc.qt.io/qt-5/qmake-manual.html

OctavePackage

Octave has its own build system for installing packages.

Phases

The OctavePackage base class has a single phase:

  1. install - install the package

By default, this phase runs the following command:

$ octave '--eval' 'pkg prefix <prefix>; pkg install <archive_file>'

Beware that uninstallation is not implemented at the moment. After uninstalling a package via Spack, you also need to manually uninstall it from Octave via pkg uninstall <package_name>.

Finding Octave packages

Most Octave packages are listed at https://octave.sourceforge.io/packages.php.

Dependencies

Usually, the homepage of a package will list dependencies, i.e. Dependencies: Octave >= 3.6.0 struct >= 1.0.12. The same information should be available in the DESCRIPTION file in the root of each archive.

External Documentation

For more information on the Octave build system, see: https://octave.org/doc/v4.4.0/Installing-and-Removing-Packages.html

PerlPackage

Much like Octave, Perl has its own language-specific build system.

Phases

The PerlPackage base class comes with 3 phases that can be overridden:

  1. configure - configure the package

  2. build - build the package

  3. install - install the package

Perl packages have 2 common modules used for module installation:

ExtUtils::MakeMaker

The ExtUtils::MakeMaker module is just what it sounds like, a module designed to generate Makefiles. It can be identified by the presence of a Makefile.PL file, and has the following installation steps:

$ perl Makefile.PL INSTALL_BASE=/path/to/installation/prefix
$ make
$ make test  # optional
$ make install
Module::Build

The Module::Build module is a pure-Perl build system, and can be identified by the presence of a Build.PL file. It has the following installation steps:

$ perl Build.PL --install_base /path/to/installation/prefix
$ ./Build
$ ./Build test  # optional
$ ./Build install

If both Makefile.PL and Build.PL files exist in the package, Spack will use Makefile.PL by default. If your package uses a different module, PerlPackage will need to be extended to support it.

PerlPackage automatically detects which build steps to use, so there shouldn't be much work on the package developer's side to get things working.

Finding Perl packages

Most Perl modules are hosted on CPAN - The Comprehensive Perl Archive Network. If you need to find a package for XML::Parser, for example, you should search for "CPAN XML::Parser".

Some CPAN pages are versioned. Check for a link to the "Latest Release" to make sure you have the latest version.

Package name

When you use spack create to create a new Perl package, Spack will automatically prepend perl- to the front of the package name. This helps to keep Perl modules separate from other packages. The same naming scheme is used for other language extensions, like Python and R.

Description

Most CPAN pages have a short description under "NAME" and a longer description under "DESCRIPTION". Use whichever you think is more useful while still being succinct.

Homepage

In the top-right corner of the CPAN page, you'll find a "permalink" for the package. This should be used instead of the current URL, as it doesn't contain the version number and will always link to the latest release.

URL

If you haven't found it already, the download URL is on the right side of the page below the permalink. Search for "Download".

Build system dependencies

Every PerlPackage obviously depends on Perl at build and run-time, so PerlPackage contains:

extends('perl')

depends_on('perl', type=('build', 'run'))

If your package requires a specific version of Perl, you should specify this.

Although newer versions of Perl include ExtUtils::MakeMaker and Module::Build as "core" modules, you may want to add dependencies on perl-extutils-makemaker and perl-module-build anyway. Many people add Perl as an external package, and we want the build to work properly. If your package uses Makefile.PL to build, add:

depends_on('perl-extutils-makemaker', type='build')

If your package uses Build.PL to build, add:

depends_on('perl-module-build', type='build')

Perl dependencies

Below the download URL, you will find a "Dependencies" link, which takes you to a page listing all of the dependencies of the package. Packages listed as "Core module" don't need to be added as dependencies, but all direct dependencies should be added. Don't add dependencies of dependencies. These should be added as dependencies to the dependency, not to your package.

Passing arguments to configure

Packages that have non-Perl dependencies often use command-line variables to specify their installation directory. You can pass arguments to Makefile.PL or Build.PL by overriding configure_args like so:

def configure_args(self):
    expat = self.spec['expat'].prefix

    return [
        'EXPATLIBPATH={0}'.format(expat.lib),
        'EXPATINCPATH={0}'.format(expat.include),
    ]

Alternatives to Spack

If you need to maintain a stack of Perl modules for a user and don't want to add all of them to Spack, a good alternative is cpanm. If Perl is already installed on your system, it should come with a cpan executable. To install cpanm, run the following command:

$ cpan App::cpanminus

Now, you can install any Perl module you want by running:

$ cpanm Module::Name

Obviously, these commands can only be run if you have root privileges. Furthermore, cpanm is not capable of installing non-Perl dependencies. If you need to install to your home directory or need to install a module with non-Perl dependencies, Spack is a better option.

External documentation

You can find more information on installing Perl modules from source at: http://www.perlmonks.org/?node_id=128077

More generic Perl module installation instructions can be found at: http://www.cpan.org/modules/INSTALL.html

PythonPackage

Python packages and modules have their own special build system.

Phases

The PythonPackage base class provides the following phases that can be overridden:

  • build

  • build_py

  • build_ext

  • build_clib

  • build_scripts

  • clean

  • install

  • install_lib

  • install_headers

  • install_scripts

  • install_data

  • sdist

  • register

  • bdist

  • bdist_dumb

  • bdist_rpm

  • bdist_wininst

  • upload

  • check

These are all standard setup.py commands and can be found by running:

$ python setup.py --help-commands

By default, only the build and install phases are run:

  1. build - build everything needed to install

  2. install - install everything from build directory

If for whatever reason you need to run more phases, simply modify your phases list like so:

phases = ['build_ext', 'install', 'bdist']

Each phase provides a function <phase> that runs:

$ python -s setup.py --no-user-cfg <phase>

Each phase also has a <phase_args> function that can pass arguments to this call. All of these functions are empty except for the install_args function, which passes --prefix=/path/to/installation/prefix. There is also some additional logic specific to setuptools and eggs.

If you need to run a phase that is not a standard setup.py command, you'll need to define a function for it like so:

phases = ['configure', 'build', 'install']

def configure(self, spec, prefix):
    self.setup_py('configure')

Important files

Python packages can be identified by the presence of a setup.py file. This file is used by package managers like pip to determine a package's dependencies and the version of dependencies required, so if the setup.py file is not accurate, the package will not build properly. For this reason, the setup.py file should be fairly reliable. If the documentation and setup.py disagree on something, the setup.py file should be considered to be the truth. As dependencies are added or removed, the documentation is much more likely to become outdated than the setup.py.

Finding Python packages

The vast majority of Python packages are hosted on PyPI - The Python Package Index. pip only supports packages hosted on PyPI, making it the only option for developers who want a simple installation. Search for "PyPI <package-name>" to find the download page. Note that some pages are versioned, and the first result may not be the newest version. Click on the "Latest Version" button to the top right to see if a newer version is available. The download page is usually at: https://pypi.org/project/<package-name>

Description

The top of the PyPI downloads page contains a description of the package. The first line is usually a short description, while there may be a several line "Project Description" that follows. Choose whichever is more useful. You can also get these descriptions on the command-line using:

$ python setup.py --description
$ python setup.py --long-description

Homepage

Package developers use setup.py to upload new versions to PyPI. The setup method often passes metadata like homepage to PyPI. This metadata is displayed on the left side of the download page. Search for the text "Homepage" under "Project links" to find it. You should use this page instead of the PyPI page if they differ. You can also get the homepage on the command-line by running:

$ python setup.py --url

URL

You may have noticed that Spack allows you to add multiple versions of the same package without adding multiple versions of the download URL. It does this by guessing what the version string in the URL is and replacing this with the requested version. Obviously, if Spack cannot guess the version correctly, or if non-version-related things change in the URL, Spack cannot substitute the version properly.

Once upon a time, PyPI offered nice, simple download URLs like: https://pypi.python.org/packages/source/n/numpy/numpy-1.13.1.zip

As you can see, the version is 1.13.1. It probably isn't hard to guess what URL to use to download version 1.12.0, and Spack was perfectly capable of performing this calculation.

However, PyPI switched to a new download URL format: https://pypi.python.org/packages/c0/3a/40967d9f5675fbb097ffec170f59c2ba19fc96373e73ad47c2cae9a30aed/numpy-1.13.1.zip#md5=2c3c0f4edf720c3a7b525dacc825b9ae

and more recently: https://files.pythonhosted.org/packages/b0/2b/497c2bb7c660b2606d4a96e2035e92554429e139c6c71cdff67af66b58d2/numpy-1.14.3.zip

As you can imagine, it is impossible for Spack to guess what URL to use to download version 1.12.0 given this URL. There is a solution, however. PyPI offers a new hidden interface for downloading Python packages that does not include a hash in the URL: https://pypi.io/packages/source/n/numpy/numpy-1.13.1.zip

This URL redirects to the files.pythonhosted.org URL. The general syntax for this pypi.io URL is: https://pypi.io/packages/source/<first-letter-of-name>/<name>/<name>-<version>.<extension>

Please use the pypi.io URL instead of the pypi.python.org URL. If both .tar.gz and .zip versions are available, .tar.gz is preferred. If some releases offer both .tar.gz and .zip versions, but some only offer .zip versions, use .zip.

PyPI vs. GitHub

Many packages are hosted on PyPI, but are developed on GitHub and other version control systems. The tarball can be downloaded from either location, but PyPI is preferred for the following reasons:

  1. PyPI contains the bare minimum of files to install the package.

    You may notice that the tarball you download from PyPI does not have the same checksum as the tarball you download from GitHub. When a developer uploads a new release to PyPI, it doesn't contain every file in the repository, only the files necessary to install the package. PyPI tarballs are therefore smaller.

  2. PyPI is the official source for package managers like pip.

    Let's be honest, pip is much more popular than Spack. If the GitHub tarball contains a file not present in the PyPI tarball that causes a bug, the developers may not realize this for quite some time. If the bug was in a file contained in the PyPI tarball, users would notice the bug much more quickly.

  3. GitHub release may be a beta version.

    When a developer releases a new version of a package on GitHub, it may not be intended for most users. Until that release also makes its way to PyPI, it should be assumed that the release is not yet ready for general use.

  4. The checksum for a GitHub release may change.

    Unfortunately, some developers have a habit of patching releases without incrementing the version number. This results in a change in tarball checksum. Package managers like Spack that use checksums to verify the integrity of a download tarball grind to a halt when the checksum for a known version changes. Most of the time, the change is intentional, and contains a needed bug fix. However, sometimes the change indicates a download source that has been compromised, and a tarball that contains a virus. If this happens, you must contact the developers to determine which is the case. PyPI is nice because it makes it physically impossible to re-release the same version of a package with a different checksum.

There are some reasons to prefer downloading from GitHub:

  1. The GitHub tarball may contain unit tests

    As previously mentioned, the PyPI tarball contains the bare minimum of files to install the package. Unless explicitly specified by the developers, it will not contain development files like unit tests. If you desire to run the unit tests during installation, you should use the GitHub tarball instead.

  2. Spack does not yet support spack versions and spack checksum with PyPI URLs

    These commands work just fine with GitHub URLs. This is a minor annoyance, not a reason to prefer GitHub over PyPI.

If you really want to run these unit tests, no one will stop you from submitting a PR for a new package that downloads from GitHub.

Build system dependencies

There are a few dependencies common to the PythonPackage build system.

Python

Obviously, every PythonPackage needs Python at build-time to run python setup.py build && python setup.py install. Python is also needed at run-time if you want to import the module. Due to backwards incompatible changes between Python 2 and 3, it is very important to specify which versions of Python are supported. If the documentation mentions that Python 3 is required, this can be specified as:

depends_on('python@3:', type=('build', 'run')

If Python 2 is required, this would look like:

depends_on('python@:2', type=('build', 'run')

If Python 2.7 is the only version that works, you can use:

depends_on('python@2.7:2.8', type=('build', 'run')

The documentation may not always specify supported Python versions. Another place to check is in the setup.py file. Look for a line containing python_requires. An example from py-numpy looks like:

python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*'

More commonly, you will find a version check at the top of the file:

if sys.version_info[:2] < (2, 7) or (3, 0) <= sys.version_info[:2] < (3, 4):
    raise RuntimeError("Python version 2.7 or >= 3.4 required.")

This can be converted to Spack's spec notation like so:

depends_on('python@2.7:2.8,3.4:', type=('build', 'run'))
setuptools

Originally, the Python language had a single build system called distutils, which is built into Python. Distutils provided a common framework for package authors to describe their project and how it should be built. However, distutils was not without limitations. Most notably, there was no way to list a project's dependencies with distutils. Along came setuptools, a non-builtin build system designed to overcome the limitations of distutils. Both projects use a similar API, making the transition easy while adding much needed functionality. Today, setuptools is used in around 75% of the Python packages in Spack.

Since setuptools isn't built-in to Python, you need to add it as a dependency. To determine whether or not a package uses setuptools, search the file for an import statement like:

import setuptools

or:

from setuptools import setup

Some packages are designed to work with both setuptools and distutils, so you may find something like:

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

This uses setuptools if available, and falls back to distutils if not. In this case, you would still want to add a setuptools dependency, as it offers us more control over the installation.

Unless specified otherwise, setuptools is usually a build-only dependency. That is, it is needed to install the software, but is not needed at run-time. This can be specified as:

depends_on('py-setuptools', type='build')
cython

Compared to compiled languages, interpreted languages like Python can be quite a bit slower. To work around this, some Python developers rewrite computationally demanding sections of code in C, a process referred to as "cythonizing". In order to build these package, you need to add a build dependency on cython:

depends_on('py-cython', type='build')

Look for references to "cython" in the setup.py to determine whether or not this is necessary. Cython may be optional, but even then you should list it as a required dependency. Spack is designed to compile software, and is meant for HPC facilities where speed is crucial. There is no reason why someone would not want an optimized version of a library instead of the pure-Python version.

Python dependencies

When you install a package with pip, it reads the setup.py file in order to determine the dependencies of the package. If the dependencies are not yet installed, pip downloads them and installs them for you. This may sound convenient, but Spack cannot rely on this behavior for two reasons:

  1. Spack needs to be able to install packages on air-gapped networks.

    If there is no internet connection, pip can't download the package dependencies. By explicitly listing every dependency in the package.py, Spack knows what to download ahead of time.

  2. Duplicate installations of the same dependency may occur.

    Spack supports activation of Python extensions, which involves symlinking the package installation prefix to the Python installation prefix. If your package is missing a dependency, that dependency will be installed to the installation directory of the same package. If you try to activate the package + dependency, it may cause a problem if that package has already been activated.

For these reasons, you must always explicitly list all dependencies. Although the documentation may list the package's dependencies, often the developers assume people will use pip and won't have to worry about it. Always check the setup.py to find the true dependencies.

If the package relies on distutils, it may not explicitly list its dependencies. Check for statements like:

try:
    import numpy
except ImportError:
    raise ImportError("numpy must be installed prior to installation")

Obviously, this means that py-numpy is a dependency.

If the package uses setuptools, check for the following clues:

  • install_requires

    These packages are required for installation.

  • extra_requires

    These packages are optional dependencies that enable additional functionality. You should add a variant that optionally adds these dependencies.

  • test_requires

    These are packages that are required to run the unit tests for the package. These dependencies can be specified using the type='test' dependency type.

In the root directory of the package, you may notice a requirements.txt file. It may look like this file contains a list of all of the package's dependencies. Don't be fooled. This file is used by tools like Travis to install the pre-requisites for the package... and a whole bunch of other things. It often contains dependencies only needed for unit tests, like:

  • mock

  • nose

  • pytest

It can also contain dependencies for building the documentation, like sphinx. If you can't find any information about the package's dependencies, you can take a look in requirements.txt, but be sure not to add test or documentation dependencies.

setuptools

Setuptools is a bit of a special case. If a package requires setuptools at run-time, how do they express this? They could add it to install_requires, but setuptools is imported long before this and needed to read this line. And since you can't install the package without setuptools, the developers assume that setuptools will already be there, so they never mention when it is required. We don't want to add run-time dependencies if they aren't needed, so you need to determine whether or not setuptools is needed. Grep the installation directory for any files containing a reference to setuptools or pkg_resources. Both modules come from py-setuptools. pkg_resources is particularly common in scripts in prefix/bin.

Passing arguments to setup.py

The default build and install phases should be sufficient to install most packages. However, you may want to pass additional flags to either phase.

You can view the available options for a particular phase with:

$ python setup.py <phase> --help

Each phase provides a <phase_args> function that can be used to pass arguments to that phase. For example, py-numpy adds:

def build_args(self, spec, prefix):
    args = []

    # From NumPy 1.10.0 on it's possible to do a parallel build.
    if self.version >= Version('1.10.0'):
        # But Parallel build in Python 3.5+ is broken.  See:
        # https://github.com/spack/spack/issues/7927
        # https://github.com/scipy/scipy/issues/7112
        if spec['python'].version < Version('3.5'):
            args = ['-j', str(make_jobs)]

    return args

Testing

PythonPackage provides a couple of options for testing packages.

Import tests

Just because a package successfully built does not mean that it built correctly. The most reliable test of whether or not the package was correctly installed is to attempt to import all of the modules that get installed. To get a list of modules, run the following command in the source directory:

$ python
>>> import setuptools
>>> setuptools.find_packages()
['numpy', 'numpy._build_utils', 'numpy.compat', 'numpy.core', 'numpy.distutils', 'numpy.doc', 'numpy.f2py', 'numpy.fft', 'numpy.lib', 'numpy.linalg', 'numpy.ma', 'numpy.matrixlib', 'numpy.polynomial', 'numpy.random', 'numpy.testing', 'numpy.core.code_generators', 'numpy.distutils.command', 'numpy.distutils.fcompiler']

Large, complex packages like numpy will return a long list of packages, while other packages like six will return an empty list. py-six installs a single six.py file. In Python packaging lingo, a "package" is a directory containing files like:

foo/__init__.py
foo/bar.py
foo/baz.py

whereas a "module" is a single Python file. Since find_packages only returns packages, you'll have to determine the correct module names yourself. You can now add these packages and modules to the package like so:

import_modules = ['six']

When you run spack install --test=root py-six, Spack will attempt to import the six module after installation.

These tests most often catch missing dependencies and non-RPATHed libraries. Make sure not to add modules/packages containing the word "test", as these likely won't end up in installation directory.

Unit tests

The package you want to install may come with additional unit tests. By default, Spack runs:

$ python setup.py test

if it detects that the setup.py file supports a test phase. You can add additional build-time or install-time tests by overriding test and installtest, respectively. For example, py-numpy adds:

def install_test(self):
     with working_dir('..'):
         python('-c', 'import numpy; numpy.test("full", verbose=2)')

Setup file in a sub-directory

In order to be compatible with package managers like pip, the package is required to place its setup.py in the root of the tarball. However, not every Python package cares about pip or PyPI. If you are installing a package that is not hosted on PyPI, you may find that it places its setup.py in a sub-directory. To handle this, add the directory containing setup.py to the package like so:

build_directory = 'source'

Alternate names for setup.py

As previously mentioned, packages need to call their setup script setup.py in order to be compatible with package managers like pip. However, some packages like py-meep and py-adios come with multiple setup scripts, one for a serial build and another for a parallel build. You can override the default name to use like so:

def setup_file(self):
    return 'setup-mpi.py' if '+mpi' in self.spec else 'setup.py'

PythonPackage vs. packages that use Python

There are many packages that make use of Python, but packages that depend on Python are not necessarily PythonPackages.

Choosing a build system

First of all, you need to select a build system. spack create usually does this for you, but if for whatever reason you need to do this manually, choose PythonPackage if and only if the package contains a setup.py file.

Choosing a package name

Selecting the appropriate package name is a little more complicated than choosing the build system. By default, spack create will prepend py- to the beginning of the package name if it detects that the package uses the PythonPackage build system. However, there are occasionally packages that use PythonPackage that shouldn't start with py-. For example:

  • busco

  • easybuild

  • httpie

  • mercurial

  • scons

  • snakemake

The thing these packages have in common is that they are command-line tools that just so happen to be written in Python. Someone who wants to install mercurial with Spack isn't going to realize that it is written in Python, and they certainly aren't going to assume the package is called py-mercurial. For this reason, we manually renamed the package to mercurial.

Likewise, there are occasionally packages that don't use the PythonPackage build system but should still be prepended with py-. For example:

  • py-genders

  • py-py2cairo

  • py-pygobject

  • py-pygtk

  • py-pyqt

  • py-pyserial

  • py-sip

  • py-xpyb

These packages are primarily used as Python libraries, not as command-line tools. You may see C/C++ packages that have optional Python language-bindings, such as:

  • antlr

  • cantera

  • conduit

  • pagmo

  • vtk

Don't prepend these kind of packages with py-. When in doubt, think about how this package will be used. Is it primarily a Python library that will be imported in other Python scripts? Or is it a command-line tool, or C/C++/Fortran program with optional Python modules? The former should be prepended with py-, while the latter should not.

extends vs. depends_on

This is very similar to the naming dilemma above, with a slight twist. As mentioned in the Packaging Guide, extends and depends_on are very similar, but extends adds the ability to activate the package. Activation involves symlinking everything in the installation prefix of the package to the installation prefix of Python. This allows the user to import a Python module without having to add that module to PYTHONPATH.

When deciding between extends and depends_on, the best rule of thumb is to check the installation prefix. If Python libraries are installed to prefix/lib/python2.7/site-packages (where 2.7 is the MAJOR.MINOR version of Python you used to install the package), then you should use extends. If Python libraries are installed elsewhere or the only files that get installed reside in prefix/bin, then don't use extends, as symlinking the package wouldn't be useful.

Alternatives to Spack

PyPI has hundreds of thousands of packages that are not yet in Spack, and pip may be a perfectly valid alternative to using Spack. The main advantage of Spack over pip is its ability to compile non-Python dependencies. It can also build cythonized versions of a package or link to an optimized BLAS/LAPACK library like MKL, resulting in calculations that run orders of magnitude faster. Spack does not offer a significant advantage to other python-management systems for installing and using tools like flake8 and sphinx. But if you need packages with non-Python dependencies like numpy and scipy, Spack will be very valuable to you.

Anaconda is another great alternative to Spack, and comes with its own conda package manager. Like Spack, Anaconda is capable of compiling non-Python dependencies. Anaconda contains many Python packages that are not yet in Spack, and Spack contains many Python packages that are not yet in Anaconda. The main advantage of Spack over Anaconda is its ability to choose a specific compiler and BLAS/LAPACK or MPI library. Spack also has better platform support for supercomputers. On the other hand, Anaconda offers Windows support.

External documentation

For more information on Python packaging, see: https://packaging.python.org/

RPackage

Like Python, R has its own built-in build system.

The R build system is remarkably uniform and well-tested. This makes it one of the easiest build systems to create new Spack packages for.

Phases

The RPackage base class has a single phase:

  1. install - install the package

By default, this phase runs the following command:

$ R CMD INSTALL --library=/path/to/installation/prefix/rlib/R/library .

Finding R packages

The vast majority of R packages are hosted on CRAN - The Comprehensive R Archive Network. If you are looking for a particular R package, search for "CRAN <package-name>" and you should quickly find what you want. If it isn't on CRAN, try Bioconductor, another common R repository.

For the purposes of this tutorial, we will be walking through r-caret as an example. If you search for "CRAN caret", you will quickly find what you are looking for at https://cran.r-project.org/web/packages/caret/index.html. If you search for "Package source", you will find the download URL for the latest release. Use this URL with spack create to create a new package.

Package name

The first thing you'll notice is that Spack prepends r- to the front of the package name. This is how Spack separates R package extensions from the rest of the packages in Spack. Without this, we would end up with package name collisions more frequently than we would like. For instance, there are already packages for both:

  • ape and r-ape

  • curl and r-curl

  • gmp and r-gmp

  • jpeg and r-jpeg

  • openssl and r-openssl

  • uuid and r-uuid

  • xts and r-xts

Many popular programs written in C/C++ are later ported to R as a separate project.

Description

The first thing you'll need to add to your new package is a description. The top of the homepage for caret lists the following description:

caret: Classification and Regression Training

Misc functions for training and plotting classification and regression models.

You can either use the short description (first line), long description (second line), or both depending on what you feel is most appropriate.

Homepage

If you look at the bottom of the page, you'll see:

Linking:

Please use the canonical form https://CRAN.R-project.org/package=caret to link to this page.

Please uphold the wishes of the CRAN admins and use https://CRAN.R-project.org/package=caret as the homepage instead of https://cran.r-project.org/web/packages/caret/index.html. The latter may change without notice.

URL

As previously mentioned, the download URL for the latest release can be found by searching "Package source" on the homepage.

List URL

CRAN maintains a single webpage containing the latest release of every single package: https://cran.r-project.org/src/contrib/

Of course, as soon as a new release comes out, the version you were using in your package is no longer available at that URL. It is moved to an archive directory. If you search for "Old sources", you will find: https://cran.r-project.org/src/contrib/Archive/caret

If you only specify the URL for the latest release, your package will no longer be able to fetch that version as soon as a new release comes out. To get around this, add the archive directory as a list_url.

Build system dependencies

As an extension of the R ecosystem, your package will obviously depend on R to build and run. Normally, we would use depends_on to express this, but for R packages, we use extends. extends is similar to depends_on, but adds an additional feature: the ability to "activate" the package by symlinking it to the R installation directory. Since every R package needs this, the RPackage base class contains:

extends('r')
depends_on('r', type=('build', 'run'))

Take a close look at the homepage for caret. If you look at the "Depends" section, you'll notice that caret depends on "R (≥ 2.10)". You should add this to your package like so:

depends_on('r@2.10:', type=('build', 'run'))

R dependencies

R packages are often small and follow the classic Unix philosophy of doing one thing well. They are modular and usually depend on several other packages. You may find a single package with over a hundred dependencies. Luckily, CRAN packages are well-documented and list all of their dependencies in the following sections:

  • Depends

  • Imports

  • LinkingTo

As far as Spack is concerned, all 3 of these dependency types correspond to type=('build', 'run'), so you don't have to worry about them. If you are curious what they mean, https://github.com/spack/spack/issues/2951 has a pretty good summary:

Depends is required and will cause those R packages to be attached, that is, their APIs are exposed to the user. Imports loads packages so that the package importing these packages can access their APIs, while not being exposed to the user. When a user calls library(foo) s/he attaches package foo and all of the packages under Depends. Any function in one of these package can be called directly as bar(). If there are conflicts, user can also specify pkgA::bar() and pkgB::bar() to distinguish between them. Historically, there was only Depends and Suggests, hence the confusing names. Today, maybe Depends would have been named Attaches.

The LinkingTo is not perfect and there was recently an extensive discussion about API/ABI among other things on the R-devel mailing list among very skilled R developers:

Some packages also have a fourth section:

  • Suggests

These are optional, rarely-used dependencies that a user might find useful. You should NOT add these dependencies to your package. R packages already have enough dependencies as it is, and adding optional dependencies can really slow down the concretization process. They can also introduce circular dependencies.

Non-R dependencies

Some packages depend on non-R libraries for linking. Check out the r-stringi package for an example: https://CRAN.R-project.org/package=stringi. If you search for the text "SystemRequirements", you will see:

ICU4C (>= 52, optional)

This is how non-R dependencies are listed. Make sure to add these dependencies. The default dependency type should suffice.

Passing arguments to the installation

Some R packages provide additional flags that can be passed to R CMD INSTALL, often to locate non-R dependencies. r-rmpi is an example of this, and flags for linking to an MPI library. To pass these to the installation command, you can override configure_args like so:

def configure_args(self, spec, prefix):
    mpi_name = spec['mpi'].name

    # The type of MPI. Supported values are:
    # OPENMPI, LAM, MPICH, MPICH2, or CRAY
    if mpi_name == 'openmpi':
        Rmpi_type = 'OPENMPI'
    elif mpi_name == 'mpich':
        Rmpi_type = 'MPICH2'
    else:
        raise InstallError('Unsupported MPI type')

    return [
        '--with-Rmpi-type={0}'.format(Rmpi_type),
        '--with-mpi={0}'.format(spec['mpi'].prefix),
    ]

There is a similar configure_vars function that can be overridden to pass variables to the build.

Alternatives to Spack

CRAN hosts over 10,000 R packages, most of which are not in Spack. Many users may not need the advanced features of Spack, and may prefer to install R packages the normal way:

$ R
> install.packages("ggplot2")

R will search CRAN for the ggplot2 package and install all necessary dependencies for you. If you want to update all installed R packages to the latest release, you can use:

> update.packages(ask = FALSE)

This works great for users who have internet access, but those on an air-gapped cluster will find it easier to let Spack build a download mirror and install these packages for you.

Where Spack really shines is its ability to install non-R dependencies and link to them properly, something the R installation mechanism cannot handle.

External documentation

For more information on installing R packages, see: https://stat.ethz.ch/R-manual/R-devel/library/utils/html/INSTALL.html

RubyPackage

Like Perl, Python, and R, Ruby has its own build system for installing Ruby gems.

This build system is a work-in-progress. See https://github.com/spack/spack/pull/3127 for more information.

CudaPackage

Different from other packages, CudaPackage does not represent a build system. Instead its goal is to simplify and unify usage of CUDA in other packages.

Provided variants and dependencies

CudaPackage provides cuda variant (default to off) to enable/disable CUDA, and cuda_arch variant to optionally specify the architecture. It also declares dependencies on the CUDA package depends_on('cuda@...') based on the architecture as well as specifies conflicts for certain compiler versions.

Usage

In order to use it, just add another base class to your package, for example:

class MyPackage(CMakePackage, CudaPackage):
    ...
    def cmake_args(self):
        spec = self.spec
        if '+cuda' in spec:
            options.append('-DWITH_CUDA=ON')
            cuda_arch = spec.variants['cuda_arch'].value
            if cuda_arch is not None:
                options.append('-DCUDA_FLAGS=-arch=sm_{0}'.format(cuda_arch[0]))
        else:
            options.append('-DWITH_CUDA=OFF')

IntelPackage

Intel packages in Spack

Spack can install and use several software development products offered by Intel. Some of these are available under no-cost terms, others require a paid license. All share the same basic steps for configuration, installation, and, where applicable, license management. The Spack Python class IntelPackage implements these steps.

Spack interacts with Intel tools in several routes, like it does for any other package:

  1. Accept system-provided tools after you declare them to Spack as external packages.

  1. Install the products for you as internal packages in Spack.

  1. Use the packages, regardless of installation route, to install what we'll call client packages for you, this being Spack's primary purpose.

An auxiliary route follows from route 2, as it would for most Spack packages, namely:

  1. Make Spack-installed Intel tools available outside of Spack for ad-hoc use, typically through Spack-managed modulefiles.

This document covers routes 1 through 3.

Packages under no-cost license

Intel's standalone performance library products, notably MKL and MPI, are available for use under a simplified license since 2017 [fn1]. They are packaged in Spack as:

  • intel-mkl -- Math Kernel Library (linear algebra and FFT),

  • intel-mpi -- The Intel-MPI implementation (derived from MPICH),

  • intel-ipp -- Primitives for image-, signal-, and data-processing,

  • intel-daal -- Machine learning and data analytics.

Some earlier versions of these libraries were released under a paid license. For these older versions, the license must be available at installation time of the products and during compilation of client packages.

The library packages work well with the Intel compilers but do not require them -- those packages can just as well be used with other compilers. The Intel compiler invocation commands offer custom options to simplify linking Intel libraries (sometimes considerably), but Spack always uses fairly explicit linkage anyway.

Licensed packages

Intel's core software development products that provide compilers, analyzers, and optimizers do require a paid license. In Spack, they are packaged as:

  • intel-parallel-studio -- the entire suite of compilers and libraries,

  • intel -- a subset containing just the compilers and the Intel-MPI runtime [fn2].

The license is needed at installation time and to compile client packages, but never to merely run any resulting binaries. The license status for a given Spack package is normally specified in the package code through directives like license_required (see Licensed software). For the Intel packages, however, the class code provides these directives (in exchange of forfeiting a measure of OOP purity) and takes care of idiosyncasies like historic version dependence.

The libraries that are provided in the standalone packages are also included in the all-encompassing intel-parallel-studio. To complicate matters a bit, that package is sold in 3 "editions", of which only the upper-tier cluster edition supports compiling MPI applications, and hence only that edition can provide the mpi virtual package. (As mentioned [fn2], all editions provide support for running MPI applications.)

The edition forms the leading part of the version number for Spack's intel* packages discussed here. This differs from the primarily numeric version numbers seen with most other Spack packages. For example, we have:

$ spack info intel-parallel-studio
...
Preferred version:
    professional.2018.3    http:...

Safe versions:
    professional.2018.3    http:...
    ...
    composer.2018.3        http:...
    ...
    cluster.2018.3         http:...
    ...
...

The full studio suite, capable of compiling MPI applications, currently requires about 12 GB of disk space when installed (see section Install steps for packages with compilers and libraries for detailed instructions). If you need to save disk space or installation time, you could install the intel compilers-only subset (0.6 GB) and just the library packages you need, for example intel-mpi (0.5 GB) and intel-mkl (2.5 GB).

Unrelated packages

The following packages do not use the Intel installer and are not in class IntelPackage that is discussed here:

  • intel-gpu-tools -- Test suite and low-level tools for the Linux Direct Rendering Manager

  • intel-mkl-dnn -- Math Kernel Library for Deep Neural Networks (CMakePackage)

  • intel-xed -- X86 machine instructions encoder/decoder

  • intel-tbb -- Standalone version of Intel Threading Building Blocks. Note that a TBB runtime version is included with intel-mkl, and development versions are provided by the packages intel-parallel-studio (all editions) and its intel subset.

Configuring Spack to use Intel licenses

If you wish to integrate licensed Intel products into Spack as external packages (route 1 above) we assume that their license configuration is in place and is working [fn3]. In this case, skip to section Integration of Intel tools installed external to Spack.

If you plan to have Spack install licensed products for you (route 2 above), the Intel product installer that Spack will run underneath must have access to a license that is either provided by a license server or as a license file. The installer may be able to locate a license that is already configured on your system. If it cannot, you must configure Spack to provide either the server location or the license file.

For authoritative information on Intel licensing, see:

Pointing to an existing license server

Installing and configuring a license server is outside the scope of Spack. We assume that:

  • Your system administrator has a license server running.

  • The license server offers valid licenses for the Intel packages of interest.

  • You can access these licenses under the user id running Spack.

Be aware of the difference between (a) installing and configuring a license server, and (b) configuring client software to use a server's so-called floating licenses. We are concerned here with (b) only. The process of obtaining a license from a server for temporary use is called "checking out a license". For that, a client application such as the Intel package installer or a compiler needs to know the host name and port number of one or more license servers that it may query [fn4].

Follow one of three methods to point client software to a floating license server. Ideally, your license administrator will already have implemented one that can be used unchanged in Spack: Look for the environment variable INTEL_LICENSE_FILE or for files /opt/intel/licenses/*.lic that contain:

SERVER  hostname  hostid_or_ANY  portnum
USE_SERVER

The relevant tokens, among possibly others, are the USE_SERVER line, intended specifically for clients, and one or more SERVER lines above it which give the network address.

If you cannot find pre-existing /opt/intel/licenses/*.lic files and the INTEL_LICENSE_FILE environment variable is not set (even after you loaded any relevant modulefiles), ask your license administrator for the server address(es) and place them in a "global" license file within your Spack directory tree as shown below).

Installing a standalone license file

If you purchased a user-specific license, follow Intel's instructions to "activate" it for your serial number, then download the resulting license file. If needed, request to have the file re-sent to you.

Intel's license files are text files that contain tokens in the proprietary "FLEXlm" format and whose name ends in .lic. Intel installers and compilers look for license files in several locations when they run. Place your license by one of the following means, in order of decreasing preference:

  • Default directory

    Install your license file in the directory /opt/intel/licenses/ if you have write permission to it. This directory is inspected by all Intel tools and is therefore preferred, as no further configuration will be needed. Create the directory if it does not yet exist. For the file name, either keep the downloaded name or use another suitably plain yet descriptive name that ends in .lic. Adjust file permissions for access by licensed users.

  • Directory given in environment variable

    If you cannot use the default directory, but your system already has set the environment variable INTEL_LICENSE_FILE independent from Spack [fn5], then, if you have the necessary write permissions, place your license file in one of the directories mentioned in this environment variable. Adjust file permissions to match licensed users.

    ちなみに

    If your system has not yet set and used the environment variable INTEL_LICENSE_FILE, you could start using it with the spack install stage of licensed tools and subsequent client packages. You would, however, be in a bind to always set that variable in the same manner, across updates and re-installations, and perhaps accommodate additions to it. As this may be difficult in the long run, we recommend that you do not attempt to start using the variable solely for Spack.

  • Spack-managed file

    The first time Spack encounters an Intel package that requires a license, it will initialize a Spack-global Intel-specific license file for you, as a template with instructional comments, and bring up an editor [fn6]. Spack will do this even if you have a working license elsewhere on the system.

    • To proceed with an externally configured license, leave the newly templated file as is (containing comments only) and close the editor. You do not need to touch the file again.

    • To configure your own standalone license, copy the contents of your downloaded license file into the opened file, save it, and close the editor.

    • To use a license server (i.e., a floating network license) that is not already configured elsewhere on the system, supply your license server address(es) in the form of SERVER and USE_SERVER lines at the beginning of the file [fn7], in the format shown in section Pointing to an existing license server. Save the file and close the editor.

    To revisit and manually edit this file, such as prior to a subsequent installation attempt, find it at $SPACK_ROOT/etc/spack/licenses/intel/intel.lic .

    Spack will place symbolic links to this file in each directory where licensed Intel binaries were installed. If you kept the template unchanged, Intel tools will simply ignore it.

Integration of Intel tools installed external to Spack

This section discusses route 1 from the introduction.

A site that already uses Intel tools, especially licensed ones, will likely have some versions already installed on the system, especially at a time when Spack is just being introduced. It will be useful to make such previously installed tools available for use by Spack as they are. How to do this varies depending on the type of the tools:

Integrating external compilers

For Spack to use external Intel compilers, you must tell it both where to find them and when to use them. The present section documents the "where" aspect, involving compilers.yaml and, in most cases, long absolute paths. The "when" aspect actually relates to route 3 and requires explicitly stating the compiler as a spec component (in the form foo %intel or foo %intel@compilerversion) when installing client packages or altering Spack's compiler default in packages.yaml. See section Selecting Intel compilers for details.

To integrate a new set of externally installed Intel compilers into Spack follow section Compiler configuration. Briefly, prepare your shell environment like you would if you were to use these compilers normally, i.e., typically by a module load ... or a shell source ... command, then use spack compiler find to make Spack aware of these compilers. This will create a new entry in a suitably scoped and possibly new compilers.yaml file. You could certainly create such a compiler entry manually, but this is error-prone due to the indentation and different data types involved.

The Intel compilers need and use the system's native GCC compiler (gcc on most systems, clang on macOS) to provide certain functionality, notably to support C++. To provide a different GCC compiler for the Intel tools, or more generally set persistent flags for all invocations of the Intel compilers, locate the compilers.yaml entry that defines your Intel compiler, and, using a text editor, change one or both of the following:

  1. At the modules: tag, add a gcc module to the list.

  2. At the flags: tag, add cflags:, cxxflags:, and fflags: key-value entries.

Consult the examples under Compiler configuration and Vendor-Specific Compiler Configuration in the Spack documentation. When done, validate your compiler definition by running spack compiler info intel@compilerversion (replacing compilerversion by the version that you defined).

Be aware that both the GCC integration and persistent compiler flags can also be affected by an advanced third method:

  1. A modulefile that provides the Intel compilers for you could, for the benefit of users outside of Spack, implicitly integrate a specific gcc version via compiler flag environment variables or (hopefully not) via a sneaky extra PATH addition.

Next, visit section Selecting Intel Compilers to learn how to tell Spack to use the newly configured compilers.

Integrating external libraries

Configure external library-type packages (as opposed to compilers) in the files $SPACK_ROOT/etc/spack/packages.yaml or ~/.spack/packages.yaml, following the Spack documentation under External Packages.

Similar to compilers.yaml, the packages.yaml files define a package external to Spack in terms of a Spack spec and resolve each such spec via either the paths or modules tokens to a specific pre-installed package version on the system. Since Intel tools generally need environment variables to interoperate, which cannot be conveyed in a mere paths specification, the modules token will be more sensible to use. It resolves the Spack-side spec to a modulefile generated and managed outside of Spack's purview, which Spack will load internally and transiently when the corresponding spec is called upon to compile client packages.

Unlike for compilers, where spack find compilers [spec] generates an entry in an existing or new compilers.yaml file, Spack does not offer a command to generate an entirely new packages.yaml entry. You must create new entries yourself in a text editor, though the command spack config [--scope=...] edit packages can help with selecting the proper file. See section Configuration Scopes for an explanation about the different files and section Build customization for specifics and examples for packages.yaml files.

The following example integrates packages embodied by hypothetical external modulefiles intel-mkl/18/... into Spack as packages intel-mkl@...:

$ spack config edit packages

Make sure the file begins with:

packages:

Adapt the following example. Be sure to maintain the indentation:

# other content ...

  intel-mkl:
    modules:
      intel-mkl@2018.2.199  arch=linux-centos6-x86_64:  intel-mkl/18/18.0.2
      intel-mkl@2018.3.222  arch=linux-centos6-x86_64:  intel-mkl/18/18.0.3

The version numbers for the intel-mkl specs defined here correspond to file and directory names that Intel uses for its products because they were adopted and declared as such within Spack's package repository. You can inspect the versions known to your current Spack installation by:

$ spack info intel-mkl

Using the same version numbers for external packages as for packages known internally is useful for clarity, but not strictly necessary. Moreover, with a packages.yaml entry, you can go beyond internally known versions.

Note that the Spack spec in the example does not contain a compiler specification. This is intentional, as the Intel library packages can be used unmodified with different compilers.

A slightly more advanced example illustrates how to provide variants and how to use the buildable: False directive to prevent Spack from installing other versions or variants of the named package through its normal internal mechanism.

packages:
  intel-parallel-studio:
    modules:
      intel-parallel-studio@cluster.2018.2.199 +mkl+mpi+ipp+tbb+daal  arch=linux-centos6-x86_64:  intel/18/18.0.2
      intel-parallel-studio@cluster.2018.3.222 +mkl+mpi+ipp+tbb+daal  arch=linux-centos6-x86_64:  intel/18/18.0.3
    buildable: False

One additional example illustrates the use of paths: instead of modules:, useful when external modulefiles are not available or not suitable:

packages:
  intel-parallel-studio:
    paths:
      intel-parallel-studio@cluster.2018.2.199 +mkl+mpi+ipp+tbb+daal: /opt/intel
      intel-parallel-studio@cluster.2018.3.222 +mkl+mpi+ipp+tbb+daal: /opt/intel
    buildable: False

Note that for the Intel packages discussed here, the directory values in the paths: entries must be the high-level and typically version-less "installation directory" that has been used by Intel's product installer. Such a directory will typically accumulate various product versions. Amongst them, Spack will select the correct version-specific product directory based on the @version spec component that each path is being defined for.

For further background and details, see External Packages.

Installing Intel tools within Spack

This section discusses route 2 from the introduction.

When a system does not yet have Intel tools installed already, or the installed versions are undesirable, Spack can install these tools like any regular Spack package for you and, with appropriate pre- and post-install configuration, use its compilers and/or libraries to install client packages.

Install steps for packages with compilers and libraries

The packages intel-parallel-studio and intel (which is a subset of the former) are many-in-one products that contain both compilers and a set of library packages whose scope depends on the edition. Because they are general products geared towards shell environments, it can be somewhat involved to integrate these packages at their full extent into Spack.

Note: To install library-only packages like intel-mkl, intel-mpi, and intel-daal follow the next section instead.

  1. Review the section Configuring spack to use intel licenses.

  1. To install a version of intel-parallel-studio that provides Intel compilers at a version that you have not yet declared in Spack, the following preparatory steps are recommended:

    1. Determine the compiler spec that the new intel-parallel-studio package will provide, as follows: From the package version, combine the last two digits of the version year, a literal "0" (zero), and the version component that immediately follows the year.

      Package version

      Compiler spec provided

      intel-parallel-studio@edition.YYyy.u

      intel@yy.0.u

      Example: The package intel-parallel-studio@cluster.2018.3 will provide the compiler with spec intel@18.0.3.

    1. Add a new compiler section with the newly anticipated version at the end of a compilers.yaml file in a suitable scope. For example, run:

      $ spack config --scope=user/linux edit compilers
      

      and append a stub entry:

      - compiler:
          target:     x86_64
          operating_system:   centos6
          modules:    []
          spec:       intel@18.0.3
          paths:
            cc:       stub
            cxx:      stub
            f77:      stub
            fc:       stub
      

      Replace 18.0.3 with the version that you determined in the preceeding step. The contents under paths: do not matter yet.

    You are right to ask: "Why on earth is that necessary?" [fn8]. The answer lies in Spack striving for strict compiler consistency. Consider what happens without such a pre-declared compiler stub: Say, you ask Spack to install a particular version intel-parallel-studio@edition.V. Spack will apply an unrelated compiler spec to concretize and install your request, resulting in intel-parallel-studio@edition.V %X. That compiler %X is not going to be the version that this new package itself provides. Rather, it would typically be %gcc@... in a default Spack installation or possibly indeed %intel@..., but at a version that precedes V.

    The problem comes to the fore as soon as you try to use any virtual mkl or mpi packages that you would expect to now be provided by intel-parallel-studio@edition.V. Spack will indeed see those virtual packages, but only as being tied to the compiler that the package intel-parallel-studio@edition.V was concretized with at installation. If you were to install a client package with the new compilers now available to you, you would naturally run spack install foo +mkl %intel@V, yet Spack will either complain about mkl%intel@V being missing (because it only knows about mkl%X) or it will go and attempt to install another instance of intel-parallel-studio@edition.V %intel@V so as to match the compiler spec %intel@V that you gave for your client package foo. This will be unexpected and will quickly get annoying because each reinstallation takes up time and extra disk space.

    To escape this trap, put the compiler stub declaration shown here in place, then use that pre-declared compiler spec to install the actual package, as shown next. This approach works because during installation only the package's own self-sufficient installer will be used, not any compiler.

  2. Verify that the compiler version provided by the new studio version would be used as expected if you were to compile a client package:

    $ spack spec zlib %intel
    

    If the version does not match, explicitly state the anticipated compiler version, e.g.:

    $ spack spec zlib %intel@18.0.3
    

    if there are problems, review and correct the compiler's compilers.yaml entry, be it still in stub form or already complete (as it would be for a re-installation).

  3. Install the new studio package using Spack's regular install command. It may be wise to provide the anticipated compiler (see above) as an explicit concretization element:

    $ spack install intel-parallel-studio@cluster.2018.3  %intel@18.0.3
    
  4. Follow the same steps as under Integrating external compilers to tell Spack the minutiae for actually using those compilers with client packages. If you placed a stub entry in a compilers.yaml file, now is the time to edit it and fill in the particulars.

    • Under paths:, give the full paths to the actual compiler binaries (icc, ifort, etc.) located within the Spack installation tree, in all their unsightly length [fn9].

      To determine the full path to the C compiler, adapt and run:

      $ find `spack location -i intel-parallel-studio@cluster.2018.3` \
             -name icc -type f -ls
      

      If you get hits for both intel64 and ia32, you almost certainly will want to use the intel64 variant. The icpc and ifort compilers will be located in the same directory as icc.

    • Use the modules: and/or cflags: tokens to specify a suitable accompanying gcc version to help pacify picky client packages that ask for C++ standards more recent than supported by your system-provided gcc and its libstdc++.so.

    • To set the Intel compilers for default use in Spack, instead of the usual %gcc, follow section Selecting Intel compilers.

ちなみに

Compiler packages like intel-parallel-studio can easily be above 10 GB in size, which can tax the disk space available for temporary files on small, busy, or restricted systems (like virtual machines). The Intel installer will stop and report insufficient space as:

==> './install.sh' '--silent' 'silent.cfg'
...
Missing critical prerequisite
-- Not enough disk space

As first remedy, clean Spack's existing staging area:

$ spack clean --stage

then retry installing the large package. Spack normally cleans staging directories but certain failures may prevent it from doing so.

If the error persists, tell Spack to use an alternative location for temporary files:

  1. Run df -h to identify an alternative location on your system.

  2. Tell Spack to use that location for staging. Do one of the following:

    • Run Spack with the environment variable TMPDIR altered for just a single command. For example, to use your $HOME directory:

      $ TMPDIR="$HOME/spack-stage"  spack install ....
      

      This example uses Bourne shell syntax. Adapt for other shells as needed.

    • Alternatively, customize Spack's build_stage configuration setting.

      $ spack config edit config
      

      Append:

      config:
        build_stage:
        - /home/$user/spack-stage
      

      Do not duplicate the config: line if it already is present. Adapt the location, which here is the same as in the preceeding example.

  3. Retry installing the large package.

Install steps for library-only packages

To install library-only packages like intel-mkl, intel-mpi, and intel-daal follow the steps given here. For packages that contain a compiler, follow the previous section instead.

  1. For pre-2017 product releases, review the section Configuring Spack to use Intel licenses.

  2. Inspect the package spec. Specify an explicit compiler if necessary, e.g.:

    $ spack spec intel-mpi@2018.3.199
    $ spack spec intel-mpi@2018.3.199  %intel
    

    Check that the package will use the compiler flavor and version that you expect.

  3. Install the package normally within Spack. Use the same spec as in the previous command, i.e., as general or as specific as needed:

    $ spack install intel-mpi@2018.3.199
    $ spack install intel-mpi@2018.3.199  %intel@18
    
  4. To prepare the new packages for use with client packages, follow Selecting libraries to satisfy virtual packages.

Debug notes
  • You can trigger a wall of additional diagnostics using Spack options, e.g.:

    $ spack --debug -v install intel-mpi
    

    The --debug option can also be useful while installing client packages (see below) to confirm the integration of the Intel tools in Spack, notably MKL and MPI.

  • The .spack/ subdirectory of an installed IntelPackage will contain, besides Spack's usual archival items, a copy of the silent.cfg file that was passed to the Intel installer:

    $ grep COMPONENTS ...intel-mpi...<hash>/.spack/silent.cfg
    COMPONENTS=ALL
    
  • If an installation error occurs, Spack will normally clean up and remove a partially installed target directory. You can direct Spack to keep it using --keep-prefix, e.g.:

    $ spack install --keep-prefix  intel-mpi
    

    You must, however, remove such partial installations prior to subsequent installation attempts. Otherwise, the Intel installer will behave incorrectly.

Using Intel tools in Spack to install client packages

Finally, this section pertains to route 3 from the introduction.

Once Intel tools are installed within Spack as external or internal packages they can be used as intended for installing client packages.

Selecting Intel compilers

Select Intel compilers to compile client packages, like any compiler in Spack, by one of the following means:

  • Request the Intel compilers explicitly in the client spec, e.g.:

    $ spack install libxc@3.0.0%intel
    
  • Alternatively, request Intel compilers implicitly by concretization preferences. Configure the order of compilers in the appropriate packages.yaml file, under either an all: or client-package-specific entry, in a compiler: list. Consult the Spack documentation for Configuring Package Preferences and Concretization Preferences.

Example: etc/spack/packages.yaml might simply contain:

packages:
  all:
    compiler: [ intel, gcc, ]

To be more specific, you can state partial or full compiler version numbers, for example:

packages:
  all:
    compiler: [ intel@18, intel@17, gcc@4.4.7, gcc@4.9.3, gcc@7.3.0, ]
Selecting libraries to satisfy virtual packages

Intel packages, whether integrated into Spack as external packages or installed within Spack, can be called upon to satisfy the requirement of a client package for a library that is available from different providers. The relevant virtual packages for Intel are blas, lapack, scalapack, and mpi.

In both integration routes, Intel packages can have optional variants which alter the list of virtual packages they can satisfy. For Spack-external packages, the active variants are a combination of the defaults declared in Spack's package repository and the spec it is declared as in packages.yaml. Needless to say, those should match the components that are actually present in the external product installation. Likewise, for Spack-internal packages, the active variants are determined, persistently at installation time, from the defaults in the repository and the spec selected to be installed.

To have Intel packages satisfy virtual package requests for all or selected client packages, edit the packages.yaml file. Customize, either in the all: or a more specific entry, a providers: dictionary whose keys are the virtual packages and whose values are the Spack specs that satisfy the virtual package, in order of decreasing preference. To learn more about the providers: settings, see the Spack tutorial for Configuring Package Preferences and the section Concretization Preferences.

Example: The following fairly minimal example for packages.yaml shows how to exclusively use the standalone intel-mkl package for all the linear algebra virtual packages in Spack, and intel-mpi as the preferred MPI implementation. Other providers can still be chosen on a per-package basis.

packages:
  all:
    providers:
      mpi:       [intel-mpi]
      blas:      [intel-mkl]
      lapack:    [intel-mkl]
      scalapack: [intel-mkl]

If you have access to the intel-parallel-studio@cluster edition, you can use instead:

all:
  providers:
    mpi:       [intel-parallel-studio+mpi]
    # Note: +mpi vs. +mkl
    blas:      [intel-parallel-studio+mkl]
    lapack:    [intel-parallel-studio+mkl]
    scalapack: [intel-parallel-studio+mkl]

If you installed intel-parallel-studio within Spack ("route 2"), make sure you followed the special installation step to ensure that its virtual packages match the compilers it provides.

Using Intel tools as explicit dependency

With the proper installation as detailed above, no special steps should be required when a client package specifically (and thus deliberately) requests an Intel package as dependency, this being one of the target use cases for Spack.

Tips for configuring client packages to use MKL

The Math Kernel Library (MKL) is provided by several Intel packages, currently intel-parallel-studio when variant +mkl is active (it is by default) and the standalone intel-mkl. Because of these different provider packages, a virtual mkl package is declared in Spack.

  • To use MKL-specific APIs in a client package:

    Declare a dependency on mkl, rather than a specific provider like intel-mkl. Declare the dependency either absolutely or conditionally based on variants that your package might have declared:

    # Examples for absolute and conditional dependencies:
    depends_on('mkl')
    depends_on('mkl', when='+mkl')
    depends_on('mkl', when='fftw=mkl')
    

    The MKLROOT environment variable (part of the documented API) will be set during all stages of client package installation, and is available to both the Spack packaging code and the client code.

  • To use MKL as provider for BLAS, LAPACK, or ScaLAPACK:

    The packages that provide mkl also provide the narrower virtual blas, lapack, and scalapack packages. See the relevant Packaging Guide section for an introduction. To portably use these virtual packages, construct preprocessor and linker option strings in your package configuration code using the package functions .headers and .libs in conjunction with utility functions from the following classes:

    ちなみに

    Do not use constructs like .prefix.include or .prefix.lib, with Intel or any other implementation of blas, lapack, and scalapack.

    For example, for an AutotoolsPackage use .libs.ld_flags to transform the library file list into linker options passed to ./configure:

    def configure_args(self):
        args = []
        ...
        args.append('--with-blas=%s' % self.spec['blas'].libs.ld_flags)
        args.append('--with-lapack=%s' % self.spec['lapack'].libs.ld_flags)
        ...
    

    ちなみに

    Even though .ld_flags will return a string of multiple words, do not use quotes for options like --with-blas=... because Spack passes them to ./configure without invoking a shell.

    Likewise, in a MakefilePackage or similiar package that does not use AutoTools you may need to provide include and link options for use on command lines or in environment variables. For example, to generate an option string of the form -I<dir>, use:

    self.spec['blas'].headers.include_flags
    

    and to generate linker options (-L<dir> -llibname ...), use the same as above,

    self.spec['blas'].libs.ld_flags
    

    See MakefilePackage and more generally the Packaging Guide for background and further examples.

Footnotes

fn1

Strictly speaking, versions from 2017.2 onward.

fn2(1,2)

The package intel intentionally does not have a +mpi variant since it is meant to be small. The native installer will always add MPI runtime components because it follows defaults defined in the download package, even when intel-parallel-studio ~mpi has been requested.

For intel-parallel-studio +mpi, the class function :py:func:.IntelPackage.pset_components will include "intel-mpi intel-imb" in a list of component patterns passed to the Intel installer. The installer will extend each pattern word with an implied glob-like * to resolve it to package names that are actually present in the product BOM. As a side effect, this pattern approach accommodates occasional package name changes, e.g., capturing both intel-mpirt and intel-mpi-rt .

fn3

How could the external installation have succeeded otherwise?

fn4

According to Intel's documentation, there is supposedly a way to install a product using a network license even when a FLEXlm server is not running: Specify the license in the form port@serverhost in the INTEL_LICENSE_FILE environment variable. All other means of specifying a network license require that the license server be up.

fn5

Despite the name, INTEL_LICENSE_FILE can hold several and diverse entries. They can be either directories (presumed to contain *.lic files), file names, or network locations in the form port@host (on Linux and Mac), with all items separated by ":" (on Linux and Mac).

fn6

Should said editor turn out to be vi, you better be in a position to know how to use it.

fn7

Comment lines in FLEXlm files, indicated by # as the first non-whitespace character on the line, are generally allowed anywhere in the file. There have been reports, however, that as of 2018, SERVER and USE_SERVER lines must precede any comment lines.

fn8

Spack's close coupling of installed packages to compilers, which both necessitates the detour for installing intel-parallel-studio, and largely limits any of its provided virtual packages to a single compiler, heavily favors recommending to install Intel Parallel Studio outside of Spack and declare it for Spack in packages.yaml by a compiler-less spec.

fn9

With some effort, you can convince Spack to use shorter paths.

警告

Altering the naming scheme means that Spack will lose track of all packages it has installed for you so far. That said, the time is right for this kind of customization when you are defining a new set of compilers.

The relevant tunables are:

  1. Set the install_tree location in config.yaml (see doc).

  2. Set the hash length in install-path-scheme, also in config.yaml (q.v.).

  3. You will want to set the same hash length for tcl module files if you have Spack produce them for you, under naming_scheme in modules.yaml. Other module dialects cannot be altered in this manner.

カスタムビルドシステム

While the build systems listed above should meet your needs for the vast majority of packages, some packages provide custom build scripts. This guide is intended for the following use cases:

  • Packaging software with its own custom build system

  • Adding support for new build systems

If you want to add support for a new build system, a good place to start is to look at the definitions of other build systems. This guide focuses mostly on how Spack's build systems work.

In this guide, we will be using the perl and cmake packages as examples. perl's build system is a hand-written Configure shell script, while cmake bootstraps itself during installation. Both of these packages require custom build systems.

Base class

If your package does not belong to any of the aforementioned build systems that Spack already supports, you should inherit from the Package base class. Package is a simple base class with a single phase: install. If your package is simple, you may be able to simply write an install method that gets the job done. However, if your package is more complex and installation involves multiple steps, you should add separate phases as mentioned in the next section.

If you are creating a new build system base class, you should inherit from PackageBase. This is the superclass for all build systems in Spack.

Phases

The most important concept in Spack's build system support is the idea of phases. Each build system defines a set of phases that are necessary to install the package. They usually follow some sort of "configure", "build", "install" guideline, but any of those phases may be missing or combined with another phase.

If you look at the perl package, you'll see:

phases = ['configure', 'build', 'install']

Similarly, cmake defines:

phases = ['bootstrap', 'build', 'install']

If we look at the cmake example, this tells Spack's PackageBase class to run the bootstrap, build, and install functions in that order. It is now up to you to define these methods.

Phase and phase_args functions

If we look at perl, we see that it defines a configure method:

def configure(self, spec, prefix):
    configure = Executable('./Configure')
    configure(*self.configure_args())

There is also a corresponding configure_args function that handles all of the arguments to pass to Configure, just like in AutotoolsPackage. Comparatively, the build and install phases are pretty simple:

def build(self, spec, prefix):
    make()

def install(self, spec, prefix):
    make('install')

The cmake package looks very similar, but with a bootstrap function instead of configure:

def bootstrap(self, spec, prefix):
    bootstrap = Executable('./bootstrap')
    bootstrap(*self.bootstrap_args())

def build(self, spec, prefix):
    make()

def install(self, spec, prefix):
    make('install')

Again, there is a boostrap_args function that determines the correct bootstrap flags to use.

run_before/run_after

Occasionally, you may want to run extra steps either before or after a given phase. This applies not just to custom build systems, but to existing build systems as well. You may need to patch a file that is generated by configure, or install extra files in addition to what make install copies to the installation prefix. This is where @run_before and @run_after come in.

These Python decorators allow you to write functions that are called before or after a particular phase. For example, in perl, we see:

@run_after('install')
def install_cpanm(self):
    spec = self.spec

    if '+cpanm' in spec:
        with working_dir(join_path('cpanm', 'cpanm')):
            perl = spec['perl'].command
            perl('Makefile.PL')
            make()
            make('install')

This extra step automatically installs cpanm in addition to the base Perl installation.

on_package_attributes

The run_before/run_after logic discussed above becomes particularly powerful when combined with the @on_package_attributes decorator. This decorator allows you to conditionally run certain functions depending on the attributes of that package. The most common example is conditional testing. Many unit tests are prone to failure, even when there is nothing wrong with the installation. Unfortunately, non-portable unit tests and tests that are "supposed to fail" are more common than we would like. Instead of always running unit tests on installation, Spack lets users conditionally run tests with the --test=root flag.

If we wanted to define a function that would conditionally run if and only if this flag is set, we would use the following line:

@on_package_attributes(run_tests=True)

Testing

Let's put everything together and add unit tests to our package. In the perl package, we can see:

@run_after('build')
@on_package_attributes(run_tests=True)
def test(self):
    make('test')

As you can guess, this runs make test after building the package, if and only if testing is requested. Again, this is not specific to custom build systems, it can be added to existing build systems as well.

Ideally, every package in Spack will have some sort of test to ensure that it was built correctly. It is up to the package authors to make sure this happens. If you are adding a package for some software and the developers list commands to test the installation, please add these tests to your package.py.

警告

The order of decorators matters. The following ordering:

@run_after('install')
@on_package_attributes(run_tests=True)

works as expected. However, if you reverse the ordering:

@on_package_attributes(run_tests=True)
@run_after('install')

the tests will always be run regardless of whether or not --test=root is requested. See https://github.com/spack/spack/issues/3833 for more information

For reference, the Build System API docs provide a list of build systems and methods/attributes that can be overridden. If you are curious about the implementation of a particular build system, you can view the source code by running:

$ spack edit --build-system autotools

This will open up the AutotoolsPackage definition in your favorite editor. In addition, if you are working with a less common build system like QMake, SCons, or Waf, it may be useful to see examples of other packages. You can quickly find examples by running:

$ cd var/spack/repos/builtin/packages
$ grep -l QMakePackage */package.py

You can then view these packages with spack edit.

This guide is intended to supplement the Build System API docs with examples of how to override commonly used methods. It also provides rules of thumb and suggestions for package developers who are unfamiliar with a particular build system.

Developer Guide

This guide is intended for people who want to work on Spack itself. If you just want to develop packages, see the Packaging Guide.

It is assumed that you've read the 基本的な使い方 and Packaging Guide sections, and that you're familiar with the concepts discussed there. If you're not, we recommend reading those first.

Overview

Spack is designed with three separate roles in mind:

  1. Users, who need to install software without knowing all the details about how it is built.

  2. Packagers who know how a particular software package is built and encode this information in package files.

  3. Developers who work on Spack, add new features, and try to make the jobs of packagers and users easier.

Users could be end users installing software in their home directory, or administrators installing software to a shared directory on a shared machine. Packagers could be administrators who want to automate software builds, or application developers who want to make their software more accessible to users.

As you might expect, there are many types of users with different levels of sophistication, and Spack is designed to accommodate both simple and complex use cases for packages. A user who only knows that he needs a certain package should be able to type something simple, like spack install <package name>, and get the package that he wants. If a user wants to ask for a specific version, use particular compilers, or build several versions with different configurations, then that should be possible with a minimal amount of additional specification.

This gets us to the two key concepts in Spack's software design:

  1. Specs: expressions for describing builds of software, and

  2. Packages: Python modules that build software according to a spec.

A package is a template for building particular software, and a spec as a descriptor for one or more instances of that template. Users express the configuration they want using a spec, and a package turns the spec into a complete build.

The obvious difficulty with this design is that users under-specify what they want. To build a software package, the package object needs a complete specification. In Spack, if a spec describes only one instance of a package, then we say it is concrete. If a spec could describes many instances, (i.e. it is under-specified in one way or another), then we say it is abstract.

Spack's job is to take an abstract spec from the user, find a concrete spec that satisfies the constraints, and hand the task of building the software off to the package object. The rest of this document describes all the pieces that come together to make that happen.

Directory Structure

So that you can familiarize yourself with the project, we'll start with a high level view of Spack's directory structure:

spack/                  <- installation root
   bin/
      spack             <- main spack executable

   etc/
      spack/            <- Spack config files.
                           Can be overridden by files in ~/.spack.

   var/
      spack/            <- build & stage directories
          repos/            <- contains package repositories
             builtin/       <- pkg repository that comes with Spack
                repo.yaml   <- descriptor for the builtin repository
                packages/   <- directories under here contain packages
          cache/        <- saves resources downloaded during installs

   opt/
      spack/            <- packages are installed here

   lib/
      spack/
         docs/          <- source for this documentation
         env/           <- compiler wrappers for build environment

         external/      <- external libs included in Spack distro
         llnl/          <- some general-use libraries

         spack/         <- spack module; contains Python code
            cmd/        <- each file in here is a spack subcommand
            compilers/  <- compiler description files
            test/       <- unit test modules
            util/       <- common code

Spack is designed so that it could live within a standard UNIX directory hierarchy, so lib, var, and opt all contain a spack subdirectory in case Spack is installed alongside other software. Most of the interesting parts of Spack live in lib/spack.

Spack has one directory layout and there is no install process. Most Python programs don't look like this (they use distutils, setup.py, etc.) but we wanted to make Spack very easy to use. The simple layout spares users from the need to install Spack into a Python environment. Many users don't have write access to a Python installation, and installing an entire new instance of Python to bootstrap Spack would be very complicated. Users should not have to install a big, complicated package to use the thing that's supposed to spare them from the details of big, complicated packages. The end result is that Spack works out of the box: clone it and add bin to your PATH and you're ready to go.

Code Structure

This section gives an overview of the various Python modules in Spack, grouped by functionality.

Build environment

spack.stage

Handles creating temporary directories for builds.

spack.compilation

This contains utility functions used by the compiler wrapper script, cc.

spack.directory_layout

Classes that control the way an installation directory is laid out. Create more implementations of this to change the hierarchy and naming scheme in $spack_prefix/opt

Spack Subcommands

spack.cmd

Each module in this package implements a Spack subcommand. See writing commands for details.

Unit tests

spack.test

Implements Spack's test suite. Add a module and put its name in the test suite in __init__.py to add more unit tests.

spack.test.mock_packages

This is a fake package hierarchy used to mock up packages for Spack's test suite.

Other Modules

spack.url

URL parsing, for deducing names and versions of packages from tarball URLs.

spack.error

SpackError, the base class for Spack's exception hierarchy.

llnl.util.tty

Basic output functions for all of the messages Spack writes to the terminal.

llnl.util.tty.color

Implements a color formatting syntax used by spack.tty.

llnl.util

In this package are a number of utility modules for the rest of Spack.

Spec objects

Package objects

Most spack commands look something like this:

  1. Parse an abstract spec (or specs) from the command line,

  2. Normalize the spec based on information in package files,

  3. Concretize the spec according to some customizable policies,

  4. Instantiate a package based on the spec, and

  5. Call methods (e.g., install()) on the package object.

The information in Package files is used at all stages in this process.

Conceptually, packages are overloaded. They contain:

Stage objects

Writing commands

Adding a new command to Spack is easy. Simply add a <name>.py file to lib/spack/spack/cmd/, where <name> is the name of the subcommand. At the bare minimum, two functions are required in this file:

setup_parser()

Unless your command doesn't accept any arguments, a setup_parser() function is required to define what arguments and flags your command takes. See the Argparse documentation for more details on how to add arguments.

Some commands have a set of subcommands, like spack compiler find or spack module lmod refresh. You can add subparsers to your parser to handle this. Check out spack edit --command compiler for an example of this.

A lot of commands take the same arguments and flags. These arguments should be defined in lib/spack/spack/cmd/common/arguments.py so that they don't need to be redefined in multiple commands.

<name>()

In order to run your command, Spack searches for a function with the same name as your command in <name>.py. This is the main method for your command, and can call other helper methods to handle common tasks.

Remember, before adding a new command, think to yourself whether or not this new command is actually necessary. Sometimes, the functionality you desire can be added to an existing command. Also remember to add unit tests for your command. If it isn't used very frequently, changes to the rest of Spack can cause your command to break without sufficient unit tests to prevent this from happening.

Whenever you add/remove/rename a command or flags for an existing command, make sure to update Spack's Bash tab completion script.

Unit tests

Unit testing

Developer commands

spack doc

spack test

spack python

spack python is a command that lets you import and debug things as if you were in a Spack interactive shell. Without any arguments, it is similar to a normal interactive Python shell, except you can import spack and any other Spack modules:

$ spack python
Spack version 0.10.0
Python 2.7.13, Linux x86_64
>>> from spack.version import Version
>>> a = Version('1.2.3')
>>> b = Version('1_2_3')
>>> a == b
True
>>> c = Version('1.2.3b')
>>> c > a
True
>>>

You can also run a single command:

$ spack python -c 'import distro; distro.linux_distribution()'
('Fedora', '25', 'Workstation Edition')

or a file:

$ spack python ~/test_fetching.py

just like you would with the normal python command.

spack url

A package containing a single URL can be used to download several different versions of the package. If you've ever wondered how this works, all of the magic is in spack.url. This module contains methods for extracting the name and version of a package from its URL. The name is used by spack create to guess the name of the package. By determining the version from the URL, Spack can replace it with other versions to determine where to download them from.

The regular expressions in parse_name_offset and parse_version_offset are used to extract the name and version, but they aren't perfect. In order to debug Spack's URL parsing support, the spack url command can be used.

spack url parse

If you need to debug a single URL, you can use the following command:

$ spack url parse http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz
==> Parsing URL: http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz

==> Matched version regex  0: r'^[a-zA-Z+._-]+[._-]v?(\\d[\\d._-]*)$'
==> Matched  name   regex  8: r'^([A-Za-z\\d+\\._-]+)$'

==> Detected:
    http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz
                                            ---- ~~~~~
    name:    ruby
    version: 2.2.0

==> Substituting version 9.9.9b:
    http://cache.ruby-lang.org/pub/ruby/2.2/ruby-9.9.9b.tar.gz
                                            ---- ~~~~~~

You'll notice that the name and version of this URL are correctly detected, and you can even see which regular expressions it was matched to. However, you'll notice that when it substitutes the version number in, it doesn't replace the 2.2 with 9.9 where we would expect 9.9.9b to live. This particular package may require a list_url or url_for_version function.

This command also accepts a --spider flag. If provided, Spack searches for other versions of the package and prints the matching URLs.

spack url list

This command lists every URL in every package in Spack. If given the --color and --extrapolation flags, it also colors the part of the string that it detected to be the name and version. The --incorrect-name and --incorrect-version flags can be used to print URLs that were not being parsed correctly.

spack url summary

This command attempts to parse every URL for every package in Spack and prints a summary of how many of them are being correctly parsed. It also prints a histogram showing which regular expressions are being matched and how frequently:

$ spack url summary
==> Generating a summary of URL parsing in Spack...

    Total URLs found:          3145
    Names correctly parsed:    2737/3145 (87.03%)
    Versions correctly parsed: 2868/3145 (91.19%)

==> Statistics on name regular expressions:

    Index  Count  Regular Expression
      0:    703   r'github\\.com/[^/]+/([^/]+)'
      1:      8   r'gitlab[^/]+/api/v4/projects/[^/]+%2F([^/]+)'
      2:      6   r'gitlab[^/]+/(?!api/v4/projects)[^/]+/([^/]+)'
      3:     18   r'bitbucket\\.org/[^/]+/([^/]+)'
      4:    390   r'pypi\\.(?:python\\.org|io)/packages/source/[A-Za-z\\d]/([^/]+)'
      6:      8   r'\\?package=([A-Za-z\\d+-]+)'
      7:      1   r'([^/]+)/download.php$'
      8:   2010   r'^([A-Za-z\\d+\\._-]+)$'

==> Statistics on version regular expressions:

    Index  Count  Regular Expression
      0:   2164   r'^[a-zA-Z+._-]+[._-]v?(\\d[\\d._-]*)$'
      1:    467   r'^v?(\\d[\\d._-]*)$'
      2:     23   r'^[a-zA-Z+]*(\\d[\\da-zA-Z]*)$'
      3:     13   r'^[a-zA-Z+-]*(\\d[\\da-zA-Z-]*)$'
      4:     74   r'^[a-zA-Z+_]*(\\d[\\da-zA-Z_]*)$'
      5:     58   r'^[a-zA-Z+.]*(\\d[\\da-zA-Z.]*)$'
      6:    161   r'^[a-zA-Z\\d+-]+-v?(\\d[\\da-zA-Z.]*)$'
      7:      1   r'^[a-zA-Z\\d+-]+-v?(\\d[\\da-zA-Z_]*)$'
      8:     19   r'^[a-zA-Z\\d+_]+_v?(\\d[\\da-zA-Z.]*)$'
      9:      1   r'^[a-zA-Z\\d+_]+\\.v?(\\d[\\da-zA-Z.]*)$'
     10:     65   r'^(?:[a-zA-Z\\d+-]+-)?v?(\\d[\\da-zA-Z.-]*)$'
     11:      3   r'^[a-zA-Z+]+v?(\\d[\\da-zA-Z.-]*)$'
     12:      3   r'^[a-zA-Z\\d+_]+-v?(\\d[\\da-zA-Z.]*)$'
     13:     12   r'^[a-zA-Z\\d+.]+_v?(\\d[\\da-zA-Z.-]*)$'
     14:      1   r'^[a-zA-Z\\d+-]+-v?(\\d[\\da-zA-Z._]*)$'
     15:      1   r'^[a-zA-Z\\d+._]+-v?(\\d[\\da-zA-Z.]*)$'
     16:      4   r'^[a-zA-Z+-]+(\\d[\\da-zA-Z._]*)$'
     17:      1   r'bzr(\\d[\\da-zA-Z._-]*)$'
     18:      3   r'github\\.com/[^/]+/[^/]+/releases/download/[a-zA-Z+._-]*v?(\\d[\\da-zA-Z._-]*)/'
     19:      8   r'\\?sha=[a-zA-Z+._-]*v?(\\d[\\da-zA-Z._-]*)$'
     20:      1   r'\\?ref=[a-zA-Z+._-]*v?(\\d[\\da-zA-Z._-]*)$'
     23:      2   r'\\?package=[a-zA-Z\\d+-]+&get=[a-zA-Z\\d+-]+-v?(\\d[\\da-zA-Z.]*)$'

This command is essential for anyone adding or changing the regular expressions that parse names and versions. By running this command before and after the change, you can make sure that your regular expression fixes more packages than it breaks.

Profiling

Spack has some limited built-in support for profiling, and can report statistics using standard Python timing tools. To use this feature, supply --profile to Spack on the command line, before any subcommands.

spack --profile

spack --profile output looks like this:

$ spack --profile graph hdf5
o  hdf5
|\
| o  openmpi
|/| 
| |\
| | o  hwloc
| |/| 
| | |\
| | | |\
| | | o |  libxml2
| |_|/| | 
|/| |/| | 
| | | |\ \
o | | | | |  zlib
 / / / / /
| | o | |  xz
| |  / /
| | | o  libpciaccess
| | |/| 
| |/| | 
| | | |\
| | | o |  util-macros
| | |  /
o | | |  numactl
|\ \ \ \
...

The bottom of the output shows the top most time consuming functions, slowest on top. The profiling support is from Python's built-in tool, cProfile.

Docker for Developers

This guide is intended for people who want to use our prepared docker environments to work on developing Spack or working on spack packages. It is meant to serve as the companion documentation for the Packaging Guide.

Overview

To get started, all you need is the latest version of docker.

$ cd share/spack/docker
$ source config/ubuntu.bash
$ ./run-image.sh

This command should drop you into an interactive shell where you can run spack within an isolated docker container running ubuntu. The copy of spack being used should be tied to the working copy of your cloned git repo, so any changes you make should be immediately reflected in the running docker container. Feel free to add or modify any packages or to hack on spack, itself. Your contained copy of spack should immediately reflect all changes.

To work within a container running a different linux distro, source one of the other environment files under config.

$ source config/fedora.bash
$ ./run-image.sh

spack package

Subpackages

spack.build_systems package

Submodules
spack.build_systems.aspell_dict module
class spack.build_systems.aspell_dict.AspellDictPackage(spec)

ベースクラス: spack.build_systems.autotools.AutotoolsPackage

Specialized class for building aspell dictionairies.

configure(spec, prefix)

Runs configure with the arguments specified in configure_args() and an appropriately set prefix.

patch()
view_destination(view)

The target root directory: each file is added relative to this directory.

view_source()

The source root directory that will be added to the view: files are added such that their path relative to the view destination matches their path relative to the view source.

spack.build_systems.autotools module
class spack.build_systems.autotools.AutotoolsPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages built using GNU Autotools.

This class provides four phases that can be overridden:

They all have sensible defaults and for many packages the only thing necessary will be to override the helper method configure_args(). For a finer tuning you may also override:

Method

Purpose

build_targets

Specify make targets for the build phase

install_targets

Specify make targets for the install phase

check()

Run build time tests if required

archive_files

Files to archive for packages based on autotools

autoreconf(spec, prefix)

Not needed usually, configure should be already there

autoreconf_extra_args = []

Options to be passed to autoreconf when using the default implementation

build(spec, prefix)

Makes the build targets specified by :py:attr:~.AutotoolsPackage.build_targets

build_directory

Override to provide another place to build the package

build_system_class = 'AutotoolsPackage'

This attribute is used in UI queries that need to know the build system base class

build_targets = []

Targets for make during the build() phase

build_time_test_callbacks = ['check']

Callback names for build-time test

check()

Searches the Makefile for targets test and check and runs them if found.

configure(spec, prefix)

Runs configure with the arguments specified in configure_args() and an appropriately set prefix.

configure_abs_path
configure_args()

Produces a list containing all the arguments that must be passed to configure, except --prefix which will be pre-pended to the list.

戻り値

list of arguments for configure

configure_directory

Returns the directory where 'configure' resides.

戻り値

directory where to find configure

delete_configure_to_force_update()
enable_or_disable(name, activation_value=None)

Same as with_or_without() but substitute with with enable and without with disable.

パラメータ
  • name (str) -- name of a valid multi-valued variant

  • activation_value (callable) --

    if present accepts a single value and returns the parameter to be used leading to an entry of the type --enable-{name}={parameter}

    The special value 'prefix' can also be assigned and will return spec[name].prefix as activation parameter.

戻り値

list of arguments to configure

flags_to_build_system_args(flags)

Produces a list of all command line arguments to pass specified compiler flags to configure.

force_autoreconf = False

Set to true to force the autoreconf step even if configure is present

install(spec, prefix)

Makes the install targets specified by :py:attr:~.AutotoolsPackage.install_targets

install_targets = ['install']

Targets for make during the install() phase

install_time_test_callbacks = ['installcheck']

Callback names for install-time test

installcheck()

Searches the Makefile for an installcheck target and runs it if found.

patch_config_guess = True

Whether or not to update config.guess on old architectures

phases = ['autoreconf', 'configure', 'build', 'install']

Phases of a GNU Autotools package

set_configure_or_die()

Checks the presence of a configure file after the autoreconf phase. If it is found sets a module attribute appropriately, otherwise raises an error.

例外

RuntimeError -- if a configure script is not found in configure_directory()

with_or_without(name, activation_value=None)

Inspects a variant and returns the arguments that activate or deactivate the selected feature(s) for the configure options.

This function works on all type of variants. For bool-valued variants it will return by default --with-{name} or --without-{name}. For other kinds of variants it will cycle over the allowed values and return either --with-{value} or --without-{value}.

If activation_value is given, then for each possible value of the variant, the option --with-{value}=activation_value(value) or --without-{value} will be added depending on whether or not variant=value is in the spec.

パラメータ
  • name (str) -- name of a valid multi-valued variant

  • activation_value (callable) --

    callable that accepts a single value and returns the parameter to be used leading to an entry of the type --with-{name}={parameter}.

    The special value 'prefix' can also be assigned and will return spec[name].prefix as activation parameter.

戻り値

list of arguments to configure

spack.build_systems.cmake module
class spack.build_systems.cmake.CMakePackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages built using CMake

For more information on the CMake build system, see: https://cmake.org/cmake/help/latest/

This class provides three phases that can be overridden:

They all have sensible defaults and for many packages the only thing necessary will be to override cmake_args(). For a finer tuning you may also override:

Method

Purpose

root_cmakelists_dir()

Location of the root CMakeLists.txt

build_directory()

Directory where to build the package

The generator used by CMake can be specified by providing the generator attribute. Per https://cmake.org/cmake/help/git-master/manual/cmake-generators.7.html, the format is: [<secondary-generator> - ]<primary_generator>. The full list of primary and secondary generators supported by CMake may be found in the documentation for the version of CMake used; however, at this time Spack supports only the primary generators "Unix Makefiles" and "Ninja." Spack's CMake support is agnostic with respect to primary generators. Spack will generate a runtime error if the generator string does not follow the prescribed format, or if the primary generator is not supported.

archive_files

Files to archive for packages based on CMake

build(spec, prefix)

Make the build targets

build_directory

Returns the directory to use when building the package

戻り値

directory where to build the package

build_system_class = 'CMakePackage'

This attribute is used in UI queries that need to know the build system base class

build_targets = []
build_time_test_callbacks = ['check']
check()

Searches the CMake-generated Makefile for the target test and runs it if found.

cmake(spec, prefix)

Runs cmake in the build directory

cmake_args()

Produces a list containing all the arguments that must be passed to cmake, except:

  • CMAKE_INSTALL_PREFIX

  • CMAKE_BUILD_TYPE

which will be set automatically.

戻り値

list of arguments for cmake

flags_to_build_system_args(flags)

Produces a list of all command line arguments to pass the specified compiler flags to cmake. Note CMAKE does not have a cppflags option, so cppflags will be added to cflags, cxxflags, and fflags to mimic the behavior in other tools.

generator = 'Unix Makefiles'

The build system generator to use.

See cmake --help for a list of valid generators. Currently, "Unix Makefiles" and "Ninja" are the only generators that Spack supports. Defaults to "Unix Makefiles".

See https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html for more information.

install(spec, prefix)

Make the install targets

install_targets = ['install']
phases = ['cmake', 'build', 'install']

Phases of a CMake package

root_cmakelists_dir

The relative path to the directory containing CMakeLists.txt

This path is relative to the root of the extracted tarball, not to the build_directory. Defaults to the current directory.

戻り値

directory containing CMakeLists.txt

std_cmake_args

Standard cmake arguments provided as a property for convenience of package writers

戻り値

standard cmake arguments

spack.build_systems.cuda module
class spack.build_systems.cuda.CudaPackage(spec)

ベースクラス: spack.package.PackageBase

Auxiliary class which contains CUDA variant, dependencies and conflicts and is meant to unify and facilitate its usage.

arch_platform = ' arch=ppc64le platform=linux'
static cuda_flags(arch_list)
spack.build_systems.intel module
class spack.build_systems.intel.IntelPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for licensed Intel software.

This class provides two phases that can be overridden:

  1. configure()

  2. install()

They both have sensible defaults and for many packages the only thing necessary will be to override setup_environment to set the appropriate environment variables.

blas_libs
build_system_class = 'IntelPackage'

This attribute is used in UI queries that need to know the build system base class

component_bin_dir(component, **kwargs)
component_include_dir(component, **kwargs)
component_lib_dir(component, **kwargs)

Provide directory suitable for find_libraries() and SPACK_COMPILER_EXTRA_RPATHS.

configure(spec, prefix)

Generates the silent.cfg file to pass to installer.sh.

See https://software.intel.com/en-us/articles/configuration-file-format

configure_rpath()
file_to_source

Full path of file to source for initializing an Intel package. A client package could override as follows: ` @property` ` def file_to_source(self):` ` return self.normalize_path("apsvars.sh", "vtune_amplifier")`

filter_compiler_wrappers()
global_license_file

Returns the path where a Spack-global license file should be stored.

All Intel software shares the same license, so we store it in a common 'intel' directory.

headers
install(spec, prefix)

Runs Intel's install.sh installation script. Afterwards, save the installer config and logs to <prefix>/.spack

intel64_int_suffix

Provide the suffix for Intel library names to match a client application's desired int size, conveyed by the active spec variant. The possible suffixes and their meanings are:

ilp64 all of int, long, and pointer are 64 bit, `` lp64`` only long and pointer are 64 bit; int will be 32bit.

lapack_libs
libs
license_comment = '#'

Comment symbol used in the license.lic file

license_files

Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list. The argument must be an iterable if specified.

license_required

bool(x) -> bool

Returns True when the argument x is true, False otherwise. The builtins True and False are the only two instances of the class bool. The class bool is a subclass of the class int, and cannot be subclassed.

license_url = 'https://software.intel.com/en-us/articles/intel-license-manager-faq'

URL providing information on how to acquire a license key

license_vars = ['INTEL_LICENSE_FILE']

Environment variables that Intel searches for a license file

mpi_compiler_wrappers

Return paths to compiler wrappers as a dict of env-like names

mpi_setup_dependent_environment(spack_env, run_env, dependent_spec, compilers_of_client={})

Unified back-end for setup_dependent_environment() of Intel packages that provide 'mpi'.

パラメータ
  • run_env, dependent_spec (spack_env,) -- same as in setup_dependent_environment().

  • compilers_of_client (dict) -- Conveys spack_cc, spack_cxx, etc., from the scope of dependent packages; constructed in caller.

normalize_path(component_path, component_suite_dir=None, relative=False)

Returns the absolute or relative path to a component or file under a component suite directory.

Intel's product names, scope, and directory layout changed over the years. This function provides a unified interface to their directory names.

パラメータ
  • component_path (str) -- a component name like 'mkl', or 'mpi', or a deeper relative path.

  • component_suite_dir (str) --

    _Unversioned_ name of the expected parent directory of component_path. When absent or None, an appropriate default will be used. A present but empty string "" requests that component_path refer to self.prefix directly.

    Typical values: compilers_and_libraries, composer_xe, parallel_studio_xe.

    Also supported: advisor, inspector, vtune. The actual directory name for these suites varies by release year. The name will be corrected as needed for use in the return value.

  • relative (bool) -- When True, return path relative to self.prefix, otherwise, return an absolute path (the default).

normalize_suite_dir(suite_dir_name, version_globs=['*.*.*'])

Returns the version-specific and absolute path to the directory of an Intel product or a suite of product components.

パラメータ
  • suite_dir_name (str) --

    Name of the product directory, without numeric version.

    • Examples:

      composer_xe, parallel_studio_xe, compilers_and_libraries
      

    The following will work as well, even though they are not directly targets for Spack installation:

    advisor_xe, inspector_xe, vtune_amplifier_xe,
    performance_snapshots (new name for vtune as of 2018)
    

    These are single-component products without subordinate components and are normally made available to users by a toplevel psxevars.sh or equivalent file to source (and thus by the modulefiles that Spack produces).

  • version_globs (list of str) -- Suffix glob patterns (most specific first) expected to qualify suite_dir_name to its fully version-specific install directory (as opposed to a compatibility directory or symlink).

openmp_libs

Supply LibraryList for linking OpenMP

phases = ['configure', 'install']

Phases of an Intel package

pset_components
scalapack_libs
setup_dependent_environment(spack_env, run_env, dependent_spec)

Set up the environment of packages that depend on this one.

This is similar to setup_environment, but it is used to modify the compile and runtime environments of packages that depend on this one. This gives packages like Python and others that follow the extension model a way to implement common environment or compile-time settings for dependencies.

This is useful if there are some common steps to installing all extensions for a certain package.

Example:

  1. Installing python modules generally requires PYTHONPATH to point to the lib/pythonX.Y/site-packages directory in the module's install prefix. This method could be used to set that variable.

パラメータ
  • spack_env (EnvironmentModifications) -- List of environment modifications to be applied when the dependent package is built within Spack.

  • run_env (EnvironmentModifications) -- List of environment modifications to be applied when the dependent package is run outside of Spack. These are added to the resulting module file.

  • dependent_spec (Spec) -- The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent's state. Note that this package's spec is available as self.spec.

setup_dependent_package(module, dep_spec)

Set up Python module-scope variables for dependent packages.

Called before the install() method of dependents.

Default implementation does nothing, but this can be overridden by an extendable package to set up the module of its extensions. This is useful if there are some common steps to installing all extensions for a certain package.

Examples:

  1. Extensions often need to invoke the python interpreter from the Python installation being extended. This routine can put a python() Executable object in the module scope for the extension package to simplify extension installs.

  2. MPI compilers could set some variables in the dependent's scope that point to mpicc, mpicxx, etc., allowing them to be called by common name regardless of which MPI is used.

  3. BLAS/LAPACK implementations can set some variables indicating the path to their libraries, since these paths differ by BLAS/LAPACK implementation.

パラメータ
  • module (spack.package.PackageBase.module) -- The Python module object of the dependent package. Packages can use this to set module-scope variables for the dependent to use.

  • dependent_spec (Spec) -- The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent's state. Note that this package's spec is available as self.spec.

setup_environment(spack_env, run_env)

Adds environment variables to the generated module file.

These environment variables come from running:

$ source parallel_studio_xe_2017/bin/psxevars.sh intel64
[and likewise for MKL, MPI, and other components]
tbb_headers
tbb_libs

Supply LibraryList for linking TBB

uninstall_ism()
version_yearlike

Return the version in a unified style, suitable for Version class conditionals.

version_years = {'intel-ipp@9.0:9.99': 2016, 'intel-mkl@11.3.0:11.3.999': 2016, 'intel-mpi@5.1:5.99': 2016}
spack.build_systems.intel.debug_print(msg, *args)

Prints a message (usu. a variable) and the callers' names for a couple of stack frames.

spack.build_systems.intel.raise_lib_error(*args)

Bails out with an error message. Shows args after the first as one per line, tab-indented, useful for long paths to line up and stand out.

spack.build_systems.makefile module
class spack.build_systems.makefile.MakefilePackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages that are built using editable Makefiles

This class provides three phases that can be overridden:

It is usually necessary to override the edit() phase, while build() and install() have sensible defaults. For a finer tuning you may override:

Method

Purpose

build_targets

Specify make targets for the build phase

install_targets

Specify make targets for the install phase

build_directory()

Directory where the Makefile is located

build(spec, prefix)

Calls make, passing build_targets as targets.

build_directory

Returns the directory containing the main Makefile

戻り値

build directory

build_system_class = 'MakefilePackage'

This attribute is used in UI queries that need to know the build system base class

build_targets = []

Targets for make during the build() phase

build_time_test_callbacks = ['check']

Callback names for build-time test

check()

Searches the Makefile for targets test and check and runs them if found.

edit(spec, prefix)

Edits the Makefile before calling make. This phase cannot be defaulted.

install(spec, prefix)

Calls make, passing install_targets as targets.

install_targets = ['install']

Targets for make during the install() phase

install_time_test_callbacks = ['installcheck']

Callback names for install-time test

installcheck()

Searches the Makefile for an installcheck target and runs it if found.

phases = ['edit', 'build', 'install']

Phases of a package that is built with an hand-written Makefile

spack.build_systems.meson module
class spack.build_systems.meson.MesonPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages built using Meson

For more information on the Meson build system, see: https://mesonbuild.com/

This class provides three phases that can be overridden:

They all have sensible defaults and for many packages the only thing necessary will be to override meson_args(). For a finer tuning you may also override:

Method

Purpose

root_mesonlists_dir()

Location of the root MesonLists.txt

build_directory()

Directory where to build the package

archive_files

Files to archive for packages based on Meson

build(spec, prefix)

Make the build targets

build_directory

Returns the directory to use when building the package

戻り値

directory where to build the package

build_system_class = 'MesonPackage'

This attribute is used in UI queries that need to know the build system base class

build_targets = []
build_time_test_callbacks = ['check']
check()

Searches the Meson-generated file for the target test and runs it if found.

flags_to_build_system_args(flags)

Produces a list of all command line arguments to pass the specified compiler flags to meson.

install(spec, prefix)

Make the install targets

install_targets = ['install']
meson(spec, prefix)

Runs meson in the build directory

meson_args()

Produces a list containing all the arguments that must be passed to meson, except:

  • --prefix

  • --libdir

  • --buildtype

  • --strip

which will be set automatically.

戻り値

list of arguments for meson

phases = ['meson', 'build', 'install']

Phases of a Meson package

root_mesonlists_dir

The relative path to the directory containing meson.build

This path is relative to the root of the extracted tarball, not to the build_directory. Defaults to the current directory.

戻り値

directory containing meson.build

std_meson_args

Standard meson arguments provided as a property for convenience of package writers

戻り値

standard meson arguments

spack.build_systems.octave module
class spack.build_systems.octave.OctavePackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for Octave packages. See https://www.gnu.org/software/octave/doc/v4.2.0/Installing-and-Removing-Packages.html for more information.

This class provides the following phases that can be overridden:

  1. install()

build_system_class = 'OctavePackage'
install(spec, prefix)

Install the package from the archive file

phases = ['install']
setup_environment(spack_env, run_env)

Set up the compile and runtime environments for a package.

spack.build_systems.perl module
class spack.build_systems.perl.PerlPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages that are built using Perl.

This class provides four phases that can be overridden if required:

The default methods use, in order of preference:
  1. Makefile.PL,

  2. Build.PL.

Some packages may need to override configure_args(), which produces a list of arguments for configure(). Arguments should not include the installation base directory.

build(spec, prefix)

Builds a Perl package.

build_system_class = 'PerlPackage'

This attribute is used in UI queries that need to know the build system base class

build_time_test_callbacks = ['check']

Callback names for build-time test

check()

Runs built-in tests of a Perl package.

configure(spec, prefix)

Runs Makefile.PL or Build.PL with arguments consisting of an appropriate installation base directory followed by the list returned by configure_args().

例外

RuntimeError -- if neither Makefile.PL or Build.PL exist

configure_args()

Produces a list containing the arguments that must be passed to configure(). Arguments should not include the installation base directory, which is prepended automatically.

戻り値

list of arguments for Makefile.PL or Build.PL

install(spec, prefix)

Installs a Perl package.

phases = ['configure', 'build', 'install']

Phases of a Perl package

spack.build_systems.python module
class spack.build_systems.python.PythonPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages that are built using Python setup.py files

This class provides the following phases that can be overridden:

  • build

  • build_py

  • build_ext

  • build_clib

  • build_scripts

  • clean

  • install

  • install_lib

  • install_headers

  • install_scripts

  • install_data

  • sdist

  • register

  • bdist

  • bdist_dumb

  • bdist_rpm

  • bdist_wininst

  • upload

  • check

These are all standard setup.py commands and can be found by running:

$ python setup.py --help-commands

By default, only the 'build' and 'install' phases are run, but if you need to run more phases, simply modify your phases list like so:

phases = ['build_ext', 'install', 'bdist']

Each phase provides a function <phase> that runs:

$ python -s setup.py --no-user-cfg <phase>

Each phase also has a <phase_args> function that can pass arguments to this call. All of these functions are empty except for the install_args function, which passes --prefix=/path/to/installation/directory.

If you need to run a phase which is not a standard setup.py command, you'll need to define a function for it like so:

def configure(self, spec, prefix):
    self.setup_py('configure')
add_files_to_view(view, merge_map)

Given a map of package files to destination paths in the view, add the files to the view. By default this adds all files. Alternative implementations may skip some files, for example if other packages linked into the view already include the file.

bdist(spec, prefix)

Create a built (binary) distribution.

bdist_args(spec, prefix)

Arguments to pass to bdist.

bdist_dumb(spec, prefix)

Create a "dumb" built distribution.

bdist_dumb_args(spec, prefix)

Arguments to pass to bdist_dumb.

bdist_rpm(spec, prefix)

Create an RPM distribution.

bdist_rpm_args(spec, prefix)

Arguments to pass to bdist_rpm.

bdist_wininst(spec, prefix)

Create an executable installer for MS Windows.

bdist_wininst_args(spec, prefix)

Arguments to pass to bdist_wininst.

build(spec, prefix)

Build everything needed to install.

build_args(spec, prefix)

Arguments to pass to build.

build_clib(spec, prefix)

Build C/C++ libraries used by Python extensions.

build_clib_args(spec, prefix)

Arguments to pass to build_clib.

build_directory

The directory containing the setup.py file.

build_ext(spec, prefix)

Build C/C++ extensions (compile/link to build directory).

build_ext_args(spec, prefix)

Arguments to pass to build_ext.

build_py(spec, prefix)

"Build" pure Python modules (copy to build directory).

build_py_args(spec, prefix)

Arguments to pass to build_py.

build_scripts(spec, prefix)

"Build" scripts (copy and fixup #! line).

build_system_class = 'PythonPackage'
build_time_test_callbacks = ['test']

Callback names for build-time test

check(spec, prefix)

Perform some checks on the package.

check_args(spec, prefix)

Arguments to pass to check.

clean(spec, prefix)

Clean up temporary files from 'build' command.

clean_args(spec, prefix)

Arguments to pass to clean.

import_module_test()

Attempts to import the module that was just installed.

This test is only run if the package overrides import_modules with a list of module names.

import_modules = []
install(spec, prefix)

Install everything from build directory.

install_args(spec, prefix)

Arguments to pass to install.

install_data(spec, prefix)

Install data files.

install_data_args(spec, prefix)

Arguments to pass to install_data.

install_headers(spec, prefix)

Install C/C++ header files.

install_headers_args(spec, prefix)

Arguments to pass to install_headers.

install_lib(spec, prefix)

Install all Python modules (extensions and pure Python).

install_lib_args(spec, prefix)

Arguments to pass to install_lib.

install_scripts(spec, prefix)

Install scripts (Python or otherwise).

install_scripts_args(spec, prefix)

Arguments to pass to install_scripts.

install_time_test_callbacks = ['import_module_test']

Callback names for install-time test

phases = ['build', 'install']
py_namespace = None
python(*args, **kwargs)
register(spec, prefix)

Register the distribution with the Python package index.

register_args(spec, prefix)

Arguments to pass to register.

remove_files_from_view(view, merge_map)

Given a map of package files to files currently linked in the view, remove the files from the view. The default implementation removes all files. Alternative implementations may not remove all files. For example if two packages include the same file, it should only be removed when both packages are removed.

sdist(spec, prefix)

Create a source distribution (tarball, zip file, etc.).

sdist_args(spec, prefix)

Arguments to pass to sdist.

setup_file()

Returns the name of the setup file to use.

setup_py(*args, **kwargs)
test()

Run unit tests after in-place build.

These tests are only run if the package actually has a 'test' command.

test_args(spec, prefix)

Arguments to pass to test.

upload(spec, prefix)

Upload binary package to PyPI.

upload_args(spec, prefix)

Arguments to pass to upload.

view_file_conflicts(view, merge_map)

Report all file conflicts, excepting special cases for python. Specifically, this does not report errors for duplicate __init__.py files for packages in the same namespace.

spack.build_systems.qmake module
class spack.build_systems.qmake.QMakePackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages built using qmake.

For more information on the qmake build system, see: http://doc.qt.io/qt-5/qmake-manual.html

This class provides three phases that can be overridden:

  1. qmake()

  2. build()

  3. install()

They all have sensible defaults and for many packages the only thing necessary will be to override qmake_args().

build(spec, prefix)

Make the build targets

build_system_class = 'QMakePackage'

This attribute is used in UI queries that need to know the build system base class

build_time_test_callbacks = ['check']

Callback names for build-time test

check()

Searches the Makefile for a check: target and runs it if found.

install(spec, prefix)

Make the install targets

phases = ['qmake', 'build', 'install']

Phases of a qmake package

qmake(spec, prefix)

Run qmake to configure the project and generate a Makefile.

qmake_args()

Produces a list containing all the arguments that must be passed to qmake

spack.build_systems.r module
class spack.build_systems.r.RPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages that are built using R.

For more information on the R build system, see: https://stat.ethz.ch/R-manual/R-devel/library/utils/html/INSTALL.html

This class provides a single phase that can be overridden:

It has sensible defaults, and for many packages the only thing necessary will be to add dependencies

build_system_class = 'RPackage'

This attribute is used in UI queries that need to know the build system base class

configure_args()

Arguments to pass to install via --configure-args.

configure_vars()

Arguments to pass to install via --configure-vars.

install(spec, prefix)

Installs an R package.

phases = ['install']
spack.build_systems.scons module
class spack.build_systems.scons.SConsPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages built using SCons.

See http://scons.org/documentation.html for more information.

This class provides the following phases that can be overridden:

  1. build()

  2. install()

Packages that use SCons as a build system are less uniform than packages that use other build systems. Developers can add custom subcommands or variables that control the build. You will likely need to override build_args() to pass the appropriate variables.

build(spec, prefix)

Build the package.

build_args(spec, prefix)

Arguments to pass to build.

build_system_class = 'SConsPackage'

To be used in UI queries that require to know which build-system class we are using

build_time_test_callbacks = ['test']

Callback names for build-time test

install(spec, prefix)

Install the package.

install_args(spec, prefix)

Arguments to pass to install.

phases = ['build', 'install']

Phases of a SCons package

test()

Run unit tests after build.

By default, does nothing. Override this if you want to add package-specific tests.

spack.build_systems.waf module
class spack.build_systems.waf.WafPackage(spec)

ベースクラス: spack.package.PackageBase

Specialized class for packages that are built using the Waf build system. See https://waf.io/book/ for more information.

This class provides the following phases that can be overridden:

  • configure

  • build

  • install

These are all standard Waf commands and can be found by running:

$ python waf --help

Each phase provides a function <phase> that runs:

$ python waf -j<jobs> <phase>

where <jobs> is the number of parallel jobs to build with. Each phase also has a <phase_args> function that can pass arguments to this call. All of these functions are empty except for the configure_args function, which passes --prefix=/path/to/installation/prefix.

build(spec, prefix)

Executes the build.

build_args()

Arguments to pass to build.

build_directory

The directory containing the waf file.

build_system_class = 'WafPackage'
build_time_test_callbacks = ['test']
configure(spec, prefix)

Configures the project.

configure_args()

Arguments to pass to configure.

install(spec, prefix)

Installs the targets on the system.

install_args()

Arguments to pass to install.

install_time_test_callbacks = ['installtest']
installtest()

Run unit tests after install.

By default, does nothing. Override this if you want to add package-specific tests.

phases = ['configure', 'build', 'install']
python(*args, **kwargs)

The python Executable.

test()

Run unit tests after build.

By default, does nothing. Override this if you want to add package-specific tests.

waf(*args, **kwargs)

Runs the waf Executable.

Module contents

spack.cmd package

Subpackages
spack.cmd.common package
Submodules
spack.cmd.common.arguments module
spack.cmd.common.arguments.add_common_arguments(parser, list_of_arguments)

Extend a parser with extra arguments

パラメータ
  • parser -- parser to be extended

  • list_of_arguments -- arguments to be added to the parser

Module contents
spack.cmd.common.print_module_placeholder_help()

For use by commands to tell user how to activate shell support.

spack.cmd.modules package
Submodules
spack.cmd.modules.dotkit module
spack.cmd.modules.dotkit.add_command(parser, command_dict)
spack.cmd.modules.lmod module
spack.cmd.modules.lmod.add_command(parser, command_dict)
spack.cmd.modules.lmod.setdefault(module_type, specs, args)

Set the default module file, when multiple are present

spack.cmd.modules.tcl module
spack.cmd.modules.tcl.add_command(parser, command_dict)
Module contents

Implementation details of the spack module command.

exception spack.cmd.modules.MultipleSpecsMatch

ベースクラス: Exception

Raised when multiple specs match a constraint, in a context where this is not allowed.

exception spack.cmd.modules.NoSpecMatches

ベースクラス: Exception

Raised when no spec matches a constraint, in a context where this is not allowed.

spack.cmd.modules.add_loads_arguments(subparser)
spack.cmd.modules.callbacks = {'find': <function find>, 'loads': <function loads>, 'refresh': <function refresh>, 'rm': <function rm>}

Dictionary populated with the list of sub-commands. Each sub-command must be callable and accept 3 arguments:

  • module_type: the type of module it refers to

  • specs : the list of specs to be processed

  • args : namespace containing the parsed command line arguments

spack.cmd.modules.find(module_type, specs, args)

Returns the module file "use" name if there's a single match. Raises error messages otherwise.

spack.cmd.modules.loads(module_type, specs, args, out=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)

Prompt the list of modules associated with a list of specs

spack.cmd.modules.modules_cmd(parser, args, module_type, callbacks={'find': <function find>, 'loads': <function loads>, 'refresh': <function refresh>, 'rm': <function rm>})
spack.cmd.modules.one_spec_or_raise(specs)

Ensures exactly one spec has been selected, or raises the appropriate exception.

spack.cmd.modules.refresh(module_type, specs, args)

Regenerates the module files for every spec in specs and every module type in module types.

spack.cmd.modules.rm(module_type, specs, args)

Deletes the module files associated with every spec in specs, for every module type in module types.

spack.cmd.modules.setup_parser(subparser)
Submodules
spack.cmd.activate module
spack.cmd.activate.activate(parser, args)
spack.cmd.activate.setup_parser(subparser)
spack.cmd.add module
spack.cmd.add.add(parser, args)
spack.cmd.add.setup_parser(subparser)
spack.cmd.arch module
spack.cmd.arch.arch(parser, args)
spack.cmd.arch.setup_parser(subparser)
spack.cmd.blame module
spack.cmd.blame.blame(parser, args)
spack.cmd.blame.setup_parser(subparser)
spack.cmd.bootstrap module
spack.cmd.bootstrap.bootstrap(parser, args, **kwargs)
spack.cmd.bootstrap.setup_parser(subparser)
spack.cmd.build module
spack.cmd.build.build(parser, args)
spack.cmd.build.setup_parser(subparser)
spack.cmd.build_env module
spack.cmd.build_env.build_env(parser, args)
spack.cmd.build_env.setup_parser(subparser)
spack.cmd.buildcache module
spack.cmd.buildcache.buildcache(parser, args)
spack.cmd.buildcache.check_binaries(args)

Check specs (either a single spec from --spec, or else the full set of release specs) against remote binary mirror(s) to see if any need to be rebuilt. This command uses the process exit code to indicate its result, specifically, if the exit code is non-zero, then at least one of the indicated specs needs to be rebuilt.

spack.cmd.buildcache.createtarball(args)

create a binary package from an existing install

spack.cmd.buildcache.find_matching_specs(pkgs, allow_multiple_matches=False, env=None)
Returns a list of specs matching the not necessarily

concretized specs given from cli

パラメータ
  • specs -- list of specs to be matched against installed packages

  • allow_multiple_matches -- if True multiple matches are admitted

戻り値

list of specs

spack.cmd.buildcache.get_buildcache_name(args)

Get name (prefix) of buildcache entries for this spec

spack.cmd.buildcache.get_concrete_spec(args)
spack.cmd.buildcache.get_tarball(args)

Download buildcache entry from a remote mirror to local folder. This command uses the process exit code to indicate its result, specifically, a non-zero exit code indicates that the command failed to download at least one of the required buildcache components. Normally, just the tarball and .spec.yaml files are required, but if the --require-cdashid argument was provided, then a .cdashid file is also required.

spack.cmd.buildcache.getkeys(args)

get public keys available on mirrors

spack.cmd.buildcache.install_tarball(spec, args)
spack.cmd.buildcache.installtarball(args)

install from a binary package

spack.cmd.buildcache.listspecs(args)

list binary packages available from mirrors

spack.cmd.buildcache.match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False)
Returns a list of specs matching the not necessarily

concretized specs given from cli

パラメータ
  • specs -- list of specs to be matched against buildcaches on mirror

  • allow_multiple_matches -- if True multiple matches are admitted

戻り値

list of specs

spack.cmd.buildcache.preview(args)

Print a status tree of the selected specs that shows which nodes are relocatable and which might not be.

パラメータ

args -- command line arguments

spack.cmd.buildcache.save_spec_yamls(args)

Get full spec for dependencies, relative to root spec, and write them to files in the specified output directory. Uses exit code to signal success or failure. An exit code of zero means the command was likely successful. If any errors or exceptions are encountered, or if expected command-line arguments are not provided, then the exit code will be non-zero.

spack.cmd.buildcache.setup_parser(subparser)
spack.cmd.cd module
spack.cmd.cd.cd(parser, args)
spack.cmd.cd.setup_parser(subparser)

This is for decoration -- spack cd is used through spack's shell support. This allows spack cd to print a descriptive help message when called with -h.

spack.cmd.checksum module
spack.cmd.checksum.checksum(parser, args)
spack.cmd.checksum.setup_parser(subparser)
spack.cmd.clean module
class spack.cmd.clean.AllClean(option_strings, dest, nargs=None, const=None, default=None, type=None, choices=None, required=False, help=None, metavar=None)

ベースクラス: argparse.Action

Activates flags -s -d -m and -p simultaneously

spack.cmd.clean.clean(parser, args)
spack.cmd.clean.setup_parser(subparser)
spack.cmd.clone module
spack.cmd.clone.clone(parser, args)
spack.cmd.clone.get_origin_info(remote)
spack.cmd.clone.setup_parser(subparser)
spack.cmd.commands module
class spack.cmd.commands.SpackArgparseRstWriter(documented_commands, out=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)

ベースクラス: llnl.util.argparsewriter.ArgparseRstWriter

RST writer tailored for spack documentation.

usage(*args)
class spack.cmd.commands.SubcommandWriter(out=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)

ベースクラス: llnl.util.argparsewriter.ArgparseWriter

begin_command(prog)
spack.cmd.commands.commands(parser, args)
spack.cmd.commands.formatter(func)

Decorator used to register formatters

spack.cmd.commands.formatters = {'names': <function names>, 'rst': <function rst>, 'subcommands': <function subcommands>}

list of command formatters

spack.cmd.commands.names(args, out)
spack.cmd.commands.prepend_header(args, out)
spack.cmd.commands.rst(args, out)
spack.cmd.commands.rst_index(out)
spack.cmd.commands.setup_parser(subparser)
spack.cmd.commands.subcommands(args, out)
spack.cmd.compiler module
spack.cmd.compiler.compiler(parser, args)
spack.cmd.compiler.compiler_find(args)

Search either $PATH or a list of paths OR MODULES for compilers and add them to Spack's configuration.

spack.cmd.compiler.compiler_info(args)

Print info about all compilers matching a spec.

spack.cmd.compiler.compiler_list(args)
spack.cmd.compiler.compiler_remove(args)
spack.cmd.compiler.setup_parser(subparser)
spack.cmd.compilers module
spack.cmd.compilers.compilers(parser, args)
spack.cmd.compilers.setup_parser(subparser)
spack.cmd.concretize module
spack.cmd.concretize.concretize(parser, args)
spack.cmd.concretize.setup_parser(subparser)
spack.cmd.config module
spack.cmd.config.config(parser, args)
spack.cmd.config.config_blame(args)

Print out line-by-line blame of merged YAML.

spack.cmd.config.config_edit(args)

Edit the configuration file for a specific scope and config section.

With no arguments and an active environment, edit the spack.yaml for the active environment.

spack.cmd.config.config_get(args)

Dump merged YAML configuration for a specific section.

With no arguments and an active environment, print the contents of the environment's manifest file (spack.yaml).

spack.cmd.config.setup_parser(subparser)
spack.cmd.configure module
spack.cmd.configure.configure(parser, args)
spack.cmd.configure.setup_parser(subparser)
spack.cmd.create module
class spack.cmd.create.AutoreconfPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for Autotools-based packages that do not come with a configure script

base_class_name = 'AutotoolsPackage'
body = " def autoreconf(self, spec, prefix):\n # FIXME: Modify the autoreconf method as necessary\n autoreconf('--install', '--verbose', '--force')\n\n def configure_args(self):\n # FIXME: Add arguments other than --prefix\n # FIXME: If not needed delete this function\n args = []\n return args"
dependencies = " depends_on('autoconf', type='build')\n depends_on('automake', type='build')\n depends_on('libtool', type='build')\n depends_on('m4', type='build')\n\n # FIXME: Add additional dependencies if required.\n # depends_on('foo')"
class spack.cmd.create.AutotoolsPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for Autotools-based packages that do come with a configure script

base_class_name = 'AutotoolsPackage'
body = ' def configure_args(self):\n # FIXME: Add arguments other than --prefix\n # FIXME: If not needed delete this function\n args = []\n return args'
class spack.cmd.create.BazelPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for Bazel-based packages

body = ' def install(self, spec, prefix):\n # FIXME: Add logic to build and install here.\n bazel()'
dependencies = " # FIXME: Add additional dependencies if required.\n depends_on('bazel', type='build')"
class spack.cmd.create.BuildSystemGuesser

ベースクラス: object

An instance of BuildSystemGuesser provides a callable object to be used during spack create. By passing this object to spack checksum, we can take a peek at the fetched tarball and discern the build system it uses

class spack.cmd.create.CMakePackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for CMake-based packages

base_class_name = 'CMakePackage'
body = ' def cmake_args(self):\n # FIXME: Add arguments other than\n # FIXME: CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE\n # FIXME: If not needed delete this function\n args = []\n return args'
class spack.cmd.create.IntelPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for licensed Intel software

base_class_name = 'IntelPackage'
body = ' # FIXME: Override `setup_environment` if necessary.'
class spack.cmd.create.MakefilePackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for Makefile packages

base_class_name = 'MakefilePackage'
body = " def edit(self, spec, prefix):\n # FIXME: Edit the Makefile if necessary\n # FIXME: If not needed delete this function\n # makefile = FileFilter('Makefile')\n # makefile.filter('CC = .*', 'CC = cc')"
class spack.cmd.create.MesonPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for meson-based packages

base_class_name = 'MesonPackage'
body = ' def meson_args(self):\n # FIXME: If not needed delete this function\n args = []\n return args'
class spack.cmd.create.OctavePackageTemplate(name, *args)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for octave packages

base_class_name = 'OctavePackage'
dependencies = " extends('octave')\n\n # FIXME: Add additional dependencies if required.\n # depends_on('octave-foo', type=('build', 'run'))"
class spack.cmd.create.PackageTemplate(name, url, versions)

ベースクラス: object

Provides the default values to be used for the package file template

base_class_name = 'Package'
body = " def install(self, spec, prefix):\n # FIXME: Unknown build system\n make()\n make('install')"
dependencies = " # FIXME: Add dependencies if required.\n # depends_on('foo')"
write(pkg_path)

Writes the new package file.

class spack.cmd.create.PerlbuildPackageTemplate(name, *args)

ベースクラス: spack.cmd.create.PerlmakePackageTemplate

Provides appropriate overrides for Perl extensions that come with a Build.PL instead of a Makefile.PL

dependencies = " depends_on('perl-module-build', type='build')\n\n # FIXME: Add additional dependencies if required:\n # depends_on('perl-foo', type=('build', 'run'))"
class spack.cmd.create.PerlmakePackageTemplate(name, *args)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for Perl extensions that come with a Makefile.PL

base_class_name = 'PerlPackage'
body = ' def configure_args(self):\n # FIXME: Add non-standard arguments\n # FIXME: If not needed delete this function\n args = []\n return args'
dependencies = " # FIXME: Add dependencies if required:\n # depends_on('perl-foo', type=('build', 'run'))"
class spack.cmd.create.PythonPackageTemplate(name, *args)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for python extensions

base_class_name = 'PythonPackage'
body = ' def build_args(self, spec, prefix):\n # FIXME: Add arguments other than --prefix\n # FIXME: If not needed delete this function\n args = []\n return args'
dependencies = " # FIXME: Add dependencies if required.\n # depends_on('py-setuptools', type='build')\n # depends_on('py-foo', type=('build', 'run'))"
class spack.cmd.create.QMakePackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for QMake-based packages

base_class_name = 'QMakePackage'
body = ' def qmake_args(self):\n # FIXME: If not needed delete this function\n args = []\n return args'
class spack.cmd.create.RPackageTemplate(name, *args)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for R extensions

base_class_name = 'RPackage'
body = ' def configure_args(self, spec, prefix):\n # FIXME: Add arguments to pass to install via --configure-args\n # FIXME: If not needed delete this function\n args = []\n return args'
dependencies = " # FIXME: Add dependencies if required.\n # depends_on('r-foo', type=('build', 'run'))"
class spack.cmd.create.SconsPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate overrides for SCons-based packages

base_class_name = 'SConsPackage'
body = ' def build_args(self, spec, prefix):\n # FIXME: Add arguments to pass to build.\n # FIXME: If not needed delete this function\n args = []\n return args'
class spack.cmd.create.WafPackageTemplate(name, url, versions)

ベースクラス: spack.cmd.create.PackageTemplate

Provides appropriate override for Waf-based packages

base_class_name = 'WafPackage'
body = ' # FIXME: Override configure_args(), build_args(),\n # or install_args() if necessary.'
spack.cmd.create.create(parser, args)
spack.cmd.create.get_build_system(args, guesser)

Determine the build system template.

If a template is specified, always use that. Otherwise, if a URL is provided, download the tarball and peek inside to guess what build system it uses. Otherwise, use a generic template by default.

パラメータ
  • args (argparse.Namespace) -- The arguments given to spack create

  • guesser (BuildSystemGuesser) -- The first_stage_function given to spack checksum which records the build system it detects

戻り値

The name of the build system template to use

戻り値の型

str

spack.cmd.create.get_name(args)

Get the name of the package based on the supplied arguments.

If a name was provided, always use that. Otherwise, if a URL was provided, extract the name from that. Otherwise, use a default.

パラメータ

args (param argparse.Namespace) -- The arguments given to spack create

戻り値

The name of the package

戻り値の型

str

spack.cmd.create.get_repository(args, name)

Returns a Repo object that will allow us to determine the path where the new package file should be created.

パラメータ
  • args (argparse.Namespace) -- The arguments given to spack create

  • name (str) -- The name of the package to create

戻り値

A Repo object capable of determining the path to the package file

戻り値の型

Repo

spack.cmd.create.get_url(args)

Get the URL to use.

Use a default URL if none is provided.

パラメータ

args (argparse.Namespace) -- The arguments given to spack create

戻り値

The URL of the package

戻り値の型

str

spack.cmd.create.get_versions(args, name)

Returns a list of versions and hashes for a package.

Also returns a BuildSystemGuesser object.

Returns default values if no URL is provided.

パラメータ
  • args (argparse.Namespace) -- The arguments given to spack create

  • name (str) -- The name of the package

戻り値

Versions and hashes, and a

BuildSystemGuesser object

戻り値の型

str and BuildSystemGuesser

spack.cmd.create.setup_parser(subparser)
spack.cmd.deactivate module
spack.cmd.deactivate.deactivate(parser, args)
spack.cmd.deactivate.setup_parser(subparser)
spack.cmd.debug module
spack.cmd.debug.create_db_tarball(args)
spack.cmd.debug.debug(parser, args)
spack.cmd.debug.setup_parser(subparser)
spack.cmd.dependencies module
spack.cmd.dependencies.dependencies(parser, args)
spack.cmd.dependencies.setup_parser(subparser)
spack.cmd.dependents module
spack.cmd.dependents.dependents(parser, args)
spack.cmd.dependents.get_dependents(pkg_name, ideps, transitive=False, dependents=None)

Get all dependents for a package.

パラメータ
  • pkg_name (str) -- name of the package whose dependents should be returned

  • ideps (dict) -- dictionary of dependents, from inverted_dependencies()

  • transitive (bool, optional) -- return transitive dependents when True

spack.cmd.dependents.inverted_dependencies()

Iterate through all packages and return a dictionary mapping package names to possible dependnecies.

Virtual packages are included as sources, so that you can query dependents of, e.g., mpi, but virtuals are not included as actual dependents.

spack.cmd.dependents.setup_parser(subparser)
spack.cmd.diy module
spack.cmd.diy.diy(self, args)
spack.cmd.diy.setup_parser(subparser)
spack.cmd.docs module
spack.cmd.docs.docs(parser, args)
spack.cmd.edit module
spack.cmd.edit.edit(parser, args)
spack.cmd.edit.edit_package(name, repo_path, namespace)

Opens the requested package file in your favorite $EDITOR.

パラメータ
  • name (str) -- The name of the package

  • repo_path (str) -- The path to the repository containing this package

  • namespace (str) -- A valid namespace registered with Spack

spack.cmd.edit.setup_parser(subparser)
spack.cmd.env module
class spack.cmd.env.ViewAction

ベースクラス: object

static actions()
disable = 'disable'
enable = 'enable'
regenerate = 'regenerate'
spack.cmd.env.env(parser, args)

Look for a function called environment_<name> and call it.

spack.cmd.env.env_activate(args)
spack.cmd.env.env_activate_setup_parser(subparser)

set the current environment

spack.cmd.env.env_create(args)
spack.cmd.env.env_create_setup_parser(subparser)

create a new environment

spack.cmd.env.env_deactivate(args)
spack.cmd.env.env_deactivate_setup_parser(subparser)

deactivate any active environment in the shell

spack.cmd.env.env_list(args)
spack.cmd.env.env_list_setup_parser(subparser)

list available environments

spack.cmd.env.env_loads(args)
spack.cmd.env.env_loads_setup_parser(subparser)

list modules for an installed environment '(see spack module loads)'

spack.cmd.env.env_remove(args)

Remove a named environment.

This removes an environment managed by Spack. Directory environments and spack.yaml files embedded in repositories should be removed manually.

spack.cmd.env.env_remove_setup_parser(subparser)

remove an existing environment

spack.cmd.env.env_status(args)
spack.cmd.env.env_status_setup_parser(subparser)

print whether there is an active environment

spack.cmd.env.env_view(args)
spack.cmd.env.env_view_setup_parser(subparser)

manage a view associated with the environment

spack.cmd.env.setup_parser(subparser)
spack.cmd.env.subcommand_functions = {}

Dictionary mapping subcommand names and aliases to functions

spack.cmd.env.subcommands = ['activate', 'deactivate', 'create', ['remove', 'rm'], ['list', 'ls'], ['status', 'st'], 'loads', 'view']

List of subcommands of spack env

spack.cmd.extensions module
spack.cmd.extensions.extensions(parser, args)
spack.cmd.extensions.setup_parser(subparser)
spack.cmd.fetch module
spack.cmd.fetch.fetch(parser, args)
spack.cmd.fetch.setup_parser(subparser)
spack.cmd.find module
spack.cmd.find.find(parser, args)
spack.cmd.find.query_arguments(args)
spack.cmd.find.setup_env(env)

Create a function for decorating specs when in an environment.

spack.cmd.find.setup_parser(subparser)
spack.cmd.flake8 module
spack.cmd.flake8.add_pattern_exemptions(line, codes)

Add a flake8 exemption to a line.

spack.cmd.flake8.changed_files(args)

Get list of changed files in the Spack repository.

spack.cmd.flake8.exclude_directories = ['/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/lib/spack/external']

List of directories to exclude from checks.

spack.cmd.flake8.filter_file(source, dest, output=False)

Filter a single file through all the patterns in pattern_exemptions.

spack.cmd.flake8.flake8(parser, args)
spack.cmd.flake8.is_package(f)

Whether flake8 should consider a file as a core file or a package.

We run flake8 with different exceptions for the core and for packages, since we allow from spack import * and poking globals into packages.

spack.cmd.flake8.pattern_exemptions = {re.compile('package.py$'): {'F403': [re.compile('^from spack import \\*$')], 'E501': [re.compile('^\\s*homepage\\s*='), re.compile('^\\s*url\\s*='), re.compile('^\\s*git\\s*='), re.compile('^\\s*svn\\s*='), re.compile('^\\s*hg\\s*='), re.compile('^\\s*list_url\\s*='), re.compile('^\\s*version\\('), re.compile('^\\s*variant\\('), re.compile('^\\s*provides\\('), re.compile('^\\s*extends\\('), re.compile('^\\s*depends_on\\('), re.compile('^\\s*conflicts\\('), re.compile('^\\s*resource\\('), re.compile('^\\s*patch\\(')], 'F811': [re.compile('^\\s*@when\\(.*\\)')]}, re.compile('.py$'): {'E501': [re.compile('(https?|ftp|file)\\:'), re.compile('([\\\'"])[0-9a-fA-F]{32,}\\1')]}}
This is a dict that maps:
filename pattern ->
flake8 exemption code ->

list of patterns, for which matching lines should have codes applied.

For each file, if the filename pattern matches, we'll add per-line exemptions if any patterns in the sub-dict match.

spack.cmd.flake8.setup_parser(subparser)
spack.cmd.gpg module
spack.cmd.gpg.gpg(parser, args)
spack.cmd.gpg.gpg_create(args)

create a new key

spack.cmd.gpg.gpg_export(args)

export a secret key

spack.cmd.gpg.gpg_init(args)

add the default keys to the keyring

spack.cmd.gpg.gpg_list(args)

list keys available in the keyring

spack.cmd.gpg.gpg_sign(args)

sign a package

spack.cmd.gpg.gpg_trust(args)

add a key to the keyring

spack.cmd.gpg.gpg_untrust(args)

remove a key from the keyring

spack.cmd.gpg.gpg_verify(args)

verify a signed package

spack.cmd.gpg.setup_parser(subparser)
spack.cmd.graph module
spack.cmd.graph.graph(parser, args)
spack.cmd.graph.setup_parser(subparser)
spack.cmd.help module
spack.cmd.help.help(parser, args)
spack.cmd.help.setup_parser(subparser)
spack.cmd.info module
class spack.cmd.info.VariantFormatter(variants, max_widths=(30, 20, 30))

ベースクラス: object

default(v)
lines
spack.cmd.info.info(parser, args)
spack.cmd.info.padder(str_list, extra=0)

Return a function to pad elements of a list.

spack.cmd.info.print_text_info(pkg)

Print out a plain text description of a package.

spack.cmd.info.section_title(s)
spack.cmd.info.setup_parser(subparser)
spack.cmd.info.variant(s)
spack.cmd.info.version(s)
spack.cmd.install module
spack.cmd.install.default_log_file(spec)

Computes the default filename for the log file and creates the corresponding directory if not present

spack.cmd.install.install(parser, args, **kwargs)
spack.cmd.install.install_spec(cli_args, kwargs, abstract_spec, spec)

Do the actual installation.

spack.cmd.install.setup_parser(subparser)
spack.cmd.install.update_kwargs_from_args(args, kwargs)

Parse cli arguments and construct a dictionary that will be passed to Package.do_install API

spack.cmd.license module
class spack.cmd.license.LicenseError

ベースクラス: object

add_error(error)
error_messages()
has_errors()
spack.cmd.license.apache2_mit_spdx = '(Apache-2.0 OR MIT)'

Spack's license identifier

spack.cmd.license.git = <exe: ['/usr/bin/git']>

need the git command to check new files

spack.cmd.license.lgpl_exceptions = ['lib/spack/spack/cmd/license.py', 'lib/spack/spack/test/cmd/license.py']

licensed files that can have LGPL language in them so far, just this command -- so it can find LGPL things elsewhere

spack.cmd.license.license(parser, args)
spack.cmd.license.license_lines = 6

SPDX license id must appear in the first <license_lines> lines of a file

spack.cmd.license.licensed_files = ['^bin/spack$', '^bin/spack-python$', '^bin/sbang$', '^lib/spack/spack/.*\\.py$', '^lib/spack/spack/.*\\.sh$', '^lib/spack/llnl/.*\\.py$', '^lib/spack/env/cc$', '^lib/spack/docs/(?!command_index|spack|llnl).*\\.rst$', '^lib/spack/docs/.*\\.py$', '^lib/spack/external/__init__.py$', '^lib/spack/external/ordereddict_backport.py$', '^share/spack/.*\\.sh$', '^share/spack/.*\\.bash$', '^share/spack/.*\\.csh$', '^share/spack/qa/run-[^/]*$', '^var/spack/repos/.*/package.py$']

regular expressions for licensed files.

spack.cmd.license.list_files(args)

list files in spack that should have license headers

spack.cmd.license.setup_parser(subparser)
spack.cmd.license.verify(args)

verify that files in spack have the right license header

spack.cmd.list module
spack.cmd.list.filter_by_name(pkgs, args)

Filters the sequence of packages according to user prescriptions

パラメータ
  • pkgs -- sequence of packages

  • args -- parsed command line arguments

戻り値

filtered and sorted list of packages

spack.cmd.list.formatter(func)

Decorator used to register formatters

spack.cmd.list.github_url(pkg)

Link to a package file on github.

spack.cmd.list.html(pkg_names, out)

Print out information on all packages in Sphinx HTML.

This is intended to be inlined directly into Sphinx documentation. We write HTML instead of RST for speed; generating RST from all packages causes the Sphinx build to take forever. Including this as raw HTML is much faster.

spack.cmd.list.list(parser, args)
spack.cmd.list.name_only(pkgs, out)
spack.cmd.list.rows_for_ncols(elts, ncols)

Print out rows in a table with ncols of elts laid out vertically.

spack.cmd.list.rst(pkg_names, out)

Print out information on all packages in restructured text.

spack.cmd.list.rst_table(elts)

Print out a RST-style table.

spack.cmd.list.setup_parser(subparser)
spack.cmd.load module
spack.cmd.load.load(parser, args)
spack.cmd.load.setup_parser(subparser)

Parser is only constructed so that this prints a nice help message with -h.

spack.cmd.location module
spack.cmd.location.location(parser, args)
spack.cmd.location.setup_parser(subparser)
spack.cmd.log_parse module
spack.cmd.log_parse.log_parse(parser, args)
spack.cmd.log_parse.setup_parser(subparser)
spack.cmd.mirror module
spack.cmd.mirror.mirror(parser, args)
spack.cmd.mirror.mirror_add(args)

Add a mirror to Spack.

spack.cmd.mirror.mirror_create(args)

Create a directory to be used as a spack mirror, and fill it with package archives.

spack.cmd.mirror.mirror_list(args)

Print out available mirrors to the console.

spack.cmd.mirror.mirror_remove(args)

Remove a mirror by name.

spack.cmd.mirror.setup_parser(subparser)
spack.cmd.module module
spack.cmd.module.add_deprecated_command(subparser, name)
spack.cmd.module.handle_deprecated_command(args, unknown_args)
spack.cmd.module.module(parser, args, unknown_args)
spack.cmd.module.setup_parser(subparser)
spack.cmd.patch module
spack.cmd.patch.patch(parser, args)
spack.cmd.patch.setup_parser(subparser)
spack.cmd.pkg module
spack.cmd.pkg.diff_packages(rev1, rev2)
spack.cmd.pkg.list_packages(rev)
spack.cmd.pkg.pkg(parser, args)
spack.cmd.pkg.pkg_add(args)

Add a package to the git stage.

spack.cmd.pkg.pkg_added(args)

Show packages added since a commit.

spack.cmd.pkg.pkg_diff(args)

Compare packages available in two different git revisions.

spack.cmd.pkg.pkg_list(args)

List packages associated with a particular spack git revision.

spack.cmd.pkg.pkg_removed(args)

Show packages removed since a commit.

spack.cmd.pkg.setup_parser(subparser)
spack.cmd.providers module
spack.cmd.providers.providers(parser, args)
spack.cmd.providers.setup_parser(subparser)
spack.cmd.pydoc module
spack.cmd.pydoc.pydoc(parser, args)
spack.cmd.pydoc.setup_parser(subparser)
spack.cmd.python module
spack.cmd.python.python(parser, args)
spack.cmd.python.setup_parser(subparser)
spack.cmd.reindex module
spack.cmd.reindex.reindex(parser, args)
spack.cmd.release_jobs module
spack.cmd.release_jobs.compute_spec_deps(spec_list, stream_like=None)

Computes all the dependencies for the spec(s) and generates a JSON object which provides both a list of unique spec names as well as a comprehensive list of all the edges in the dependency graph. For example, given a single spec like 'readline@7.0', this function generates the following JSON object:

{
    "dependencies": [
        {
            "depends": "readline/ip6aiun",
            "spec": "readline/ip6aiun"
        },
        {
            "depends": "ncurses/y43rifz",
            "spec": "readline/ip6aiun"
        },
        {
            "depends": "ncurses/y43rifz",
            "spec": "readline/ip6aiun"
        },
        {
            "depends": "pkgconf/eg355zb",
            "spec": "ncurses/y43rifz"
        },
        {
            "depends": "pkgconf/eg355zb",
            "spec": "readline/ip6aiun"
        }
    ],
    "specs": [
        {
          "root_spec": "readline@7.0%clang@9.1.0-apple arch=darwin-...",
          "spec": "readline@7.0%clang@9.1.0-apple arch=darwin-highs...",
          "label": "readline/ip6aiun"
        },
        {
          "root_spec": "readline@7.0%clang@9.1.0-apple arch=darwin-...",
          "spec": "ncurses@6.1%clang@9.1.0-apple arch=darwin-highsi...",
          "label": "ncurses/y43rifz"
        },
        {
          "root_spec": "readline@7.0%clang@9.1.0-apple arch=darwin-...",
          "spec": "pkgconf@1.5.4%clang@9.1.0-apple arch=darwin-high...",
          "label": "pkgconf/eg355zb"
        }
    ]
}

The object can be optionally written out to some stream. This is useful, for example, when we need to concretize and generate the dependencies of a spec in a specific docker container.

spack.cmd.release_jobs.get_deps_using_container(specs, image)
spack.cmd.release_jobs.get_job_name(spec, osarch)
spack.cmd.release_jobs.get_spec_dependencies(specs, deps, spec_labels, image=None)
spack.cmd.release_jobs.get_spec_string(spec)
spack.cmd.release_jobs.print_staging_summary(spec_labels, dependencies, stages)
spack.cmd.release_jobs.release_jobs(parser, args)
spack.cmd.release_jobs.setup_parser(subparser)
spack.cmd.release_jobs.spec_deps_key_label(s)
spack.cmd.release_jobs.stage_spec_jobs(spec_set, containers, current_system=None)
Take a set of release specs along with a dictionary describing the

available docker containers and what compilers they have, and generate a list of "stages", where the jobs in any stage are dependent only on jobs in previous stages. This allows us to maximize build parallelism within the gitlab-ci framework.

パラメータ
  • spec_set (CombinatorialSpecSet) -- Iterable containing all the specs to build.

  • containers (dict) -- Describes the docker containers available to use for concretizing specs (and also for the gitlab runners to use for building packages). The schema can be found at "lib/spack/spack/schema/os_container_mapping.py"

  • current_system (string) -- If provided, this indicates not to use the containers for concretizing the release specs, but rather just assume the current system is in the "containers" dictionary. A SpackError will be raised if the current system is not in that dictionary.

Returns: A tuple of information objects describing the specs, dependencies

and stages:

spec_labels: A dictionary mapping the spec labels which are made of

(pkg-name/hash-prefix), to objects containing "rootSpec" and "spec" keys. The root spec is the spec of which this spec is a dependency and the spec is the formatted spec string for this spec.

deps: A dictionary where the keys should also have appeared as keys in

the spec_labels dictionary, and the values are the set of dependencies for that spec.

stages: An ordered list of sets, each of which contains all the jobs to

built in that stage. The jobs are expressed in the same format as the keys in the spec_labels and deps objects.

spack.cmd.remove module
spack.cmd.remove.remove(parser, args)
spack.cmd.remove.setup_parser(subparser)
spack.cmd.repo module
spack.cmd.repo.repo(parser, args)
spack.cmd.repo.repo_add(args)

Add a package source to Spack's configuration.

spack.cmd.repo.repo_create(args)

Create a new package repository.

spack.cmd.repo.repo_list(args)

Show registered repositories and their namespaces.

spack.cmd.repo.repo_remove(args)

Remove a repository from Spack's configuration.

spack.cmd.repo.setup_parser(subparser)
spack.cmd.resource module
spack.cmd.resource.resource(parser, args)
spack.cmd.resource.resource_list(args)

list all resources known to spack (currently just patches)

spack.cmd.resource.resource_show(args)

show a resource, identified by its checksum

spack.cmd.resource.setup_parser(subparser)
spack.cmd.restage module
spack.cmd.restage.restage(parser, args)
spack.cmd.restage.setup_parser(subparser)
spack.cmd.setup module
spack.cmd.setup.setup(self, args)
spack.cmd.setup.setup_parser(subparser)
spack.cmd.setup.spack_transitive_include_path()
spack.cmd.setup.write_spconfig(package, dirty)
spack.cmd.spec module
spack.cmd.spec.setup_parser(subparser)
spack.cmd.spec.spec(parser, args)
spack.cmd.stage module
spack.cmd.stage.setup_parser(subparser)
spack.cmd.stage.stage(parser, args)
spack.cmd.test module
spack.cmd.test.do_list(args, unknown_args)

Print a lists of tests than what pytest offers.

spack.cmd.test.setup_parser(subparser)
spack.cmd.test.test(parser, args, unknown_args)
spack.cmd.uninstall module
spack.cmd.uninstall.add_common_arguments(subparser)
spack.cmd.uninstall.dependent_environments(specs)

Map each spec to environments that depend on it.

パラメータ

specs (list) -- list of Specs

戻り値

mapping from spec to lists of dependent Environments

戻り値の型

(dict)

spack.cmd.uninstall.do_uninstall(env, specs, force)

Uninstalls all the specs in a list.

パラメータ
  • env (Environment) -- active environment, or None if there is not one

  • specs (list) -- list of specs to be uninstalled

  • force (bool) -- force uninstallation (boolean)

spack.cmd.uninstall.find_matching_specs(env, specs, allow_multiple_matches=False, force=False)
Returns a list of specs matching the not necessarily

concretized specs given from cli

パラメータ
  • env (Environment) -- active environment, or None if there is not one

  • specs (list) -- list of specs to be matched against installed packages

  • allow_multiple_matches (bool) -- if True multiple matches are admitted

戻り値

list of specs

spack.cmd.uninstall.get_uninstall_list(args, specs, env)
spack.cmd.uninstall.inactive_dependent_environments(spec_envs)

Strip the active environment from a dependent map.

Take the output of dependent_environment() and remove the active environment from all mappings. Remove any specs in the map that now have no dependent environments. Return the result.

パラメータ

(dict) -- mapping from spec to lists of dependent Environments

戻り値

mapping from spec to lists of inactive dependent Environments

戻り値の型

(dict)

spack.cmd.uninstall.installed_dependents(specs, env)

Map each spec to a list of its installed dependents.

パラメータ
  • specs (list) -- list of Specs

  • env (Environment) -- the active environment, or None

戻り値

two mappings: one from specs to their dependent

environments in the active environment (or global scope if there is no environment), and one from specs to their dependents in inactive environments (empty if there is no environment

戻り値の型

(tuple of dicts)

spack.cmd.uninstall.setup_parser(subparser)
spack.cmd.uninstall.uninstall(parser, args)
spack.cmd.uninstall.uninstall_specs(args, specs)
spack.cmd.unload module
spack.cmd.unload.setup_parser(subparser)

Parser is only constructed so that this prints a nice help message with -h.

spack.cmd.unload.unload(parser, args)
spack.cmd.unuse module
spack.cmd.unuse.setup_parser(subparser)

Parser is only constructed so that this prints a nice help message with -h.

spack.cmd.unuse.unuse(parser, args)
spack.cmd.upload_s3 module
spack.cmd.upload_s3.get_s3_session(endpoint_url)
spack.cmd.upload_s3.setup_parser(subparser)
spack.cmd.upload_s3.update_index(args)

Update the index of an s3 buildcache

spack.cmd.upload_s3.upload_s3(parser, args)
spack.cmd.upload_s3.upload_spec(args)

Upload a spec to s3 bucket

spack.cmd.url module
spack.cmd.url.name_parsed_correctly(pkg, name)

Determine if the name of a package was correctly parsed.

パラメータ
戻り値

True if the name was correctly parsed, else False

戻り値の型

bool

spack.cmd.url.print_name_and_version(url)

Prints a URL. Underlines the detected name with dashes and the detected version with tildes.

パラメータ

url (str) -- The url to parse

spack.cmd.url.remove_separators(version)

Removes separator characters ('.', '_', and '-') from a version.

A version like 1.2.3 may be displayed as 1_2_3 in the URL. Make sure 1.2.3, 1-2-3, 1_2_3, and 123 are considered equal. Unfortunately, this also means that 1.23 and 12.3 are equal.

パラメータ

version (str or Version) -- A version

戻り値

The version with all separator characters removed

戻り値の型

str

spack.cmd.url.setup_parser(subparser)
spack.cmd.url.url(parser, args)
spack.cmd.url.url_list(args)
spack.cmd.url.url_list_parsing(args, urls, url, pkg)

Helper function for url_list().

パラメータ
  • args (argparse.Namespace) -- The arguments given to spack url list

  • urls (set) -- List of URLs that have already been added

  • url (str or None) -- A URL to potentially add to urls depending on args

  • pkg (spack.package.PackageBase) -- The Spack package

戻り値

The updated set of urls

戻り値の型

set

spack.cmd.url.url_parse(args)
spack.cmd.url.url_stats(args)
spack.cmd.url.url_summary(args)
spack.cmd.url.version_parsed_correctly(pkg, version)

Determine if the version of a package was correctly parsed.

パラメータ
戻り値

True if the name was correctly parsed, else False

戻り値の型

bool

spack.cmd.use module
spack.cmd.use.setup_parser(subparser)

Parser is only constructed so that this prints a nice help message with -h.

spack.cmd.use.use(parser, args)
spack.cmd.versions module
spack.cmd.versions.setup_parser(subparser)
spack.cmd.versions.versions(parser, args)
spack.cmd.view module

Produce a "view" of a Spack DAG.

A "view" is file hierarchy representing the union of a number of Spack-installed package file hierarchies. The union is formed from:

  • specs resolved from the package names given by the user (the seeds)

  • all dependencies of the seeds unless user specifies --no-dependencies

  • less any specs with names matching the regular expressions given by --exclude

The view can be built and tore down via a number of methods (the "actions"):

  • symlink :: a file system view which is a directory hierarchy that is the union of the hierarchies of the installed packages in the DAG where installed files are referenced via symlinks.

  • hardlink :: like the symlink view but hardlinks are used.

  • statlink :: a view producing a status report of a symlink or hardlink view.

The file system view concept is imspired by Nix, implemented by brett.viren@gmail.com ca 2016.

All operations on views are performed via proxy objects such as YamlFilesystemView.

spack.cmd.view.disambiguate_in_view(specs, view)

When dealing with querying actions (remove/status) we only need to disambiguate among specs in the view

spack.cmd.view.setup_parser(sp)
spack.cmd.view.view(parser, args)

Produce a view of a set of packages.

Module contents
spack.cmd.all_commands()

Get a sorted list of all spack commands.

This will list the lib/spack/spack/cmd directory and find the commands there to construct the list. It does not actually import the python files -- just gets the names.

spack.cmd.cmd_name(python_name)

Convert module name (with _) to command name (with -).

spack.cmd.disambiguate_spec(spec, env)

Given a spec, figure out which installed package it refers to.

パラメータ
spack.cmd.display_specs(specs, args=None, **kwargs)

Display human readable specs with customizable formatting.

Prints the supplied specs to the screen, formatted according to the arguments provided.

Specs are grouped by architecture and compiler, and columnized if possible. There are three possible "modes":

  • short (default): short specs with name and version, columnized

  • paths: Two columns: one for specs, one for paths

  • deps: Dependency-tree style, like spack spec; can get long

Options can add more information to the default display. Options can be provided either as keyword arguments or as an argparse namespace. Keyword arguments take precedence over settings in the argparse namespace.

パラメータ
  • specs (list of spack.spec.Spec) -- the specs to display

  • args (optional argparse.Namespace) -- namespace containing formatting arguments

キーワード引数
  • mode (str) -- Either 'short', 'paths', or 'deps'

  • long (bool) -- Display short hashes with specs

  • very_long (bool) -- Display full hashes with specs (supersedes long)

  • namespace (bool) -- Print namespaces along with names

  • show_flags (bool) -- Show compiler flags with specs

  • variants (bool) -- Show variants with specs

  • indent (int) -- indent each line this much

  • decorators (dict) -- dictionary mappng specs to decorators

  • header_callback (function) -- called at start of arch/compiler sections

  • all_headers (bool) -- show headers even when arch/compiler aren't defined

spack.cmd.elide_list(line_list, max_num=10)

Takes a long list and limits it to a smaller number of elements, replacing intervening elements with '...'. For example:

elide_list([1,2,3,4,5,6], 4)

gives:

[1, 2, 3, '...', 6]
spack.cmd.extant_file(f)

Argparse type for files that exist.

spack.cmd.get_command(cmd_name)

Imports the command's function from a module and returns it.

パラメータ

cmd_name (str) -- name of the command for which to get a module (contains -, not _).

spack.cmd.get_module(cmd_name)

Imports the module for a particular command name and returns it.

パラメータ

cmd_name (str) -- name of the command for which to get a module (contains -, not _).

spack.cmd.gray_hash(spec, length)
spack.cmd.parse_specs(args, **kwargs)

Convenience function for parsing arguments from specs. Handles common exceptions and dies if there are errors.

spack.cmd.python_name(cmd_name)

Convert - to _ in command name, to make a valid identifier.

spack.cmd.remove_options(parser, *options)

Remove some options from a parser.

spack.cmd.spack_is_git_repo()

Ensure that this instance of Spack is a git clone.

spack.compilers package

Submodules
spack.compilers.arm module
class spack.compilers.arm.Arm(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

cc_names = ['armclang']
cxx11_flag
cxx14_flag
cxx17_flag
cxx_names = ['armclang++']
f77_names = ['armflang']
classmethod f77_version(f77)
fc_names = ['armflang']
classmethod fc_version(fc)
openmp_flag
pic_flag
version_argument = '--version'
version_regex = 'Arm C\\/C\\+\\+\\/Fortran Compiler version ([^ )]+)'
spack.compilers.cce module
class spack.compilers.cce.Cce(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

Cray compiler environment compiler.

PrgEnv = 'PrgEnv-cray'
PrgEnv_compiler = 'cce'
cc_names = ['cc']
cxx11_flag
cxx_names = ['CC']
f77_names = ['ftn']
fc_names = ['ftn']
openmp_flag
pic_flag
suffixes = ['-mp-\\d\\.\\d']
version_argument = '-V'
version_regex = '[Vv]ersion.*?(\\d+(\\.\\d+)+)'
spack.compilers.clang module
class spack.compilers.clang.Clang(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

cc_names = ['clang']
cxx11_flag
cxx14_flag
cxx17_flag
cxx_names = ['clang++']
classmethod default_version(comp)

The --version option works for clang compilers. On most platforms, output looks like this:

clang version 3.1 (trunk 149096)
Target: x86_64-unknown-linux-gnu
Thread model: posix

On macOS, it looks like this:

Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
Thread model: posix
classmethod extract_version_from_output(output)

Extracts the version from compiler's output.

f77_names = ['flang', 'gfortran', 'xlf_r']
classmethod f77_version(f77)
fc_names = ['flang', 'gfortran', 'xlf90_r']
classmethod fc_version(fc)
is_apple
openmp_flag
pic_flag
setup_custom_environment(pkg, env)

Set the DEVELOPER_DIR environment for the Xcode toolchain.

On macOS, not all buildsystems support querying CC and CXX for the compilers to use and instead query the Xcode toolchain for what compiler to run. This side-steps the spack wrappers. In order to inject spack into this setup, we need to copy (a subset of) Xcode.app and replace the compiler executables with symlinks to the spack wrapper. Currently, the stage is used to store the Xcode.app copies. We then set the 'DEVELOPER_DIR' environment variables to cause the xcrun and related tools to use this Xcode.app.

spack.compilers.clang.f77_mapping = [('gfortran', 'clang/gfortran'), ('xlf_r', 'xl_r/xlf_r'), ('xlf', 'xl/xlf'), ('pgfortran', 'pgi/pgfortran'), ('ifort', 'intel/ifort')]

compiler symlink mappings for mixed f77 compilers

spack.compilers.clang.fc_mapping = [('gfortran', 'clang/gfortran'), ('xlf90_r', 'xl_r/xlf90_r'), ('xlf90', 'xl/xlf90'), ('pgfortran', 'pgi/pgfortran'), ('ifort', 'intel/ifort')]

compiler symlink mappings for mixed f90/fc compilers

spack.compilers.fj module
class spack.compilers.fj.Fj(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

cc_names = ['fcc']
cxx11_flag
cxx14_flag
cxx98_flag
cxx_names = ['FCC']
f77_names = ['frt']
fc_names = ['frt']
openmp_flag
pic_flag
version_argument = '--version'
version_regex = '\\((?:FCC|FRT)\\) ([\\d.]+)'
spack.compilers.gcc module
class spack.compilers.gcc.Gcc(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

PrgEnv = 'PrgEnv-gnu'
PrgEnv_compiler = 'gcc'
cc_names = ['gcc']
cxx11_flag
cxx14_flag
cxx17_flag
cxx98_flag
cxx_names = ['g++']
classmethod default_version(cc)

Older versions of gcc use the -dumpversion option. Output looks like this:

4.4.7

In GCC 7, this option was changed to only return the major version of the compiler:

7

A new -dumpfullversion option was added that gives us what we want:

7.2.0
f77_names = ['gfortran']
classmethod f77_version(f77)
fc_names = ['gfortran']
classmethod fc_version(fc)

Older versions of gfortran use the -dumpversion option. Output looks like this:

GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
Copyright (C) 2010 Free Software Foundation, Inc.

or:

4.8.5

In GCC 7, this option was changed to only return the major version of the compiler:

7

A new -dumpfullversion option was added that gives us what we want:

7.2.0
openmp_flag
pic_flag
stdcxx_libs
suffixes = ['-mp-\\d\\.\\d', '-\\d\\.\\d', '-\\d', '\\d\\d']
spack.compilers.intel module
class spack.compilers.intel.Intel(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

PrgEnv = 'PrgEnv-intel'
PrgEnv_compiler = 'intel'
cc_names = ['icc']
cxx11_flag
cxx14_flag
cxx_names = ['icpc']
f77_names = ['ifort']
fc_names = ['ifort']
openmp_flag
pic_flag
stdcxx_libs
version_argument = '--version'
version_regex = '\\((?:IFORT|ICC)\\) ([^ ]+)'
spack.compilers.nag module
class spack.compilers.nag.Nag(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

cc_names = []
cxx11_flag
cxx_names = []
f77_names = ['nagfor']
f77_rpath_arg
fc_names = ['nagfor']
fc_rpath_arg
openmp_flag
pic_flag
version_argument = '-V'
version_regex = 'NAG Fortran Compiler Release ([0-9.]+)'
spack.compilers.pgi module
class spack.compilers.pgi.Pgi(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

PrgEnv = 'PrgEnv-pgi'
PrgEnv_compiler = 'pgi'
cc_names = ['pgcc']
cxx11_flag
cxx_names = ['pgc++', 'pgCC']
f77_names = ['pgfortran', 'pgf77']
fc_names = ['pgfortran', 'pgf95', 'pgf90']
openmp_flag
pic_flag
suffixes = ['-?llvm']
version_argument = '-V'
version_regex = 'pg[^ ]* ([0-9.]+)-[0-9]+ (LLVM )?[^ ]+ target on '
spack.compilers.xl module
class spack.compilers.xl.Xl(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compiler.Compiler

cc_names = ['xlc']
cxx11_flag
cxx_names = ['xlC', 'xlc++']
f77_names = ['xlf']
classmethod f77_version(f77)
fc_names = ['xlf90', 'xlf95', 'xlf2003', 'xlf2008']
classmethod fc_version(fc)
fflags
openmp_flag
pic_flag
version_argument = '-qversion'
version_regex = '([0-9]?[0-9]\\.[0-9])'
spack.compilers.xl_r module
class spack.compilers.xl_r.XlR(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: spack.compilers.xl.Xl

cc_names = ['xlc_r']
cxx_names = ['xlC_r', 'xlc++_r']
f77_names = ['xlf_r']
fc_names = ['xlf90_r', 'xlf95_r', 'xlf2003_r', 'xlf2008_r']
Module contents

This module contains functions related to finding compilers on the system and configuring Spack to use multiple compilers.

exception spack.compilers.CompilerDuplicateError(compiler_spec, arch_spec)

ベースクラス: spack.error.SpackError

exception spack.compilers.CompilerSpecInsufficientlySpecificError(compiler_spec)

ベースクラス: spack.error.SpackError

exception spack.compilers.InvalidCompilerConfigurationError(compiler_spec)

ベースクラス: spack.error.SpackError

exception spack.compilers.NoCompilerForSpecError(compiler_spec, target)

ベースクラス: spack.error.SpackError

exception spack.compilers.NoCompilersError

ベースクラス: spack.error.SpackError

spack.compilers.add_compilers_to_config(compilers, scope=None, init_config=True)

Add compilers to the config for the specified architecture.

パラメータ
  • compilers (-) -- a list of Compiler objects.

  • scope (-) -- configuration scope to modify.

spack.compilers.all_compiler_specs(scope=None, init_config=True)
spack.compilers.all_compiler_types()
spack.compilers.all_compilers(scope=None)
spack.compilers.all_compilers_config(scope=None, init_config=True)

Return a set of specs for all the compiler versions currently available to build with. These are instances of CompilerSpec.

spack.compilers.all_os_classes()

Return the list of classes for all operating systems available on this platform

spack.compilers.class_for_compiler_name(compiler_name)

Given a compiler module name, get the corresponding Compiler class.

spack.compilers.compiler_config_files()
spack.compilers.compiler_for_spec(cspec_like, *args, **kwargs)
spack.compilers.compiler_from_config_entry(items)
spack.compilers.compilers_for_arch(arch_spec, scope=None)
spack.compilers.compilers_for_spec(cspec_like, *args, **kwargs)
spack.compilers.find(cspec_like, *args, **kwargs)
spack.compilers.find_compilers(*paths)

Return a list of compilers found in the supplied paths. This invokes the find_compilers() method for each operating system associated with the host platform, and appends the compilers detected to a list.

spack.compilers.find_specs_by_arch(cspec_like, *args, **kwargs)
spack.compilers.get_compiler_config(scope=None, init_config=True)

Return the compiler configuration for the specified architecture.

spack.compilers.get_compiler_duplicates(cspec_like, *args, **kwargs)
spack.compilers.get_compilers(config, cspec=None, arch_spec=None)
spack.compilers.pkg_spec_for_compiler(cspec)

Return the spec of the package that provides the compiler.

spack.compilers.remove_compiler_from_config(cspec_like, *args, **kwargs)
spack.compilers.supported(cspec_like, *args, **kwargs)
spack.compilers.supported_compilers()

Return a set of names of compilers supported by Spack.

See available_compilers() to get a list of all the available versions of supported compilers.

spack.hooks package

Submodules
spack.hooks.extensions module
spack.hooks.extensions.pre_uninstall(spec)
spack.hooks.licensing module
spack.hooks.licensing.post_install(spec)

This hook symlinks local licenses to the global license for licensed software.

spack.hooks.licensing.pre_install(spec)

This hook handles global license setup for licensed software.

spack.hooks.licensing.set_up_license(pkg)

Prompt the user, letting them know that a license is required.

For packages that rely on license files, a global license file is created and opened for editing.

For packages that rely on environment variables to point to a license, a warning message is printed.

For all other packages, documentation on how to set up a license is printed.

Create local symlinks that point to the global license file.

spack.hooks.licensing.write_license_file(pkg, license_path)

Writes empty license file.

Comments give suggestions on alternative methods of installing a license.

spack.hooks.module_file_generation module
spack.hooks.module_file_generation.post_install(spec)
spack.hooks.module_file_generation.post_uninstall(spec)
spack.hooks.permissions_setters module
exception spack.hooks.permissions_setters.InvalidPermissionsError(message, long_message=None)

ベースクラス: spack.error.SpackError

Error class for invalid permission setters

spack.hooks.permissions_setters.chmod_real_entries(path, perms)
spack.hooks.permissions_setters.forall_files(path, fn, args, dir_args=None)

Apply function to all files in directory, with file as first arg.

Does not apply to the root dir. Does not apply to links

spack.hooks.permissions_setters.post_install(spec)
spack.hooks.sbang module
spack.hooks.sbang.filter_shebang(path)

Adds a second shebang line, using sbang, at the beginning of a file.

spack.hooks.sbang.filter_shebangs_in_directory(directory, filenames=None)
spack.hooks.sbang.post_install(spec)

This hook edits scripts so that they call /bin/bash $spack_prefix/bin/sbang instead of something longer than the shebang limit.

spack.hooks.sbang.shebang_too_long(path)

Detects whether a file has a shebang line that is too long.

spack.hooks.yaml_version_check module

Yaml Version Check is a module for ensuring that config file formats are compatible with the current version of Spack.

spack.hooks.yaml_version_check.check_compiler_yaml_version()
spack.hooks.yaml_version_check.pre_run()
Module contents

This package contains modules with hooks for various stages in the Spack install process. You can add modules here and they'll be executed by package at various times during the package lifecycle.

Each hook is just a function that takes a package as a parameter. Hooks are not executed in any particular order.

Currently the following hooks are supported:

  • pre_run()

  • pre_install(spec)

  • post_install(spec)

  • pre_uninstall(spec)

  • post_uninstall(spec)

This can be used to implement support for things like module systems (e.g. modules, dotkit, etc.) or to add other custom features.

class spack.hooks.HookRunner(hook_name)

ベースクラス: object

spack.hooks.all_hook_modules()

spack.modules package

Submodules
spack.modules.common module

Here we consolidate the logic for creating an abstract description of the information that module systems need.

This information maps a single spec to:

  • a unique module filename

  • the module file content

and is divided among four classes:

  • a configuration class that provides a convenient interface to query details about the configuration for the spec under consideration.

  • a layout class that provides the information associated with module file names and directories

  • a context class that provides the dictionary used by the template engine to generate the module file

  • a writer that collects and uses the information above to either write or remove the module file

Each of the four classes needs to be sub-classed when implementing a new module type.

class spack.modules.common.BaseConfiguration(spec)

ベースクラス: object

Manipulates the information needed to generate a module file to make querying easier. It needs to be sub-classed for specific module types.

blacklisted

Returns True if the module has been blacklisted, False otherwise.

context
env

List of environment modifications that should be done in the module.

environment_blacklist

List of variables that should be left unmodified.

hash

Hash tag for the module or None

literals_to_load

List of literal modules to be loaded.

naming_scheme

Naming scheme suitable for non-hierarchical layouts

specs_to_load

List of specs that should be loaded in the module file.

specs_to_prereq

List of specs that should be prerequisite of the module file.

suffixes

List of suffixes that should be appended to the module file name.

template

Returns the name of the template to use for the module file or None if not specified in the configuration.

verbose

Returns True if the module file needs to be verbose, False otherwise

class spack.modules.common.BaseContext(configuration)

ベースクラス: spack.tengine.Context

Provides the base context needed for template rendering.

This class needs to be sub-classed for specific module types. The following attributes need to be implemented:

  • fields

autoload

List of modules that needs to be loaded automatically.

category
configure_options
context_properties = ['spec', 'timestamp', 'category', 'short_description', 'long_description', 'configure_options', 'environment_modifications', 'autoload', 'verbose']
environment_modifications

List of environment modifications to be processed.

long_description
short_description
spec
timestamp
verbose

Verbosity level.

class spack.modules.common.BaseFileLayout(configuration)

ベースクラス: object

Provides information on the layout of module files. Needs to be sub-classed for specific module types.

classmethod dirname()

Root folder for module files of this type.

extension = None

This needs to be redefined

filename

Name of the module file for the current spec.

spec

Spec under consideration

use_name

Returns the 'use' name of the module i.e. the name you have to type to console to use it. This implementation fits the needs of most non-hierarchical layouts.

class spack.modules.common.BaseModuleFileWriter(spec)

ベースクラス: object

remove()

Deletes the module file.

write(overwrite=False)

Writes the module file.

パラメータ

overwrite (bool) -- if True it is fine to overwrite an already existing file. If False the operation is skipped an we print a warning to the user.

exception spack.modules.common.DefaultTemplateNotDefined

ベースクラス: AttributeError, spack.modules.common.ModulesError

Raised if the attribute 'default_template' has not been specified in the derived classes.

class spack.modules.common.ModuleIndexEntry(path, use_name)

ベースクラス: tuple

path

Alias for field number 0

use_name

Alias for field number 1

exception spack.modules.common.ModulesError(message, long_message=None)

ベースクラス: spack.error.SpackError

Base error for modules.

exception spack.modules.common.ModulesTemplateNotFoundError(message, long_message=None)

ベースクラス: spack.modules.common.ModulesError, RuntimeError

Raised if the template for a module file was not found.

spack.modules.common.configuration = {'enable': ['tcl', 'dotkit'], 'lmod': {'all': {'conflict': [], 'environment': {'unset': []}, 'filter': {'environment_blacklist': []}, 'load': []}, 'blacklist': [], 'blacklist_implicits': False, 'core_compilers': [], 'hash_length': 7, 'hierarchy': ['mpi'], 'verbose': False, 'whitelist': []}, 'prefix_inspections': {'': ['CMAKE_PREFIX_PATH'], 'bin': ['PATH'], 'include': ['CPATH'], 'lib': ['LD_LIBRARY_PATH', 'LIBRARY_PATH'], 'lib/pkgconfig': ['PKG_CONFIG_PATH'], 'lib64': ['LD_LIBRARY_PATH', 'LIBRARY_PATH'], 'lib64/pkgconfig': ['PKG_CONFIG_PATH'], 'man': ['MANPATH'], 'share/aclocal': ['ACLOCAL_PATH'], 'share/man': ['MANPATH']}}

config section for this file

spack.modules.common.dependencies(spec, request='all')

Returns the list of dependent specs for a given spec, according to the request passed as parameter.

パラメータ
  • spec -- spec to be analyzed

  • request -- either 'none', 'direct' or 'all'

戻り値

list of dependencies

The return list will be empty if request is 'none', will contain the direct dependencies if request is 'direct', or the entire DAG if request is 'all'.

spack.modules.common.generate_module_index(root, modules)
spack.modules.common.merge_config_rules(configuration, spec)

Parses the module specific part of a configuration and returns a dictionary containing the actions to be performed on the spec passed as an argument.

パラメータ
  • configuration -- module specific configuration (e.g. entries under the top-level 'tcl' key)

  • spec -- spec for which we need to generate a module file

戻り値

actions to be taken on the spec passed as an argument

戻り値の型

dict

spack.modules.common.prefix_inspections = {'': ['CMAKE_PREFIX_PATH'], 'bin': ['PATH'], 'include': ['CPATH'], 'lib': ['LD_LIBRARY_PATH', 'LIBRARY_PATH'], 'lib/pkgconfig': ['PKG_CONFIG_PATH'], 'lib64': ['LD_LIBRARY_PATH', 'LIBRARY_PATH'], 'lib64/pkgconfig': ['PKG_CONFIG_PATH'], 'man': ['MANPATH'], 'share/aclocal': ['ACLOCAL_PATH'], 'share/man': ['MANPATH']}

Inspections that needs to be done on spec prefixes

spack.modules.common.read_module_index(root)
spack.modules.common.read_module_indices()
spack.modules.common.root_path(name)

Returns the root folder for module file installation.

パラメータ

name -- name of the module system t be used (e.g. 'tcl')

戻り値

root folder for module file installation

spack.modules.common.roots = {'dotkit': '$spack/share/spack/dotkit', 'lmod': '$spack/share/spack/lmod', 'tcl': '$spack/share/spack/modules'}

Root folders where the various module files should be written

spack.modules.common.update_dictionary_extending_lists(target, update)

Updates a dictionary, but extends lists instead of overriding them.

パラメータ
  • target -- dictionary to be updated

  • update -- update to be applied

spack.modules.common.upstream_module(spec, module_type)
spack.modules.dotkit module

This module implements the classes necessary to generate dotkit modules.

class spack.modules.dotkit.DotkitConfiguration(spec)

ベースクラス: spack.modules.common.BaseConfiguration

Configuration class for dotkit module files.

class spack.modules.dotkit.DotkitContext(configuration)

ベースクラス: spack.modules.common.BaseContext

Context class for dotkit module files.

context_properties = ['spec', 'timestamp', 'category', 'short_description', 'long_description', 'configure_options', 'environment_modifications', 'autoload', 'verbose']
class spack.modules.dotkit.DotkitFileLayout(configuration)

ベースクラス: spack.modules.common.BaseFileLayout

File layout for dotkit module files.

extension = 'dk'

file extension of dotkit module files

class spack.modules.dotkit.DotkitModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for dotkit module files.

default_template = 'modules/modulefile.dk'
spack.modules.dotkit.configuration = {}

Dotkit specific part of the configuration

spack.modules.dotkit.configuration_registry = {}

configuration}

Type

Caches the configuration {spec_hash

spack.modules.dotkit.make_configuration(spec)

Returns the dotkit configuration for spec

spack.modules.dotkit.make_context(spec)

Returns the context information for spec

spack.modules.dotkit.make_layout(spec)

Returns the layout information for spec

spack.modules.lmod module
exception spack.modules.lmod.CoreCompilersNotFoundError(message, long_message=None)

ベースクラス: spack.error.SpackError, KeyError

Error raised if the key 'core_compilers' has not been specified in the configuration file.

class spack.modules.lmod.LmodConfiguration(spec)

ベースクラス: spack.modules.common.BaseConfiguration

Configuration class for lmod module files.

available

Returns a dictionary of the services that are currently available.

core_compilers

Returns the list of "Core" compilers

例外

CoreCompilersNotFoundError -- if the key was not specified in the configuration file or the sequence is empty

hierarchy_tokens

Returns the list of tokens that are part of the modulefile hierarchy. 'compiler' is always present.

missing

Returns the list of tokens that are not available.

provides

Returns a dictionary mapping all the services provided by this spec to the spec itself.

requires

Returns a dictionary mapping all the requirements of this spec to the actual provider. 'compiler' is always present among the requirements.

class spack.modules.lmod.LmodContext(configuration)

ベースクラス: spack.modules.common.BaseContext

Context class for lmod module files.

conditionally_unlocked_paths

Returns the list of paths that are unlocked conditionally. Each item in the list is a tuple with the structure (condition, path).

context_properties = ['has_modulepath_modifications', 'has_conditional_modifications', 'name_part', 'version_part', 'provides', 'missing', 'unlocked_paths', 'conditionally_unlocked_paths', 'spec', 'timestamp', 'category', 'short_description', 'long_description', 'configure_options', 'environment_modifications', 'autoload', 'verbose']
has_conditional_modifications

True if this module modifies MODULEPATH conditionally to the presence of other services in the environment, False otherwise.

has_modulepath_modifications

True if this module modifies MODULEPATH, False otherwise.

missing

Returns a list of missing services.

name_part

Name of this provider.

provides

Returns the dictionary of provided services.

unlocked_paths

Returns the list of paths that are unlocked unconditionally.

version_part

Version of this provider.

class spack.modules.lmod.LmodFileLayout(configuration)

ベースクラス: spack.modules.common.BaseFileLayout

File layout for lmod module files.

arch_dirname

Returns the root folder for THIS architecture

available_path_parts

List of path parts that are currently available. Needed to construct the file name.

extension = 'lua'

file extension of lua module files

filename

Returns the filename for the current module file

token_to_path(name, value)

Transforms a hierarchy token into the corresponding path part.

パラメータ
  • name (str) -- name of the service in the hierarchy

  • value -- actual provider of the service

戻り値

part of the path associated with the service

戻り値の型

str

unlocked_paths

Returns a dictionary mapping conditions to a list of unlocked paths.

The paths that are unconditionally unlocked are under the key 'None'. The other keys represent the list of services you need loaded to unlock the corresponding paths.

use_name

Returns the 'use' name of the module i.e. the name you have to type to console to use it.

class spack.modules.lmod.LmodModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for lmod module files.

default_template = 'modules/modulefile.lua'
exception spack.modules.lmod.NonVirtualInHierarchyError(message, long_message=None)

ベースクラス: spack.error.SpackError, TypeError

Error raised if non-virtual specs are used as hierarchy tokens in the lmod section of 'modules.yaml'.

spack.modules.lmod.configuration = {'all': {'conflict': [], 'environment': {'unset': []}, 'filter': {'environment_blacklist': []}, 'load': []}, 'blacklist': [], 'blacklist_implicits': False, 'core_compilers': [], 'hash_length': 7, 'hierarchy': ['mpi'], 'verbose': False, 'whitelist': []}

lmod specific part of the configuration

spack.modules.lmod.configuration_registry = {}

configuration}

Type

Caches the configuration {spec_hash

spack.modules.lmod.guess_core_compilers(store=False)

Guesses the list of core compilers installed in the system.

パラメータ

store (bool) -- if True writes the core compilers to the modules.yaml configuration file

戻り値

List of core compilers, if found, or None

spack.modules.lmod.make_configuration(spec)

Returns the lmod configuration for spec

spack.modules.lmod.make_context(spec)

Returns the context information for spec

spack.modules.lmod.make_layout(spec)

Returns the layout information for spec

spack.modules.tcl module

This module implements the classes necessary to generate TCL non-hierarchical modules.

class spack.modules.tcl.TclConfiguration(spec)

ベースクラス: spack.modules.common.BaseConfiguration

Configuration class for tcl module files.

conflicts

Conflicts for this module file

class spack.modules.tcl.TclContext(configuration)

ベースクラス: spack.modules.common.BaseContext

Context class for tcl module files.

conflicts

List of conflicts for the tcl module file.

context_properties = ['prerequisites', 'conflicts', 'spec', 'timestamp', 'category', 'short_description', 'long_description', 'configure_options', 'environment_modifications', 'autoload', 'verbose']
prerequisites

List of modules that needs to be loaded automatically.

class spack.modules.tcl.TclFileLayout(configuration)

ベースクラス: spack.modules.common.BaseFileLayout

File layout for tcl module files.

class spack.modules.tcl.TclModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for tcl module files.

default_template = 'modules/modulefile.tcl'
spack.modules.tcl.configuration = {}

TCL specific part of the configuration

spack.modules.tcl.configuration_registry = {}

configuration}

Type

Caches the configuration {spec_hash

spack.modules.tcl.make_configuration(spec)

Returns the tcl configuration for spec

spack.modules.tcl.make_context(spec)

Returns the context information for spec

spack.modules.tcl.make_layout(spec)

Returns the layout information for spec

Module contents

This package contains code for creating environment modules, which can include dotkits, TCL non-hierarchical modules, LUA hierarchical modules, and others.

class spack.modules.DotkitModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for dotkit module files.

default_template = 'modules/modulefile.dk'
class spack.modules.TclModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for tcl module files.

default_template = 'modules/modulefile.tcl'
class spack.modules.LmodModulefileWriter(spec)

ベースクラス: spack.modules.common.BaseModuleFileWriter

Writer class for lmod module files.

default_template = 'modules/modulefile.lua'

spack.operating_systems package

Submodules
spack.operating_systems.cnk module
class spack.operating_systems.cnk.Cnk

ベースクラス: spack.architecture.OperatingSystem

Compute Node Kernel (CNK) is the node level operating system for the IBM Blue Gene series of supercomputers. The compute nodes of the Blue Gene family of supercomputers run CNK, a lightweight kernel that runs on each node and supports one application running for one user on that node.

spack.operating_systems.cnl module
class spack.operating_systems.cnl.Cnl

ベースクラス: spack.architecture.OperatingSystem

Compute Node Linux (CNL) is the operating system used for the Cray XC series super computers. It is a very stripped down version of GNU/Linux. Any compilers found through this operating system will be used with modules. If updated, user must make sure that version and name are updated to indicate that OS has been upgraded (or downgraded)

find_compiler(cmp_cls, *paths)

Try to find the given type of compiler in the user's environment. For each set of compilers found, this returns compiler objects with the cc, cxx, f77, fc paths and the version filled in.

This will search for compilers with the names in cc_names, cxx_names, etc. and it will group them if they have common prefixes, suffixes, and versions. e.g., gcc-mp-4.7 would be grouped with g++-mp-4.7 and gfortran-mp-4.7.

find_compilers(*paths)

Return a list of compilers found in the supplied paths. This invokes the find() method for each Compiler class, and appends the compilers detected to a list.

spack.operating_systems.cray_frontend module
class spack.operating_systems.cray_frontend.CrayFrontend

ベースクラス: spack.operating_systems.linux_distro.LinuxDistro

Represents OS that runs on login and service nodes of the Cray platform. It acts as a regular Linux without Cray-specific modules and compiler wrappers.

find_compilers(*paths)

Calls the overridden method but prevents it from detecting Cray compiler wrappers to avoid possible false detections. The detected compilers come into play only if a user decides to work with the Cray's frontend OS as if it was a regular Linux environment.

spack.operating_systems.linux_distro module
class spack.operating_systems.linux_distro.LinuxDistro

ベースクラス: spack.architecture.OperatingSystem

This class will represent the autodetected operating system for a Linux System. Since there are many different flavors of Linux, this class will attempt to encompass them all through autodetection using the python module platform and the method platform.dist()

spack.operating_systems.mac_os module
class spack.operating_systems.mac_os.MacOs

ベースクラス: spack.architecture.OperatingSystem

This class represents the macOS operating system. This will be auto detected using the python platform.mac_ver. The macOS platform will be represented using the major version operating system name, i.e el capitan, yosemite...etc.

spack.operating_systems.mac_os.macos_version()

temporary workaround to return a macOS version as a Version object

Module contents

spack.platforms package

Submodules
spack.platforms.bgq module
class spack.platforms.bgq.Bgq

ベースクラス: spack.architecture.Platform

back_end = 'ppc64'
default = 'ppc64'
classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

front_end = 'power7'
priority = 30
spack.platforms.cray module
class spack.platforms.cray.Cray

ベースクラス: spack.architecture.Platform

classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

priority = 10
classmethod setup_platform_environment(pkg, env)

Change the linker to default dynamic to be more similar to linux/standard linker behavior

spack.platforms.darwin module
class spack.platforms.darwin.Darwin

ベースクラス: spack.architecture.Platform

back_end = 'x86_64'
default = 'x86_64'
classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

front_end = 'x86_64'
priority = 89
spack.platforms.linux module
class spack.platforms.linux.Linux

ベースクラス: spack.architecture.Platform

classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

priority = 90
spack.platforms.test module
class spack.platforms.test.Test

ベースクラス: spack.architecture.Platform

back_end = 'x86_64'
back_os = 'debian6'
default = 'x86_64'
default_os = 'debian6'
classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

front_end = 'x86_32'
front_os = 'redhat6'
priority = 1000000
Module contents

spack.reporters package

Submodules
spack.reporters.cdash module
class spack.reporters.cdash.CDash(args)

ベースクラス: spack.reporter.Reporter

Generate reports of spec installations for CDash.

To use this reporter, pass the --cdash-upload-url argument to spack install:

spack install --cdash-upload-url=\
    https://mydomain.com/cdash/submit.php?project=Spack <spec>

In this example, results will be uploaded to the Spack project on the CDash instance hosted at https://mydomain.com/cdash.

build_report(directory_name, input_data)
concretization_report(directory_name, msg)
initialize_report(directory_name)
report_for_package(directory_name, package, duration)
upload(filename)
spack.reporters.junit module
class spack.reporters.junit.JUnit(args)

ベースクラス: spack.reporter.Reporter

Generate reports of spec installations for JUnit.

build_report(filename, report_data)
Module contents

spack.schema package

Submodules
spack.schema.compilers module

Schema for compilers.yaml configuration file.

#: Properties for inclusion in other schemas
properties = {
    'compilers': {
        'type': 'array',
        'items': [{
            'type': 'object',
            'additionalProperties': False,
            'properties': {
                'compiler': {
                    'type': 'object',
                    'additionalProperties': False,
                    'required': [
                        'paths', 'spec', 'modules', 'operating_system'],
                    'properties': {
                        'paths': {
                            'type': 'object',
                            'required': ['cc', 'cxx', 'f77', 'fc'],
                            'additionalProperties': False,
                            'properties': {
                                'cc':  {'anyOf': [{'type': 'string'},
                                                  {'type': 'null'}]},
                                'cxx': {'anyOf': [{'type': 'string'},
                                                  {'type': 'null'}]},
                                'f77': {'anyOf': [{'type': 'string'},
                                                  {'type': 'null'}]},
                                'fc':  {'anyOf': [{'type': 'string'},
                                                  {'type': 'null'}]}}},
                        'flags': {
                            'type': 'object',
                            'additionalProperties': False,
                            'properties': {
                                'cflags': {'anyOf': [{'type': 'string'},
                                                     {'type': 'null'}]},
                                'cxxflags': {'anyOf': [{'type': 'string'},
                                                       {'type': 'null'}]},
                                'fflags': {'anyOf': [{'type': 'string'},
                                                     {'type': 'null'}]},
                                'cppflags': {'anyOf': [{'type': 'string'},
                                                       {'type': 'null'}]},
                                'ldflags': {'anyOf': [{'type': 'string'},
                                                      {'type': 'null'}]},
                                'ldlibs': {'anyOf': [{'type': 'string'},
                                                     {'type': 'null'}]}}},
                        'spec': {'type': 'string'},
                        'operating_system': {'type': 'string'},
                        'target': {'type': 'string'},
                        'alias': {'anyOf': [{'type': 'string'},
                                            {'type': 'null'}]},
                        'modules': {'anyOf': [{'type': 'string'},
                                              {'type': 'null'},
                                              {'type': 'array'}]},
                        'environment': {
                            'type': 'object',
                            'default': {},
                            'additionalProperties': False,
                            'properties': {
                                'set': {
                                    'type': 'object',
                                    'patternProperties': {
                                        # Variable name
                                        r'\w[\w-]*': {
                                            'anyOf': [{'type': 'string'},
                                                      {'type': 'number'}]
                                        }
                                    }
                                },
                                'unset': {
                                    'type': 'object',
                                    'patternProperties': {
                                        # Variable name
                                        r'\w[\w-]*': {'type': 'null'}
                                    }
                                },
                                'prepend-path': {
                                    'type': 'object',
                                    'patternProperties': {
                                        # Variable name
                                        r'\w[\w-]*': {
                                            'anyOf': [{'type': 'string'},
                                                      {'type': 'number'}]
                                        }
                                    }
                                },
                                'append-path': {
                                    'type': 'object',
                                    'patternProperties': {
                                        # Variable name
                                        r'\w[\w-]*': {
                                            'anyOf': [{'type': 'string'},
                                                      {'type': 'number'}]
                                        }
                                    }
                                }
                            }
                        },
                        'extra_rpaths': {
                            'type': 'array',
                            'default': [],
                            'items': {'type': 'string'}
                        }
                    }
                }
            }
        }]
    }
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack compiler configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.compilers.properties = {'compilers': {'items': [{'type': 'object', 'additionalProperties': False, 'properties': {'compiler': {'type': 'object', 'additionalProperties': False, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'properties': {'paths': {'type': 'object', 'required': ['cc', 'cxx', 'f77', 'fc'], 'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'flags': {'type': 'object', 'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'spec': {'type': 'string'}, 'operating_system': {'type': 'string'}, 'target': {'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'modules': {'anyOf': [{'type': 'string'}, {'type': 'null'}, {'type': 'array'}]}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'unset': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'null'}}}, 'prepend-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'append-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}}}, 'extra_rpaths': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}}}], 'type': 'array'}}

Properties for inclusion in other schemas

spack.schema.compilers.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'compilers': {'items': [{'type': 'object', 'additionalProperties': False, 'properties': {'compiler': {'type': 'object', 'additionalProperties': False, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'properties': {'paths': {'type': 'object', 'required': ['cc', 'cxx', 'f77', 'fc'], 'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'flags': {'type': 'object', 'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'spec': {'type': 'string'}, 'operating_system': {'type': 'string'}, 'target': {'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'modules': {'anyOf': [{'type': 'string'}, {'type': 'null'}, {'type': 'array'}]}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'unset': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'null'}}}, 'prepend-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'append-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}}}, 'extra_rpaths': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}}}], 'type': 'array'}}, 'title': 'Spack compiler configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.config module

Schema for config.yaml configuration file.

#: Properties for inclusion in other schemas
properties = {
    'config': {
        'type': 'object',
        'default': {},
        'properties': {
            'install_tree': {'type': 'string'},
            'install_hash_length': {'type': 'integer', 'minimum': 1},
            'install_path_scheme': {'type': 'string'},
            'build_stage': {
                'oneOf': [
                    {'type': 'string'},
                    {'type': 'array',
                     'items': {'type': 'string'}}],
            },
            'extensions': {
                'type': 'array',
                'items': {'type': 'string'}
            },
            'template_dirs': {
                'type': 'array',
                'items': {'type': 'string'}
            },
            'module_roots': {
                'type': 'object',
                'additionalProperties': False,
                'properties': {
                    'tcl': {'type': 'string'},
                    'lmod': {'type': 'string'},
                    'dotkit': {'type': 'string'},
                },
            },
            'source_cache': {'type': 'string'},
            'misc_cache': {'type': 'string'},
            'verify_ssl': {'type': 'boolean'},
            'install_missing_compilers': {'type': 'boolean'},
            'debug': {'type': 'boolean'},
            'checksum': {'type': 'boolean'},
            'locks': {'type': 'boolean'},
            'dirty': {'type': 'boolean'},
            'build_language': {'type': 'string'},
            'build_jobs': {'type': 'integer', 'minimum': 1},
            'ccache': {'type': 'boolean'},
            'db_lock_timeout': {'type': 'integer', 'minimum': 1},
            'package_lock_timeout': {
                'anyOf': [
                    {'type': 'integer', 'minimum': 1},
                    {'type': 'null'}
                ],
            },
        },
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack core configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.config.properties = {'config': {'default': {}, 'properties': {'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'dirty': {'type': 'boolean'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_missing_compilers': {'type': 'boolean'}, 'install_path_scheme': {'type': 'string'}, 'install_tree': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'module_roots': {'additionalProperties': False, 'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'package_lock_timeout': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}]}, 'source_cache': {'type': 'string'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.config.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'config': {'default': {}, 'properties': {'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'dirty': {'type': 'boolean'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_missing_compilers': {'type': 'boolean'}, 'install_path_scheme': {'type': 'string'}, 'install_tree': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'module_roots': {'additionalProperties': False, 'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'package_lock_timeout': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}]}, 'source_cache': {'type': 'string'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.env module

Schema for env.yaml configuration file.

                    },
                    'specs': {
                        # Specs is a list of specs, which can have
                        # optional additional properties in a sub-dict
                        'type': 'array',
                        'default': [],
                        'additionalProperties': False,
                        'items': {
                            'anyOf': [
                                {'type': 'string'},
                                {'type': 'null'},
                                {'type': 'object'},
                            ]
                        }
                    },
                    'view': {
                        'type': ['boolean', 'string']
                    }
                }
            )
        }
    }
}
spack.schema.merged module

Schema for configuration merged into one file.

    'additionalProperties': False,
    'properties': properties,
}
spack.schema.merged.properties = {'compilers': {'items': [{'type': 'object', 'additionalProperties': False, 'properties': {'compiler': {'type': 'object', 'additionalProperties': False, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'properties': {'paths': {'type': 'object', 'required': ['cc', 'cxx', 'f77', 'fc'], 'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'flags': {'type': 'object', 'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'spec': {'type': 'string'}, 'operating_system': {'type': 'string'}, 'target': {'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'modules': {'anyOf': [{'type': 'string'}, {'type': 'null'}, {'type': 'array'}]}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'unset': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'null'}}}, 'prepend-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'append-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}}}, 'extra_rpaths': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}}}], 'type': 'array'}, 'config': {'default': {}, 'properties': {'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'dirty': {'type': 'boolean'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_missing_compilers': {'type': 'boolean'}, 'install_path_scheme': {'type': 'string'}, 'install_tree': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'module_roots': {'additionalProperties': False, 'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'package_lock_timeout': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}]}, 'source_cache': {'type': 'string'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}, 'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'modules': {'additionalProperties': False, 'default': {}, 'properties': {'dotkit': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}, 'enable': {'default': [], 'items': {'enum': ['tcl', 'dotkit', 'lmod'], 'type': 'string'}, 'type': 'array'}, 'lmod': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {'type': 'object', 'properties': {'core_compilers': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'hierarchy': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}]}, 'prefix_inspections': {'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'tcl': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}}, 'type': 'object'}, 'packages': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'modules': {'default': {}, 'type': 'object'}, 'paths': {'default': {}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'variants': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}, 'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.merged.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'compilers': {'items': [{'type': 'object', 'additionalProperties': False, 'properties': {'compiler': {'type': 'object', 'additionalProperties': False, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'properties': {'paths': {'type': 'object', 'required': ['cc', 'cxx', 'f77', 'fc'], 'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'flags': {'type': 'object', 'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'spec': {'type': 'string'}, 'operating_system': {'type': 'string'}, 'target': {'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'modules': {'anyOf': [{'type': 'string'}, {'type': 'null'}, {'type': 'array'}]}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'unset': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'null'}}}, 'prepend-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'append-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}}}, 'extra_rpaths': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}}}], 'type': 'array'}, 'config': {'default': {}, 'properties': {'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'dirty': {'type': 'boolean'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_missing_compilers': {'type': 'boolean'}, 'install_path_scheme': {'type': 'string'}, 'install_tree': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'module_roots': {'additionalProperties': False, 'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'package_lock_timeout': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}]}, 'source_cache': {'type': 'string'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}, 'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'modules': {'additionalProperties': False, 'default': {}, 'properties': {'dotkit': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}, 'enable': {'default': [], 'items': {'enum': ['tcl', 'dotkit', 'lmod'], 'type': 'string'}, 'type': 'array'}, 'lmod': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {'type': 'object', 'properties': {'core_compilers': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'hierarchy': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}]}, 'prefix_inspections': {'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'tcl': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}}, 'type': 'object'}, 'packages': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'modules': {'default': {}, 'type': 'object'}, 'paths': {'default': {}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'variants': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}, 'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack merged configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.mirrors module

Schema for mirrors.yaml configuration file.

#: Properties for inclusion in other schemas
properties = {
    'mirrors': {
        'type': 'object',
        'default': {},
        'additionalProperties': False,
        'patternProperties': {
            r'\w[\w-]*': {'type': 'string'},
        },
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack mirror configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.mirrors.properties = {'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.mirrors.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}}, 'title': 'Spack mirror configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.modules module

Schema for modules.yaml configuration file.

#: valid keyword.
#:
#: THIS NEEDS TO BE UPDATED FOR EVERY NEW KEYWORD THAT
#: IS ADDED IMMEDIATELY BELOW THE MODULE TYPE ATTRIBUTE
spec_regex = r'(?!hierarchy|verbose|hash_length|whitelist|' \
             r'blacklist|naming_scheme|core_compilers|all)(^\w[\w-]*)'

#: Matches an anonymous spec, i.e. a spec without a root name
anonymous_spec_regex = r'^[\^@%+~]'

#: Definitions for parts of module schema
array_of_strings = {
    'type': 'array', 'default': [], 'items': {'type': 'string'}
}

dictionary_of_strings = {
    'type': 'object', 'patternProperties': {r'\w[\w-]*': {'type': 'string'}}
}

dependency_selection = {'type': 'string', 'enum': ['none', 'direct', 'all']}

module_file_configuration = {
    'type': 'object',
    'default': {},
    'additionalProperties': False,
    'properties': {
        'filter': {
            'type': 'object',
            'default': {},
            'additionalProperties': False,
            'properties': {
                'environment_blacklist': {
                    'type': 'array',
                    'default': [],
                    'items': {
                        'type': 'string'
                    }
                }
            }
        },
        'template': {
            'type': 'string'
        },
        'autoload': dependency_selection,
        'prerequisites': dependency_selection,
        'conflict': array_of_strings,
        'load': array_of_strings,
        'suffixes': {
            'type': 'object',
            'validate_spec': True,
            'patternProperties': {
                r'\w[\w-]*': {  # key
                    'type': 'string'
                }
            }
        },
        'environment': {
            'type': 'object',
            'default': {},
            'additionalProperties': False,
            'properties': {
                'set': dictionary_of_strings,
                'unset': array_of_strings,
                'prepend_path': dictionary_of_strings,
                'append_path': dictionary_of_strings
            }
        }
    }
}

module_type_configuration = {
    'type': 'object',
    'default': {},
    'allOf': [
        {'properties': {
            'verbose': {
                'type': 'boolean',
                'default': False
            },
            'hash_length': {
                'type': 'integer',
                'minimum': 0,
                'default': 7
            },
            'whitelist': array_of_strings,
            'blacklist': array_of_strings,
            'blacklist_implicits': {
                'type': 'boolean',
                'default': False
            },
            'naming_scheme': {
                'type': 'string'  # Can we be more specific here?
            },
            'all': module_file_configuration,
        }
        },
        {'validate_spec': True,
         'patternProperties': {
             spec_regex: module_file_configuration,
             anonymous_spec_regex: module_file_configuration,
         }
         }
    ]
}


# Properties for inclusion into other schemas (requires definitions)
properties = {
    'modules': {
        'type': 'object',
        'default': {},
        'additionalProperties': False,
        'properties': {
            'prefix_inspections': {
                'type': 'object',
                'patternProperties': {
                    # prefix-relative path to be inspected for existence
                    r'\w[\w-]*': array_of_strings
                }
            },
            'enable': {
                'type': 'array',
                'default': [],
                'items': {
                    'type': 'string',
                    'enum': ['tcl', 'dotkit', 'lmod']}},
            'lmod': {
                'allOf': [
                    # Base configuration
                    module_type_configuration,
                    {
                        'type': 'object',
                        'properties': {
                            'core_compilers': array_of_strings,
                            'hierarchy': array_of_strings
                        },
                    }  # Specific lmod extensions
                ]
            },
            'tcl': {
                'allOf': [
                    # Base configuration
                    module_type_configuration,
                    {}  # Specific tcl extensions
                ]
            },
            'dotkit': {
                'allOf': [
                    # Base configuration
                    module_type_configuration,
                    {}  # Specific dotkit extensions
                ]
            },
        },
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack module file configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.modules.anonymous_spec_regex = '^[\\^@%+~]'

Matches an anonymous spec, i.e. a spec without a root name

spack.schema.modules.array_of_strings = {'default': [], 'items': {'type': 'string'}, 'type': 'array'}

Definitions for parts of module schema

spack.schema.modules.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'modules': {'additionalProperties': False, 'default': {}, 'properties': {'dotkit': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}, 'enable': {'default': [], 'items': {'enum': ['tcl', 'dotkit', 'lmod'], 'type': 'string'}, 'type': 'array'}, 'lmod': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {'type': 'object', 'properties': {'core_compilers': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'hierarchy': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}]}, 'prefix_inspections': {'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'tcl': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}}, 'type': 'object'}}, 'title': 'Spack module file configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.modules.spec_regex = '(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)'

Matches a spec or a multi-valued variant but not another valid keyword.

THIS NEEDS TO BE UPDATED FOR EVERY NEW KEYWORD THAT IS ADDED IMMEDIATELY BELOW THE MODULE TYPE ATTRIBUTE

spack.schema.os_container_mapping module

Schema for os-container-mapping.yaml configuration file.

                            'type': 'array',
                            'default': [],
                            'items': {
                                'type': 'object',
                                'default': {},
                                'additionalProperties': False,
                                'required': ['name'],
                                'properties': {
                                    'name': {'type': 'string'},
                                    'path': {'type': 'string'},
                                },
                            },
                        },
                    },
                },
            },
        },
    },
}
spack.schema.packages module

Schema for packages.yaml configuration files.

#: Properties for inclusion in other schemas
properties = {
    'packages': {
        'type': 'object',
        'default': {},
        'additionalProperties': False,
        'patternProperties': {
            r'\w[\w-]*': {  # package name
                'type': 'object',
                'default': {},
                'additionalProperties': False,
                'properties': {
                    'version': {
                        'type': 'array',
                        'default': [],
                        # version strings
                        'items': {'anyOf': [{'type': 'string'},
                                            {'type': 'number'}]}},
                    'compiler': {
                        'type': 'array',
                        'default': [],
                        'items': {'type': 'string'}},  # compiler specs
                    'buildable': {
                        'type':  'boolean',
                        'default': True,
                    },
                    'permissions': {
                        'type': 'object',
                        'additionalProperties': False,
                        'properties': {
                            'read': {
                                'type':  'string',
                                'enum': ['user', 'group', 'world'],
                            },
                            'write': {
                                'type':  'string',
                                'enum': ['user', 'group', 'world'],
                            },
                            'group': {
                                'type':  'string',
                            },
                        },
                    },
                    'modules': {
                        'type': 'object',
                        'default': {},
                    },
                    'providers': {
                        'type':  'object',
                        'default': {},
                        'additionalProperties': False,
                        'patternProperties': {
                            r'\w[\w-]*': {
                                'type': 'array',
                                'default': [],
                                'items': {'type': 'string'}, }, }, },
                    'paths': {
                        'type': 'object',
                        'default': {},
                    },
                    'variants': {
                        'oneOf': [
                            {'type': 'string'},
                            {'type': 'array',
                             'items': {'type': 'string'}}],
                    },
                },
            },
        },
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack package configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.packages.properties = {'packages': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'modules': {'default': {}, 'type': 'object'}, 'paths': {'default': {}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'variants': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.packages.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'packages': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'modules': {'default': {}, 'type': 'object'}, 'paths': {'default': {}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'variants': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack package configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.projections module

Schema for projections.yaml configuration file.

#: Properties for inclusion in other schemas
properties = {
    'projections': {
        'type': 'object',
        'default': {},
        'patternProperties': {
            r'all|\w[\w-]*': {
                'type': 'string'
            },
        },
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack view projection configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.projections.properties = {'projections': {'default': {}, 'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.projections.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'projections': {'default': {}, 'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}}, 'title': 'Spack view projection configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.repos module

Schema for repos.yaml configuration file.

#: Properties for inclusion in other schemas
properties = {
    'repos': {
        'type': 'array',
        'default': [],
        'items': {'type': 'string'},
    },
}


#: Full schema with metadata
schema = {
    '$schema': 'http://json-schema.org/schema#',
    'title': 'Spack repository configuration file schema',
    'type': 'object',
    'additionalProperties': False,
    'properties': properties,
}
spack.schema.repos.properties = {'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}

Properties for inclusion in other schemas

spack.schema.repos.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'title': 'Spack repository configuration file schema', 'type': 'object'}

Full schema with metadata

spack.schema.spec_set module

Schema for Spack spec-set configuration file.

                        'versions': {
                            'type': 'array',
                            'items': {
                                'oneOf': [
                                    {'type': 'string'},
                                    {'type': 'number'},
                                ],
                            },
                        },
                    },
                },
            },
        },
        'packages': {
            'type': 'object',
            'additionalProperties': False,
            'properties': {
                'packages': {
                    '$ref': '#/definitions/objects_with_version_list'
                },
            }
        },
        'compilers': {
            'type': 'object',
            'additionalProperties': False,
            'properties': {
                'compilers': {
                    '$ref': '#/definitions/objects_with_version_list'
                },
            }
        },
        'specs': {
            'type': 'object',
            'additionalProperties': False,
            'properties': {
                'specs': {'$ref': '#/definitions/list_of_specs'},
            }
        },
    },
    # this is the actual top level object
    'type': 'object',
    'additionalProperties': False,
    'properties': {
        'spec-set': {
            'type': 'object',
            'additionalProperties': False,
            'required': ['matrix'],
            'properties': {
                # top-level settings are keys and need to be unique
                'include': {'$ref': '#/definitions/list_of_specs'},
                'exclude': {'$ref': '#/definitions/list_of_specs'},
                'cdash': {
                    'oneOf': [
                        {'type': 'string'},
                        {'type': 'array',
                         'items': {'type': 'string'}
                        },
                    ],
                },
                'project': {
                    'type': 'string',
                },
                # things under matrix (packages, compilers, etc.)  are a
                # list so that we can potentiall have multiple of them.
                'matrix': {
                    'type': 'array',
                    'items': {
                        'type': 'object',
                        'oneOf': [
                            {'$ref': '#/definitions/specs'},
                            {'$ref': '#/definitions/packages'},
                            {'$ref': '#/definitions/compilers'},
                        ],
                    },
                },
            },
        },
    },
}
spack.schema.specs_deps module

Schema for expressing dependencies of a set of specs in a JSON file

        },
        r'specs': {
            'type': 'array',
            'default': [],
            'items': {
                'type': 'object',
                'additionalProperties': False,
                'required': ['root_spec', 'spec', 'label'],
                'properties': {
                    r'root_spec': {'type': 'string'},
                    r'spec': {'type': 'string'},
                    r'label': {'type': 'string'},
                }
            },
        },
    },
}
spack.schema.upstreams module
spack.schema.upstreams.properties = {'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}

Properties for inclusion in other schemas

spack.schema.upstreams.schema = {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}

Full schema with metadata

Module contents

This module contains jsonschema files for all of Spack's YAML formats.

spack.test package

Submodules
spack.test.architecture module

Test checks if the architecture class is created correctly and also that the functions are looking for the correct architecture name

spack.test.architecture.test_boolness()
spack.test.architecture.test_dict_functions_for_architecture()
spack.test.architecture.test_platform()
spack.test.architecture.test_user_back_end_input(config)

Test when user inputs backend that both the backend target and backend operating system match

spack.test.architecture.test_user_defaults(config)
spack.test.architecture.test_user_front_end_input(config)

Test when user inputs just frontend that both the frontend target and frontend operating system match

spack.test.architecture.test_user_input_combination(config)
spack.test.build_environment module
spack.test.build_environment.build_environment(working_env)
spack.test.build_environment.test_cc_not_changed_by_modules(monkeypatch, working_env)
spack.test.build_environment.test_compiler_config_modifications(monkeypatch, working_env)
spack.test.build_environment.test_package_inheritance_module_setup(config, mock_packages, working_env)
spack.test.build_environment.test_parallel_false_is_not_propagating(config, mock_packages)
spack.test.build_environment.test_set_build_environment_variables(config, mock_packages, working_env, monkeypatch, installation_dir_with_headers)

Check that build_environment supplies the needed library/include directories via the SPACK_LINK_DIRS and SPACK_INCLUDE_DIRS environment variables.

spack.test.build_environment.test_spack_paths_before_module_paths(config, mock_packages, monkeypatch, working_env)
spack.test.build_environment.test_static_to_shared_library(build_environment)
spack.test.build_system_guess module
spack.test.build_system_guess.test_build_systems(url_and_build_system)
spack.test.build_system_guess.url_and_build_system(request, tmpdir)

Sets up the resources to be pulled by the stage with the appropriate file name and returns their url along with the correct build-system guess

spack.test.build_systems module
class spack.test.build_systems.TestAutotoolsPackage

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('config', 'mock_packages'), kwargs={})]
test_none_is_allowed()
test_with_or_without()
spack.test.build_systems.test_affirmative_make_check(directory, config, mock_packages, working_env)

Tests that Spack correctly detects targets in a Makefile.

spack.test.build_systems.test_affirmative_ninja_check(directory, config, mock_packages, working_env)

Tests that Spack correctly detects targets in a Ninja build script.

spack.test.build_systems.test_cmake_bad_generator(config, mock_packages)
spack.test.build_systems.test_cmake_secondary_generator(config, mock_packages)
spack.test.build_systems.test_cmake_std_args(config, mock_packages)
spack.test.build_systems.test_negative_make_check(directory, config, mock_packages, working_env)

Tests that Spack correctly ignores false positives in a Makefile.

spack.test.build_systems.test_negative_ninja_check(directory, config, mock_packages, working_env)

Tests that Spack correctly ignores false positives in a Ninja build script.

spack.test.cc module

This test checks that the Spack cc compiler wrapper is parsing arguments correctly.

spack.test.cc.check_args(cc, args, expected)

Check output arguments that cc produces when called with args.

This assumes that cc will print debug command output with one element per line, so that we see whether arguments that should (or shouldn't) contain spaces are parsed correctly.

spack.test.cc.dump_mode(cc, args)

Make cc dump the mode it detects, and return it.

spack.test.cc.pkg_prefix = '/spack-test-prefix'

The prefix of the package being mock installed

spack.test.cc.real_cc = '/bin/mycc'

the "real" compiler the wrapper is expected to invoke

spack.test.cc.test_as_mode()
spack.test.cc.test_cc_deps()

Ensure -L and RPATHs are not added in cc mode.

spack.test.cc.test_cc_flags(wrapper_flags)
spack.test.cc.test_ccache_prepend_for_cc()
spack.test.cc.test_ccld_deps()

Ensure all flags are added in ccld mode.

spack.test.cc.test_ccld_mode()
spack.test.cc.test_ccld_with_system_dirs()

Ensure all flags are added in ccld mode.

spack.test.cc.test_cpp_flags(wrapper_flags)
spack.test.cc.test_cpp_mode()
spack.test.cc.test_cxx_flags(wrapper_flags)
spack.test.cc.test_dep_include()

Ensure a single dependency include directory is added.

spack.test.cc.test_dep_lib()

Ensure a single dependency RPATH is added.

spack.test.cc.test_dep_lib_no_lib()

Ensure a single dependency RPATH is added with no -L.

spack.test.cc.test_dep_lib_no_rpath()

Ensure a single dependency link flag is added with no dep RPATH.

spack.test.cc.test_dep_rpath()

Ensure RPATHs for root package are added.

spack.test.cc.test_fc_flags(wrapper_flags)
spack.test.cc.test_ld_deps()

Ensure no (extra) -I args or -Wl, are passed in ld mode.

Ensure SPACK_RPATH_DEPS controls -rpath for ld.

spack.test.cc.test_ld_deps_no_rpath()

Ensure SPACK_LINK_DEPS controls -L for ld.

spack.test.cc.test_ld_deps_partial()

Make sure ld -r (partial link) is handled correctly on OS's where it doesn't accept rpaths.

spack.test.cc.test_ld_flags(wrapper_flags)
spack.test.cc.test_ld_mode()
spack.test.cc.test_no_ccache_prepend_for_fc()
spack.test.cc.test_vcheck_mode()
spack.test.cc.wrapper_environment()
spack.test.cc.wrapper_flags()
spack.test.cmd_extensions module
spack.test.cmd_extensions.extension_root(tmpdir)
spack.test.cmd_extensions.hello_world_cmd(extension_root)

Simple extension command with code contained in a single file.

spack.test.cmd_extensions.hello_world_with_module_in_root(extension_root)

Extension command with additional code in the root folder.

spack.test.cmd_extensions.test_command_with_import(hello_world_with_module_in_root)
spack.test.cmd_extensions.test_simple_command_extension(hello_world_cmd)
spack.test.compilers module
class spack.test.compilers.MockCompiler

ベースクラス: spack.compiler.Compiler

name
version
spack.test.compilers.flag_value(flag, spec)
spack.test.compilers.supported_flag_test(flag, flag_value_ref, spec=None)
spack.test.compilers.test_all_compilers(config)
spack.test.compilers.test_arm_version_detection(version_str, expected_version)
spack.test.compilers.test_cce_flags()
spack.test.compilers.test_cce_version_detection(version_str, expected_version)
spack.test.compilers.test_clang_flags()
spack.test.compilers.test_clang_version_detection(version_str, expected_version)
spack.test.compilers.test_compiler_flags_from_config_are_grouped()
spack.test.compilers.test_default_flags()
spack.test.compilers.test_fj_flags()
spack.test.compilers.test_fj_version_detection(version_str, expected_version)
spack.test.compilers.test_gcc_flags()
spack.test.compilers.test_gcc_version_detection(version_str, expected_version)
spack.test.compilers.test_get_compiler_duplicates(config)
spack.test.compilers.test_intel_flags()
spack.test.compilers.test_intel_version_detection(version_str, expected_version)
spack.test.compilers.test_nag_flags()
spack.test.compilers.test_nag_version_detection(version_str, expected_version)
spack.test.compilers.test_pgi_flags()
spack.test.compilers.test_pgi_version_detection(version_str, expected_version)
spack.test.compilers.test_version_detection_is_empty()
spack.test.compilers.test_version_detection_is_successful()
spack.test.compilers.test_xl_flags()
spack.test.compilers.test_xl_r_flags()
spack.test.compilers.test_xl_version_detection(version_str, expected_version)
spack.test.compilers.unsupported_flag_test(flag, spec=None)
spack.test.concretize module
class spack.test.concretize.TestConcretize

ベースクラス: object

concretize_difficult_packages(a, b)

Test a couple of large packages that are often broken due to current limitations in the concretizer

concretize_multi_provider()
pytestmark = [Mark(name='usefixtures', args=('config', 'mock_packages'), kwargs={})]
test_architecture_deep_inheritance()

Make sure that indirect dependencies receive architecture information from the root even when partial architecture information is provided by an intermediate dependency.

test_architecture_inheritance()

test_architecture_inheritance is likely to fail with an UnavailableCompilerVersionError if the architecture is concretized incorrectly.

test_compiler_child()
test_compiler_flags_from_user_are_grouped()
test_compiler_inheritance()
test_concretize(spec)
test_concretize_enable_disable_compiler_existence_check()
test_concretize_mention_build_dep()
test_concretize_preferred_version()
test_concretize_two_virtuals()

Test a package with multiple virtual dependencies.

test_concretize_two_virtuals_with_dual_provider()

Test a package with multiple virtual dependencies and force a provider that provides both.

test_concretize_two_virtuals_with_dual_provider_and_a_conflict()

Test a package with multiple virtual dependencies and force a provider that provides both, and another conflicting package that provides one.

test_concretize_two_virtuals_with_one_bound(mutable_mock_packages)

Test a package with multiple virtual dependencies and one preset.

test_concretize_two_virtuals_with_two_bound()

Test a package with multiple virtual deps and two of them preset.

test_concretize_with_provides_when()

Make sure insufficient versions of MPI are not in providers list when we ask for some advanced version.

test_concretize_with_restricted_virtual()
test_conflicts_in_spec(conflict_spec)
test_different_compilers_get_different_flags()
test_external_and_virtual()
test_external_package()
test_external_package_module()
test_find_spec_children()
test_find_spec_none()
test_find_spec_parents()

Tests the spec finding logic used by concretization.

test_find_spec_self()
test_find_spec_sibling()
test_my_dep_depends_on_provider_of_my_virtual_dep()
test_no_compilers_for_arch()
test_no_matching_compiler_specs(mock_config)
test_nobuild_package()
test_provides_handles_multiple_providers_of_same_vesrion()
test_regression_issue_4492()
test_regression_issue_7239()
test_regression_issue_7705()
test_regression_issue_7941()
test_simultaneous_concretization_of_specs(abstract_specs)
test_virtual_is_fully_expanded_for_callpath()
test_virtual_is_fully_expanded_for_mpileaks()
spack.test.concretize.check_concretize(abstract_spec)
spack.test.concretize.check_spec(abstract, concrete)
spack.test.concretize.spec(request)

Spec to be concretized

spack.test.concretize_preferences module
class spack.test.concretize_preferences.TestConcretizePreferences

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('concretize_scope', 'mock_packages'), kwargs={})]
test_all_is_not_a_virtual()

Verify that all is allowed in packages.yaml.

test_config_permissions_differ_read_write(configure_permissions)
test_config_permissions_from_all(configure_permissions)
test_config_permissions_from_package(configure_permissions)
test_config_perms_fail_write_gt_read(configure_permissions)
test_develop()

Test concretization with develop-like versions

test_external_mpi()
test_no_virtuals_in_packages_yaml()

Verify that virtuals are not allowed in packages.yaml.

test_preferred()

"Test packages with some version marked as preferred=True

test_preferred_compilers(mutable_mock_packages)

Test preferred compilers are applied correctly

test_preferred_providers()

Test preferred providers of virtual packages are applied correctly

test_preferred_variants()

Test preferred variants are applied correctly

test_preferred_versions()

Test preferred package versions are applied correctly

test_preferred_versions_mixed_version_types()
spack.test.concretize_preferences.assert_variant_values(spec, **variants)
spack.test.concretize_preferences.concretize(abstract_spec)
spack.test.concretize_preferences.concretize_scope(config, tmpdir)

Adds a scope for concretization preferences

spack.test.concretize_preferences.configure_permissions()
spack.test.concretize_preferences.update_packages(pkgname, section, value)

Update config and reread package list

spack.test.config module
spack.test.config.check_compiler_config(comps, *compiler_names)

Check that named compilers in comps match Spack's config.

spack.test.config.check_schema(name, file_contents)

Check a Spack YAML schema against some data

spack.test.config.compiler_specs()

Returns a couple of compiler specs needed for the tests

spack.test.config.get_config_error(filename, schema, yaml_string)

Parse a YAML string and return the resulting ConfigFormatError.

Fail if there is no ConfigFormatError

spack.test.config.test_add_command_line_scopes(tmpdir, mutable_config)
spack.test.config.test_bad_command_line_scopes(tmpdir, mock_config)
spack.test.config.test_bad_compilers_yaml(tmpdir)
spack.test.config.test_bad_config_section(mock_config)

Test that getting or setting a bad section gives an error.

spack.test.config.test_bad_config_yaml(tmpdir)
spack.test.config.test_bad_env_yaml(tmpdir)
spack.test.config.test_bad_mirrors_yaml(tmpdir)
spack.test.config.test_bad_repos_yaml(tmpdir)
spack.test.config.test_config_format_error(mutable_config)

This is raised when we try to write a bad configuration.

spack.test.config.test_config_parse_dict_in_list(tmpdir)
spack.test.config.test_config_parse_list_in_dict(tmpdir)
spack.test.config.test_config_parse_str_not_bool(tmpdir)
spack.test.config.test_good_env_yaml(tmpdir)
spack.test.config.test_immutable_scope(tmpdir)
spack.test.config.test_internal_config_filename(mock_config, write_config_file)
spack.test.config.test_internal_config_from_data()
spack.test.config.test_internal_config_update(mock_config, write_config_file)
spack.test.config.test_keys_are_ordered()

Test that keys in Spack YAML files retain their order from the file.

spack.test.config.test_mark_internal()
spack.test.config.test_merge_with_defaults(mock_config, write_config_file)

This ensures that specified preferences merge with defaults as expected. Originally all defaults were initialized with the exact same object, which led to aliasing problems. Therefore the test configs used here leave 'version' blank for multiple packages in 'packages_merge_low'.

spack.test.config.test_read_config(mock_config, write_config_file)
spack.test.config.test_read_config_merge_list(mock_config, write_config_file)
spack.test.config.test_read_config_override_all(mock_config, write_config_file)
spack.test.config.test_read_config_override_key(mock_config, write_config_file)
spack.test.config.test_read_config_override_list(mock_config, write_config_file)
spack.test.config.test_single_file_scope(tmpdir, config)
spack.test.config.test_substitute_config_variables(mock_config)
spack.test.config.test_substitute_tempdir(mock_config)
spack.test.config.test_substitute_user(mock_config)
spack.test.config.test_write_key_in_memory(mock_config, compiler_specs)
spack.test.config.test_write_key_to_disk(mock_config, compiler_specs)
spack.test.config.test_write_list_in_memory(mock_config)
spack.test.config.test_write_to_same_priority_file(mock_config, compiler_specs)
spack.test.config.write_config_file(tmpdir)

Returns a function that writes a config file.

spack.test.conftest module
class spack.test.conftest.MockLayout(root)

ベースクラス: object

check_installed(spec)
path_for_spec(spec)
class spack.test.conftest.MockPackage(name, dependencies, dependency_types, conditions=None, versions=None)

ベースクラス: object

class spack.test.conftest.MockPackageMultiRepo(packages)

ベースクラス: object

exists(name)
get(spec)
get_pkg_class(name)
is_virtual(name)
repo_for_pkg(name)
spack.test.conftest.check_for_leftover_stage_files(request, mock_stage, ignore_stage_files)

Ensure that each test leaves a clean stage when done.

This can be disabled for tests that are expected to dirty the stage by adding:

@pytest.mark.disable_clean_stage_check

to tests that need it.

spack.test.conftest.clean_user_environment()
spack.test.conftest.config(configuration_dir)

Hooks the mock configuration files into spack.config

spack.test.conftest.configuration_dir(tmpdir_factory, linux_os)

Copies mock configuration files in a temporary directory. Returns the directory path.

spack.test.conftest.conflict_spec(request)

Specs which violate constraints specified with the "conflicts" directive in the "conflict" package.

spack.test.conftest.database(tmpdir_factory, mock_packages, config)

Creates a mock database with some packages installed note that the ref count for dyninst here will be 3, as it's recycled across each install.

spack.test.conftest.gen_mock_layout(tmpdir)
spack.test.conftest.ignore_stage_files()

Session-scoped helper for check_for_leftover_stage_files.

Used to track which leftover files in the stage have been seen.

spack.test.conftest.install_mockery(tmpdir, config, mock_packages)

Hooks a fake install directory, DB, and stage directory into Spack.

spack.test.conftest.installation_dir_with_headers(tmpdir_factory)

Mock installation tree with a few headers placed in different subdirectories. Shouldn't be modified by tests as it is session scoped.

spack.test.conftest.invalid_spec(request)

Specs that do not parse cleanly due to invalid formatting.

spack.test.conftest.linux_os()

Returns a named tuple with attributes 'name' and 'version' representing the OS.

spack.test.conftest.mock_archive(tmpdir_factory)

Creates a very simple archive directory with a configure script and a makefile that installs to a prefix. Tars it up into an archive.

spack.test.conftest.mock_config(tmpdir)

Mocks two configuration scopes: 'low' and 'high'.

spack.test.conftest.mock_fetch(mock_archive)

Fake the URL for a package so it downloads from a file.

spack.test.conftest.mock_fetch_cache(monkeypatch)

Substitutes spack.paths.fetch_cache with a mock object that does nothing and raises on fetch.

spack.test.conftest.mock_git_repository(tmpdir_factory)

Creates a very simple git repository with two branches and two commits.

spack.test.conftest.mock_hg_repository(tmpdir_factory)

Creates a very simple hg repository with two commits.

spack.test.conftest.mock_packages(repo_path)

Use the 'builtin.mock' repository instead of 'builtin'

spack.test.conftest.mock_stage(tmpdir_factory)

Mocks up a fake stage directory for use by tests.

spack.test.conftest.mock_svn_repository(tmpdir_factory)

Creates a very simple svn repository with two commits.

spack.test.conftest.module_configuration(monkeypatch, request)

Reads the module configuration file from the mock ones prepared for tests and monkeypatches the right classes to hook it in.

spack.test.conftest.mutable_config(tmpdir_factory, configuration_dir, config)

Like config, but tests can modify the configuration.

spack.test.conftest.mutable_database(database)

For tests that need to modify the database instance.

spack.test.conftest.mutable_mock_env_path(tmpdir_factory)

Fixture for mocking the internal spack environments directory.

spack.test.conftest.mutable_mock_packages(mock_packages, repo_path)

Function-scoped mock packages, for tests that need to modify them.

spack.test.conftest.no_chdir()

Ensure that no test changes Spack's working dirctory.

This prevents Spack tests (and therefore Spack commands) from changing the working directory and causing other tests to fail mysteriously. Tests should use working_dir or py.path's .as_cwd() instead of os.chdir to avoid failing this check.

We assert that the working directory hasn't changed, unless the original wd somehow ceased to exist.

spack.test.conftest.pytest_addoption(parser)
spack.test.conftest.pytest_collection_modifyitems(config, items)
spack.test.conftest.remove_whatever_it_is(path)

Type-agnostic remove.

spack.test.conftest.repo_path()

Session scoped RepoPath object pointing to the mock repository

spack.test.conftest.working_env()
spack.test.database module

These tests check the database is functioning properly, both in memory and in its file

spack.test.database.test_005_db_exists(database)

Make sure db cache file exists after creating.

spack.test.database.test_010_all_install_sanity(database)

Ensure that the install layout reflects what we think it does.

spack.test.database.test_015_write_and_read(database)
spack.test.database.test_020_db_sanity(database)

Make sure query() returns what's actually in the db.

spack.test.database.test_025_reindex(database)

Make sure reindex works and ref counts are valid.

spack.test.database.test_030_db_sanity_from_another_process(mutable_database)
spack.test.database.test_040_ref_counts(database)

Ensure that we got ref counts right when we read the DB.

spack.test.database.test_050_basic_query(database)

Ensure querying database is consistent with what is installed.

spack.test.database.test_060_remove_and_add_root_package(database)
spack.test.database.test_070_remove_and_add_dependency_package(database)
spack.test.database.test_080_root_ref_counts(database)
spack.test.database.test_090_non_root_ref_counts(database)
spack.test.database.test_100_no_write_with_exception_on_remove(database)
spack.test.database.test_110_no_write_with_exception_on_install(database)
spack.test.database.test_115_reindex_with_packages_not_in_repo(mutable_database)
spack.test.database.test_add_to_upstream_after_downstream(upstream_and_downstream_db)

An upstream DB can add a package after it is installed in the downstream DB. When a package is recorded as installed in both, the results should refer to the downstream DB.

spack.test.database.test_default_queries(database)
spack.test.database.test_external_entries_in_db(database)
spack.test.database.test_installed_upstream(upstream_and_downstream_db)
spack.test.database.test_old_external_entries_prefix(mutable_database)
spack.test.database.test_recursive_upstream_dbs(tmpdir_factory, test_store, gen_mock_layout)
spack.test.database.test_regression_issue_8036(mutable_database, usr_folder_exists)
spack.test.database.test_removed_upstream_dep(upstream_and_downstream_db)
spack.test.database.test_store(tmpdir)
spack.test.database.upstream_and_downstream_db(tmpdir_factory, gen_mock_layout)
spack.test.database.usr_folder_exists(monkeypatch)

The /usr folder is assumed to be existing in some tests. This fixture makes it such that its existence is mocked, so we have no requirements on the system running tests.

spack.test.directory_layout module

This test verifies that the Spack directory layout works properly.

spack.test.directory_layout.layout_and_dir(tmpdir)

Returns a directory layout and the corresponding directory.

spack.test.directory_layout.test_find(layout_and_dir, config, mock_packages)

Test that finding specs within an install layout works.

spack.test.directory_layout.test_handle_unknown_package(layout_and_dir, config, mock_packages)

This test ensures that spack can at least do some operations with packages that are installed but that it does not know about. This is actually not such an uncommon scenario with spack; it can happen when you switch from a git branch where you're working on a new package.

This test ensures that the directory layout stores enough information about installed packages' specs to uninstall or query them again if the package goes away.

spack.test.directory_layout.test_read_and_write_spec(layout_and_dir, config, mock_packages)

This goes through each package in spack and creates a directory for it. It then ensures that the spec for the directory's installed package can be read back in consistently, and finally that the directory can be removed by the directory layout.

spack.test.directory_layout.test_yaml_directory_layout_parameters(tmpdir, config)

This tests the various parameters that can be used to configure the install location

spack.test.environment_modifications module
spack.test.environment_modifications.env(prepare_environment_for_tests)

Returns an empty EnvironmentModifications object.

spack.test.environment_modifications.files_to_be_sourced()

Returns a list of files to be sourced

spack.test.environment_modifications.miscellaneous_paths()

Returns a list of paths, including system ones.

spack.test.environment_modifications.prepare_environment_for_tests()

Sets a few dummy variables in the current environment, that will be useful for the tests below.

spack.test.environment_modifications.test_append_flags(env)

Tests appending to a value in the environment.

spack.test.environment_modifications.test_clear(env)
spack.test.environment_modifications.test_exclude_paths_from_inspection()
spack.test.environment_modifications.test_extend(env)

Tests that we can construct a list of environment modifications starting from another list.

spack.test.environment_modifications.test_extra_arguments(env)

Tests that we can attach extra arguments to any command.

spack.test.environment_modifications.test_filter_system_paths(miscellaneous_paths)

Tests that the filtering of system paths works as expected.

spack.test.environment_modifications.test_inspect_path(tmpdir)
spack.test.environment_modifications.test_path_manipulation(env)

Tests manipulating list of paths in the environment.

spack.test.environment_modifications.test_preserve_environment(prepare_environment_for_tests)
spack.test.environment_modifications.test_set(env)

Tests setting values in the environment.

spack.test.environment_modifications.test_set_path(env)

Tests setting paths in an environment variable.

spack.test.environment_modifications.test_source_files(files_to_be_sourced)

Tests the construction of a list of environment modifications that are the result of sourcing a file.

spack.test.environment_modifications.test_unset(env)

Tests unsetting values in the environment.

spack.test.flag_handlers module
class spack.test.flag_handlers.TestFlagHandlers

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('config', 'mock_packages'), kwargs={})]
test_add_build_system_flags_autotools(temp_env)
test_add_build_system_flags_cmake(temp_env)
test_build_system_flags_autotools(temp_env)
test_build_system_flags_cmake(temp_env)
test_build_system_flags_not_implemented(temp_env)
test_env_flags(temp_env)
test_inject_flags(temp_env)
test_ld_flags_cmake(temp_env)
test_ld_libs_cmake(temp_env)
test_no_build_system_flags(temp_env)
test_unbound_method(temp_env)
spack.test.flag_handlers.add_o3_to_build_system_cflags(pkg, name, flags)
spack.test.flag_handlers.temp_env()
spack.test.git_fetch module
spack.test.git_fetch.git_version(request)

Tests GitFetchStrategy behavior for different git versions.

GitFetchStrategy tries to optimize using features of newer git versions, but needs to work with older git versions. To ensure code paths for old versions still work, we fake it out here and make it use the backward-compatibility code paths with newer git versions.

spack.test.git_fetch.test_fetch(type_of_test, secure, mock_git_repository, config, mutable_mock_packages, git_version)

Tries to:

  1. Fetch the repo using a fetch strategy constructed with supplied args (they depend on type_of_test).

  2. Check if the test_file is in the checked out repository.

  3. Assert that the repository is at the revision supplied.

  4. Add and remove some files, then reset the repo, and ensure it's all there again.

spack.test.graph module
spack.test.graph.test_ascii_graph_mpileaks(mock_packages)

Test dynamically graphing the mpileaks package.

spack.test.graph.test_dynamic_dot_graph_mpileaks(mock_packages)

Test dynamically graphing the mpileaks package.

spack.test.graph.test_static_graph_mpileaks(mock_packages)

Test a static spack graph for a simple package.

spack.test.graph.test_topo_sort(mock_packages)

Test topo sort gives correct order.

spack.test.hg_fetch module
spack.test.hg_fetch.test_fetch(type_of_test, secure, mock_hg_repository, config, mutable_mock_packages)

Tries to:

  1. Fetch the repo using a fetch strategy constructed with supplied args (they depend on type_of_test).

  2. Check if the test_file is in the checked out repository.

  3. Assert that the repository is at the revision supplied.

  4. Add and remove some files, then reset the repo, and ensure it's all there again.

spack.test.install module
exception spack.test.install.MockInstallError(message, long_message=None)

ベースクラス: spack.error.SpackError

class spack.test.install.MockStage(wrapped_stage)

ベースクラス: object

create()
destroy()
class spack.test.install.RemovePrefixChecker(wrapped_rm_prefix)

ベースクラス: object

remove_prefix()
spack.test.install.mock_remove_prefix(*args)
spack.test.install.test_dont_add_patches_to_installed_package(install_mockery, mock_fetch)
spack.test.install.test_failing_build(install_mockery, mock_fetch)
spack.test.install.test_install_and_uninstall(install_mockery, mock_fetch)
spack.test.install.test_installed_dependency_request_conflicts(install_mockery, mock_fetch, mutable_mock_packages)
spack.test.install.test_installed_upstream(tmpdir_factory, install_mockery, mock_fetch, gen_mock_layout)

Check that when a dependency package is recorded as installed in an upstream database that it is not reinstalled.

spack.test.install.test_installed_upstream_external(tmpdir_factory, install_mockery, mock_fetch, gen_mock_layout)

Check that when a dependency package is recorded as installed in an upstream database that it is not reinstalled.

spack.test.install.test_partial_install_delete_prefix_and_stage(install_mockery, mock_fetch)
spack.test.install.test_partial_install_keep_prefix(install_mockery, mock_fetch)
spack.test.install.test_second_install_no_overwrite_first(install_mockery, mock_fetch)
spack.test.install.test_store(install_mockery, mock_fetch)
spack.test.make_executable module

Tests for Spack's built-in parallel make support.

This just tests whether the right args are getting passed to make.

class spack.test.make_executable.MakeExecutableTest(methodName='runTest')

ベースクラス: unittest.case.TestCase

setUp()

Hook method for setting up the test fixture before exercising it.

tearDown()

Hook method for deconstructing the test fixture after testing it.

test_make_explicit()
test_make_jobs_env()
test_make_normal()
test_make_one_job()
test_make_parallel_disabled()
test_make_parallel_false()
test_make_parallel_precedence()
spack.test.mirror module
spack.test.mirror.check_mirror()
spack.test.mirror.set_up_package(name, repository, url_attr)

Set up a mock package to be mirrored. Each package needs us to:

  1. Set up a mock repo/archive to fetch from.

  2. Point the package's version args at that repo.

spack.test.mirror.test_all_mirror(mock_git_repository, mock_svn_repository, mock_hg_repository, mock_archive)
spack.test.mirror.test_git_mirror(mock_git_repository)
spack.test.mirror.test_hg_mirror(mock_hg_repository)
spack.test.mirror.test_mirror_with_url_patches(mock_packages, config, monkeypatch)
spack.test.mirror.test_svn_mirror(mock_svn_repository)
spack.test.mirror.test_url_mirror(mock_archive)
spack.test.module_parsing module
spack.test.module_parsing.module_function_test_mode()
spack.test.module_parsing.save_module_func()
spack.test.module_parsing.test_get_argument_from_module_line()
spack.test.module_parsing.test_get_path_from_module_contents()
spack.test.module_parsing.test_get_path_from_module_faked(save_module_func)
spack.test.module_parsing.test_module_function_change_env(tmpdir, working_env, module_function_test_mode)
spack.test.module_parsing.test_module_function_no_change(tmpdir, module_function_test_mode)
spack.test.module_parsing.test_pkg_dir_from_module_name()
spack.test.multimethod module

Test for multi_method dispatch.

spack.test.multimethod.pkg_name(request)

Make tests run on both multimethod and multimethod-inheritor.

This means we test all of our @when methods on a class that uses them directly, AND on a class that inherits them.

spack.test.multimethod.test_default_works(pkg_name)
spack.test.multimethod.test_dependency_match(pkg_name)
spack.test.multimethod.test_mpi_version(pkg_name)
spack.test.multimethod.test_multimethod_boolean(pkg_name)
spack.test.multimethod.test_multimethod_diamond_inheritance()
spack.test.multimethod.test_multimethod_inherited_and_overridden()
spack.test.multimethod.test_multimethod_with_base_class(pkg_name)
spack.test.multimethod.test_no_version_match(pkg_name)
spack.test.multimethod.test_one_version_match(pkg_name)
spack.test.multimethod.test_target_match(pkg_name)
spack.test.multimethod.test_undefined_mpi_version(pkg_name)
spack.test.multimethod.test_version_overlap(pkg_name)
spack.test.multimethod.test_virtual_dep_match(pkg_name)
spack.test.namespace_trie module
spack.test.namespace_trie.test_add_multiple(trie)
spack.test.namespace_trie.test_add_none_multiple(trie)
spack.test.namespace_trie.test_add_none_single(trie)
spack.test.namespace_trie.test_add_single(trie)
spack.test.namespace_trie.test_add_three(trie)
spack.test.namespace_trie.trie()
spack.test.optional_deps module
spack.test.optional_deps.spec_and_expected(request)

Parameters for the normalization test.

spack.test.optional_deps.test_default_variant(config, mock_packages)
spack.test.optional_deps.test_normalize(spec_and_expected, config, mock_packages)
spack.test.package_hash module
spack.test.package_hash.compare_sans_name(eq, spec1, spec2)
spack.test.package_hash.test_all_same_but_archive_hash(tmpdir, mock_packages, config)

Archive hash is not intended to be reflected in Package hash.

spack.test.package_hash.test_all_same_but_install(tmpdir, mock_packages, config)
spack.test.package_hash.test_all_same_but_name(tmpdir, mock_packages, config)
spack.test.package_hash.test_all_same_but_patch_contents(tmpdir, mock_packages, config)
spack.test.package_hash.test_all_same_but_patches_to_apply(tmpdir, mock_packages, config)
spack.test.package_hash.test_different_variants(tmpdir, mock_packages, config)
spack.test.package_hash.test_hash(tmpdir, mock_packages, config)
spack.test.package_sanity module

This test does sanity checks on Spack's builtin package database.

spack.test.package_sanity.check_repo()

Get all packages in the builtin repo to make sure they work.

spack.test.package_sanity.test_all_versions_are_lowercase()

Spack package names must be lowercase, and use - instead of _.

spack.test.package_sanity.test_all_virtual_packages_have_default_providers()

All virtual packages must have a default provider explicitly set.

spack.test.package_sanity.test_docstring()

Ensure that every package has a docstring.

spack.test.package_sanity.test_get_all_mock_packages()

Get the mock packages once each too.

spack.test.package_sanity.test_get_all_packages()

Get all packages once and make sure that works.

spack.test.package_sanity.test_no_fixme()

Packages should not contain any boilerplate such as FIXME or example.com.

spack.test.package_sanity.test_package_version_consistency()

Make sure all versions on builtin packages can produce a fetcher.

spack.test.packages module
class spack.test.packages.TestPackage

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('config', 'mock_packages'), kwargs={})]
test_all_same_but_archive_hash()
test_content_hash_all_same_but_patch_contents()
test_content_hash_different_variants()
test_dependency_extensions()
test_import_class_from_package()
test_import_module_from_package()
test_import_namespace_container_modules()
test_import_package()
test_import_package_as()
test_inheritance_of_diretives()
test_load_package()
test_nonexisting_package_filename()
test_package_class_names()
test_package_filename()
test_package_name()
spack.test.packages.test_git_top_level(mock_packages, config)

Ensure that top-level git attribute can be used as a default.

spack.test.packages.test_git_url_top_level_conflicts(mock_packages, config)

Test git fetch strategy inference when url is specified with git.

spack.test.packages.test_git_url_top_level_git_versions(mock_packages, config)

Test git fetch strategy inference when url is specified with git.

spack.test.packages.test_git_url_top_level_url_versions(mock_packages, config)

Test URL fetch strategy inference when url is specified with git.

spack.test.packages.test_hg_top_level(mock_packages, config)

Ensure that top-level hg attribute can be used as a default.

spack.test.packages.test_no_extrapolate_without_url(mock_packages, config)

Verify that we can't extrapolate versions for non-URL packages.

spack.test.packages.test_svn_top_level(mock_packages, config)

Ensure that top-level svn attribute can be used as a default.

spack.test.packages.test_two_vcs_fetchers_top_level(mock_packages, config)

Verify conflict when two VCS strategies are specified together.

spack.test.packages.test_url_for_version_with_no_urls()
spack.test.packages.test_url_for_version_with_only_overrides(mock_packages, config)
spack.test.packages.test_url_for_version_with_only_overrides_with_gaps(mock_packages, config)
spack.test.packages.test_urls_for_versions(mock_packages, config)

Version directive without a 'url' argument should use default url.

spack.test.packaging module

This test checks the binary packaging infrastructure

spack.test.packaging.fake_fetchify(url, pkg)

Fake the URL for a package so it downloads from a file.

spack.test.packaging.has_gnupg2()
spack.test.packaging.test_buildcache(mock_archive, tmpdir)
spack.test.packaging.test_elf_paths()
spack.test.packaging.test_macho_paths()
spack.test.packaging.test_needs_relocation()
spack.test.packaging.test_relocate_macho(tmpdir)
spack.test.packaging.test_relocate_text(tmpdir)
spack.test.packaging.testing_gpg_directory(tmpdir)
spack.test.patch module
spack.test.patch.check_multi_dependency_patch_specs(libelf, libdwarf, fake, owner, package_dir)

Validate patches on dependencies of patch-several-dependencies.

spack.test.patch.mock_stage(tmpdir, monkeypatch)
spack.test.patch.test_conditional_patched_dependencies(mock_packages, config)

Test whether conditional patched dependencies work.

spack.test.patch.test_conditional_patched_deps_with_conditions(mock_packages, config)

Test whether conditional patched dependencies with conditions work.

spack.test.patch.test_multiple_patched_dependencies(mock_packages, config)

Test whether multiple patched dependencies work.

spack.test.patch.test_nested_directives(mock_packages)

Ensure pkg data structures are set up properly by nested directives.

spack.test.patch.test_patch_in_spec(mock_packages, config)

Test whether patches in a package appear in the spec.

spack.test.patch.test_patch_order(mock_packages, config)
spack.test.patch.test_patched_dependency(mock_packages, config, install_mockery, mock_fetch)

Test whether patched dependencies work.

spack.test.patch.test_url_patch(mock_stage, filename, sha256, archive_sha256)
spack.test.patch.test_write_and_read_sub_dags_with_patched_deps(mock_packages, config)

Test whether patched dependencies are still correct after writing and reading a sub-DAG of a concretized Spec.

spack.test.pattern module
spack.test.pattern.composite(interface, implementation, request)

Returns a composite that contains an instance of implementation(1) and one of implementation(2).

spack.test.pattern.implementation(interface)

Returns an implementation of the interface

spack.test.pattern.interface()

Returns the interface class for the composite.

spack.test.pattern.test_composite_interface_calls(interface, composite)
spack.test.pattern.test_composite_no_methods()
spack.test.pattern.test_composite_wrong_container(interface)
spack.test.permissions module
spack.test.permissions.test_chmod_real_entries_ignores_suid_sgid(tmpdir)
spack.test.permissions.test_chmod_rejects_group_writable_suid(tmpdir)
spack.test.provider_index module

Tests for provider index cache files.

Tests assume that mock packages provide this:

{'blas':   {
     blas: set([netlib-blas, openblas, openblas-with-lapack])},
 'lapack': {lapack: set([netlib-lapack, openblas-with-lapack])},
 'mpi': {mpi@:1: set([mpich@:1]),
                  mpi@:2.0: set([mpich2]),
                  mpi@:2.1: set([mpich2@1.1:]),
                  mpi@:2.2: set([mpich2@1.2:]),
                  mpi@:3: set([mpich@3:]),
                  mpi@:10.0: set([zmpi])},
  'stuff': {stuff: set([externalvirtual])}}
spack.test.provider_index.test_copy(mock_packages)
spack.test.provider_index.test_equal(mock_packages)
spack.test.provider_index.test_mpi_providers(mock_packages)
spack.test.provider_index.test_provider_index_round_trip(mock_packages)
spack.test.provider_index.test_providers_for_simple(mock_packages)
spack.test.python_version module

Check that Spack complies with minimum supported python versions.

We ensure that all Spack files work with Python2 >= 2.6 and Python3 >= 3.0.

We'd like to drop 2.6 support at some point, but there are still many HPC systems that ship with RHEL6/CentOS 6, which have Python 2.6 as the default version. Once those go away, we can likely drop 2.6 and increase the minimum supported Python 3 version, as well.

spack.test.python_version.check_python_versions(files)

Check that a set of Python files works with supported Ptyhon versions

spack.test.python_version.pyfiles(search_paths, exclude=())

Generator that yields all the python files in the search paths.

パラメータ
  • search_paths (list of str) -- list of paths to search for python files

  • exclude (list of str) -- file paths to exclude from search

列挙

python files in the search path.

spack.test.python_version.test_core_module_compatibility()

Test that all core spack modules work with supported Python versions.

spack.test.python_version.test_package_module_compatibility()

Test that all spack packages work with supported Python versions.

spack.test.relocate module
spack.test.relocate.is_relocatable(request)
spack.test.relocate.source_file(tmpdir, is_relocatable)

Returns the path to a source file of a relocatable executable.

spack.test.relocate.test_file_is_relocatable(source_file, is_relocatable)
spack.test.relocate.test_file_is_relocatable_errors(tmpdir)
spack.test.repo module
spack.test.repo.extra_repo(tmpdir_factory)
spack.test.repo.repo_for_test()
spack.test.repo.test_repo_getpkg(repo_for_test)
spack.test.repo.test_repo_last_mtime()
spack.test.repo.test_repo_multi_getpkg(repo_for_test, extra_repo)
spack.test.repo.test_repo_multi_getpkgclass(repo_for_test, extra_repo)
spack.test.repo.test_repo_pkg_with_unknown_namespace(repo_for_test)
spack.test.repo.test_repo_unknown_pkg(repo_for_test)
spack.test.sbang module

Test that Spack's shebang filtering works correctly.

class spack.test.sbang.ScriptDirectory

ベースクラス: object

Directory full of test scripts to run sbang instrumentation on.

destroy()
spack.test.sbang.script_dir()
spack.test.sbang.test_shebang_handles_non_writable_files(script_dir)
spack.test.sbang.test_shebang_handling(script_dir)
spack.test.schema module
spack.test.schema.module_suffixes_schema()
spack.test.schema.test_module_suffixes(module_suffixes_schema)
spack.test.schema.test_validate_spec(validate_spec_schema)
spack.test.schema.validate_spec_schema()
spack.test.spack_yaml module

Test Spack's custom YAML format.

spack.test.spack_yaml.data()

Returns the data loaded from a test file

spack.test.spack_yaml.test_dict_order(data)
spack.test.spack_yaml.test_line_numbers(data)
spack.test.spack_yaml.test_parse(data)
spack.test.spack_yaml.test_yaml_aliases()
spack.test.spec_dag module

These tests check Spec DAG operations using dummy packages.

class spack.test.spec_dag.TestSpecDag

ベースクラス: object

check_diamond_deptypes(spec)

Validate deptypes in dt-diamond spec.

This ensures that concretization works properly when two packages depend on the same dependency in different ways.

check_diamond_normalized_dag(spec)
pytestmark = [Mark(name='usefixtures', args=('mutable_mock_packages',), kwargs={})]
test_canonical_deptype()
test_concretize_deptypes()

Ensure that dependency types are preserved after concretization.

test_conflicting_package_constraints(set_dependency)
test_conflicting_spec_constraints()
test_construct_spec_with_deptypes()

Ensure that it is possible to construct a spec with explicit dependency types.

test_contains()
test_copy_concretized()
test_copy_dependencies()
test_copy_deptypes()

Ensure that dependency types are preserved by spec copy.

test_copy_normalized()
test_copy_simple()
test_dependents_and_dependencies_are_correct()
test_deptype_traversal()
test_deptype_traversal_full()
test_deptype_traversal_run()
test_deptype_traversal_with_builddeps()
test_edge_traversals()

Make sure child and parent traversals of specs work.

test_equal()
test_getitem_exceptional_paths()
test_getitem_query()
test_hash_bits()

Ensure getting first n bits of a base32-encoded DAG hash works.

test_invalid_dep()
test_invalid_literal_spec()
test_normalize_a_lot()
test_normalize_diamond_deptypes()

Ensure that dependency types are preserved even if the same thing is depended on in two different ways.

test_normalize_mpileaks()
test_normalize_twice()

Make sure normalize can be run twice on the same spec, and that it is idempotent.

test_normalize_with_virtual_package()
test_normalize_with_virtual_spec()
test_postorder_edge_traversal()
test_postorder_node_traversal()
test_postorder_path_traversal()
test_preorder_edge_traversal()
test_preorder_node_traversal()
test_preorder_path_traversal()
test_traversal_directions()

Make sure child and parent traversals of specs work.

test_unsatisfiable_architecture(set_dependency)
test_unsatisfiable_compiler(set_dependency)
test_unsatisfiable_compiler_version(set_dependency)
test_unsatisfiable_version(set_dependency)
spack.test.spec_dag.saved_deps()

Returns a dictionary to save the dependencies.

spack.test.spec_dag.set_dependency(saved_deps)

Returns a function that alters the dependency information for a package in the saved_deps fixture.

spack.test.spec_dag.test_conditional_dep_with_user_constraints()

This sets up packages X->Y such that X depends on Y conditionally. It then constructs a Spec with X but with no constraints on X, so that the initial normalization pass cannot determine whether the constraints are met to add the dependency; this checks whether a user-specified constraint on Y is applied properly.

spack.test.spec_dag.test_test_deptype()

Ensure that test-only dependencies are only included for specified packages in the following spec DAG:

  w
 /|
x y
  |
  z

w->y deptypes are (link, build), w->x and y->z deptypes are (test)

spack.test.spec_semantics module
class spack.test.spec_semantics.TestSpecSematics

ベースクラス: object

This tests satisfies(), constrain() and other semantic operations on specs.

pytestmark = [Mark(name='usefixtures', args=('config', 'mock_packages'), kwargs={})]
test_abstract_spec_prefix_error()
test_any_combination_of()
test_constrain_architecture()
test_constrain_changed()
test_constrain_compiler()
test_constrain_compiler_flags()
test_constrain_dependency_changed()
test_constrain_dependency_not_changed()
test_constrain_multi_value_variant()
test_constrain_not_changed()
test_constrain_variants()
test_copy_satisfies_transitive()
test_dep_index()
test_empty_satisfies()
test_errors_in_variant_directive()
test_exceptional_paths_for_constructor()
test_indirect_unsatisfied_single_valued_variant()
test_invalid_constraint()
test_satisfies()
test_satisfies_architecture()
test_satisfies_compiler()
test_satisfies_compiler_version()
test_satisfies_dependencies()
test_satisfies_dependency_versions()
test_satisfies_matching_compiler_flag()
test_satisfies_matching_variant()
test_satisfies_multi_value_variant()
test_satisfies_namespace()
test_satisfies_namespaced_dep()

Ensure spec from same or unspecified namespace satisfies namespace constraint.

test_satisfies_same_spec_with_different_hash()

Ensure that concrete specs are matched exactly by hash.

test_satisfies_single_valued_variant()

Tests that the case reported in https://github.com/spack/spack/pull/2386#issuecomment-282147639 is handled correctly.

test_satisfies_unconstrained_compiler_flag()
test_satisfies_unconstrained_variant()
test_satisfies_virtual()
test_satisfies_virtual_dep_with_virtual_constraint()

Ensure we can satisfy virtual constraints when there are multiple vdep providers in the specs.

test_satisfies_virtual_dependencies()
test_satisfies_virtual_dependency_versions()
test_self_index()
test_spec_contains_deps()
test_spec_deprecated_formatting()
test_spec_flags_maintain_order()
test_spec_formatting()
test_spec_formatting_escapes()
test_unsatisfiable_compiler_flag()
test_unsatisfiable_compiler_flag_mismatch()
test_unsatisfiable_multi_value_variant()
test_unsatisfiable_variant_mismatch()
test_unsatisfiable_variant_types()
test_unsatisfiable_variants()
test_unsatisfied_single_valued_variant()
test_virtual_index()
spack.test.spec_semantics.argument_factory(argument_spec, left)
spack.test.spec_semantics.check_constrain(expected, spec, constraint)
spack.test.spec_semantics.check_constrain_changed(spec, constraint)
spack.test.spec_semantics.check_constrain_not_changed(spec, constraint)
spack.test.spec_semantics.check_invalid_constraint(spec, constraint)
spack.test.spec_semantics.check_satisfies(target_spec, argument_spec, target_concrete=False)
spack.test.spec_semantics.check_unsatisfiable(target_spec, argument_spec, target_concrete=False)
spack.test.spec_semantics.target_factory(spec_string, target_concrete)
spack.test.spec_set module
spack.test.spec_set.test_compiler_specs()
spack.test.spec_set.test_package_specs()
spack.test.spec_set.test_spec_set_basic()

The "include" isn't required, but if it is present, we should only see specs mentioned there. Also, if we include cdash and project properties, those should be captured and stored on the resulting CombinatorialSpecSet as attributes.

spack.test.spec_set.test_spec_set_exclude()

The exclude property isn't required, but if it appears, any specs mentioned there should not appear in the output specs

spack.test.spec_set.test_spec_set_get_cdash_array()

Make sure we can handle multiple cdash sites in a list

spack.test.spec_set.test_spec_set_include_exclude_conflict()

Exclude should override include

spack.test.spec_set.test_spec_set_include_limited_packages()

If we see the include key, it is a filter and only the specs mentioned there should actually be included.

spack.test.spec_set.test_spec_set_no_include()

Make sure that without any exclude or include, we get the full cross- product of specs/versions.

spack.test.spec_set.test_spec_set_packages_no_matrix()

The matrix property is required, make sure we error out if it is missing

spack.test.spec_set.test_spec_set_simple_spec_list()

Make sure we can handle the slightly more concise syntax where we include the package name/version together and skip the extra keys in the dictionary.

spack.test.spec_set.test_spec_set_with_specs()

Make sure we only see the specs mentioned in the include

spack.test.spec_syntax module
class spack.test.spec_syntax.TestSpecSyntax

ベースクラス: object

check_lex(tokens, spec)

Check that the provided spec parses to the provided token list.

check_parse(expected, spec=None)

Assert that the provided spec is able to be parsed.

If this is called with one argument, it assumes that the string is canonical (i.e., no spaces and ~ instead of - for variants) and that it will convert back to the string it came from.

If this is called with two arguments, the first argument is the expected canonical form and the second is a non-canonical input to be parsed.

test_ambiguous()
test_ambiguous_hash(database)
test_anonymous_specs()
test_anonymous_specs_with_multiple_parts()
test_canonicalize()
test_dep_spec_by_hash(database)
test_dependencies_with_versions()
test_duplicate_architecture()
test_duplicate_architecture_component()
test_duplicate_compiler()
test_duplicate_dependency()
test_duplicate_variant()
test_full_specs()
test_invalid_hash(database)
test_kv_with_quotes()
test_kv_with_spaces()
test_kv_without_quotes()
test_minimal_spaces()
test_multiple_specs()
test_multiple_specs_after_kv()
test_multiple_specs_long_second()
test_multiple_specs_with_hash(database)
test_nonexistent_hash(database)

Ensure we get errors for nonexistant hashes.

test_package_names()
test_parse_errors()
test_redundant_spec(database)

Check that redundant spec constraints raise errors.

TODO (TG): does this need to be an error? Or should concrete specs only raise errors if constraints cause a contradiction?

test_simple_dependence()
test_spaces_between_dependences()
test_spaces_between_options()
test_spec_by_hash(database)
test_way_too_many_spaces()
spack.test.spec_syntax.test_parse_anonymous_specs(spec, anon_spec, spec_name)
spack.test.spec_yaml module

Test YAML serialization for specs.

YAML format preserves DAG information in the spec.

spack.test.spec_yaml.check_specs_equal(original_spec, spec_yaml_path)
spack.test.spec_yaml.check_yaml_round_trip(spec)
spack.test.spec_yaml.reverse_all_dicts(data)

Descend into data and reverse all the dictionaries

spack.test.spec_yaml.test_ambiguous_version_spec(mock_packages)
spack.test.spec_yaml.test_concrete_spec(config, mock_packages)
spack.test.spec_yaml.test_external_spec(config, mock_packages)
spack.test.spec_yaml.test_normal_spec(mock_packages)
spack.test.spec_yaml.test_ordered_read_not_required_for_consistent_dag_hash(config, mock_packages)

Make sure ordered serialization isn't required to preserve hashes.

For consistent hashes, we require that YAML and json documents have their keys serialized in a deterministic order. However, we don't want to require them to be serialized in order. This ensures that is not required.

spack.test.spec_yaml.test_save_dependency_spec_yamls_subset(tmpdir, config)
spack.test.spec_yaml.test_simple_spec()
spack.test.spec_yaml.test_using_ordered_dict(mock_packages)

Checks that dicts are ordered

Necessary to make sure that dag_hash is stable across python versions and processes.

spack.test.spec_yaml.test_yaml_multivalue()
spack.test.spec_yaml.test_yaml_subdag(config, mock_packages)
spack.test.stage module

Test that the Stage class works correctly.

class spack.test.stage.TestStage

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('mock_packages',), kwargs={})]
stage_name = 'spack-test-stage'
test_composite_stage_with_expand_resource(mock_archive, mock_expand_resource, composite_stage_with_expanding_resource)
test_composite_stage_with_noexpand_resource(mock_archive, mock_noexpand_resource)
test_expand_archive(mock_archive)
test_fetch(mock_archive)
test_keep_exceptions(mock_archive)
test_keep_without_exceptions(mock_archive)
test_no_keep_with_exceptions(mock_archive)
test_no_keep_without_exceptions(mock_archive)
test_no_search_if_default_succeeds(mock_archive, failing_search_fn)
test_no_search_mirror_only(failing_fetch_strategy, failing_search_fn)
test_restage(mock_archive)
test_search_if_default_fails(failing_fetch_strategy, search_fn)
test_setup_and_destroy_name_with_tmp(mock_archive)
test_setup_and_destroy_name_without_tmp(mock_archive)
test_setup_and_destroy_no_name_with_tmp(mock_archive)
test_setup_and_destroy_no_name_without_tmp(mock_archive)
spack.test.stage.check_destroy(stage, stage_name)

Figure out whether a stage was destroyed correctly.

spack.test.stage.check_expand_archive(stage, stage_name, mock_archive)
spack.test.stage.check_fetch(stage, stage_name)
spack.test.stage.check_setup(stage, stage_name, archive)

Figure out whether a stage was set up correctly.

spack.test.stage.composite_stage_with_expanding_resource(mock_archive, mock_expand_resource)
spack.test.stage.failing_fetch_strategy()

Returns a fetch strategy that fails.

spack.test.stage.failing_search_fn()

Returns a search function that fails! Always!

spack.test.stage.get_stage_path(stage, stage_name)

Figure out where a stage should be living. This depends on whether it's named.

spack.test.stage.mock_archive(tmpdir, monkeypatch)

Creates a mock archive with the structure expected by the tests

spack.test.stage.mock_expand_resource(tmpdir)
spack.test.stage.mock_noexpand_resource(tmpdir)
spack.test.stage.search_fn()

Returns a search function that always succeeds.

spack.test.stage.tmpdir_for_stage(mock_archive)

Uses a temporary directory for staging

spack.test.svn_fetch module
spack.test.svn_fetch.test_fetch(type_of_test, secure, mock_svn_repository, config, mutable_mock_packages)

Tries to:

  1. Fetch the repo using a fetch strategy constructed with supplied args (they depend on type_of_test).

  2. Check if the test_file is in the checked out repository.

  3. Assert that the repository is at the revision supplied.

  4. Add and remove some files, then reset the repo, and ensure it's all there again.

spack.test.tengine module
class spack.test.tengine.TestContext

ベースクラス: object

class A

ベースクラス: spack.tengine.Context

context_properties = ['foo']
foo
class B

ベースクラス: spack.tengine.Context

bar
context_properties = ['bar']
class C

ベースクラス: spack.test.tengine.A, spack.test.tengine.B

context_properties = ['foobar', 'foo', 'bar']
foo
foobar
test_to_dict()

Tests that all the context properties in a hierarchy are considered when building the context dictionary.

class spack.test.tengine.TestTengineEnvironment

ベースクラス: object

pytestmark = [Mark(name='usefixtures', args=('config',), kwargs={})]
test_template_retrieval()

Tests the template retrieval mechanism hooked into config files

spack.test.test_activations module
spack.test.test_activations.builtin_and_mock_packages()
spack.test.test_activations.create_dir_structure(tmpdir, dir_structure)
spack.test.test_activations.create_ext_pkg(name, prefix, extendee_spec)
spack.test.test_activations.create_python_ext_pkg(name, prefix, python_spec, namespace=None)
spack.test.test_activations.namespace_extensions(tmpdir, builtin_and_mock_packages)
spack.test.test_activations.perl_and_extension_dirs(tmpdir, builtin_and_mock_packages)
spack.test.test_activations.python_and_extension_dirs(tmpdir, builtin_and_mock_packages)
spack.test.test_activations.test_perl_activation(tmpdir, builtin_and_mock_packages)
spack.test.test_activations.test_perl_activation_view(tmpdir, perl_and_extension_dirs, builtin_and_mock_packages)
spack.test.test_activations.test_perl_activation_with_files(tmpdir, perl_and_extension_dirs, builtin_and_mock_packages)
spack.test.test_activations.test_python_activation_view(tmpdir, python_and_extension_dirs, builtin_and_mock_packages)
spack.test.test_activations.test_python_activation_with_files(tmpdir, python_and_extension_dirs, builtin_and_mock_packages)
spack.test.test_activations.test_python_ignore_namespace_init_conflict(tmpdir, namespace_extensions, builtin_and_mock_packages)

Test the view update logic in PythonPackage ignores conflicting instances of __init__ for packages which are in the same namespace.

spack.test.test_activations.test_python_keep_namespace_init(tmpdir, namespace_extensions, builtin_and_mock_packages)

Test the view update logic in PythonPackage keeps the namespace __init__ file as long as one package in the namespace still exists.

spack.test.test_activations.test_python_namespace_conflict(tmpdir, namespace_extensions, builtin_and_mock_packages)

Test the view update logic in PythonPackage reports an error when two python extensions with different namespaces have a conflicting __init__ file.

spack.test.url_fetch module
spack.test.url_fetch.checksum_type(request)
spack.test.url_fetch.test_fetch(mock_archive, secure, checksum_type, config, mutable_mock_packages)

Fetch an archive and make sure we can checksum it.

spack.test.url_fetch.test_from_list_url(mock_packages, config)
spack.test.url_fetch.test_hash_detection(checksum_type)
spack.test.url_fetch.test_unknown_hash(checksum_type)
spack.test.url_parse module

Tests Spack's ability to parse the name and version of a package based on its URL.

spack.test.url_parse.test_no_version(not_detectable_url)
spack.test.url_parse.test_url_parse_name_and_version(name, version, url)
spack.test.url_parse.test_url_parse_offset(name, noffset, ver, voffset, path)

Tests that the name, version and offsets are computed correctly.

パラメータ
  • name (str) -- expected name

  • noffset (int) -- name offset

  • ver (str) -- expected version

  • voffset (int) -- version offset

  • path (str) -- url to be parsed

spack.test.url_parse.test_url_strip_name_suffixes(url, version, expected)
spack.test.url_parse.test_url_strip_version_suffixes(url, expected)
spack.test.url_substitution module

Tests Spack's ability to substitute a different version into a URL.

spack.test.url_substitution.test_url_substitution(base_url, version, expected)
spack.test.variant module
class spack.test.variant.TestBoolValuedVariant

ベースクラス: object

test_compatible()
test_constrain()
test_initialization()
test_satisfies()
test_yaml_entry()
class spack.test.variant.TestMultiValuedVariant

ベースクラス: object

test_compatible()
test_constrain()
test_initialization()
test_satisfies()
test_yaml_entry()
class spack.test.variant.TestSingleValuedVariant

ベースクラス: object

test_compatible()
test_constrain()
test_initialization()
test_satisfies()
test_yaml_entry()
class spack.test.variant.TestVariant

ベースクラス: object

test_callable_validator()
test_representation()
test_validation()
class spack.test.variant.TestVariantMapTest

ベースクラス: object

test_copy()
test_invalid_values()
test_satisfies_and_constrain()
test_set_item()
test_str()
test_substitute()
spack.test.variant.test_disjoint_set_fluent_methods()
spack.test.variant.test_disjoint_set_initialization()
spack.test.variant.test_disjoint_set_initialization_errors()
spack.test.variant.test_from_node_dict()
spack.test.versions module

These version tests were taken from the RPM source code. We try to maintain compatibility with RPM's version semantics where it makes sense.

spack.test.versions.assert_canonical(canonical_list, version_list)

Asserts that a redundant list is reduced to canonical form.

spack.test.versions.assert_does_not_satisfy(v1, v2)

Asserts that 'v1' does not satisfy 'v2'.

spack.test.versions.assert_in(needle, haystack)

Asserts that 'needle' is in 'haystack'.

spack.test.versions.assert_no_overlap(v1, v2)

Asserts that two version ranges do not overlap.

spack.test.versions.assert_not_in(needle, haystack)

Asserts that 'needle' is not in 'haystack'.

spack.test.versions.assert_overlaps(v1, v2)

Asserts that two version ranges overlaps.

spack.test.versions.assert_satisfies(v1, v2)

Asserts that 'v1' satisfies 'v2'.

spack.test.versions.assert_ver_eq(a, b)

Asserts the results of comparisons when 'a' is equal to 'b'.

spack.test.versions.assert_ver_gt(a, b)

Asserts the results of comparisons when 'a' is greater than 'b'.

spack.test.versions.assert_ver_lt(a, b)

Asserts the results of comparisons when 'a' is less than 'b'.

spack.test.versions.check_intersection(expected, a, b)

Asserts that 'a' intersect 'b' == 'expected'.

spack.test.versions.check_union(expected, a, b)

Asserts that 'a' union 'b' == 'expected'.

spack.test.versions.test_alpha()
spack.test.versions.test_alpha_beta()
spack.test.versions.test_alpha_with_dots()
spack.test.versions.test_basic_version_satisfaction()
spack.test.versions.test_basic_version_satisfaction_in_lists()
spack.test.versions.test_canonicalize_list()
spack.test.versions.test_close_numbers()
spack.test.versions.test_contains()
spack.test.versions.test_date_stamps()
spack.test.versions.test_develop()
spack.test.versions.test_double_alpha()
spack.test.versions.test_formatted_strings()
spack.test.versions.test_get_item()
spack.test.versions.test_in_list()
spack.test.versions.test_intersect_with_containment()
spack.test.versions.test_intersection()
spack.test.versions.test_isdevelop()
spack.test.versions.test_len()
spack.test.versions.test_lists_overlap()
spack.test.versions.test_num_alpha_with_no_separator()
spack.test.versions.test_nums_and_patch()
spack.test.versions.test_overlap_with_containment()
spack.test.versions.test_padded_numbers()
spack.test.versions.test_patch()
spack.test.versions.test_ranges_overlap()
spack.test.versions.test_rc_versions()
spack.test.versions.test_repr_and_str()
spack.test.versions.test_rpm_oddities()
spack.test.versions.test_satisfaction_with_lists()
spack.test.versions.test_string_prefix()
spack.test.versions.test_three_segments()
spack.test.versions.test_two_segments()
spack.test.versions.test_underscores()
spack.test.versions.test_union_with_containment()
spack.test.versions.test_up_to()
spack.test.versions.test_version_range_satisfaction()
spack.test.versions.test_version_range_satisfaction_in_lists()
spack.test.versions.test_version_ranges()
spack.test.views module
spack.test.views.test_global_activation(install_mockery, mock_fetch)

This test ensures that views which are maintained inside of an extendee package's prefix are maintained as expected and are compatible with global activations prior to #7152.

spack.test.web module

Tests for web.py.

spack.test.web.test_find_exotic_versions_of_archive_2()
spack.test.web.test_find_exotic_versions_of_archive_3()
spack.test.web.test_find_versions_of_archive_0()
spack.test.web.test_find_versions_of_archive_1()
spack.test.web.test_find_versions_of_archive_2()
spack.test.web.test_find_versions_of_archive_3()
spack.test.web.test_spider_0()
spack.test.web.test_spider_1()
spack.test.web.test_spider_2()
spack.test.web.test_spider_3()
Module contents

spack.util package

Subpackages
spack.util.imp package
Submodules
spack.util.imp.imp_importer module

Implementation of Spack imports that uses imp underneath.

imp is deprecated in newer versions of Python, but is the only option in Python 2.6.

spack.util.imp.imp_importer.import_lock()
spack.util.imp.imp_importer.load_source(full_name, path, prepend=None)

Import a Python module from source.

Load the source file and add it to sys.modules.

パラメータ
  • full_name (str) -- full name of the module to be loaded

  • path (str) -- path to the file that should be loaded

  • prepend (str, optional) -- some optional code to prepend to the loaded module; e.g., can be used to inject import statements

戻り値

the loaded module

戻り値の型

(ModuleType)

spack.util.imp.imp_importer.prepend_open(f, *args, **kwargs)

Open a file for reading, but prepend with some text prepended

Arguments are same as for open(), with one keyword argument, text, specifying the text to prepend.

We have to write and read a tempfile for the imp-based importer, as the file argument to imp.load_source() requires a low-level file handle.

See the importlib-based importer for a faster way to do this in later versions of python.

spack.util.imp.importlib_importer module

Implementation of Spack imports that uses importlib underneath.

importlib is only fully implemented in Python 3.

class spack.util.imp.importlib_importer.PrependFileLoader(full_name, path, prepend=None)

ベースクラス: _frozen_importlib_external.SourceFileLoader

get_data(path)

Return the data from path as raw bytes.

spack.util.imp.importlib_importer.load_source(full_name, path, prepend=None)

Import a Python module from source.

Load the source file and add it to sys.modules.

パラメータ
  • full_name (str) -- full name of the module to be loaded

  • path (str) -- path to the file that should be loaded

  • prepend (str, optional) -- some optional code to prepend to the loaded module; e.g., can be used to inject import statements

戻り値

the loaded module

戻り値の型

(ModuleType)

Module contents

Consolidated module for all imports done by Spack.

Many parts of Spack have to import Python code. This utility package wraps Spack's interface with Python's import system.

We do this because Python's import system is confusing and changes from Python version to Python version, and we should be able to adapt our approach to the underlying implementation.

Currently, this uses importlib.machinery where available and imp when importlib is not completely usable.

Submodules
spack.util.compression module
spack.util.compression.allowed_archive(path)
spack.util.compression.decompressor_for(path, extension=None)

Get the appropriate decompressor for a path.

spack.util.compression.extension(path)

Get the archive extension for a path.

spack.util.compression.strip_extension(path)

Get the part of a path that does not include its compressed type extension.

spack.util.crypto module
class spack.util.crypto.Checker(hexdigest, **kwargs)

ベースクラス: object

A checker checks files against one particular hex digest. It will automatically determine what hashing algorithm to used based on the length of the digest it's initialized with. e.g., if the digest is 32 hex characters long this will use md5.

Example: know your tarball should hash to 'abc123'. You want to check files against this. You would use this class like so:

hexdigest = 'abc123'
checker = Checker(hexdigest)
success = checker.check('downloaded.tar.gz')

After the call to check, the actual checksum is available in checker.sum, in case it's needed for error output.

You can trade read performance and memory usage by adjusting the block_size optional arg. By default it's a 1MB (2**20 bytes) buffer.

check(filename)

Read the file with the specified name and check its checksum against self.hexdigest. Return True if they match, False otherwise. Actual checksum is stored in self.sum.

hash_name

Get the name of the hash function this Checker is using.

class spack.util.crypto.DeprecatedHash(hash_alg, alert_fn, disable_security_check)

ベースクラス: object

spack.util.crypto.bit_length(num)

Number of bits required to represent an integer in binary.

spack.util.crypto.checksum(hashlib_algo, filename, **kwargs)

Returns a hex digest of the filename generated using an algorithm from hashlib.

spack.util.crypto.hash_algo_for_digest(hexdigest)

Gets name of the hash algorithm for a hex digest.

spack.util.crypto.hash_fun_for_algo(algo)

Get a function that can perform the specified hash algorithm.

spack.util.crypto.hash_fun_for_digest(hexdigest)

Gets a hash function corresponding to a hex digest.

spack.util.crypto.hashes = {'md5': 16, 'sha1': 20, 'sha224': 28, 'sha256': 32, 'sha384': 48, 'sha512': 64}

Set of hash algorithms that Spack can use, mapped to digest size in bytes

spack.util.crypto.prefix_bits(byte_array, bits)

Return the first <bits> bits of a byte array as an integer.

spack.util.debug module

Debug signal handler: prints a stack trace and enters interpreter.

register_interrupt_handler() enables a ctrl-C handler that prints a stack trace and drops the user into an interpreter.

spack.util.debug.debug_handler(sig, frame)

Interrupt running process, and provide a python prompt for interactive debugging.

spack.util.debug.register_interrupt_handler()

Print traceback and enter an interpreter on Ctrl-C

spack.util.editor module

Module for finding the user's preferred text editor.

Defines one function, editor(), which invokes the editor defined by the user's VISUAL environment variable if set. We fall back to the editor defined by the EDITOR environment variable if VISUAL is not set or the specified editor fails (e.g. no DISPLAY for a graphical editor). If neither variable is set, we fall back to one of several common editors, raising an EnvironmentError if we are unable to find one.

spack.util.editor.editor(*args, **kwargs)

Invoke the user's editor.

This will try to execute the following, in order:

  1. $VISUAL <args> # the "visual" editor (per POSIX)

  2. $EDITOR <args> # the regular editor (per POSIX)

  3. some default editor (see _default_editors) with <args>

If an environment variable isn't defined, it is skipped. If it points to something that can't be executed, we'll print a warning. And if we can't find anything that can be executed after searching the full list above, we'll raise an error.

パラメータ

args (list of str) -- args to pass to editor

Optional Arguments:

_exec_func (function): invoke this function instead of os.execv()

spack.util.environment module

Utilities for setting and modifying environment variables.

class spack.util.environment.AppendFlagsEnv(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.AppendPath(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.DeprioritizeSystemPaths(name, **kwargs)

ベースクラス: spack.util.environment.NameModifier

execute(env)
class spack.util.environment.EnvironmentModifications(other=None)

ベースクラス: object

Keeps track of requests to modify the current environment.

Each call to a method to modify the environment stores the extra information on the caller in the request:

  • 'filename' : filename of the module where the caller is defined

  • 'lineno': line number where the request occurred

  • 'context' : line of code that issued the request that failed

append_flags(name, value, sep=' ', **kwargs)

Stores in the current object a request to append to an env variable

パラメータ
  • name -- name of the environment variable to be appended to

  • value -- value to append to the environment variable

Appends with spaces separating different additions to the variable

append_path(name, path, **kwargs)

Stores a request to append a path to a path list.

パラメータ
  • name -- name of the path list in the environment

  • path -- path to be appended

apply_modifications()

Applies the modifications and clears the list.

clear()

Clears the current list of modifications

deprioritize_system_paths(name, **kwargs)

Stores a request to deprioritize system paths in a path list, otherwise preserving the order.

パラメータ

name -- name of the path list in the environment.

extend(other)
static from_sourcing_file(filename, *args, **kwargs)

Returns modifications that would be made by sourcing a file.

パラメータ
  • filename (str) -- The file to source

  • *args (list of str) -- Arguments to pass on the command line

キーワード引数
  • shell (str) -- The shell to use (default: bash)

  • shell_options (str) -- Options passed to the shell (default: -c)

  • source_command (str) -- The command to run (default: source)

  • suppress_output (str) -- Redirect used to suppress output of command (default: &> /dev/null)

  • concatenate_on_success (str) -- Operator used to execute a command only when the previous command succeeds (default: &&)

  • blacklist ([str or re]) -- Ignore any modifications of these variables (default: [])

  • whitelist ([str or re]) -- Always respect modifications of these variables (default: []). Has precedence over blacklist.

  • clean (bool) -- In addition to removing empty entries, also remove duplicate entries (default: False).

戻り値

an object that, if executed, has

the same effect on the environment as sourcing the file

戻り値の型

EnvironmentModifications

group_by_name()

Returns a dict of the modifications grouped by variable name.

戻り値

dict mapping the environment variable name to the modifications to be done on it

is_unset(var_name)
prepend_path(name, path, **kwargs)

Same as append_path, but the path is pre-pended.

パラメータ
  • name -- name of the path list in the environment

  • path -- path to be pre-pended

prune_duplicate_paths(name, **kwargs)

Stores a request to remove duplicates from a path list, otherwise preserving the order.

パラメータ

name -- name of the path list in the environment.

remove_path(name, path, **kwargs)

Stores a request to remove a path from a path list.

パラメータ
  • name -- name of the path list in the environment

  • path -- path to be removed

set(name, value, **kwargs)

Stores a request to set an environment variable.

パラメータ
  • name -- name of the environment variable to be set

  • value -- value of the environment variable

set_path(name, elements, **kwargs)

Stores a request to set a path generated from a list.

パラメータ
  • name -- name o the environment variable to be set.

  • elements -- elements of the path to set.

shell_modifications(shell='sh')

Return shell code to apply the modifications and clears the list.

unset(name, **kwargs)

Stores a request to unset an environment variable.

パラメータ

name -- name of the environment variable to be set

class spack.util.environment.NameModifier(name, **kwargs)

ベースクラス: object

update_args(**kwargs)
class spack.util.environment.NameValueModifier(name, value, **kwargs)

ベースクラス: object

update_args(**kwargs)
class spack.util.environment.PrependPath(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.PruneDuplicatePaths(name, **kwargs)

ベースクラス: spack.util.environment.NameModifier

execute(env)
class spack.util.environment.RemovePath(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.SetEnv(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.SetPath(name, value, **kwargs)

ベースクラス: spack.util.environment.NameValueModifier

execute(env)
class spack.util.environment.UnsetEnv(name, **kwargs)

ベースクラス: spack.util.environment.NameModifier

execute(env)
spack.util.environment.concatenate_paths(paths, separator=':')

Concatenates an iterable of paths into a string of paths separated by separator, defaulting to colon.

パラメータ
  • paths -- iterable of paths

  • separator -- the separator to use, default ':'

戻り値

string

spack.util.environment.deprioritize_system_paths(paths)

Put system paths at the end of paths, otherwise preserving order.

spack.util.environment.dump_environment(path, environment=None)

Dump an environment dictionary to a source-able file.

spack.util.environment.env_flag(name)
spack.util.environment.env_var_to_source_line(var, val)
spack.util.environment.filter_environment_blacklist(env, variables)

Generator that filters out any change to environment variables present in the input list.

パラメータ
  • env -- list of environment modifications

  • variables -- list of variable names to be filtered

戻り値

items in env if they are not in variables

spack.util.environment.filter_system_paths(paths)

Return only paths that are not system paths.

spack.util.environment.get_path(name)
spack.util.environment.inspect_path(root, inspections, exclude=None)

Inspects root to search for the subdirectories in inspections. Adds every path found to a list of prepend-path commands and returns it.

パラメータ
  • root (str) -- absolute path where to search for subdirectories

  • inspections (dict) -- maps relative paths to a list of environment variables that will be modified if the path exists. The modifications are not performed immediately, but stored in a command object that is returned to client

  • exclude (callable) -- optional callable. If present it must accept an absolute path and return True if it should be excluded from the inspection

Examples:

The following lines execute an inspection in /usr to search for /usr/include and /usr/lib64. If found we want to prepend /usr/include to CPATH and /usr/lib64 to MY_LIB64_PATH.

# Set up the dictionary containing the inspection
inspections = {
    'include': ['CPATH'],
    'lib64': ['MY_LIB64_PATH']
}

# Get back the list of command needed to modify the environment
env = inspect_path('/usr', inspections)

# Eventually execute the commands
env.apply_modifications()
戻り値

instance of EnvironmentModifications containing the requested modifications

spack.util.environment.is_system_path(path)

Predicate that given a path returns True if it is a system path, False otherwise.

パラメータ

path (str) -- path to a directory

戻り値

True or False

spack.util.environment.path_put_first(var_name, directories)

Puts the provided directories first in the path, adding them if they're not already there.

spack.util.environment.path_set(var_name, directories)
spack.util.environment.pickle_environment(path, environment=None)

Pickle an environment dictionary to a file.

spack.util.environment.preserve_environment(*variables)

Ensures that the value of the environment variables passed as arguments is the same before entering to the context manager and after exiting it.

Variables that are unset before entering the context manager will be explicitly unset on exit.

パラメータ

variables (list of str) -- list of environment variables to be preserved

spack.util.environment.prune_duplicate_paths(paths)

Returns the paths with duplicates removed, order preserved.

spack.util.environment.set_env(**kwargs)

Temporarily sets and restores environment variables.

Variables can be set as keyword arguments to this function.

spack.util.environment.set_or_unset_not_first(variable, changes, errstream)

Check if we are going to set or unset something after other modifications have already been requested.

spack.util.environment.validate(env, errstream)

Validates the environment modifications to check for the presence of suspicious patterns. Prompts a warning for everything that was found.

Current checks: - set or unset variables after other changes on the same variable

パラメータ

env -- list of environment modifications

spack.util.executable module
class spack.util.executable.Executable(name)

ベースクラス: object

Class representing a program that can be run on the command line.

add_default_arg(arg)

Add a default argument to the command.

add_default_env(key, value)

Set an environment variable when the command is run.

パラメータ
  • key -- The environment variable to set

  • value -- The value to set it to

command

The command-line string.

戻り値

The executable and default arguments

戻り値の型

str

name

The executable name.

戻り値

The basename of the executable

戻り値の型

str

path

The path to the executable.

戻り値

The path to the executable

戻り値の型

str

spack.util.executable.which(*args, **kwargs)

Finds an executable in the path like command-line which.

If given multiple executables, returns the first one that is found. If no executables are found, returns None.

パラメータ

*args (str) -- One or more executables to search for

キーワード引数
  • path (list() or str) -- The path to search. Defaults to PATH

  • required (bool) -- If set to True, raise an error if executable not found

戻り値

The first executable that is found in the path

戻り値の型

Executable

exception spack.util.executable.ProcessError(message, long_message=None)

ベースクラス: spack.error.SpackError

ProcessErrors are raised when Executables exit with an error code.

spack.util.file_cache module
exception spack.util.file_cache.CacheError(message, long_message=None)

ベースクラス: spack.error.SpackError

class spack.util.file_cache.FileCache(root, timeout=120)

ベースクラス: object

This class manages cached data in the filesystem.

  • Cache files are fetched and stored by unique keys. Keys can be relative paths, so that there can be some hierarchy in the cache.

  • The FileCache handles locking cache files for reading and writing, so client code need not manage locks for cache entries.

cache_path(key)

Path to the file in the cache for a particular key.

destroy()

Remove all files under the cache root.

init_entry(key)

Ensure we can access a cache file. Create a lock for it if needed.

Return whether the cache file exists yet or not.

mtime(key)

Return modification time of cache file, or 0 if it does not exist.

Time is in units returned by os.stat in the mtime field, which is platform-dependent.

read_transaction(key)

Get a read transaction on a file cache item.

Returns a ReadTransaction context manager and opens the cache file for reading. You can use it like this:

with file_cache_object.read_transaction(key) as cache_file:

cache_file.read()

remove(key)
write_transaction(key)

Get a write transaction on a file cache item.

Returns a WriteTransaction context manager that opens a temporary file for writing. Once the context manager finishes, if nothing went wrong, moves the file into place on top of the old file atomically.

spack.util.gpg module
class spack.util.gpg.Gpg

ベースクラス: object

classmethod create(**kwargs)
classmethod export_keys(location, *keys)
static gpg()
classmethod list(trusted, signing)
classmethod sign(key, file, output, clearsign=False)
classmethod signing_keys()
classmethod trust(keyfile)
classmethod untrust(signing, *keys)
classmethod verify(signature, file)
spack.util.lock module

Wrapper for llnl.util.lock allows locking to be enabled/disabled.

class spack.util.lock.Lock(*args, **kwargs)

ベースクラス: llnl.util.lock.Lock

Lock that can be disabled.

This overrides the _lock() and _unlock() methods from llnl.util.lock so that all the lock API calls will succeed, but the actual locking mechanism can be disabled via _enable_locks.

spack.util.lock.check_lock_safety(path)

Do some extra checks to ensure disabling locks is safe.

This will raise an error if path can is group- or world-writable AND the current user can write to the directory (i.e., if this user AND others could write to the path).

This is intended to run on the Spack prefix, but can be run on any path for testing.

spack.util.log_parse module
spack.util.log_parse.parse_log_events(stream, context=6, jobs=None, profile=False)

Extract interesting events from a log file as a list of LogEvent.

パラメータ
  • stream (str or fileobject) -- build log name or file object

  • context (int) -- lines of context to extract around each log event

  • jobs (int) -- number of jobs to parse with; default ncpus

  • profile (bool) -- print out profile information for parsing

戻り値

two lists containig BuildError and

BuildWarning objects.

戻り値の型

(tuple)

This is a wrapper around ctest_log_parser.CTestLogParser that lazily constructs a single CTestLogParser object. This ensures that all the regex compilation is only done once.

spack.util.log_parse.make_log_context(log_events, width=None)

Get error context from a log file.

パラメータ
  • log_events (list of LogEvent) -- list of events created by ctest_log_parser.parse()

  • width (int or None) -- wrap width; 0 for no limit; None to auto-size for terminal

戻り値

context from the build log with errors highlighted

戻り値の型

str

Parses the log file for lines containing errors, and prints them out with line numbers and context. Errors are highlighted with '>>' and with red highlighting (if color is enabled).

Events are sorted by line number before they are displayed.

spack.util.module_cmd module

This module contains routines related to the module command for accessing and parsing environment modules.

spack.util.module_cmd.get_path_arg_from_module_line(line)
spack.util.module_cmd.get_path_from_module(mod)

Inspects a TCL module for entries that indicate the absolute path at which the library supported by said module can be found.

spack.util.module_cmd.get_path_from_module_contents(text, module_name)
spack.util.module_cmd.load_module(mod)

Takes a module name and removes modules until it is possible to load that module. It then loads the provided module. Depends on the modulecmd implementation of modules used in cray and lmod.

spack.util.module_cmd.module(*args)
spack.util.naming module
spack.util.naming.mod_to_class(mod_name)

Convert a name from module style to class name style. Spack mostly follows PEP-8:

  • Module and package names use lowercase_with_underscores.

  • Class names use the CapWords convention.

Regular source code follows these convetions. Spack is a bit more liberal with its Package names and Compiler names:

  • They can contain '-' as well as '_', but cannot start with '-'.

  • They can start with numbers, e.g. "3proxy".

This function converts from the module convention to the class convention by removing _ and - and converting surrounding lowercase text to CapWords. If mod_name starts with a number, the class name returned will be prepended with '_' to make a valid Python identifier.

spack.util.naming.spack_module_to_python_module(mod_name)

Given a Spack module name, returns the name by which it can be imported in Python.

spack.util.naming.valid_module_name(mod_name)

Return whether mod_name is valid for use in Spack.

spack.util.naming.valid_fully_qualified_module_name(mod_name)

Return whether mod_name is a valid namespaced module name.

spack.util.naming.validate_fully_qualified_module_name(mod_name)

Raise an exception if mod_name is not a valid namespaced module name.

spack.util.naming.validate_module_name(mod_name)

Raise an exception if mod_name is not valid.

spack.util.naming.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.

spack.util.naming.simplify_name(name)

Simplify package name to only lowercase, digits, and dashes.

Simplifies a name which may include uppercase letters, periods, underscores, and pluses. In general, we want our package names to only contain lowercase letters, digits, and dashes.

パラメータ

name (str) -- The original name of the package

戻り値

The new name of the package

戻り値の型

str

class spack.util.naming.NamespaceTrie(separator='.')

ベースクラス: object

class Element(value)

ベースクラス: object

has_value(namespace)

True if there is a value set for the given namespace.

is_leaf(namespace)

True if this namespace has no children in the trie.

is_prefix(namespace)

True if the namespace has a value, or if it's the prefix of one that does.

spack.util.package_hash module
exception spack.util.package_hash.PackageHashError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised for all errors encountered during package hashing.

class spack.util.package_hash.RemoveDirectives(spec)

ベースクラス: ast.NodeTransformer

Remove Spack directives from a package AST.

is_directive(node)
is_spack_attr(node)
visit_ClassDef(node)
class spack.util.package_hash.RemoveDocstrings

ベースクラス: ast.NodeTransformer

Transformer that removes docstrings from a Python AST.

remove_docstring(node)
visit_ClassDef(node)
visit_FunctionDef(node)
visit_Module(node)
class spack.util.package_hash.ResolveMultiMethods(methods)

ベースクラス: ast.NodeTransformer

Remove methods which do not exist if their @when is not satisfied.

resolve(node)
visit_FunctionDef(node)
class spack.util.package_hash.TagMultiMethods(spec)

ベースクラス: ast.NodeVisitor

Tag @when-decorated methods in a spec.

visit_FunctionDef(node)
spack.util.package_hash.package_ast(spec)
spack.util.package_hash.package_content(spec)
spack.util.package_hash.package_hash(spec, content=None)
spack.util.path module

Utilities for managing paths in Spack.

TODO: this is really part of spack.config. Consolidate it.

spack.util.path.substitute_config_variables(path)

Substitute placeholders into paths.

Spack allows paths in configs to have some placeholders, as follows:

  • $spack The Spack instance's prefix

  • $user The current user's username

  • $tempdir Default temporary directory returned by tempfile.gettempdir()

These are substituted case-insensitively into the path, and users can use either $var or ${var} syntax for the variables.

spack.util.path.canonicalize_path(path)

Substitute config vars, expand environment vars, expand user home, take abspath.

spack.util.pattern module
class spack.util.pattern.Args(*flags, **kwargs)

ベースクラス: spack.util.pattern.Bunch

Subclass of Bunch to write argparse args more naturally.

class spack.util.pattern.Bunch(**kwargs)

ベースクラス: object

Carries a bunch of named attributes (from Alex Martelli bunch)

spack.util.pattern.composite(interface=None, method_list=None, container=<class 'list'>)

Decorator implementing the GoF composite pattern.

パラメータ
  • interface (type) -- class exposing the interface to which the composite object must conform. Only non-private and non-special methods will be taken into account

  • method_list (list of str) -- names of methods that should be part of the composite

  • container (MutableSequence) -- container for the composite object (default = list). Must fulfill the MutableSequence contract. The composite class will expose the container API to manage object composition

戻り値

a class decorator that patches a class adding all the methods it needs to be a composite for a given interface.

spack.util.prefix module

This file contains utilities for managing the installation prefix of a package.

class spack.util.prefix.Prefix

ベースクラス: str

This class represents an installation prefix, but provides useful attributes for referring to directories inside the prefix.

Attributes of this object are created on the fly when you request them, so any of the following is valid:

>>> prefix = Prefix('/usr')
>>> prefix.bin
/usr/bin
>>> prefix.lib64
/usr/lib64
>>> prefix.share.man
/usr/share/man
>>> prefix.foo.bar.baz
/usr/foo/bar/baz
>>> prefix.join('dashed-directory').bin64
/usr/dashed-directory/bin64

Prefix objects behave identically to strings. In fact, they subclass str. So operators like + are legal:

print('foobar ' + prefix)

This prints foobar /usr. All of this is meant to make custom installs easy.

join(string)

Concatenates a string to a prefix.

パラメータ

string (str) -- the string to append to the prefix

戻り値

the newly created installation prefix

戻り値の型

Prefix

spack.util.spack_json module

Simple wrapper around JSON to guarantee consistent use of load/dump.

spack.util.spack_json.load(stream)

Spack JSON needs to be ordered to support specs.

spack.util.spack_json.dump(data, stream=None)

Dump JSON with a reasonable amount of indentation and separation.

exception spack.util.spack_json.SpackJSONError(msg, json_error)

ベースクラス: spack.error.SpackError

Raised when there are issues with JSON parsing.

spack.util.spack_yaml module

Enhanced YAML parsing for Spack.

  • load() preserves YAML Marks on returned objects -- this allows us to access file and line information later.

  • Our load methods use ``OrderedDict class instead of YAML's default unorderd dict.

spack.util.spack_yaml.load(*args, **kwargs)

Load but modify the loader instance so that it will add __line__ atrributes to the returned object.

spack.util.spack_yaml.dump(*args, **kwargs)
exception spack.util.spack_yaml.SpackYAMLError(msg, yaml_error)

ベースクラス: spack.error.SpackError

Raised when there are issues with YAML parsing.

spack.util.string module
spack.util.string.comma_and(sequence)
spack.util.string.comma_list(sequence, article='')
spack.util.string.comma_or(sequence)
spack.util.string.plural(n, singular, plural=None, show_n=True)

Pluralize <singular> word by adding an s if n != 1.

パラメータ
  • n (int) -- number of things there are

  • singular (str) -- singular form of word

  • plural (str, optional) -- optional plural form, for when it's not just singular + 's'

  • show_n (bool) -- whether to include n in the result string (default True)

戻り値

"1 thing" if n == 1 or "n things" if n != 1

戻り値の型

(str)

spack.util.string.quote(sequence, q="'")
spack.util.web module
exception spack.util.web.HTMLParseError

ベースクラス: Exception

class spack.util.web.LinkParser

ベースクラス: html.parser.HTMLParser

This parser just takes an HTML page and strips out the hrefs on the links. Good enough for a really simple spider.

handle_starttag(tag, attrs)
exception spack.util.web.NoNetworkConnectionError(message, url)

ベースクラス: spack.util.web.SpackWebError

Raised when an operation can't get an internet connection.

class spack.util.web.NonDaemonContext

ベースクラス: multiprocessing.context.ForkContext

Process

NonDaemonProcess のエイリアス

class spack.util.web.NonDaemonPool(*args, **kwargs)

ベースクラス: multiprocessing.pool.Pool

Pool that uses non-daemon processes

class spack.util.web.NonDaemonProcess(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

ベースクラス: multiprocessing.context.Process

Process tha allows sub-processes, so pools can have sub-pools.

daemon

Return whether process is a daemon

exception spack.util.web.SpackWebError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for Spack web spidering errors.

exception spack.util.web.VersionFetchError(message, long_message=None)

ベースクラス: spack.util.web.SpackWebError

Raised when we can't determine a URL to fetch a package.

spack.util.web.find_versions_of_archive(archive_urls, list_url=None, list_depth=0)

Scrape web pages for new versions of a tarball.

パラメータ

archive_urls -- URL or sequence of URLs for different versions of a package. Typically these are just the tarballs from the package file itself. By default, this searches the parent directories of archives.

キーワード引数
  • list_url -- URL for a listing of archives. Spack wills scrape these pages for download links that look like the archive URL.

  • list_depth -- Max depth to follow links on list_url pages. Default 0.

spack.util.web.get_checksums_for_versions(url_dict, name, first_stage_function=None, keep_stage=False)

Fetches and checksums archives from URLs.

This function is called by both spack checksum and spack create. The first_stage_function argument allows the caller to inspect the first downloaded archive, e.g., to determine the build system.

パラメータ
  • url_dict (dict) -- A dictionary of the form: version -> URL

  • name (str) -- The name of the package

  • first_stage_function (callable) -- function that takes a Stage and a URL; this is run on the stage of the first URL downloaded

  • keep_stage (bool) -- whether to keep staging area when command completes

戻り値

A multi-line string containing versions and corresponding hashes

戻り値の型

(str)

spack.util.web.read_from_url(url, accept_content_type=None)
spack.util.web.spider(root_url, depth=0)

Gets web pages from a root URL.

If depth is specified (e.g., depth=2), then this will also follow up to <depth> levels of links from the root.

This will spawn processes to fetch the children, for much improved performance over a sequential fetch.

Module contents

Submodules

spack.abi module

class spack.abi.ABI

ベースクラス: object

This class provides methods to test ABI compatibility between specs. The current implementation is rather rough and could be improved.

architecture_compatible(parent, child)

Return true if parent and child have ABI compatible targets.

compatible(parent, child, **kwargs)

Returns true iff a parent and child spec are ABI compatible

compiler_compatible(parent, child, **kwargs)

Return true if compilers for parent and child are ABI compatible.

spack.architecture module

This module contains all the elements that are required to create an architecture object. These include, the target processor, the operating system, and the architecture platform (i.e. cray, darwin, linux, bgq, etc) classes.

On a multiple architecture machine, the architecture spec field can be set to build a package against any target and operating system that is present on the platform. On Cray platforms or any other architecture that has different front and back end environments, the operating system will determine the method of compiler detection.

There are two different types of compiler detection:
  1. Through the $PATH env variable (front-end detection)

  2. Through the tcl module system. (back-end detection)

Depending on which operating system is specified, the compiler will be detected using one of those methods.

For platforms such as linux and darwin, the operating system is autodetected and the target is set to be x86_64.

The command line syntax for specifying an architecture is as follows:

target=<Target name> os=<OperatingSystem name>

If the user wishes to use the defaults, either target or os can be left out of the command line and Spack will concretize using the default. These defaults are set in the 'platforms/' directory which contains the different subclasses for platforms. If the machine has multiple architectures, the user can also enter front-end, or fe or back-end or be. These settings will concretize to their respective front-end and back-end targets and operating systems. Additional platforms can be added by creating a subclass of Platform and adding it inside the platform directory.

Platforms are an abstract class that are extended by subclasses. If the user wants to add a new type of platform (such as cray_xe), they can create a subclass and set all the class attributes such as priority, front_target, back_target, front_os, back_os. Platforms also contain a priority class attribute. A lower number signifies higher priority. These numbers are arbitrarily set and can be changed though often there isn't much need unless a new platform is added and the user wants that to be detected first.

Targets are created inside the platform subclasses. Most architecture (like linux, and darwin) will have only one target (x86_64) but in the case of Cray machines, there is both a frontend and backend processor. The user can specify which targets are present on front-end and back-end architecture

Depending on the platform, operating systems are either auto-detected or are set. The user can set the front-end and back-end operating setting by the class attributes front_os and back_os. The operating system as described earlier, will be responsible for compiler detection.

class spack.architecture.Arch(plat=None, os=None, target=None)

ベースクラス: object

Architecture is now a class to help with setting attributes.

TODO: refactor so that we don't need this class.

concrete
static from_dict(d)
to_dict()
exception spack.architecture.NoPlatformError

ベースクラス: spack.error.SpackError

class spack.architecture.OperatingSystem(name, version)

ベースクラス: object

Operating System will be like a class similar to platform extended by subclasses for the specifics. Operating System will contain the compiler finding logic. Instead of calling two separate methods to find compilers we call find_compilers method for each operating system

find_compiler(cmp_cls, *path)

Try to find the given type of compiler in the user's environment. For each set of compilers found, this returns compiler objects with the cc, cxx, f77, fc paths and the version filled in.

This will search for compilers with the names in cc_names, cxx_names, etc. and it will group them if they have common prefixes, suffixes, and versions. e.g., gcc-mp-4.7 would be grouped with g++-mp-4.7 and gfortran-mp-4.7.

find_compilers(*paths)

Return a list of compilers found in the supplied paths. This invokes the find() method for each Compiler class, and appends the compilers detected to a list.

to_dict()
class spack.architecture.Platform(name)

ベースクラス: object

Abstract class that each type of Platform will subclass. Will return a instance of it once it is returned.

add_operating_system(name, os_class)

Add the operating_system class object into the platform.operating_sys dictionary

add_target(name, target)

Used by the platform specific subclass to list available targets. Raises an error if the platform specifies a name that is reserved by spack as an alias.

back_end = None
back_os = None
default = None
default_os = None
classmethod detect()

Subclass is responsible for implementing this method. Returns True if the Platform class detects that it is the current platform and False if it's not.

front_end = None
front_os = None
operating_system(name)
priority = None
reserved_oss = ['default_os', 'frontend', 'fe', 'backend', 'be']
reserved_targets = ['default_target', 'frontend', 'fe', 'backend', 'be']
classmethod setup_platform_environment(pkg, env)

Subclass can override this method if it requires any platform-specific build environment modifications.

target(name)

This is a getter method for the target dictionary that handles defaulting based on the values provided by default, front-end, and back-end. This can be overwritten by a subclass for which we want to provide further aliasing options.

class spack.architecture.Target(name, module_name=None)

ベースクラス: object

Target is the processor of the host machine. The host machine may have different front-end and back-end targets, especially if it is a Cray machine. The target will have a name and also the module_name (e.g craype-compiler). Targets will also recognize which platform they came from using the set_platform method. Targets will have compiler finding strategies

spack.architecture.all_platforms()
spack.architecture.arch_for_spec(arch_spec)

Transforms the given architecture spec into an architecture objct.

spack.architecture.get_platform(platform_name)

Returns a platform object that corresponds to the given name.

spack.architecture.platform()

Detects the platform for this machine.

Gather a list of all available subclasses of platforms. Sorts the list according to their priority looking. Priority is an arbitrarily set number. Detects platform either using uname or a file path (/opt/cray...)

spack.architecture.sys_type()

Print out the "default" platform-os-target tuple for this machine.

On machines with only one target OS/target, prints out the platform-os-target for the frontend. For machines with a frontend and a backend, prints the default backend.

TODO: replace with use of more explicit methods to get all the backends, as client code should really be aware of cross-compiled architectures.

spack.architecture.verify_platform(platform_name)

Determines whether or not the platform with the given name is supported in Spack. For more information, see the 'spack.platforms' submodule.

spack.binary_distribution module

exception spack.binary_distribution.NewLayoutException(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised if directory layout is different from buildcache.

exception spack.binary_distribution.NoChecksumException(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised if file fails checksum verification.

exception spack.binary_distribution.NoGpgException(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when gpg2 is not in PATH

exception spack.binary_distribution.NoKeyException(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when gpg has no default key added.

exception spack.binary_distribution.NoOverwriteException(file_path)

ベースクラス: Exception

Raised when a file exists and must be overwritten.

exception spack.binary_distribution.NoVerifyException(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised if file fails signature verification.

exception spack.binary_distribution.PickKeyException(keys)

ベースクラス: spack.error.SpackError

Raised when multiple keys can be used to sign.

spack.binary_distribution.build_cache_directory(prefix)
spack.binary_distribution.build_cache_relative_path()
spack.binary_distribution.build_tarball(spec, outdir, force=False, rel=False, unsigned=False, allow_root=False, key=None, regenerate_index=False)

Build a tarball from given spec and put it into the directory structure used at the mirror (following <tarball_directory_name>).

spack.binary_distribution.buildinfo_file_name(prefix)

Filename of the binary package meta-data file

spack.binary_distribution.check_specs_against_mirrors(mirrors, specs, output_file=None, rebuild_on_errors=False)

Check all the given specs against buildcaches on the given mirrors and determine if any of the specs need to be rebuilt. Reasons for needing to rebuild include binary cache for spec isn't present on a mirror, or it is present but the full_hash has changed since last time spec was built.

パラメータ
  • mirrors (dict) -- Mirrors to check against

  • specs (iterable) -- Specs to check against mirrors

  • output_file (string) -- Path to output file to be written. If provided, mirrors with missing or out-of-date specs will be formatted as a JSON object and written to this file.

  • rebuild_on_errors (boolean) -- Treat any errors encountered while checking specs as a signal to rebuild package.

Returns: 1 if any spec was out-of-date on any mirror, 0 otherwise.

spack.binary_distribution.checksum_tarball(file)
spack.binary_distribution.download_buildcache_entry(file_descriptions)
spack.binary_distribution.download_tarball(spec)

Download binary tarball for given package into stage area Return True if successful

spack.binary_distribution.extract_tarball(spec, filename, allow_root=False, unsigned=False, force=False)

extract binary tarball for given package into install area

spack.binary_distribution.generate_package_index(build_cache_dir)
spack.binary_distribution.get_keys(install=False, trust=False, force=False)

Get pgp public keys available on mirror

spack.binary_distribution.get_specs(force=False)

Get spec.yaml's for build caches available on mirror

spack.binary_distribution.has_gnupg2()
spack.binary_distribution.make_package_placeholder(workdir, prefix, allow_root)

Change paths in binaries to placeholder paths

spack.binary_distribution.make_package_relative(workdir, prefix, allow_root)

Change paths in binaries to relative paths. Change absolute symlinks to relative symlinks.

spack.binary_distribution.needs_rebuild(spec, mirror_url, rebuild_on_errors=False)
spack.binary_distribution.read_buildinfo_file(prefix)

Read buildinfo file

spack.binary_distribution.relocate_package(workdir, allow_root)

Relocate the given package

spack.binary_distribution.sign_tarball(key, force, specfile_path)
spack.binary_distribution.tarball_directory_name(spec)

Return name of the tarball directory according to the convention <os>-<architecture>/<compiler>/<package>-<version>/

spack.binary_distribution.tarball_name(spec, ext)

Return the name of the tarfile according to the convention <os>-<architecture>-<package>-<dag_hash><ext>

spack.binary_distribution.tarball_path_name(spec, ext)

Return the full path+name for a given spec according to the convention <tarball_directory_name>/<tarball_name>

spack.binary_distribution.write_buildinfo_file(prefix, workdir, rel=False)

Create a cache file containing information required for the relocation

spack.build_environment module

This module contains all routines related to setting up the package build environment. All of this is set up by package.py just before install() is called.

There are two parts to the build environment:

  1. Python build environment (i.e. install() method)

    This is how things are set up when install() is called. Spack takes advantage of each package being in its own module by adding a bunch of command-like functions (like configure(), make(), etc.) in the package's module scope. Ths allows package writers to call them all directly in Package.install() without writing 'self.' everywhere. No, this isn't Pythonic. Yes, it makes the code more readable and more like the shell script from which someone is likely porting.

  2. Build execution environment

    This is the set of environment variables, like PATH, CC, CXX, etc. that control the build. There are also a number of environment variables used to pass information (like RPATHs and other information about dependencies) to Spack's compiler wrappers. All of these env vars are also set up here.

Skimming this module is a nice way to get acquainted with the types of calls you can make from within the install() function.

exception spack.build_environment.ChildError(msg, module, classname, traceback_string, build_log, context)

ベースクラス: spack.build_environment.InstallError

Special exception class for wrapping exceptions from child processes

in Spack's build environment.

The main features of a ChildError are:

  1. They're serializable, so when a child build fails, we can send one of these to the parent and let the parent report what happened.

  2. They have a traceback field containing a traceback generated on the child immediately after failure. Spack will print this on failure in lieu of trying to run sys.excepthook on the parent process, so users will see the correct stack trace from a child.

  3. They also contain context, which shows context in the Package implementation where the error happened. This helps people debug Python code in their packages. To get it, Spack searches the stack trace for the deepest frame where self is in scope and is an instance of PackageBase. This will generally find a useful spot in the package.py file.

The long_message of a ChildError displays one of two things:

  1. If the original error was a ProcessError, indicating a command died during the build, we'll show context from the build log.

  2. If the original error was any other type of error, we'll show context from the Python code.

SpackError handles displaying the special traceback if we're in debug mode with spack -d.

build_errors = [('spack.util.executable', 'ProcessError')]
long_message
exception spack.build_environment.InstallError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised by packages when a package fails to install.

Any subclass of InstallError will be annotated by Spack wtih a pkg attribute on failure, which the caller can use to get the package for which the exception was raised.

class spack.build_environment.MakeExecutable(name, jobs)

ベースクラス: spack.util.executable.Executable

Special callable executable object for make so the user can specify parallelism options on a per-invocation basis. Specifying 'parallel' to the call will override whatever the package's global setting is, so you can either default to true or false and override particular calls. Specifying 'jobs_env' to a particular call will name an environment variable which will be set to the parallelism level (without affecting the normal invocation with -j).

Note that if the SPACK_NO_PARALLEL_MAKE env var is set it overrides everything.

spack.build_environment.clean_environment()
spack.build_environment.fork(pkg, function, dirty, fake)

Fork a child process to do part of a spack build.

パラメータ
  • pkg (PackageBase) -- package whose environment we should set up the forked process for.

  • function (callable) -- argless function to run in the child process.

  • dirty (bool) -- If True, do NOT clean the environment before building.

  • fake (bool) -- If True, skip package setup b/c it's not a real build

Usage:

def child_fun():
    # do stuff
build_env.fork(pkg, child_fun)

Forked processes are run with the build environment set up by spack.build_environment. This allows package authors to have full control over the environment, etc. without affecting other builds that might be executed in the same spack call.

If something goes wrong, the child process catches the error and passes it to the parent wrapped in a ChildError. The parent is expected to handle (or re-raise) the ChildError.

spack.build_environment.get_package_context(traceback, context=3)

Return some context for an error message when the build fails.

パラメータ
  • traceback (traceback) -- A traceback from some exception raised during install

  • context (int) -- Lines of context to show before and after the line where the error happened

This function inspects the stack to find where we failed in the package file, and it adds detailed context to the long_message from there.

spack.build_environment.get_rpath_deps(pkg)

Return immediate or transitive RPATHs depending on the package.

spack.build_environment.get_rpaths(pkg)

Get a list of all the rpaths for a package.

spack.build_environment.get_std_cmake_args(pkg)

List of standard arguments used if a package is a CMakePackage.

戻り値

standard arguments that would be used if this package were a CMakePackage instance.

戻り値の型

list of str

パラメータ

pkg (PackageBase) -- package under consideration

戻り値

arguments for cmake

戻り値の型

list of str

spack.build_environment.get_std_meson_args(pkg)

List of standard arguments used if a package is a MesonPackage.

戻り値

standard arguments that would be used if this package were a MesonPackage instance.

戻り値の型

list of str

パラメータ

pkg (PackageBase) -- package under consideration

戻り値

arguments for meson

戻り値の型

list of str

spack.build_environment.load_external_modules(pkg)

Traverse a package's spec DAG and load any external modules.

Traverse a package's dependencies and load any external modules associated with them.

パラメータ

pkg (PackageBase) -- package to load deps for

spack.build_environment.parent_class_modules(cls)

Get list of superclass modules that descend from spack.package.PackageBase

Includes cls.__module__

spack.build_environment.set_build_environment_variables(pkg, env, dirty)

Ensure a clean install environment when we build packages.

This involves unsetting pesky environment variables that may affect the build. It also involves setting environment variables used by Spack's compiler wrappers.

パラメータ
  • pkg -- The package we are building

  • env -- The build environment

  • dirty (bool) -- Skip unsetting the user's environment settings

spack.build_environment.set_compiler_environment_variables(pkg, env)
spack.build_environment.set_module_variables_for_package(pkg)

Populate the module scope of install() with some useful functions. This makes things easier for package writers.

spack.build_environment.setup_package(pkg, dirty)

Execute all environment setup routines.

spack.caches module

Caches used by Spack to store data

class spack.caches.MirrorCache(root)

ベースクラス: object

store(fetcher, relative_dest)
spack.caches.fetch_cache = <spack.fetch_strategy.FsCache object>

Spack's local cache for downloaded source archives

spack.caches.misc_cache = <spack.util.file_cache.FileCache object>

Spack's cache for small data

spack.compiler module

class spack.compiler.Compiler(cspec, operating_system, target, paths, modules=[], alias=None, environment=None, extra_rpaths=None, **kwargs)

ベースクラス: object

This class encapsulates a Spack "compiler", which includes C, C++, and Fortran compilers. Subclasses should implement support for specific compilers, their possible names, arguments, and how to identify the particular type of compiler.

PrgEnv = None
PrgEnv_compiler = None
cc_names = []
cc_rpath_arg
classmethod cc_version(cc)
cxx11_flag
cxx14_flag
cxx17_flag
cxx98_flag
cxx_names = []
cxx_rpath_arg
classmethod cxx_version(cxx)
classmethod default_version(cc)

Override just this to override all compiler version functions.

classmethod extract_version_from_output(output)

Extracts the version from compiler's output.

f77_names = []
f77_rpath_arg
classmethod f77_version(f77)
fc_names = []
fc_rpath_arg
classmethod fc_version(fc)
openmp_flag
prefixes = []
setup_custom_environment(pkg, env)

Set any environment variables necessary to use the compiler.

suffixes = ['-.*']
version
version_argument = '-dumpversion'

Compiler argument that produces version information

version_regex = '(.*)'

Regex used to extract version from compiler's output

spack.concretize module

Functions here are used to take abstract specs and make them concrete. For example, if a spec asks for a version between 1.8 and 1.9, these functions might take will take the most recent 1.9 version of the package available. Or, if the user didn't specify a compiler for a spec, then this will assign a compiler to the spec based on defaults or user preferences.

TODO: make this customizable and allow users to configure

concretization policies.

class spack.concretize.Concretizer

ベースクラス: object

You can subclass this class to override some of the default concretization strategies, or you can override all of them.

choose_virtual_or_external(spec)

Given a list of candidate virtual and external packages, try to find one that is most ABI compatible.

concretize_architecture(spec)

If the spec is empty provide the defaults of the platform. If the architecture is not a string type, then check if either the platform, target or operating system are concretized. If any of the fields are changed then return True. If everything is concretized (i.e the architecture attribute is a namedtuple of classes) then return False. If the target is a string type, then convert the string into a concretized architecture. If it has no architecture and the root of the DAG has an architecture, then use the root otherwise use the defaults on the platform.

concretize_compiler(spec)

If the spec already has a compiler, we're done. If not, then take the compiler used for the nearest ancestor with a compiler spec and use that. If the ancestor's compiler is not concrete, then used the preferred compiler as specified in spackconfig.

Intuition: Use the spackconfig default if no package that depends on this one has a strict compiler requirement. Otherwise, try to build with the compiler that will be used by libraries that link to this one, to maximize compatibility.

concretize_compiler_flags(spec)

The compiler flags are updated to match those of the spec whose compiler is used, defaulting to no compiler flags in the spec. Default specs set at the compiler level will still be added later.

concretize_variants(spec)

If the spec already has variants filled in, return. Otherwise, add the user preferences from packages.yaml or the default variants from the package specification.

concretize_version(spec)

If the spec is already concrete, return. Otherwise take the preferred version from spackconfig, and default to the package's version if there are no available versions.

TODO: In many cases we probably want to look for installed

versions of each package and use an installed version if we can link to it. The policy implemented here will tend to rebuild a lot of stuff becasue it will prefer a compiler in the spec to any compiler already- installed things were built with. There is likely some better policy that finds some middle ground between these two extremes.

disable_compiler_existence_check()
enable_compiler_existence_check()
exception spack.concretize.InsufficientArchitectureInfoError(spec, archs)

ベースクラス: spack.error.SpackError

Raised when details on architecture cannot be collected from the system

exception spack.concretize.NoBuildError(spec)

ベースクラス: spack.error.SpackError

Raised when a package is configured with the buildable option False, but no satisfactory external versions can be found

exception spack.concretize.NoCompilersForArchError(arch, available_os_targets)

ベースクラス: spack.error.SpackError

exception spack.concretize.NoValidVersionError(spec)

ベースクラス: spack.error.SpackError

Raised when there is no way to have a concrete version for a particular spec.

exception spack.concretize.UnavailableCompilerVersionError(compiler_spec, arch=None)

ベースクラス: spack.error.SpackError

Raised when there is no available compiler that satisfies a compiler spec.

spack.concretize.concretize_specs_together(*abstract_specs)

Given a number of specs as input, tries to concretize them together.

パラメータ

*abstract_specs -- abstract specs to be concretized, given either as Specs or strings

戻り値

List of concretized specs

spack.concretize.concretizer = <spack.concretize.Concretizer object>

Concretizer singleton

spack.concretize.find_spec(spec, condition, default=None)

Searches the dag from spec in an intelligent order and looks for a spec that matches a condition

spack.config module

This module implements Spack's configuration file handling.

This implements Spack's configuration system, which handles merging multiple scopes with different levels of precedence. See the documentation on Configuration Scopes for details on how Spack's configuration system behaves. The scopes are:

  1. default

  2. system

  3. site

  4. user

And corresponding per-platform scopes. Important functions in this module are:

  • get_config()

  • update_config()

get_config reads in YAML data for a particular scope and returns it. Callers can then modify the data and write it back with update_config.

When read in, Spack validates configurations with jsonschemas. The schemas are in submodules of spack.schema.

exception spack.config.ConfigError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for all Spack config related errors.

exception spack.config.ConfigFileError(message, long_message=None)

ベースクラス: spack.config.ConfigError

Issue reading or accessing a configuration file.

exception spack.config.ConfigFormatError(validation_error, data, filename=None, line=None)

ベースクラス: spack.config.ConfigError

Raised when a configuration format does not match its schema.

class spack.config.ConfigScope(name, path)

ベースクラス: 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).

clear()

Empty cached config information.

get_section(section)
get_section_filename(section)
write_section(section)
exception spack.config.ConfigSectionError(message, long_message=None)

ベースクラス: spack.config.ConfigError

Error for referring to a bad config section name in a configuration.

class spack.config.Configuration(*scopes)

ベースクラス: object

A full Spack configuration, from a hierarchy of config files.

This class makes it easy to add a new scope on top of an existing one.

clear_caches()

Clears the caches for configuration files,

This will cause files to be re-read upon the next request.

file_scopes

List of writable scopes with an associated file.

get(path, default=None, scope=None)

Get a config section or a single value from one.

Accepts a path syntax that allows us to grab nested config map entries. Getting the 'config' section would look like:

spack.config.get('config')

and the dirty section in the config scope would be:

spack.config.get('config:dirty')

We use : as the separator, like YAML objects.

get_config(section, scope=None)

Get configuration settings for a section.

If scope is None or not provided, return the merged contents of all of Spack's configuration scopes. If scope is provided, return only the confiugration as specified in that scope.

This off the top-level name from the YAML section. That is, for a YAML config file that looks like this:

config:
  install_tree: $spack/opt/spack
  module_roots:
    lmod:   $spack/share/spack/lmod

get_config('config') will return:

{ 'install_tree': '$spack/opt/spack',
  'module_roots: {
      'lmod': '$spack/share/spack/lmod'
  }
}
get_config_filename(scope, section)

For some scope and section, get the name of the configuration file.

highest_precedence_scope()

Non-internal scope with highest precedence.

pop_scope()

Remove the highest precedence scope and return it.

print_section(section, blame=False)

Print a configuration to stdout.

push_scope(scope)

Add a higher precedence scope to the Configuration.

remove_scope(scope_name)
set(path, value, scope=None)

Convenience function for setting single values in config files.

Accepts the path syntax described in get().

update_config(section, update_data, scope=None)

Update the configuration file for a particular scope.

Overwrites contents of a section in a scope with update_data, then writes out the config file.

update_data should have the top-level section name stripped off (it will be re-added). Data itself can be a list, dict, or any other yaml-ish structure.

class spack.config.ImmutableConfigScope(name, path)

ベースクラス: spack.config.ConfigScope

A configuration scope that cannot be written to.

This is used for ConfigScopes passed on the command line.

write_section(section)
class spack.config.InternalConfigScope(name, data=None)

ベースクラス: spack.config.ConfigScope

An internal configuration scope that is not persisted to a file.

This is for spack internal use so that command-line options and config file settings are accessed the same way, and Spack can easily override settings from files.

get_section(section)

Just reads from an internal dictionary.

get_section_filename(section)
write_section(section)

This only validates, as the data is already in memory.

class spack.config.SingleFileScope(name, path, schema, yaml_path=None)

ベースクラス: spack.config.ConfigScope

This class represents a configuration scope in a single YAML file.

get_section(section)
get_section_filename(section)
write_section(section)
spack.config.command_line_scopes = []

configuration scopes added on the command line set by spack.main.main().

spack.config.config = <spack.config.Configuration object>

This is the singleton configuration instance for Spack.

spack.config.config_defaults = {'config': {'build_jobs': 2, 'checksum': True, 'debug': False, 'dirty': False, 'verify_ssl': True}}

Hard-coded default values for some key configuration options. This ensures that Spack will still work even if config.yaml in the defaults scope is removed.

spack.config.configuration_paths = (('defaults', '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/etc/spack/defaults'), ('system', '/etc/spack'), ('site', '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/etc/spack'), ('user', '/home/docs/.spack'))

Builtin paths to configuration files in Spack

spack.config.default_list_scope()

Return the config scope that is listed by default.

Commands that list configuration list all scopes (merged) by default.

spack.config.default_modify_scope()

Return the config scope that commands should modify by default.

Commands that modify configuration by default modify the highest priority scope.

spack.config.first_existing(dictionary, keys)

Get the value of the first key in keys that is in the dictionary.

spack.config.get(path, default=None, scope=None)

Module-level wrapper for Configuration.get().

spack.config.override(path_or_scope, value=None)

Simple way to override config settings within a context.

パラメータ
  • path_or_scope (ConfigScope or str) -- scope or single option to override

  • value (object, optional) -- value for the single option

Temporarily push a scope on the current configuration, then remove it after the context completes. If a single option is provided, create an internal config scope for it and push/pop that scope.

spack.config.scopes()

Convenience function to get list of configuration scopes.

spack.config.scopes_metavar = '{defaults,system,site,user}[/PLATFORM]'

metavar to use for commands that accept scopes this is shorter and more readable than listing all choices

spack.config.section_schemas = {'compilers': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'compilers': {'items': [{'type': 'object', 'additionalProperties': False, 'properties': {'compiler': {'type': 'object', 'additionalProperties': False, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'properties': {'paths': {'type': 'object', 'required': ['cc', 'cxx', 'f77', 'fc'], 'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'flags': {'type': 'object', 'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'spec': {'type': 'string'}, 'operating_system': {'type': 'string'}, 'target': {'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'modules': {'anyOf': [{'type': 'string'}, {'type': 'null'}, {'type': 'array'}]}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'unset': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'null'}}}, 'prepend-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}, 'append-path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}}}}, 'extra_rpaths': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}}}], 'type': 'array'}}, 'title': 'Spack compiler configuration file schema', 'type': 'object'}, 'config': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'config': {'default': {}, 'properties': {'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'dirty': {'type': 'boolean'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_missing_compilers': {'type': 'boolean'}, 'install_path_scheme': {'type': 'string'}, 'install_tree': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'module_roots': {'additionalProperties': False, 'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'package_lock_timeout': {'anyOf': [{'type': 'integer', 'minimum': 1}, {'type': 'null'}]}, 'source_cache': {'type': 'string'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}, 'mirrors': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}}, 'title': 'Spack mirror configuration file schema', 'type': 'object'}, 'modules': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'modules': {'additionalProperties': False, 'default': {}, 'properties': {'dotkit': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}, 'enable': {'default': [], 'items': {'enum': ['tcl', 'dotkit', 'lmod'], 'type': 'string'}, 'type': 'array'}, 'lmod': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {'type': 'object', 'properties': {'core_compilers': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'hierarchy': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}]}, 'prefix_inspections': {'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'tcl': {'allOf': [{'type': 'object', 'default': {}, 'allOf': [{'properties': {'verbose': {'type': 'boolean', 'default': False}, 'hash_length': {'type': 'integer', 'minimum': 0, 'default': 7}, 'whitelist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'blacklist_implicits': {'type': 'boolean', 'default': False}, 'naming_scheme': {'type': 'string'}, 'all': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}, {'validate_spec': True, 'patternProperties': {'(?!hierarchy|verbose|hash_length|whitelist|blacklist|naming_scheme|core_compilers|all)(^\\w[\\w-]*)': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}, '^[\\^@%+~]': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'filter': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'environment_blacklist': {'type': 'array', 'default': [], 'items': {'type': 'string'}}}}, 'template': {'type': 'string'}, 'autoload': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'prerequisites': {'type': 'string', 'enum': ['none', 'direct', 'all']}, 'conflict': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'load': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'suffixes': {'type': 'object', 'validate_spec': True, 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'environment': {'type': 'object', 'default': {}, 'additionalProperties': False, 'properties': {'set': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'unset': {'type': 'array', 'default': [], 'items': {'type': 'string'}}, 'prepend_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}, 'append_path': {'type': 'object', 'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}}}}}}}}]}, {}]}}, 'type': 'object'}}, 'title': 'Spack module file configuration file schema', 'type': 'object'}, 'packages': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'packages': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'modules': {'default': {}, 'type': 'object'}, 'paths': {'default': {}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'variants': {'oneOf': [{'type': 'string'}, {'type': 'array', 'items': {'type': 'string'}}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack package configuration file schema', 'type': 'object'}, 'repos': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'title': 'Spack repository configuration file schema', 'type': 'object'}, 'upstreams': {'$schema': 'http://json-schema.org/schema#', 'additionalProperties': False, 'properties': {'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'dotkit': {'type': 'string'}, 'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}}

Dict from section names -> schema for that section

spack.config.set(path, value, scope=None)

Convenience function for getting single values in config files.

Accepts the path syntax described in get().

spack.config.validate(data, schema, set_defaults=True)

Validate data read in from a Spack YAML file.

パラメータ
  • data (dict or list) -- data read from a Spack YAML file

  • schema (dict or list) -- jsonschema to validate data

  • set_defaults (bool) -- whether to set defaults based on the schema

This leverages the line information (start_mark, end_mark) stored on Spack YAML structures.

spack.database module

Spack's installation tracking database.

The database serves two purposes:

  1. It implements a cache on top of a potentially very large Spack directory hierarchy, speeding up many operations that would otherwise require filesystem access.

  2. It will allow us to track external installations as well as lost packages and their dependencies.

Prior to the implementation of this store, a directory layout served as the authoritative database of packages in Spack. This module provides a cache and a sanity checking mechanism for what is in the filesystem.

exception spack.database.CorruptDatabaseError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when errors are found while reading the database.

class spack.database.Database(root, db_dir=None, upstream_dbs=None, is_upstream=False)

ベースクラス: object

Per-process lock objects for each install prefix.

activated_extensions_for(spec_like, *args, **kwargs)
add(spec_like, *args, **kwargs)
db_for_spec_hash(hash_key)
get_record(spec_like, *args, **kwargs)
installed_extensions_for(spec_like, *args, **kwargs)
installed_relatives(spec_like, *args, **kwargs)
missing(spec)
prefix_lock(spec)

Get a lock on a particular spec's installation directory.

NOTE: The installation directory does not need to exist.

Prefix lock is a byte range lock on the nth byte of a file.

The lock file is spack.store.db.prefix_lock -- the DB tells us what to call it and it lives alongside the install DB.

n is the sys.maxsize-bit prefix of the DAG hash. This makes likelihood of collision is very low AND it gives us readers-writer lock semantics with just a single lockfile, so no cleanup required.

prefix_read_lock(spec)
prefix_write_lock(spec)
query(*args, **kwargs)
query_by_spec_hash(hash_key, data=None)
query_local(*args, **kwargs)
query_one(query_spec, known=<built-in function any>, installed=True)

Query for exactly one spec that matches the query spec.

Raises an assertion error if more than one spec matches the query. Returns None if no installed package matches.

read_transaction()

Get a read lock context manager for use in a with block.

reindex(directory_layout)

Build database index from scratch based on a directory layout.

Locks the DB if it isn't locked already.

remove(spec_like, *args, **kwargs)
write_transaction()

Get a write lock context manager for use in a with block.

class spack.database.ForbiddenLock

ベースクラス: object

exception spack.database.ForbiddenLockError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when an upstream DB attempts to acquire a lock

class spack.database.InstallRecord(spec, path, installed, ref_count=0, explicit=False, installation_time=None)

ベースクラス: object

A record represents one installation in the DB.

The record keeps track of the spec for the installation, its install path, AND whether or not it is installed. We need the installed flag in case a user either:

  1. blew away a directory, or

  2. used spack uninstall -f to get rid of it

If, in either case, the package was removed but others still depend on it, we still need to track its spec, so we don't actually remove from the database until a spec has no installed dependents left.

パラメータ
  • spec (Spec) -- spec tracked by the install record

  • path (str) -- path where the spec has been installed

  • installed (bool) -- whether or not the spec is currently installed

  • ref_count (int) -- number of specs that depend on this one

  • explicit (bool, optional) -- whether or not this spec was explicitly installed, or pulled-in as a dependency of something else

  • installation_time (time, optional) -- time of the installation

classmethod from_dict(spec, dictionary)
to_dict()
exception spack.database.InvalidDatabaseVersionError(expected, found)

ベースクラス: spack.error.SpackError

exception spack.database.MissingDependenciesError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when DB cannot find records for dependencies

exception spack.database.NonConcreteSpecAddError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when attemptint to add non-concrete spec to DB.

exception spack.database.UpstreamDatabaseLockingError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when an operation would need to lock an upstream database

spack.dependency module

Data structures that represent Spack's dependency relationships.

class spack.dependency.Dependency(pkg, spec, type=('build', 'link'))

ベースクラス: object

Class representing metadata for a dependency on a package.

This class differs from spack.spec.DependencySpec because it represents metadata at the Package level. spack.spec.DependencySpec is a descriptor for an actual package configuration, while Dependency is a descriptor for a package's dependency requirements.

A dependency is a requirement for a configuration of another package that satisfies a particular spec. The dependency can have types, which determine how that package configuration is required, e.g. whether it is required for building the package, whether it needs to be linked to, or whether it is needed at runtime so that Spack can call commands from it.

A package can also depend on another package with patches. This is for cases where the maintainers of one package also maintain special patches for their dependencies. If one package depends on another with patches, a special version of that dependency with patches applied will be built for use by the dependent package. The patches are included in the new version's spec hash to differentiate it from unpatched versions of the same package, so that unpatched versions of the dependency package can coexist with the patched version.

merge(other)

Merge constraints, deptypes, and patches of other into self.

name

Get the name of the dependency package.

spack.dependency.all_deptypes = ('build', 'link', 'run', 'test')

The types of dependency relationships that Spack understands.

spack.dependency.canonical_deptype(deptype)

Convert deptype to a canonical sorted tuple, or raise ValueError.

パラメータ

deptype (str or list or tuple) -- string representing dependency type, or a list/tuple of such strings. Can also be the builtin function all or the string 'all', which result in a tuple of all dependency types known to Spack.

spack.dependency.default_deptype = ('build', 'link')

Default dependency type if none is specified

spack.directives module

This package contains directives that can be used within a package.

Directives are functions that can be called inside a package definition to modify the package, for example:

class OpenMpi(Package):

depends_on("hwloc") provides("mpi") ...

provides and depends_on are spack directives.

The available directives are:

  • version

  • depends_on

  • provides

  • extends

  • patch

  • variant

  • resource

spack.directives.version(ver, checksum=None, **kwargs)

Adds a version and metadata describing how to fetch its source code.

Metadata is stored as a dict of kwargs in the package class's versions dictionary.

The dict of arguments is turned into a valid fetch strategy later. See spack.fetch_strategy.for_package_version().

spack.directives.conflicts(conflict_spec, when=None, msg=None)

Allows a package to define a conflict.

Currently, a "conflict" is a concretized configuration that is known to be non-valid. For example, a package that is known not to be buildable with intel compilers can declare:

conflicts('%intel')

To express the same constraint only when the 'foo' variant is activated:

conflicts('%intel', when='+foo')
パラメータ
  • conflict_spec (Spec) -- constraint defining the known conflict

  • when (Spec) -- optional constraint that triggers the conflict

  • msg (str) -- optional user defined message

spack.directives.depends_on(spec, when=None, type=('build', 'link'), patches=None)

Creates a dict of deps with specs defining when they apply.

パラメータ
  • spec (Spec or str) -- the package and constraints depended on

  • when (Spec or str) -- when the dependent satisfies this, it has the dependency represented by spec

  • type (str or tuple of str) -- str or tuple of legal Spack deptypes

  • patches (obj or list) -- single result of patch() directive, a str to be passed to patch, or a list of these

This directive is to be used inside a Package definition to declare that the package requires other packages to be built first. @see The section "Dependency specs" in the Spack Packaging Guide.

spack.directives.extends(spec, **kwargs)

Same as depends_on, but allows symlinking into dependency's prefix tree.

This is for Python and other language modules where the module needs to be installed into the prefix of the Python installation. Spack handles this by installing modules into their own prefix, but allowing ONE module version to be symlinked into a parent Python install at a time, using spack activate.

keyword arguments can be passed to extends() so that extension packages can pass parameters to the extendee's extension mechanism.

spack.directives.provides(*specs, **kwargs)

Allows packages to provide a virtual dependency. If a package provides 'mpi', other packages can declare that they depend on "mpi", and spack can use the providing package to satisfy the dependency.

spack.directives.patch(url_or_filename, level=1, when=None, working_dir='.', **kwargs)

Packages can declare patches to apply to source. You can optionally provide a when spec to indicate that a particular patch should only be applied when the package's spec meets certain conditions (e.g. a particular version).

パラメータ
  • url_or_filename (str) -- url or relative filename of the patch

  • level (int) -- patch level (as in the patch shell command)

  • when (Spec) -- optional anonymous spec that specifies when to apply the patch

  • working_dir (str) -- dir to change to before applying

キーワード引数
  • sha256 (str) -- sha256 sum of the patch, used to verify the patch (only required for URL patches)

  • archive_sha256 (str) -- sha256 sum of the archive, if the patch is compressed (only required for compressed URL patches)

spack.directives.variant(name, default=None, description='', values=None, multi=None, validator=None)

Define a variant for the package. Packager can specify a default value as well as a text description.

パラメータ
  • name (str) -- name of the variant

  • default (str or bool) -- default value for the variant, if not specified otherwise the default will be False for a boolean variant and 'nothing' for a multi-valued variant

  • description (str) -- description of the purpose of the variant

  • values (tuple or callable) -- either a tuple of strings containing the allowed values, or a callable accepting one value and returning True if it is valid

  • multi (bool) -- if False only one value per spec is allowed for this variant

  • validator (callable) -- optional group validator to enforce additional logic. It receives the package name, the variant name and a tuple of values and should raise an instance of SpackError if the group doesn't meet the additional constraints

例外

DirectiveError -- if arguments passed to the directive are invalid

spack.directives.resource(**kwargs)

Define an external resource to be fetched and staged when building the package. Based on the keywords present in the dictionary the appropriate FetchStrategy will be used for the resource. Resources are fetched and staged in their own folder inside spack stage area, and then moved into the stage area of the package that needs them.

List of recognized keywords:

  • 'when' : (optional) represents the condition upon which the resource is needed

  • 'destination' : (optional) path where to move the resource. This path must be relative to the main package stage area.

  • 'placement' : (optional) gives the possibility to fine tune how the resource is moved into the main package stage area.

spack.directory_layout module

class spack.directory_layout.DirectoryLayout(root)

ベースクラス: object

A directory layout is used to associate unique paths with specs. Different installations are going to want differnet layouts for their install, and they can use this to customize the nesting structure of spack installs.

all_specs()

To be implemented by subclasses to traverse all specs for which there is a directory within the root.

check_installed(spec)

Checks whether a spec is installed.

Return the spec's prefix, if it is installed, None otherwise.

Raise an exception if the install is inconsistent or corrupt.

create_install_directory(spec)

Creates the installation directory for a spec.

hidden_file_paths

Return a list of hidden files used by the directory layout.

Paths are relative to the root of an install directory.

If the directory layout uses no hidden files to maintain state, this should return an empty container, e.g. [] or (,).

path_for_spec(spec)

Return absolute path from the root to a directory for the spec.

relative_path_for_spec(spec)

Implemented by subclasses to return a relative path from the install root to a unique location for the provided spec.

remove_install_directory(spec)

Removes a prefix and any empty parent directories from the root. Raised RemoveFailedError if something goes wrong.

exception spack.directory_layout.DirectoryLayoutError(message, long_msg=None)

ベースクラス: spack.error.SpackError

Superclass for directory layout errors.

exception spack.directory_layout.ExtensionAlreadyInstalledError(spec, ext_spec)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when an extension is added to a package that already has it.

exception spack.directory_layout.ExtensionConflictError(spec, ext_spec, conflict)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when an extension is added to a package that already has it.

class spack.directory_layout.ExtensionsLayout(view, **kwargs)

ベースクラス: object

A directory layout is used to associate unique paths with specs for package extensions. Keeps track of which extensions are activated for what package. Depending on the use case, this can mean globally activated extensions directly in the installation folder - or extensions activated in filesystem views.

add_extension(spec, ext_spec)

Add to the list of currently installed extensions.

check_activated(spec, ext_spec)

Ensure that ext_spec can be removed from spec.

If not, raise NoSuchExtensionError.

check_extension_conflict(spec, ext_spec)

Ensure that ext_spec can be activated in spec.

If not, raise ExtensionAlreadyInstalledError or ExtensionConflictError.

extendee_target_directory(extendee)

Specify to which full path extendee should link all files from extensions.

extension_map(spec)

Get a dict of currently installed extension packages for a spec.

Dict maps { name : extension_spec } Modifying dict does not affect internals of this layout.

remove_extension(spec, ext_spec)

Remove from the list of currently installed extensions.

exception spack.directory_layout.InconsistentInstallDirectoryError(message, long_msg=None)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when a package seems to be installed to the wrong place.

exception spack.directory_layout.InstallDirectoryAlreadyExistsError(path)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when create_install_directory is called unnecessarily.

exception spack.directory_layout.InvalidDirectoryLayoutParametersError(message, long_msg=None)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when a invalid directory layout parameters are supplied

exception spack.directory_layout.InvalidExtensionSpecError(message, long_msg=None)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when an extension file has a bad spec in it.

exception spack.directory_layout.NoSuchExtensionError(spec, ext_spec)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when an extension isn't there on deactivate.

exception spack.directory_layout.RemoveFailedError(installed_spec, prefix, error)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when a DirectoryLayout cannot remove an install prefix.

exception spack.directory_layout.SpecHashCollisionError(installed_spec, new_spec)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when there is a hash collision in an install layout.

exception spack.directory_layout.SpecReadError(message, long_msg=None)

ベースクラス: spack.directory_layout.DirectoryLayoutError

Raised when directory layout can't read a spec.

class spack.directory_layout.YamlDirectoryLayout(root, **kwargs)

ベースクラス: spack.directory_layout.DirectoryLayout

By default lays out installation directories like this::
<install root>/
<platform-os-target>/
<compiler>-<compiler version>/

<name>-<version>-<hash>

The hash here is a SHA-1 hash for the full DAG plus the build spec. TODO: implement the build spec.

The installation directory scheme can be modified with the arguments hash_len and path_scheme.

all_specs()

To be implemented by subclasses to traverse all specs for which there is a directory within the root.

build_env_path(spec)
build_log_path(spec)
build_packages_path(spec)
check_installed(spec)

Checks whether a spec is installed.

Return the spec's prefix, if it is installed, None otherwise.

Raise an exception if the install is inconsistent or corrupt.

create_install_directory(spec)

Creates the installation directory for a spec.

disable_upstream_check()
hidden_file_paths

Return a list of hidden files used by the directory layout.

Paths are relative to the root of an install directory.

If the directory layout uses no hidden files to maintain state, this should return an empty container, e.g. [] or (,).

metadata_path(spec)
read_spec(path)

Read the contents of a file and parse them as a spec

relative_path_for_spec(spec)

Implemented by subclasses to return a relative path from the install root to a unique location for the provided spec.

spec_file_path(spec)

Gets full path to spec file

specs_by_hash()
write_spec(spec, path)

Write a spec out to a file.

class spack.directory_layout.YamlViewExtensionsLayout(view, layout)

ベースクラス: spack.directory_layout.ExtensionsLayout

Maintain extensions within a view.

add_extension(spec, ext_spec)

Add to the list of currently installed extensions.

check_activated(spec, ext_spec)

Ensure that ext_spec can be removed from spec.

If not, raise NoSuchExtensionError.

check_extension_conflict(spec, ext_spec)

Ensure that ext_spec can be activated in spec.

If not, raise ExtensionAlreadyInstalledError or ExtensionConflictError.

extension_file_path(spec)

Gets full path to an installed package's extension file, which keeps track of all the extensions for that package which have been added to this view.

extension_map(spec)

Defensive copying version of _extension_map() for external API.

remove_extension(spec, ext_spec)

Remove from the list of currently installed extensions.

spack.environment module

class spack.environment.Environment(path, init_file=None, with_view=None)

ベースクラス: object

active

True if this environment is currently active.

add(user_spec)

Add a single user_spec (non-concretized) to the Environment

戻り値

True if the spec was added, False if it was already

present and did not need to be added

戻り値の型

(bool)

add_view_to_shell(shell)
added_specs()

Specs that are not yet installed.

Yields the user spec for non-concretized specs, and the concrete spec for already concretized but not yet installed specs.

all_hashes()

Return all specs, even those a user spec would shadow.

all_specs()

Return all specs, even those a user spec would shadow.

all_specs_by_hash()

Map of hashes to spec for all specs in this environment.

clear()
concretize(force=False)

Concretize user_specs in this environment.

Only concretizes specs that haven't been concretized yet unless force is True.

This only modifies the environment in memory. write() will write out a lockfile containing concretized specs.

パラメータ

force (bool) -- re-concretize ALL specs, even those that were already concretized

concretized_specs()

Tuples of (user spec, concrete spec) for all concrete specs.

config_scopes()

A list of all configuration scopes for this environment.

default_view_path
destroy()

Remove this environment from Spack entirely.

env_file_config_scope()

Get the configuration scope for the environment's manifest file.

env_file_config_scope_name()

Name of the config scope of this environment's manifest file.

env_subdir_path

Path to directory where the env stores repos, logs, views.

included_config_scopes()

List of included configuration scopes from the environment.

Scopes are listed in the YAML file in order from highest to lowest precedence, so configuration from earlier scope will take precedence over later ones.

This routine returns them in the order they should be pushed onto the internal scope stack (so, in reverse, from lowest to highest).

install(user_spec, concrete_spec=None, **install_args)

Install a single spec into an environment.

This will automatically concretize the single spec, but it won't affect other as-yet unconcretized specs.

install_all(args=None)

Install all concretized specs in an environment.

internal

Whether this environment is managed by Spack.

lock_path

Path to spack.lock file in this environment.

log_path
manifest_path

Path to spack.yaml file in this environment.

name

Human-readable representation of the environment.

This is the path for directory environments, and just the name for named environments.

regenerate_view()
remove(query_spec, force=False)

Remove specs from an environment that match a query_spec

removed_specs()

Tuples of (user spec, concrete spec) for all specs that will be removed on nexg concretize.

repo
repos_path
rm_view_from_shell(shell)
roots()

Specs explicitly requested by the user in this environment.

Yields both added and installed specs that have user specs in spack.yaml.

update_view(view_path)
view()
write()

Writes an in-memory environment to its location on disk.

This will also write out package files for each newly concretized spec.

exception spack.environment.SpackEnvironmentError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for all errors to do with Spack environments.

spack.environment.activate(env, use_env_repo=False, add_view=True, shell='sh', prompt=None)

Activate an environment.

To activate an environment, we add its configuration scope to the existing Spack configuration, and we set active to the current environment.

パラメータ
  • env (Environment) -- the environment to activate

  • use_env_repo (bool) -- use the packages exactly as they appear in the environment's repository

  • add_view (bool) -- generate commands to add view to path variables

  • shell (string) -- One of sh, csh.

  • prompt (string) -- string to add to the users prompt, or None

戻り値

Shell commands to activate environment.

戻り値の型

cmds

TODO: environment to use the activated spack environment.

spack.environment.active(name)

True if the named environment is active.

spack.environment.all_environment_names()

List the names of environments that currently exist.

spack.environment.all_environments()

Generator for all named Environments.

spack.environment.config_dict(yaml_data)

Get the configuration scope section out of an spack.yaml

spack.environment.create(name, init_file=None, with_view=None)

Create a named environment in Spack.

spack.environment.deactivate(shell='sh')

Undo any configuration or repo settings modified by activate().

パラメータ

shell (string) -- One of sh, csh. Shell style to use.

戻り値

shell commands for shell to undo environment variables

戻り値の型

(string)

spack.environment.deactivate_config_scope(env)

Remove any scopes from env from the global config path.

spack.environment.default_manifest_yaml = '# This is a Spack Environment file.\n#\n# It describes a set of packages to be installed, along with\n# configuration settings.\nspack:\n # add package specs to the `specs` list\n specs:\n -\n view: true\n'

default spack.yaml file to put in new environments

spack.environment.env_path = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/var/spack/environments'

path where environments are stored in the spack tree

spack.environment.env_schema_keys = ('spack', 'env')

legal first keys in the spack.yaml manifest file

spack.environment.env_subdir_name = '.spack-env'

Name of the directory where environments store repos, logs, views

spack.environment.exists(name)

Whether an environment with this name exists or not.

spack.environment.find_environment(args)

Find active environment from args, spack.yaml, or environment variable.

This is called in spack.main to figure out which environment to activate.

Check for an environment in this order:
  1. via spack -e ENV or spack -D DIR (arguments)

  2. as a spack.yaml file in the current directory, or

  3. via a path in the SPACK_ENV environment variable.

If an environment is found, read it in. If not, return None.

パラメータ

args (Namespace) -- argparse namespace wtih command arguments

戻り値

a found environment, or None

戻り値の型

(Environment)

spack.environment.get_env(args, cmd_name, required=False)

Used by commands to get the active environment.

This first checks for an env argument, then looks at the active environment. We check args first because Spack's subcommand arguments are parsed after the -e and -D arguments to spack. So there may be an env argument that is not the active environment, and we give it precedence.

This is used by a number of commands for determining whether there is an active environment.

If an environment is not found and is required, print an error message that says the calling command needs an active environment.

パラメータ
  • args (Namespace) -- argparse namespace wtih command arguments

  • cmd_name (str) -- name of calling command

  • required (bool) -- if True, raise an exception when no environment is found; if False, just return None

戻り値

if there is an arg or active environment

戻り値の型

(Environment)

spack.environment.is_env_dir(path)

Whether a directory contains a spack environment.

spack.environment.lockfile_format_version = 1

version of the lockfile format. Must increase monotonically.

spack.environment.lockfile_name = 'spack.lock'

Name of the input yaml file for an environment

spack.environment.make_repo_path(root)

Make a RepoPath from the repo subdirectories in an environment.

spack.environment.manifest_name = 'spack.yaml'

Name of the input yaml file for an environment

spack.environment.prepare_config_scope(env)

Add env's scope to the global configuration search path.

spack.environment.read(name)

Get an environment with the supplied name.

spack.environment.root(name)

Get the root directory for an environment by name.

spack.environment.spack_env_var = 'SPACK_ENV'

environment variable used to indicate the active environment

spack.environment.valid_env_name(name)
spack.environment.valid_environment_name_re = '^\\w[\\w-]*$'

regex for validating enviroment names

spack.environment.validate(data, filename=None)
spack.environment.validate_env_name(name)

spack.error module

exception spack.error.NoHeadersError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when package headers are requested but cannot be found

exception spack.error.NoLibrariesError(message_or_name, prefix=None)

ベースクラス: spack.error.SpackError

Raised when package libraries are requested but cannot be found

exception spack.error.SpackError(message, long_message=None)

ベースクラス: Exception

This is the superclass for all Spack errors. Subclasses can be found in the modules they have to do with.

die()
long_message
print_context()

Print extended debug information about this exception.

This is usually printed when the top-level Spack error handler calls die(), but it can be called separately beforehand if a lower-level error handler needs to print error context and continue without raising the exception to the top level.

exception spack.error.SpecError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for all errors that occur while constructing specs.

exception spack.error.UnsatisfiableSpecError(provided, required, constraint_type)

ベースクラス: spack.error.SpecError

Raised when a spec conflicts with package constraints. Provide the requirement that was violated when raising.

exception spack.error.UnsupportedPlatformError(message)

ベースクラス: spack.error.SpackError

Raised by packages when a platform is not supported

spack.error.debug = False

whether we should write stack traces or short error messages this is module-scoped because it needs to be set very early

spack.extensions module

Service functions and classes to implement the hooks for Spack's command extensions.

spack.extensions.extension_name(path)

Returns the name of the extension in the path passed as argument.

パラメータ

path (str) -- path where the extension resides

戻り値

The extension name or None if path doesn't match the format for Spack's extension.

spack.extensions.get_command_paths()

Return the list of paths where to search for command files.

spack.extensions.get_module(cmd_name)

Imports the extension module for a particular command name and returns it.

パラメータ

cmd_name (str) -- name of the command for which to get a module (contains -, not _).

spack.extensions.get_template_dirs()

Returns the list of directories where to search for templates in extensions.

spack.extensions.load_command_extension(command, path)

Loads a command extension from the path passed as argument.

パラメータ
  • command (str) -- name of the command

  • path (str) -- base path of the command extension

戻り値

A valid module object if the command is found or None

spack.extensions.path_for_extension(target_name, *paths)

Return the test root dir for a given extension.

パラメータ
  • target_name (str) -- name of the extension to test

  • *paths -- paths where the extensions reside

戻り値

Root directory where tests should reside or None

spack.fetch_strategy module

Fetch strategies are used to download source code into a staging area in order to build it. They need to define the following methods:

  • fetch()

    This should attempt to download/check out source from somewhere.

  • check()

    Apply a checksum to the downloaded source code, e.g. for an archive. May not do anything if the fetch method was safe to begin with.

  • expand()

    Expand (e.g., an archive) downloaded file to source.

  • reset()

    Restore original state of downloaded code. Used by clean commands. This may just remove the expanded source and re-expand an archive, or it may run something like git reset --hard.

  • archive()

    Archive a source directory, e.g. for creating a mirror.

class spack.fetch_strategy.CacheURLFetchStrategy(url=None, checksum=None, **kwargs)

ベースクラス: spack.fetch_strategy.URLFetchStrategy

The resource associated with a cache URL may be out of date.

fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

exception spack.fetch_strategy.ChecksumError(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

Raised when archive fails to checksum.

exception spack.fetch_strategy.ExtrapolationError(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

Raised when we can't extrapolate a version for a package.

class spack.fetch_strategy.FSMeta(name, bases, dict)

ベースクラス: type

This metaclass registers all fetch strategies in a list.

exception spack.fetch_strategy.FailedDownloadError(url, msg='')

ベースクラス: spack.fetch_strategy.FetchError

Raised wen a download fails.

exception spack.fetch_strategy.FetchError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass fo fetcher errors.

class spack.fetch_strategy.FetchStrategy

ベースクラス: object

Superclass of all fetch strategies.

archive(destination)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

cachable

Whether fetcher is capable of caching the resource it retrieves.

This generally is determined by whether the resource is identifiably associated with a specific package version.

戻り値

True if can cache, False otherwise.

戻り値の型

bool

check()

Checksum the archive fetched by this FetchStrategy.

enabled = False
expand()

Expand the downloaded archive.

fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

classmethod matches(args)
optional_attrs = []

Optional attributes can be used to distinguish fetchers when: classes have multiple url_attrs at the top-level.

reset()

Revert to freshly downloaded state.

For archive files, this may just re-expand the archive.

set_stage(stage)

This is called by Stage before any of the fetching methods are called on the stage.

source_id()

A unique ID for the source.

The returned value is added to the content which determines the full hash for a package using str().

url_attr = None

The URL attribute must be specified either at the package class level, or as a keyword argument to version(). It is used to distinguish fetchers for different versions in the package DSL.

exception spack.fetch_strategy.FetcherConflict(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

Raised for packages with invalid fetch attributes.

class spack.fetch_strategy.FsCache(root)

ベースクラス: object

destroy()
fetcher(target_path, digest, **kwargs)
store(fetcher, relative_dest)
class spack.fetch_strategy.GitFetchStrategy(**kwargs)

ベースクラス: spack.fetch_strategy.VCSFetchStrategy

Fetch strategy that gets source code from a git repository. Use like this in a package:

version('name', git='https://github.com/project/repo.git')

Optionally, you can provide a branch, or commit to check out, e.g.:

version('1.1', git='https://github.com/project/repo.git', tag='v1.1')

You can use these three optional attributes in addition to git:

  • branch: Particular branch to build from (default is the

    repository's default branch)

  • tag: Particular tag to check out

  • commit: Particular commit hash in the repo

archive(destination)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

cachable

Whether fetcher is capable of caching the resource it retrieves.

This generally is determined by whether the resource is identifiably associated with a specific package version.

戻り値

True if can cache, False otherwise.

戻り値の型

bool

enabled = True
fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

get_source_id()
git
git_version
optional_attrs = ['tag', 'branch', 'commit', 'submodules']
reset()

Revert to freshly downloaded state.

For archive files, this may just re-expand the archive.

source_id()

A unique ID for the source.

The returned value is added to the content which determines the full hash for a package using str().

url_attr = 'git'
class spack.fetch_strategy.GoFetchStrategy(**kwargs)

ベースクラス: spack.fetch_strategy.VCSFetchStrategy

Fetch strategy that employs the go get infrastructure.

Use like this in a package:

version('name',

go='github.com/monochromegane/the_platinum_searcher/...')

Go get does not natively support versions, they can be faked with git

archive(destination)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

enabled = True
fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

go
go_version
reset()

Revert to freshly downloaded state.

For archive files, this may just re-expand the archive.

url_attr = 'go'
class spack.fetch_strategy.HgFetchStrategy(**kwargs)

ベースクラス: spack.fetch_strategy.VCSFetchStrategy

Fetch strategy that gets source code from a Mercurial repository. Use like this in a package:

Optionally, you can provide a branch, or revision to check out, e.g.:

version('torus',

hg='https://jay.grs.rwth-aachen.de/hg/lwm2', branch='torus')

You can use the optional 'revision' attribute to check out a branch, tag, or particular revision in hg. To prevent non-reproducible builds, using a moving target like a branch is discouraged.

  • revision: Particular revision, branch, or tag.

archive(destination)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

cachable

Whether fetcher is capable of caching the resource it retrieves.

This generally is determined by whether the resource is identifiably associated with a specific package version.

戻り値

True if can cache, False otherwise.

戻り値の型

bool

enabled = True
fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

get_source_id()
hg

The hg executable :rtype: Executable

Type

returns

optional_attrs = ['revision']
reset()

Revert to freshly downloaded state.

For archive files, this may just re-expand the archive.

source_id()

A unique ID for the source.

The returned value is added to the content which determines the full hash for a package using str().

url_attr = 'hg'
exception spack.fetch_strategy.InvalidArgsError(pkg=None, version=None, **args)

ベースクラス: spack.fetch_strategy.FetchError

Raised when a version can't be deduced from a set of arguments.

exception spack.fetch_strategy.NoArchiveFileError(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

"Raised when an archive file is expected but none exists.

exception spack.fetch_strategy.NoCacheError(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

Raised when there is no cached archive for a package.

exception spack.fetch_strategy.NoDigestError(message, long_message=None)

ベースクラス: spack.fetch_strategy.FetchError

Raised after attempt to checksum when URL has no digest.

exception spack.fetch_strategy.NoStageError(method)

ベースクラス: spack.fetch_strategy.FetchError

Raised when fetch operations are called before set_stage().

class spack.fetch_strategy.SvnFetchStrategy(**kwargs)

ベースクラス: spack.fetch_strategy.VCSFetchStrategy

Fetch strategy that gets source code from a subversion repository. Use like this in a package:

version('name', svn='http://www.example.com/svn/trunk')

Optionally, you can provide a revision for the URL:

version('name', svn='http://www.example.com/svn/trunk',

revision='1641')

archive(destination)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

cachable

Whether fetcher is capable of caching the resource it retrieves.

This generally is determined by whether the resource is identifiably associated with a specific package version.

戻り値

True if can cache, False otherwise.

戻り値の型

bool

enabled = True
fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

get_source_id()
optional_attrs = ['revision']
reset()

Revert to freshly downloaded state.

For archive files, this may just re-expand the archive.

source_id()

A unique ID for the source.

The returned value is added to the content which determines the full hash for a package using str().

svn
url_attr = 'svn'
class spack.fetch_strategy.URLFetchStrategy(url=None, checksum=None, **kwargs)

ベースクラス: spack.fetch_strategy.FetchStrategy

FetchStrategy that pulls source code from a URL for an archive, checks the archive against a checksum,and decompresses the archive.

archive(destination)

Just moves this archive to the destination.

archive_file

Path to the source archive within this stage directory.

cachable

Whether fetcher is capable of caching the resource it retrieves.

This generally is determined by whether the resource is identifiably associated with a specific package version.

戻り値

True if can cache, False otherwise.

戻り値の型

bool

check()

Check the downloaded archive against a checksum digest. No-op if this stage checks code out of a repository.

curl
enabled = True
expand()

Expand the downloaded archive.

fetch()

Fetch source code archive or repo.

戻り値

True on success, False on failure.

戻り値の型

bool

optional_attrs = ['md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'checksum']
reset()

Removes the source path if it exists, then re-expands the archive.

source_id()

A unique ID for the source.

The returned value is added to the content which determines the full hash for a package using str().

url_attr = 'url'
class spack.fetch_strategy.VCSFetchStrategy(**kwargs)

ベースクラス: spack.fetch_strategy.FetchStrategy

Superclass for version control system fetch strategies.

Like all fetchers, VCS fetchers are identified by the attributes passed to the version directive. The optional_attrs for a VCS fetch strategy represent types of revisions, e.g. tags, branches, commits, etc.

The required attributes (git, svn, etc.) are used to specify the URL and to distinguish a VCS fetch strategy from a URL fetch strategy.

archive(destination, **kwargs)

Create an archive of the downloaded data for a mirror.

For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.

check()

Checksum the archive fetched by this FetchStrategy.

expand()

Expand the downloaded archive.

spack.fetch_strategy.all_strategies = [<class 'spack.fetch_strategy.URLFetchStrategy'>, <class 'spack.fetch_strategy.CacheURLFetchStrategy'>, <class 'spack.fetch_strategy.GoFetchStrategy'>, <class 'spack.fetch_strategy.GitFetchStrategy'>, <class 'spack.fetch_strategy.SvnFetchStrategy'>, <class 'spack.fetch_strategy.HgFetchStrategy'>]

List of all fetch strategies, created by FetchStrategy metaclass.

spack.fetch_strategy.check_pkg_attributes(pkg)

Find ambiguous top-level fetch attributes in a package.

Currently this only ensures that two or more VCS fetch strategies are not specified at once.

spack.fetch_strategy.for_package_version(pkg, version)

Determine a fetch strategy based on the arguments supplied to version() in the package description.

spack.fetch_strategy.from_kwargs(**kwargs)

Construct an appropriate FetchStrategy from the given keyword arguments.

パラメータ

**kwargs -- dictionary of keyword arguments, e.g. from a version() directive in a package.

戻り値

The fetch strategy that matches the args, based

on attribute names (e.g., git, hg, etc.)

戻り値の型

fetch_strategy

例外

FetchError -- If no fetch_strategy matches the args.

spack.fetch_strategy.from_list_url(pkg)

If a package provides a URL which lists URLs for resources by version, this can can create a fetcher for a URL discovered for the specified package's version.

spack.fetch_strategy.from_url(url)

Given a URL, find an appropriate fetch strategy for it. Currently just gives you a URLFetchStrategy that uses curl.

TODO: make this return appropriate fetch strategies for other

types of URLs.

spack.filesystem_view module

class spack.filesystem_view.FilesystemView(root, layout, **kwargs)

ベースクラス: object

Governs a filesystem view that is located at certain root-directory.

Packages are linked from their install directories into a common file hierachy.

In distributed filesystems, loading each installed package seperately can lead to slow-downs due to too many directories being traversed. This can be circumvented by loading all needed modules into a common directory structure.

add_extension(spec)

Add (link) an extension in this view. Does not add dependencies.

add_specs(*specs, **kwargs)

Add given specs to view.

The supplied specs might be standalone packages or extensions of other packages.

Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be activated as well.

Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.

This method should make use of activate_{extension,standalone}.

add_standalone(spec)

Add (link) a standalone package into this view.

check_added(spec)

Check if the given concrete spec is active in this view.

get_all_specs()

Get all specs currently active in this view.

get_projection_for_spec(spec)

Get the projection in this view for a spec.

get_spec(spec)

Return the actual spec linked in this view (i.e. do not look it up in the database by name).

spec can be a name or a spec from which the name is extracted.

As there can only be a single version active for any spec the name is enough to identify the spec in the view.

If no spec is present, returns None.

print_status(*specs, **kwargs)
Print a short summary about the given specs, detailing whether..
  • ..they are active in the view.

  • ..they are active but the activated version differs.

  • ..they are not activte in the view.

Takes with_dependencies keyword argument so that the status of dependencies is printed as well.

remove_extension(spec)

Remove (unlink) an extension from this view.

remove_specs(*specs, **kwargs)

Removes given specs from view.

The supplied spec might be a standalone package or an extension of another package.

Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be deactivated as well.

Should accept with_dependents as keyword argument (default True) to indicate wether or not dependents on the deactivated specs should be removed as well.

Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.

This method should make use of deactivate_{extension,standalone}.

remove_standalone(spec)

Remove (unlink) a standalone package from this view.

class spack.filesystem_view.YamlFilesystemView(root, layout, **kwargs)

ベースクラス: spack.filesystem_view.FilesystemView

Filesystem view to work with a yaml based directory layout.

add_extension(spec)

Add (link) an extension in this view. Does not add dependencies.

add_specs(*specs, **kwargs)

Add given specs to view.

The supplied specs might be standalone packages or extensions of other packages.

Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be activated as well.

Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.

This method should make use of activate_{extension,standalone}.

add_standalone(spec)

Add (link) a standalone package into this view.

check_added(spec)

Check if the given concrete spec is active in this view.

clean()
get_all_specs()

Get all specs currently active in this view.

get_conflicts(*specs)

Return list of tuples (<spec>, <spec in view>) where the spec active in the view differs from the one to be activated.

get_path_meta_folder(spec)

Get path to meta folder for either spec or spec name.

get_projection_for_spec(spec)

Return the projection for a spec in this view.

Relies on the ordering of projections to avoid ambiguity.

get_spec(spec)

Return the actual spec linked in this view (i.e. do not look it up in the database by name).

spec can be a name or a spec from which the name is extracted.

As there can only be a single version active for any spec the name is enough to identify the spec in the view.

If no spec is present, returns None.

merge(spec, ignore=None)
print_conflict(spec_active, spec_specified, level='error')

Singular print function for spec conflicts.

print_status(*specs, **kwargs)
Print a short summary about the given specs, detailing whether..
  • ..they are active in the view.

  • ..they are active but the activated version differs.

  • ..they are not activte in the view.

Takes with_dependencies keyword argument so that the status of dependencies is printed as well.

remove_extension(spec, with_dependents=True)

Remove (unlink) an extension from this view.

remove_file(src, dest)
remove_specs(*specs, **kwargs)

Removes given specs from view.

The supplied spec might be a standalone package or an extension of another package.

Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be deactivated as well.

Should accept with_dependents as keyword argument (default True) to indicate wether or not dependents on the deactivated specs should be removed as well.

Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.

This method should make use of deactivate_{extension,standalone}.

remove_standalone(spec)

Remove (unlink) a standalone package from this view.

unmerge(spec, ignore=None)

spack.graph module

Functions for graphing DAGs of dependencies.

This file contains code for graphing DAGs of software packages (i.e. Spack specs). There are two main functions you probably care about:

graph_ascii() will output a colored graph of a spec in ascii format, kind of like the graph git shows with "git log --graph", e.g.:

o  mpileaks
|\
| |\
| o |  callpath
|/| |
| |\|
| |\ \
| | |\ \
| | | | o  adept-utils
| |_|_|/|
|/| | | |
o | | | |  mpi
 / / / /
| | o |  dyninst
| |/| |
|/|/| |
| | |/
| o |  libdwarf
|/ /
o |  libelf
 /
o  boost

graph_dot() will output a graph of a spec (or multiple specs) in dot format.

Note that graph_ascii assumes a single spec while graph_dot can take a number of specs as input.

spack.graph.topological_sort(spec, reverse=False, deptype='all')

Topological sort for specs.

Return a list of dependency specs sorted topologically. The spec argument is not modified in the process.

spack.graph.graph_ascii(spec, node='o', out=None, debug=False, indent=0, color=None, deptype='all')
class spack.graph.AsciiGraph

ベースクラス: object

write(spec, color=None, out=None)

Write out an ascii graph of the provided spec.

Arguments: spec -- spec to graph. This only handles one spec at a time.

Optional arguments:

out -- file object to write out to (default is sys.stdout)

color -- whether to write in color. Default is to autodetect

based on output file.

spack.graph.graph_dot(specs, deptype='all', static=False, out=None)

Generate a graph in dot format of all provided specs.

Print out a dot formatted graph of all the dependencies between package. Output can be passed to graphviz, e.g.:

spack graph --dot qt | dot -Tpdf > spack-graph.pdf

spack.main module

This is the implementation of the Spack command line executable.

In a normal Spack installation, this is invoked from the bin/spack script after the system path is set up.

class spack.main.SpackArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=<class 'argparse.HelpFormatter'>, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True)

ベースクラス: argparse.ArgumentParser

add_command(cmd_name)

Add one subcommand to this parser.

add_subparsers(**kwargs)

Ensure that sensible defaults are propagated to subparsers

format_help(level='short')
format_help_sections(level)

Format help on sections for a particular verbosity level.

パラメータ

level (str) -- 'short' or 'long' (more commands shown for long)

class spack.main.SpackCommand(command_name)

ベースクラス: object

Callable object that invokes a spack command (for testing).

Example usage:

install = SpackCommand('install')
install('-v', 'mpich')

Use this to invoke Spack commands directly from Python and check their output.

exception spack.main.SpackCommandError

ベースクラス: Exception

Raised when SpackCommand execution fails.

class spack.main.SpackHelpFormatter(prog, indent_increment=2, max_help_position=24, width=None)

ベースクラス: argparse.RawTextHelpFormatter

spack.main.add_all_commands(parser)

Add all spack subcommands to the parser.

spack.main.aliases = {'rm': 'remove'}

top-level aliases for Spack commands

spack.main.allows_unknown_args(command)

Implements really simple argument injection for unknown arguments.

Commands may add an optional argument called "unknown args" to indicate they can handle unknonwn args, and we'll pass the unknown args in.

spack.main.index_commands()

create an index of commands by section for this help level

spack.main.intro_by_level = {'long': 'Complete list of spack commands:', 'short': 'These are common spack commands:'}

intro text for help at different levels

spack.main.levels = ['short', 'long']

help levels in order of detail (i.e., number of commands shown)

spack.main.main(argv=None)

This is the entry point for the Spack command.

パラメータ

argv (list of str or None) -- command line arguments, NOT including the executable name. If None, parses from sys.argv.

spack.main.make_argument_parser(**kwargs)

Create an basic argument parser without any subcommands added.

spack.main.options_by_level = {'long': 'all', 'short': ['h', 'k', 'V', 'color']}

control top-level spack options shown in basic vs. advanced help

spack.main.print_setup_info(*info)

Print basic information needed by setup-env.[c]sh.

パラメータ

info (list of str) -- list of things to print: comma-separated list of 'csh', 'sh', or 'modules'

This is in main.py to make it fast; the setup scripts need to invoke spack in login scripts, and it needs to be quick.

spack.main.required_command_properties = ['level', 'section', 'description']

Properties that commands are required to set.

spack.main.section_descriptions = {'admin': 'administration', 'basic': 'query packages', 'build': 'build packages', 'config': 'configuration', 'developer': 'developer', 'environment': 'environment', 'extensions': 'extensions', 'help': 'more help', 'packaging': 'create packages', 'system': 'system'}

Longer text for each section, to show in help

spack.main.section_order = {'basic': ['list', 'info', 'find'], 'build': ['fetch', 'stage', 'patch', 'configure', 'build', 'restage', 'install', 'uninstall', 'clean'], 'packaging': ['create', 'edit']}

preferential command order for some sections (e.g., build pipeline is in execution order, not alphabetical)

spack.main.set_working_dir()

Change the working directory to getcwd, or spack prefix if no cwd.

spack.main.setup_main_options(args)

Configure spack globals based on the basic options.

spack.main.spack_working_dir = None

Recorded directory where spack command was originally invoked

spack.main.stat_names = {'calls': (((1, -1),), 'call count'), 'cumtime': (((3, -1),), 'cumulative time'), 'cumulative': (((3, -1),), 'cumulative time'), 'filename': (((4, 1),), 'file name'), 'line': (((5, 1),), 'line number'), 'module': (((4, 1),), 'file name'), 'name': (((6, 1),), 'function name'), 'ncalls': (((1, -1),), 'call count'), 'nfl': (((6, 1), (4, 1), (5, 1)), 'name/file/line'), 'pcalls': (((0, -1),), 'primitive call count'), 'stdname': (((7, 1),), 'standard name'), 'time': (((2, -1),), 'internal time'), 'tottime': (((2, -1),), 'internal time')}

names of profile statistics

spack.mirror module

This file contains code for creating spack mirror directories. A mirror is an organized hierarchy containing specially named archive files. This enabled spack to know where to find files in a mirror if the main server for a particular package is down. Or, if the computer where spack is run is not connected to the internet, it allows spack to download packages directly from a mirror (e.g., on an intranet).

exception spack.mirror.MirrorError(msg, long_msg=None)

ベースクラス: spack.error.SpackError

Superclass of all mirror-creation related errors.

spack.mirror.add_single_spec(spec, mirror_root, categories, **kwargs)
spack.mirror.create(path, specs, **kwargs)

Create a directory to be used as a spack mirror, and fill it with package archives.

パラメータ
  • path -- Path to create a mirror directory hierarchy in.

  • specs -- Any package versions matching these specs will be added to the mirror.

キーワード引数

num_versions -- Max number of versions to fetch per spec, (default is 1 each spec)

Return Value:

Returns a tuple of lists: (present, mirrored, error)

  • present: Package specs that were already present.

  • mirrored: Package specs that were successfully mirrored.

  • error: Package specs that failed to mirror due to some error.

This routine iterates through all known package versions, and it creates specs for those versions. If the version satisfies any spec in the specs list, it is downloaded and added to the mirror.

spack.mirror.get_matching_versions(specs, **kwargs)

Get a spec for EACH known version matching any spec in the list. For concrete specs, this retrieves the concrete version and, if more than one version per spec is requested, retrieves the latest versions of the package.

spack.mirror.mirror_archive_filename(spec, fetcher, resource_id=None)

Get the name of the spec's archive in the mirror.

spack.mirror.mirror_archive_path(spec, fetcher, resource_id=None)

Get the relative path to the spec's archive within a mirror.

spack.mirror.suggest_archive_basename(resource)

Return a tentative basename for an archive.

例外

RuntimeError -- if the name is not an allowed archive type.

spack.mixins module

This module contains additional behavior that can be attached to any given package.

spack.mixins.filter_compiler_wrappers(*files, **kwargs)

Substitutes any path referring to a Spack compiler wrapper with the path of the underlying compiler that has been used.

If this isn't done, the files will have CC, CXX, F77, and FC set to Spack's generic cc, c++, f77, and f90. We want them to be bound to whatever compiler they were built with.

パラメータ
  • *files -- files to be filtered relative to the search root (which is, by default, the installation prefix)

  • **kwargs --

    allowed keyword arguments

    after

    specifies after which phase the files should be filtered (defaults to 'install')

    relative_root

    path relative to prefix where to start searching for the files to be filtered. If not set the install prefix wil be used as the search root. It is highly recommended to set this, as searching from the installation prefix may affect performance severely in some cases.

    ignore_absent, backup

    these two keyword arguments, if present, will be forwarded to filter_file (see its documentation for more information on their behavior)

    recursive

    this keyword argument, if present, will be forwarded to find (see its documentation for more information on the behavior)

spack.multimethod module

This module contains utilities for using multi-methods in spack. You can think of multi-methods like overloaded methods -- they're methods with the same name, and we need to select a version of the method based on some criteria. e.g., for overloaded methods, you would select a version of the method to call based on the types of its arguments.

In spack, multi-methods are used to ease the life of package authors. They allow methods like install() (or other methods called by install()) to declare multiple versions to be called when the package is instantiated with different specs. e.g., if the package is built with OpenMPI on x86_64,, you might want to call a different install method than if it was built for mpich2 on BlueGene/Q. Likewise, you might want to do a different type of install for different versions of the package.

Multi-methods provide a simple decorator-based syntax for this that avoids overly complicated rat nests of if statements. Obviously, depending on the scenario, regular old conditionals might be clearer, so package authors should use their judgement.

exception spack.multimethod.MultiMethodError(message)

ベースクラス: spack.error.SpackError

Superclass for multimethod dispatch errors

exception spack.multimethod.NoSuchMethodError(cls, method_name, spec, possible_specs)

ベースクラス: spack.error.SpackError

Raised when we can't find a version of a multi-method.

class spack.multimethod.SpecMultiMethod(default=None)

ベースクラス: object

This implements a multi-method for Spack specs. Packages are instantiated with a particular spec, and you may want to execute different versions of methods based on what the spec looks like. For example, you might want to call a different version of install() for one platform than you call on another.

The SpecMultiMethod class implements a callable object that handles method dispatch. When it is called, it looks through registered methods and their associated specs, and it tries to find one that matches the package's spec. If it finds one (and only one), it will call that method.

This is intended for use with decorators (see below). The decorator (see docs below) creates SpecMultiMethods and registers method versions with them.

To register a method, you can do something like this:

mm = SpecMultiMethod() mm.register("^chaos_5_x86_64_ib", some_method)

The object registered needs to be a Spec or some string that will parse to be a valid spec.

When the mm is actually called, it selects a version of the method to call based on the sys_type of the object it is called on.

See the docs for decorators below for more details.

register(spec, method)

Register a version of a method for a particular spec.

class spack.multimethod.when(condition)

ベースクラス: object

This annotation lets packages declare multiple versions of methods like install() that depend on the package's spec. For example:

class SomePackage(Package):
    ...

    def install(self, prefix):
        # Do default install

    @when('arch=chaos_5_x86_64_ib')
    def install(self, prefix):
        # This will be executed instead of the default install if
        # the package's platform() is chaos_5_x86_64_ib.

    @when('arch=bgqos_0")
    def install(self, prefix):
        # This will be executed if the package's sys_type is bgqos_0

This allows each package to have a default version of install() AND specialized versions for particular platforms. The version that is called depends on the architecutre of the instantiated package.

Note that this works for methods other than install, as well. So, if you only have part of the install that is platform specific, you could do this:

class SomePackage(Package):
    ...
    # virtual dependence on MPI.
    # could resolve to mpich, mpich2, OpenMPI
    depends_on('mpi')

    def setup(self):
        # do nothing in the default case
        pass

    @when('^openmpi')
    def setup(self):
        # do something special when this is built with OpenMPI for
        # its MPI implementations.


    def install(self, prefix):
        # Do common install stuff
        self.setup()
        # Do more common install stuff

Note that the default version of decorated methods must always come first. Otherwise it will override all of the platform-specific versions. There's not much we can do to get around this because of the way decorators work.

spack.package module

This is where most of the action happens in Spack.

The spack package class structure is based strongly on Homebrew (http://brew.sh/), mainly because Homebrew makes it very easy to create packages.

exception spack.package.ActivationError(msg, long_msg=None)

ベースクラス: spack.package.ExtensionError

Raised when there are problems activating an extension.

exception spack.package.DependencyConflictError(conflict)

ベースクラス: spack.error.SpackError

Raised when the dependencies cannot be flattened as asked for.

exception spack.package.ExtensionError(message, long_msg=None)

ベースクラス: spack.package.PackageError

Superclass for all errors having to do with extension packages.

exception spack.package.ExternalPackageError(message, long_msg=None)

ベースクラス: spack.package.InstallError

Raised by install() when a package is only for external use.

exception spack.package.FetchError(message, long_msg=None)

ベースクラス: spack.error.SpackError

Raised when something goes wrong during fetch.

exception spack.package.InstallError(message, long_msg=None)

ベースクラス: spack.error.SpackError

Raised when something goes wrong during install or uninstall.

class spack.package.InstallPhase(name)

ベースクラス: object

Manages a single phase of the installation.

This descriptor stores at creation time the name of the method it should search for execution. The method is retrieved at __get__ time, so that it can be overridden by subclasses of whatever class declared the phases.

It also provides hooks to execute arbitrary callbacks before and after the phase.

copy()
exception spack.package.NoURLError(cls)

ベースクラス: spack.package.PackageError

Raised when someone tries to build a URL for a package with no URLs.

class spack.package.Package(spec)

ベースクラス: spack.package.PackageBase

General purpose class with a single install phase that needs to be coded by packagers.

build_system_class = 'Package'

This attribute is used in UI queries that require to know which build-system class we are using

phases = ['install']

The one and only phase

class spack.package.PackageBase(spec)

ベースクラス: spack.package.PackageViewMixin, object

This is the superclass for all spack packages.

*The Package class*

A package defines how to fetch, verify (via, e.g., sha256), build, and install a piece of software. A Package also defines what other packages it depends on, so that dependencies can be installed along with the package itself. Packages are written in pure python by users of Spack.

There are two main parts of a Spack package:

  1. The package class. Classes contain directives, which are special functions, that add metadata (versions, patches, dependencies, and other information) to packages (see directives.py). Directives provide the constraints that are used as input to the concretizer.

  2. Package instances. Once instantiated, a package is essentially an installer for a particular piece of software. Spack calls methods like do_install() on the Package object, and it uses those to drive user-implemented methods like patch(), install(), and other build steps. To install software, An instantiated package needs a concrete spec, which guides the behavior of the various install methods.

Packages are imported from repos (see repo.py).

Package DSL

Look in lib/spack/docs or check https://spack.readthedocs.io for the full documentation of the package domain-specific language. That used to be partially documented here, but as it grew, the docs here became increasingly out of date.

Package Lifecycle

A package's lifecycle over a run of Spack looks something like this:

p = Package()             # Done for you by spack

p.do_fetch()              # downloads tarball from a URL
p.do_stage()              # expands tarball in a temp directory
p.do_patch()              # applies patches to expanded source
p.do_install()            # calls package's install() function
p.do_uninstall()          # removes install directory

There are also some other commands that clean the build area:

p.do_clean()              # removes the stage directory entirely
p.do_restage()            # removes the build directory and
                          # re-expands the archive.

The convention used here is that a do_* function is intended to be called internally by Spack commands (in spack.cmd). These aren't for package writers to override, and doing so may break the functionality of the Package class.

Package creators have a lot of freedom, and they could technically override anything in this class. That is not usually required.

For most use cases. Package creators typically just add attributes like url and homepage, or functions like install(). There are many custom Package subclasses in the spack.build_systems package that make things even easier for specific build systems.

activate(extension, view, **kwargs)

Add the extension to the specified view.

Package authors can override this function to maintain some centralized state related to the set of activated extensions for a package.

Spack internals (commands, hooks, etc.) should call do_activate() method so that proper checks are always executed.

all_urls

A list of all URLs in a package.

Check both class-level and version-specific URLs.

戻り値

a list of URLs

戻り値の型

list

architecture

Get the spack.architecture.Arch object that represents the environment in which this package will be built.

archive_files = []

List of glob expressions. Each expression must either be absolute or relative to the package source path. Matching artifacts found at the end of the build process will be copied in the same directory tree as build.env and build.out.

bootstrap_compiler(**kwargs)

Called by do_install to setup ensure Spack has the right compiler.

Checks Spack's compiler configuration for a compiler that matches the package spec. If none are configured, installs and adds to the compiler configuration the compiler matching the CompilerSpec object.

build_log_path
classmethod build_system_flags(name, flags)

flag_handler that passes flags to the build system arguments. Any package using build_system_flags must also implement flags_to_build_system_args, or derive from a class that implements it. Currently, AutotoolsPackage and CMakePackage implement it.

build_time_test_callbacks = None
check_for_unfinished_installation(keep_prefix=False, restage=False)

Check for leftover files from partially-completed prior install to prepare for a new install attempt.

Options control whether these files are reused (vs. destroyed).

パラメータ
  • keep_prefix (bool) -- True if the installation prefix needs to be kept, False otherwise

  • restage (bool) -- False if the stage has to be kept, True otherwise

戻り値

True if the prefix exists but the install is not complete, False otherwise.

compiler

Get the spack.compiler.Compiler object used to build this package

content_hash(content=None)

Create a hash based on the sources and logic used to build the package. This includes the contents of all applied patches and the contents of applicable functions in the package subclass.

deactivate(extension, view, **kwargs)

Remove all extension files from the specified view.

Package authors can override this method to support other extension mechanisms. Spack internals (commands, hooks, etc.) should call do_deactivate() method so that proper checks are always executed.

dependencies_of_type(*deptypes)

Get dependencies that can possibly have these deptypes.

This analyzes the package and determines which dependencies can be a certain kind of dependency. Note that they may not always be this kind of dependency, since dependencies can be optional, so something may be a build dependency in one configuration and a run dependency in another.

dependency_activations()
do_activate(view=None, with_dependencies=True, verbose=True)

Called on an extension to invoke the extendee's activate method.

Commands should call this routine, and should not call activate() directly.

do_clean()

Removes the package's build stage and source tarball.

do_deactivate(view=None, **kwargs)

Remove this extension package from the specified view. Called on the extension to invoke extendee's deactivate() method.

remove_dependents=True deactivates extensions depending on this package instead of raising an error.

do_fake_install()

Make a fake install directory containing fake executables, headers, and libraries.

do_fetch(mirror_only=False)

Creates a stage directory and downloads the tarball for this package. Working directory will be set to the stage directory.

do_install(**kwargs)

Called by commands to install a package and its dependencies.

Package implementations should override install() to describe their build process.

パラメータ
  • keep_prefix (bool) -- Keep install prefix on failure. By default, destroys it.

  • keep_stage (bool) -- By default, stage is destroyed only if there are no exceptions during build. Set to True to keep the stage even with exceptions.

  • install_source (bool) -- By default, source is not installed, but for debugging it might be useful to keep it around.

  • install_deps (bool) -- Install dependencies before installing this package

  • skip_patch (bool) -- Skip patch stage of build if True.

  • verbose (bool) -- Display verbose build output (by default, suppresses it)

  • fake (bool) -- Don't really build; install fake stub files instead.

  • explicit (bool) -- True if package was explicitly installed, False if package was implicitly installed (as a dependency).

  • tests (bool or list or set) -- False to run no tests, True to test all packages, or a list of package names to run tests for some

  • dirty (bool) -- Don't clean the build environment before installing.

  • restage (bool) -- Force spack to restage the package source.

  • force (bool) -- Install again, even if already installed.

  • use_cache (bool) -- Install from binary package, if available.

  • stop_at (InstallPhase) -- last installation phase to be executed (or None)

do_patch()

Applies patches if they haven't been applied already.

do_restage()

Reverts expanded/checked out source to a pristine state.

do_stage(mirror_only=False)

Unpacks and expands the fetched tarball.

do_uninstall(force=False)

Uninstall this package by spec.

classmethod env_flags(name, flags)

flag_handler that adds all flags to canonical environment variables.

env_path
extendable = False

Most packages are NOT extendable. Set to True if you want extensions.

extendee_args

Spec of the extendee of this package, or None if it is not an extension

extendee_spec

Spec of the extendee of this package, or None if it is not an extension

extends(spec)

Returns True if this package extends the given spec.

If self.spec is concrete, this returns whether this package extends the given spec.

If self.spec is not concrete, this returns whether this package may extend the given spec.

fetch_remote_versions()

Find remote versions of this package.

Uses list_url and any other URLs listed in the package file.

戻り値

a dictionary mapping versions to URLs

戻り値の型

dict

fetcher
classmethod flag_handler(name, flags)

flag_handler that injects all flags through the compiler wrapper.

flags_to_build_system_args(flags)
format_doc(**kwargs)

Wrap doc string at 72 characters and format nicely

fullname

namespace.name.

Type

Name of this package, including namespace

global_license_dir

Returns the directory where global license files for all packages are stored.

global_license_file

Returns the path where a global license file for this particular package should be stored.

classmethod inject_flags(name, flags)

flag_handler that injects all flags through the compiler wrapper.

install_time_test_callbacks = None
installed

Installation status of a package.

戻り値

True if the package has been installed, False otherwise.

installed_upstream
is_activated(view)

Return True if package is activated.

is_extension
license_comment = '#'

String. Contains the symbol used by the license manager to denote a comment. Defaults to #.

license_files = []

List of strings. These are files that the software searches for when looking for a license. All file paths must be relative to the installation directory. More complex packages like Intel may require multiple licenses for individual components. Defaults to the empty list.

license_required = False

Boolean. If set to True, this software requires a license. If set to False, all of the license_* attributes will be ignored. Defaults to False.

license_url = ''

String. A URL pointing to license setup instructions for the software. Defaults to the empty string.

license_vars = []

List of strings. Environment variables that can be set to tell the software where to look for a license if it is not in the usual location. Defaults to the empty list.

log()
log_path
maintainers = []

List of strings which contains GitHub usernames of package maintainers. Do not include @ here in order not to unnecessarily ping the users.

metadata_attrs = ['homepage', 'url', 'list_url', 'extendable', 'parallel', 'make_jobs']

List of attributes which affect do not affect a package's content.

module = <module 'spack.package' from '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/lib/spack/spack/package.py'>
namespace = 'spack'
nearest_url(version)

Finds the URL with the "closest" version to version.

This uses the following precedence order:

  1. Find the next lowest or equal version with a URL.

  2. If no lower URL, return the next higher URL.

  3. If no higher URL, return None.

package_dir = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/lib/spack/spack'
parallel = True

By default we build in parallel. Subclasses can override this.

possible_dependencies(transitive=True, expand_virtuals=True, visited=None)

Return set of possible dependencies of this package.

Note: the set returned includes the package itself.

パラメータ
  • transitive (bool) -- return all transitive dependencies if True, only direct dependencies if False.

  • expand_virtuals (bool) -- expand virtual dependencies into all possible implementations.

  • visited (set) -- set of names of dependencies visited so far.

prefix

Get the prefix into which this package should be installed.

provides(vpkg_name)

True if this package provides a virtual package with the specified name

remove_prefix()

Removes the prefix for a package along with any empty parent directories

rpath

Get the rpath this package links with, as a list of paths.

rpath_args

Get the rpath args as a string, with -Wl,-rpath, for each element

run_tests = False

By default do not run tests within package's install()

sanity_check_is_dir = []

List of prefix-relative directory paths (or a single path). If these do not exist after install, or if they exist but are not directories, sanity checks will fail.

sanity_check_is_file = []

List of prefix-relative file paths (or a single path). If these do not exist after install, or if they exist but are not files, sanity checks fail.

sanity_check_prefix()

This function checks whether install succeeded.

setup_dependent_environment(spack_env, run_env, dependent_spec)

Set up the environment of packages that depend on this one.

This is similar to setup_environment, but it is used to modify the compile and runtime environments of packages that depend on this one. This gives packages like Python and others that follow the extension model a way to implement common environment or compile-time settings for dependencies.

This is useful if there are some common steps to installing all extensions for a certain package.

Example:

  1. Installing python modules generally requires PYTHONPATH to point to the lib/pythonX.Y/site-packages directory in the module's install prefix. This method could be used to set that variable.

パラメータ
  • spack_env (EnvironmentModifications) -- List of environment modifications to be applied when the dependent package is built within Spack.

  • run_env (EnvironmentModifications) -- List of environment modifications to be applied when the dependent package is run outside of Spack. These are added to the resulting module file.

  • dependent_spec (Spec) -- The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent's state. Note that this package's spec is available as self.spec.

setup_dependent_package(module, dependent_spec)

Set up Python module-scope variables for dependent packages.

Called before the install() method of dependents.

Default implementation does nothing, but this can be overridden by an extendable package to set up the module of its extensions. This is useful if there are some common steps to installing all extensions for a certain package.

Examples:

  1. Extensions often need to invoke the python interpreter from the Python installation being extended. This routine can put a python() Executable object in the module scope for the extension package to simplify extension installs.

  2. MPI compilers could set some variables in the dependent's scope that point to mpicc, mpicxx, etc., allowing them to be called by common name regardless of which MPI is used.

  3. BLAS/LAPACK implementations can set some variables indicating the path to their libraries, since these paths differ by BLAS/LAPACK implementation.

パラメータ
  • module (spack.package.PackageBase.module) -- The Python module object of the dependent package. Packages can use this to set module-scope variables for the dependent to use.

  • dependent_spec (Spec) -- The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent's state. Note that this package's spec is available as self.spec.

setup_environment(spack_env, run_env)

Set up the compile and runtime environments for a package.

spack_env and run_env are EnvironmentModifications objects. Package authors can call methods on them to alter the environment within Spack and at runtime.

Both spack_env and run_env are applied within the build process, before this package's install() method is called.

Modifications in run_env will also be added to the generated environment modules for this package.

Default implementation does nothing, but this can be overridden if the package needs a particular environment.

Example:

  1. Qt extensions need QTDIR set.

パラメータ
  • spack_env (EnvironmentModifications) -- List of environment modifications to be applied when this package is built within Spack.

  • run_env (EnvironmentModifications) -- List of environment modifications to be applied when this package is run outside of Spack. These are added to the resulting module file.

stage

Get the build staging area for this package.

This automatically instantiates a Stage object if the package doesn't have one yet, but it does not create the Stage directory on the filesystem.

transitive_rpaths = True

When True, add RPATHs for the entire DAG. When False, add RPATHs only for immediate dependencies.

try_install_from_binary_cache(explicit)
static uninstall_by_spec(spec, force=False)
unit_test_check()

Hook for unit tests to assert things about package internals.

Unit tests can override this function to perform checks after Package.install and all post-install hooks run, but before the database is updated.

The overridden function may indicate that the install procedure should terminate early (before updating the database) by returning False (or any value such that bool(result) is False).

戻り値

True to continue, False to skip install()

戻り値の型

(bool)

url_for_version(version)

Returns a URL from which the specified version of this package may be downloaded.

version: class Version

The version for which a URL is sought.

See Class Version (version.py)

url_version(version)

Given a version, this returns a string that should be substituted into the package's URL to download that version.

By default, this just returns the version string. Subclasses may need to override this, e.g. for boost versions where you need to ensure that there are _'s in the download URL.

use_xcode = False

By default do not setup mockup XCode on macOS with Clang

version
version_urls()

OrderedDict of explicitly defined URLs for versions of this package.

戻り値

An OrderedDict (version -> URL) different versions of this package, sorted by version.

A version's URL only appears in the result if it has an an explicitly defined url argument. So, this list may be empty if a package only defines url at the top level.

view()

Create a view with the prefix of this package as the root. Extensions added to this view will modify the installation prefix of this package.

exception spack.package.PackageError(message, long_msg=None)

ベースクラス: spack.error.SpackError

Raised when something is wrong with a package definition.

class spack.package.PackageMeta(name, bases, attr_dict)

ベースクラス: spack.directives.DirectiveMeta, spack.mixins.PackageMixinsMeta

Conveniently transforms attributes to permit extensible phases

Iterates over the attribute 'phases' and creates / updates private InstallPhase attributes in the class that is being initialized

fullname

Name of this package, including the namespace

module

Module object (not just the name) that this package is defined in.

We use this to add variables to package modules. This makes install() methods easier to write (e.g., can call configure())

namespace

Spack namespace for the package, which identifies its repo.

package_dir

Directory where the package.py file lives.

phase_fmt = '_InstallPhase_{0}'
static register_callback(check_type, *phases)
exception spack.package.PackageStillNeededError(spec, dependents)

ベースクラス: spack.package.InstallError

Raised when package is still needed by another on uninstall.

exception spack.package.PackageVersionError(version)

ベースクラス: spack.package.PackageError

Raised when a version URL cannot automatically be determined.

class spack.package.PackageViewMixin

ベースクラス: object

This collects all functionality related to adding installed Spack package to views. Packages can customize how they are added to views by overriding these functions.

add_files_to_view(view, merge_map)

Given a map of package files to destination paths in the view, add the files to the view. By default this adds all files. Alternative implementations may skip some files, for example if other packages linked into the view already include the file.

remove_files_from_view(view, merge_map)

Given a map of package files to files currently linked in the view, remove the files from the view. The default implementation removes all files. Alternative implementations may not remove all files. For example if two packages include the same file, it should only be removed when both packages are removed.

view_destination(view)

The target root directory: each file is added relative to this directory.

view_file_conflicts(view, merge_map)

Report any files which prevent adding this package to the view. The default implementation looks for any files which already exist. Alternative implementations may allow some of the files to exist in the view (in this case they would be omitted from the results).

view_source()

The source root directory that will be added to the view: files are added such that their path relative to the view destination matches their path relative to the view source.

spack.package.dump_packages(spec, path)

Dump all package information for a spec and its dependencies.

This creates a package repository within path for every namespace in the spec DAG, and fills the repos wtih package files and patch files for every node in the DAG.

spack.package.flatten_dependencies(spec, flat_dir)

Make each dependency of spec present in dir via symlink.

Execute a dummy install and flatten dependencies

spack.package.on_package_attributes(**attr_dict)

Decorator: executes instance function only if object has attr valuses.

Executes the decorated method only if at the moment of calling the instance has attributes that are equal to certain values.

パラメータ

attr_dict (dict) -- dictionary mapping attribute names to their required values

spack.package.print_pkg(message)

Outputs a message with a package icon.

spack.package.run_after(*phases)

Registers a method of a package to be run after a given phase

spack.package.run_before(*phases)

Registers a method of a package to be run before a given phase

spack.package.use_cray_compiler_names()

Compiler names for builds that rely on cray compiler names.

spack.package_prefs module

class spack.package_prefs.PackagePrefs(pkgname, component, vpkg=None)

ベースクラス: object

Defines the sort order for a set of specs.

Spack's package preference implementation uses PackagePrefss to define sort order. The PackagePrefs class looks at Spack's packages.yaml configuration and, when called on a spec, returns a key that can be used to sort that spec in order of the user's preferences.

You can use it like this:

# key function sorts CompilerSpecs for mpich in order of preference kf = PackagePrefs('mpich', 'compiler') compiler_list.sort(key=kf)

Or like this:

# key function to sort VersionLists for OpenMPI in order of preference. kf = PackagePrefs('openmpi', 'version') version_list.sort(key=kf)

Optionally, you can sort in order of preferred virtual dependency providers. To do that, provide 'providers' and a third argument denoting the virtual package (e.g., mpi):

kf = PackagePrefs('trilinos', 'providers', 'mpi') provider_spec_list.sort(key=kf)

classmethod clear_caches()
classmethod has_preferred_providers(pkgname, vpkg)

Whether specific package has a preferred vpkg providers.

classmethod order_for_package(pkgname, component, vpkg=None, all=True)

Given a package name, sort component (e.g, version, compiler, ...), and an optional vpkg, return the list from the packages config.

classmethod preferred_variants(pkg_name)

Return a VariantMap of preferred variants/values for a spec.

exception spack.package_prefs.VirtualInPackagesYAMLError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when a disallowed virtual is found in packages.yaml

spack.package_prefs.get_package_dir_permissions(spec)

Return the permissions configured for the spec.

Include the GID bit if group permissions are on. This makes the group attribute sticky for the directory. Package-specific settings take precedent over settings for all

spack.package_prefs.get_package_group(spec)

Return the unix group associated with the spec.

Package-specific settings take precedence over settings for all

spack.package_prefs.get_package_permissions(spec)

Return the permissions configured for the spec.

Package-specific settings take precedence over settings for all

spack.package_prefs.get_packages_config()

Wrapper around get_packages_config() to validate semantics.

spack.package_prefs.is_spec_buildable(spec)

Return true if the spec pkgspec is configured as buildable

spack.package_prefs.spec_externals(spec)

Return a list of external specs (w/external directory path filled in), one for each known external installation.

spack.package_test module

spack.package_test.compare_output(current_output, blessed_output)

Compare blessed and current output of executables.

spack.package_test.compare_output_file(current_output, blessed_output_file)

Same as above, but when the blessed output is given as a file.

spack.package_test.compile_c_and_execute(source_file, include_flags, link_flags)

Compile C @p source_file with @p include_flags and @p link_flags, run and return the output.

spack.parse module

exception spack.parse.LexError(message, string, pos)

ベースクラス: spack.parse.ParseError

Raised when we don't know how to lex something.

class spack.parse.Lexer(lexicon0, mode_switches_01=[], lexicon1=[], mode_switches_10=[])

ベースクラス: object

Base class for Lexers that keep track of line numbers.

lex(text)
lex_word(word)
token(type, value='')
exception spack.parse.ParseError(message, string, pos)

ベースクラス: spack.error.SpackError

Raised when we don't hit an error while parsing.

class spack.parse.Parser(lexer)

ベースクラス: object

Base class for simple recursive descent parsers.

accept(id)

Put the next symbol in self.token if accepted, then call gettok()

expect(id)

Like accept(), but fails if we don't like the next token.

gettok()

Puts the next token in the input stream into self.next.

last_token_error(message)

Raise an error about the previous token in the stream.

next_token_error(message)

Raise an error about the next token in the stream.

parse(text)
push_tokens(iterable)

Adds all tokens in some iterable to the token stream.

setup(text)
unexpected_token()
class spack.parse.Token(type, value='', start=0, end=0)

ベースクラス: object

Represents tokens; generated from input by lexer and fed to parse().

is_a(type)

spack.patch module

class spack.patch.FilePatch(pkg, relative_path, level, working_dir, ordering_key=None)

ベースクラス: spack.patch.Patch

Describes a patch that is retrieved from a file in the repository.

パラメータ
  • pkg (str) -- the class object for the package that owns the patch

  • relative_path (str) -- path to patch, relative to the repository directory for a package.

  • level (int) -- level to pass to patch command

  • working_dir (str) -- path within the source directory where patch should be applied

sha256
to_dict()

Partial dictionary -- subclases should add to this.

exception spack.patch.NoSuchPatchError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when a patch file doesn't exist.

class spack.patch.Patch(pkg, path_or_url, level, working_dir)

ベースクラス: object

Base class for patches.

パラメータ

pkg (str) -- the package that owns the patch

The owning package is not necessarily the package to apply the patch to -- in the case where a dependent package patches its dependency, it is the dependent's fullname.

apply(stage)

Apply a patch to source in a stage.

パラメータ

stage (spack.stage.Stage) -- stage where source code lives

clean()

Clean up the patch stage in case of a UrlPatch

fetch(stage)

Fetch the patch in case of a UrlPatch

パラメータ

stage -- stage for the package that needs to be patched

to_dict()

Partial dictionary -- subclases should add to this.

class spack.patch.PatchCache(data=None)

ベースクラス: object

Index of patches used in a repository, by sha256 hash.

This allows us to look up patches without loading all packages. It's also needed to properly implement dependency patching, as need a way to look up patches that come from packages not in the Spec sub-DAG.

The patch index is structured like this in a file (this is YAML, but we write JSON):

patches:
    sha256:
        namespace1.package1:
            <patch json>
        namespace2.package2:
            <patch json>
        ... etc. ...
classmethod from_json(stream)
patch_for_package(sha256, pkg)

Look up a patch in the index and build a patch object for it.

パラメータ

We build patch objects lazily because building them requires that we have information about the package's location in its repo.

to_json(stream)
update(other)

Update this cache with the contents of another.

update_package(pkg_fullname)
exception spack.patch.PatchDirectiveError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when the wrong arguments are suppled to the patch directive.

class spack.patch.UrlPatch(pkg, url, level=1, working_dir='.', ordering_key=None, **kwargs)

ベースクラス: spack.patch.Patch

Describes a patch that is retrieved from a URL.

パラメータ
  • pkg (str) -- the package that owns the patch

  • url (str) -- URL where the patch can be fetched

  • level (int) -- level to pass to patch command

  • working_dir (str) -- path within the source directory where patch should be applied

clean()

Clean up the patch stage in case of a UrlPatch

fetch(stage)

Retrieve the patch in a temporary stage and compute self.path

パラメータ

stage -- stage for the package that needs to be patched

to_dict()

Partial dictionary -- subclases should add to this.

spack.patch.apply_patch(stage, patch_path, level=1, working_dir='.')

Apply the patch at patch_path to code in the stage.

パラメータ
  • stage (spack.stage.Stage) -- stage with code that will be patched

  • patch_path (str) -- filesystem location for the patch to apply

  • level (int, optional) -- patch level (default 1)

  • working_dir (str) -- relative path within the stage to change to (default '.')

spack.patch.from_dict(dictionary)

Create a patch from json dictionary.

spack.paths module

Defines paths that are part of Spack's directory structure.

Do not import other spack modules here. This module is used throughout Spack and should bring in a minimal number of external dependencies.

spack.paths.bin_path = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/bin'

bin directory in the spack prefix

spack.paths.prefix = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root'

This file lives in $prefix/lib/spack/spack/__file__

spack.paths.spack_root = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root'

synonym for prefix

spack.paths.spack_script = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/bin/spack'

The spack script itself

spack.paths.user_config_path = '/home/docs/.spack'

User configuration location

spack.pkgkit module

pkgkit is a set of useful build tools and directives for packages.

Everything in this module is automatically imported into Spack package files.

spack.provider_index module

The virtual module contains utility classes for virtual dependencies.

class spack.provider_index.ProviderIndex(specs=None, restrict=False)

ベースクラス: object

This is a dict of dicts used for finding providers of particular virtual dependencies. The dict of dicts looks like:

{ vpkg name :

{ full vpkg spec : set(packages providing spec) } }

Callers can use this to first find which packages provide a vpkg, then find a matching full spec. e.g., in this scenario:

{ 'mpi' :
{ mpi@:1.1set([mpich]),

mpi@:2.3 : set([mpich2@1.9:]) } }

Calling providers_for(spec) will find specs that provide a matching implementation of MPI.

copy()

Deep copy of this ProviderIndex.

static from_json(stream)
merge(other)

Merge other ProviderIndex into this one.

providers_for(*vpkg_specs)

Gives specs of all packages that provide virtual packages with the supplied specs.

remove_provider(pkg_name)

Remove a provider from the ProviderIndex.

satisfies(other)

Check that providers of virtual specs are compatible.

to_json(stream=None)
update(spec)
exception spack.provider_index.ProviderIndexError(message, long_message=None)

ベースクラス: spack.error.SpackError

Raised when there is a problem with a ProviderIndex.

spack.relocate module

exception spack.relocate.InstallRootStringException(file_path, root_path)

ベースクラス: spack.error.SpackError

Raised when the relocated binary still has the install root string.

spack.relocate.file_is_relocatable(file)

Returns True if the file passed as argument is relocatable.

パラメータ

file -- absolute path of the file to be analyzed

戻り値

True or false

例外

ValueError -- if the file does not exist or the path is not absolute

spack.relocate.get_existing_elf_rpaths(path_name)

Return the RPATHS returned by patchelf --print-rpath path_name as a list of strings.

spack.relocate.get_patchelf()

Builds and installs spack patchelf package on linux platforms using the first concretized spec. Returns the full patchelf binary path.

spack.relocate.get_placeholder_rpaths(path_name, orig_rpaths)

Replaces original layout root dir with a placeholder string in all rpaths.

spack.relocate.get_relative_rpaths(path_name, orig_dir, orig_rpaths)

Replaces orig_dir with relative path from dirname(path_name) if an rpath in orig_rpaths contains orig_path. Prefixes $ORIGIN to relative paths and returns replacement rpaths.

spack.relocate.is_binary(file)

Returns true if a file is binary, False otherwise

パラメータ

file -- file to be tested

戻り値

True or False

spack.relocate.is_relocatable(spec)

Returns True if an installed spec is relocatable.

パラメータ

spec (Spec) -- spec to be analyzed

戻り値

True if the binaries of an installed spec are relocatable and False otherwise.

例外

ValueError -- if the spec is not installed

spack.relocate.macho_get_paths(path_name)

Examines the output of otool -l path_name for these three fields: LC_ID_DYLIB, LC_LOAD_DYLIB, LC_RPATH and parses out the rpaths, dependiencies and library id. Returns these values.

spack.relocate.macho_make_paths_placeholder(rpaths, deps, idpath)

Replace old_dir with a placeholder of the same length in rpaths and deps and idpaths is needed. replacement are returned.

spack.relocate.macho_make_paths_relative(path_name, old_dir, rpaths, deps, idpath)

Replace old_dir with relative path from dirname(path_name) in rpaths and deps; idpaths are replaced with @rpath/libname as needed; replacement are returned.

spack.relocate.macho_replace_paths(old_dir, new_dir, rpaths, deps, idpath)

Replace old_dir with new_dir in rpaths, deps and idpath and return replacements

spack.relocate.make_binary_placeholder(cur_path_names, allow_root)

Replace old install root in RPATHs with placeholder in binary files

spack.relocate.make_binary_relative(cur_path_names, orig_path_names, old_dir, allow_root)

Replace old RPATHs with paths relative to old_dir in binary files

Replace old install path with placeholder in absolute links.

Links in cur_path_names must link to absolute paths.

Change absolute links to be relative.

spack.relocate.mime_type(file)

Returns the mime type and subtype of a file.

パラメータ

file -- file to be analyzed

戻り値

Tuple containing the MIME type and subtype

spack.relocate.modify_elf_object(path_name, new_rpaths)

Replace orig_rpath with new_rpath in RPATH of elf object path_name

spack.relocate.modify_macho_object(cur_path, rpaths, deps, idpath, new_rpaths, new_deps, new_idpath)

Modify MachO binary path_name by replacing old_dir with new_dir or the relative path to spack install root. The old install dir in LC_ID_DYLIB is replaced with the new install dir using install_name_tool -id newid binary The old install dir in LC_LOAD_DYLIB is replaced with the new install dir using install_name_tool -change old new binary The old install dir in LC_RPATH is replaced with the new install dir using install_name_tool -rpath old new binary

spack.relocate.needs_binary_relocation(m_type, m_subtype)

Check whether the given filetype is a binary that may need relocation.

spack.relocate.needs_text_relocation(m_type, m_subtype)

Check whether the given filetype is text that may need relocation.

spack.relocate.relocate_binary(path_names, old_dir, new_dir, allow_root)

Change old_dir to new_dir in RPATHs of elf or mach-o files Account for the case where old_dir is now a placeholder

Replace old path with new path in link sources.

Links in path_names must link to absolute paths or placeholders.

spack.relocate.relocate_text(path_names, old_dir, new_dir)

Replace old path with new path in text file path_name

spack.relocate.set_placeholder(dirname)

return string of @'s with same length

spack.relocate.strings_contains_installroot(path_name, root_dir)

Check if the file contain the install root string.

spack.relocate.substitute_rpath(orig_rpath, topdir, new_root_path)

Replace topdir with new_root_path RPATH list orig_rpath

spack.repo module

exception spack.repo.BadRepoError(message, long_message=None)

ベースクラス: spack.repo.RepoError

Raised when repo layout is invalid.

exception spack.repo.FailedConstructorError(name, exc_type, exc_obj, exc_tb)

ベースクラス: spack.repo.RepoError

Raised when a package's class constructor fails.

class spack.repo.FastPackageChecker(packages_path)

ベースクラス: collections.abc.Mapping

Cache that maps package names to the stats obtained on the 'package.py' files associated with them.

For each repository a cache is maintained at class level, and shared among all instances referring to it. Update of the global cache is done lazily during instance initialization.

last_mtime()
exception spack.repo.IndexError(message, long_message=None)

ベースクラス: spack.repo.RepoError

Raised when there's an error with an index.

class spack.repo.Indexer

ベースクラス: object

Adaptor for indexes that need to be generated when repos are updated.

create()
needs_update(pkg)

Whether an update is needed when the package file hasn't changed.

戻り値

True if this package needs its index

updated, False otherwise.

戻り値の型

(bool)

We already automatically update indexes when package files change, but other files (like patches) may change underneath the package file. This method can be used to check additional package-specific files whenever they're loaded, to tell the RepoIndex to update the index just for that package.

read(stream)

Read this index from a provided file object.

update(pkg_fullname)

Update the index in memory with information about a package.

write(stream)

Write the index to a file object.

exception spack.repo.InvalidNamespaceError(message, long_message=None)

ベースクラス: spack.repo.RepoError

Raised when an invalid namespace is encountered.

spack.repo.NOT_PROVIDED = <object object>

Guaranteed unused default value for some functions.

exception spack.repo.NoRepoConfiguredError(message, long_message=None)

ベースクラス: spack.repo.RepoError

Raised when there are no repositories configured.

class spack.repo.PatchIndexer

ベースクラス: spack.repo.Indexer

Lifecycle methods for patch cache.

needs_update()

Whether an update is needed when the package file hasn't changed.

戻り値

True if this package needs its index

updated, False otherwise.

戻り値の型

(bool)

We already automatically update indexes when package files change, but other files (like patches) may change underneath the package file. This method can be used to check additional package-specific files whenever they're loaded, to tell the RepoIndex to update the index just for that package.

read(stream)

Read this index from a provided file object.

update(pkg_fullname)

Update the index in memory with information about a package.

write(stream)

Write the index to a file object.

class spack.repo.ProviderIndexer

ベースクラス: spack.repo.Indexer

Lifecycle methods for virtual package providers.

read(stream)

Read this index from a provided file object.

update(pkg_fullname)

Update the index in memory with information about a package.

write(stream)

Write the index to a file object.

class spack.repo.Repo(root)

ベースクラス: 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.

all_package_names()

Returns a sorted list of all package names in the Repo.

all_packages()

Iterator over all packages in the repository.

Use this with care, because loading packages is slow.

dirname_for_package_name(spec)

Get the directory name for a particular package. This is the directory that contains its package.py file.

dump_provenance(spec, path)

Dump provenance information for a spec to a particular path.

This dumps the package file and any associated patch files. Raises UnknownPackageError if not found.

exists(pkg_name)

Whether a package with the supplied name exists.

extensions_for(extendee_spec)
filename_for_package_name(spec)

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.

find_module(fullname, path=None)

Python find_module import hook.

Returns this Repo if it can load the module; None if not.

get(spec)

Returns the package associated with the supplied spec.

get_pkg_class(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.

index

Construct the index for this repo lazily.

is_prefix(fullname)

True if fullname is a prefix of this Repo's namespace.

is_virtual(pkg_name)

True if the package with this name is virtual, False otherwise.

last_mtime()

Time a package file in this repo was last updated.

load_module(fullname)

Python importer load hook.

Tries to load the module; raises an ImportError if it can't.

packages_with_tags(*tags)
patch_index

Index of patches and packages they're defined on.

provider_index

A provider index with names specific to this repo.

providers_for(vpkg_spec)
purge()

Clear entire package instance cache.

real_name(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

tag_index

Index of tags and which packages they're defined on.

exception spack.repo.RepoError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for repository-related errors.

class spack.repo.RepoIndex(package_checker, namespace)

ベースクラス: object

Container class that manages a set of Indexers for a Repo.

This class is responsible for checking packages in a repository for updates (using FastPackageChecker) and for regenerating indexes when they're needed.

Indexers should be added to the RepoIndex using add_index(name, indexer), and they should support the interface defined by Indexer, so that the RepoIndex can read, generate, and update stored indices.

Generated indexes are accessed by name via __getitem__().

add_indexer(name, indexer)

Add an indexer to the repo index.

パラメータ
  • name (str) -- name of this indexer

  • indexer (object) -- an object that supports create(), read(), write(), and get_index() operations

class spack.repo.RepoPath(*repos)

ベースクラス: 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.

パラメータ

repos (list) -- list Repo objects or paths to put in this RepoPath

all_package_names()

Return all unique package names in all repositories.

all_packages()
dirname_for_package_name(pkg_name)
dump_provenance(spec, path)

Dump provenance information for a spec to a particular path.

This dumps the package file and any associated patch files. Raises UnknownPackageError if not found.

exists(pkg_name)

Whether package with the give name exists in the path's repos.

Note that virtual packages do not "exist".

extensions_for(extendee_spec)
filename_for_package_name(pkg_name)
find_module(fullname, path=None)

Implements precedence for overlaid namespaces.

Loop checks each namespace in self.repos for packages, and also handles loading empty containing namespaces.

first_repo()

Get the first repo in precedence order.

get(spec)

Returns the package associated with the supplied spec.

get_pkg_class(pkg_name)

Find a class for the spec's package and return the class object.

get_repo(namespace, default=<object object>)

Get a repository by namespace.

パラメータ

namespace -- Look up this namespace in the RepoPath, and return it if found.

Optional Arguments:

default:

If default is provided, return it when the namespace isn't found. If not, raise an UnknownNamespaceError.

is_virtual(pkg_name)

True if the package with this name is virtual, False otherwise.

last_mtime()

Time a package file in this repo was last updated.

load_module(fullname)

Handles loading container namespaces when necessary.

See Repo for how actual package modules are loaded.

packages_with_tags(*tags)
patch_index

Merged PatchIndex from all Repos in the RepoPath.

provider_index

Merged ProviderIndex from all Repos in the RepoPath.

providers_for(vpkg_spec)
put_first(repo)

Add repo first in the search path.

put_last(repo)

Add repo last in the search path.

remove(repo)

Remove a repo from the search path.

repo_for_pkg(spec)

Given a spec, get the repository for its package.

class spack.repo.SpackNamespace(namespace)

ベースクラス: module

Allow lazy loading of modules.

class spack.repo.TagIndex

ベースクラス: collections.abc.Mapping

Maps tags to list of packages.

static from_json(stream)
to_json(stream)
update_package(pkg_name)

Updates a package in the tag index.

パラメータ

pkg_name (str) -- name of the package to be removed from the index

class spack.repo.TagIndexer

ベースクラス: spack.repo.Indexer

Lifecycle methods for a TagIndex on a Repo.

read(stream)

Read this index from a provided file object.

update(pkg_fullname)

Update the index in memory with information about a package.

write(stream)

Write the index to a file object.

exception spack.repo.UnknownEntityError(message, long_message=None)

ベースクラス: spack.repo.RepoError

Raised when we encounter a package spack doesn't have.

exception spack.repo.UnknownNamespaceError(namespace)

ベースクラス: spack.repo.UnknownEntityError

Raised when we encounter an unknown namespace

exception spack.repo.UnknownPackageError(name, repo=None)

ベースクラス: spack.repo.UnknownEntityError

Raised when we encounter a package spack doesn't have.

spack.repo.additional_repository(repository)

Adds temporarily a repository to the default one.

パラメータ

repository -- repository to be added

spack.repo.all_package_names()

Convenience wrapper around spack.repo.all_package_names().

spack.repo.autospec(function)

Decorator that automatically converts the first argument of a function to a Spec.

spack.repo.create_or_construct(path, namespace=None)

Create a repository, or just return a Repo if it already exists.

spack.repo.create_repo(root, namespace=None)

Create a new repository in root with the specified namespace.

If the namespace is not provided, use basename of root. Return the canonicalized path and namespace of the created repository.

spack.repo.get(spec)

Convenience wrapper around spack.repo.get().

spack.repo.get_full_namespace(namespace)

Returns the full namespace of a repository, given its relative one.

spack.repo.path = <spack.repo.RepoPath object>

Singleton repo path instance

spack.repo.repo_namespace = 'spack.pkg'

Super-namespace for all packages. Package modules are imported as spack.pkg.<namespace>.<pkg-name>.

spack.repo.set_path(repo)

Set the path singleton to a specific value.

Overwrite path and register it as an importer in sys.meta_path if it is a Repo or RepoPath.

spack.repo.swap(repo_path)

Temporarily use another RepoPath.

spack.report module

Tools to produce reports of spec installations

spack.report.valid_formats = [None, 'junit', 'cdash']

Allowed report formats

class spack.report.collect_info(format_name, args)

ベースクラス: object

Collects information to build a report while installing and dumps it on exit.

If the format name is not None, this context manager decorates PackageBase.do_install when entering the context and unrolls the change when exiting.

Within the context, only the specs that are passed to it on initialization will be recorded for the report. Data from other specs will be discarded.

サンプル

# The file 'junit.xml' is written when exiting
# the context
specs = [Spec('hdf5').concretized()]
with collect_info(specs, 'junit', 'junit.xml'):
    # A report will be generated for these specs...
    for spec in specs:
        spec.do_install()
    # ...but not for this one
    Spec('zlib').concretized().do_install()
パラメータ
  • format_name (str or None) -- one of the supported formats

  • args (dict) -- args passed to spack install

例外

ValueError -- when format_name is not in valid_formats

concretization_report(msg)

spack.reporter module

class spack.reporter.Reporter(args)

ベースクラス: object

Base class for report writers.

build_report(filename, report_data)
concretization_report(filename, msg)

spack.resource module

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.

class spack.resource.Resource(name, fetcher, destination, placement)

ベースクラス: object

Represents an optional resource to be fetched by a package.

Aggregates a name, a fetcher, a destination and a placement.

spack.spec module

Spack allows very fine-grained control over how packages are installed and over how they are built and configured. To make this easy, it has its own syntax for declaring a dependence. We call a descriptor of a particular package configuration a "spec".

The syntax looks like this:

$ spack install mpileaks ^openmpi @1.2:1.4 +debug %intel @12.1 =bgqos_0
                0        1        2        3      4      5     6

The first part of this is the command, 'spack install'. The rest of the line is a spec for a particular installation of the mpileaks package.

  1. The package to install

  2. A dependency of the package, prefixed by ^

  3. A version descriptor for the package. This can either be a specific version, like "1.2", or it can be a range of versions, e.g. "1.2:1.4". If multiple specific versions or multiple ranges are acceptable, they can be separated by commas, e.g. if a package will only build with versions 1.0, 1.2-1.4, and 1.6-1.8 of mavpich, you could say:

    depends_on("mvapich@1.0,1.2:1.4,1.6:1.8")

  4. A compile-time variant of the package. If you need openmpi to be built in debug mode for your package to work, you can require it by adding +debug to the openmpi spec when you depend on it. If you do NOT want the debug option to be enabled, then replace this with -debug.

  5. The name of the compiler to build with.

  6. The versions of the compiler to build with. Note that the identifier for a compiler version is the same '@' that is used for a package version. A version list denoted by '@' is associated with the compiler only if if it comes immediately after the compiler name. Otherwise it will be associated with the current package spec.

  7. The architecture to build with. This is needed on machines where cross-compilation is required

Here is the EBNF grammar for a spec:

spec-list    = { spec [ dep-list ] }
dep_list     = { ^ spec }
spec         = id [ options ]
options      = { @version-list | +variant | -variant | ~variant |
                 %compiler | arch=architecture | [ flag ]=value}
flag         = { cflags | cxxflags | fcflags | fflags | cppflags |
                 ldflags | ldlibs }
variant      = id
architecture = id
compiler     = id [ version-list ]
version-list = version [ { , version } ]
version      = id | id: | :id | id:id
id           = [A-Za-z0-9_][A-Za-z0-9_.-]*

Identifiers using the <name>=<value> command, such as architectures and compiler flags, require a space before the name.

There is one context-sensitive part: ids in versions may contain '.', while other ids may not.

There is one ambiguity: since '-' is allowed in an id, you need to put whitespace space before -variant for it to be tokenized properly. You can either use whitespace, or you can just use ~variant since it means the same thing. Spack uses ~variant in directory names and in the canonical form of specs to avoid ambiguity. Both are provided because ~ can cause shell expansion when it is the first character in an id typed on the command line.

class spack.spec.Spec(spec_like=None, normal=False, concrete=False, external_path=None, external_module=None, full_hash=None)

ベースクラス: object

cformat(*args, **kwargs)

Same as format, but color defaults to auto instead of False.

colorized()
common_dependencies(other)

Return names of dependencies that self an other have in common.

concrete

A spec is concrete if it describes a single build of a package.

More formally, a spec is concrete if concretize() has been called on it and it has been marked _concrete.

Concrete specs either can be or have been built. All constraints have been resolved, optional dependencies have been added or removed, a compiler has been chosen, and all variants have values.

concretize(tests=False)

A spec is concrete if it describes one build of a package uniquely. This will ensure that this spec is concrete.

パラメータ

tests (list or bool) -- list of packages that will need test dependencies, or True/False for test all/none

If this spec could describe more than one version, variant, or build of a package, this will add constraints to make it concrete.

Some rigorous validation and checks are also performed on the spec. Concretizing ensures that it is self-consistent and that it's consistent with requirements of its packages. See flatten() and normalize() for more details on this.

concretized()

This is a non-destructive version of concretize(). First clones, then returns a concrete version of this package without modifying this package.

constrain(other, deps=True)

Merge the constraints of other with self.

Returns True if the spec changed as a result, False if not.

constrained(other, deps=True)

Return a constrained copy without modifying this spec.

copy(deps=True, **kwargs)

Make a copy of this spec.

パラメータ
  • deps (bool or tuple) -- Defaults to True. If boolean, controls whether dependencies are copied (copied if True). If a tuple is provided, only dependencies of types matching those in the tuple are copied.

  • kwargs -- additional arguments for internal use (passed to _dup).

戻り値

A copy of this spec.

サンプル

Deep copy with dependnecies:

spec.copy()
spec.copy(deps=True)

Shallow copy (no dependencies):

spec.copy(deps=False)

Only build and run dependencies:

deps=('build', 'run'):
cshort_spec

Returns an auto-colorized version of self.short_spec.

dag_hash(length=None)

Return a hash of the entire spec DAG, including connectivity.

dag_hash_bit_prefix(bits)

Get the first <bits> bits of the DAG hash as an integer type.

dep_difference(other)

Returns dependencies in self that are not in other.

dep_string()
dependencies(deptype='all')
dependencies_dict(deptype='all')
static dependencies_from_node_dict(node)
dependents(deptype='all')
dependents_dict(deptype='all')
eq_dag(other, deptypes=True)

True if the full dependency DAGs of specs are equal.

eq_node(other)

Equality with another spec, not including dependencies.

external
flat_dependencies(**kwargs)

Return a DependencyMap containing all of this spec's dependencies with their constraints merged.

If copy is True, returns merged copies of its dependencies without modifying the spec it's called on.

If copy is False, clears this spec's dependencies and returns them.

format(format_string='{name}{@version}{%compiler.name}{@compiler.version}{compiler_flags}{variants}{arch=architecture}', **kwargs)

Prints out particular pieces of a spec, depending on what is in the format string.

Using the {attribute} syntax, any field of the spec can be selected. Those attributes can be recursive. For example, s.format({compiler.version}) will print the version of the compiler.

Commonly used attributes of the Spec for format strings include:

name
version
compiler
compiler.name
compiler.version
compiler_flags
variants
architecture
architecture.platform
architecture.os
architecture.target
prefix

Some additional special-case properties can be added:

hash[:len]    The DAG hash with optional length argument
spack_root    The spack root directory
spack_install The spack install directory

The ^ sigil can be used to access dependencies by name. s.format({^mpi.name}) will print the name of the MPI implementation in the spec.

The @, %, arch=, and / sigils can be used to include the sigil with the printed string. These sigils may only be used with the appropriate attributes, listed below:

@        ``{@version}``, ``{@compiler.version}``
%        ``{%compiler}``, ``{%compiler.name}``
arch=    ``{arch=architecture}``
/        ``{/hash}``, ``{/hash:7}``, etc

The @ sigil may also be used for any other property named version. Sigils printed with the attribute string are only printed if the attribute string is non-empty, and are colored according to the color of the attribute.

Sigils are not used for printing variants. Variants listed by name naturally print with their sigil. For example, spec.format('{variants.debug}') would print either +debug or ~debug depending on the name of the variant. Non-boolean variants print as name=value. To print variant names or values independently, use spec.format('{variants.<name>.name}') or spec.format('{variants.<name>.value}').

Spec format strings use \ as the escape character. Use \{ and \} for literal braces, and \\ for the literal \ character. Also use \$ for the literal $ to differentiate from previous, deprecated format string syntax.

The previous format strings are deprecated. They can still be accessed by the old_format method. The format method will call old_format if the character $ appears unescaped in the format string.

パラメータ

format_string (str) -- string containing the format to be expanded

キーワード引数
  • color (bool) -- True if returned string is colored

  • transform (dict) -- maps full-string formats to a callable that accepts a string and returns another one

static from_dict(data)

Construct a spec from YAML.

Parameters: data -- a nested dict/list data structure read from YAML or JSON.

static from_json(stream)

Construct a spec from JSON.

Parameters: stream -- string or file object to read from.

static from_literal(spec_dict, normal=True)

Builds a Spec from a dictionary containing the spec literal.

The dictionary must have a single top level key, representing the root, and as many secondary level keys as needed in the spec.

The keys can be either a string or a Spec or a tuple containing the Spec and the dependency types.

パラメータ
  • spec_dict (dict) -- the dictionary containing the spec literal

  • normal (bool) -- if True the same key appearing at different levels of the spec_dict will map to the same object in memory.

サンプル

A simple spec foo with no dependencies:

{'foo': None}

A spec foo with a (build, link) dependency bar:

{'foo':
    {'bar:build,link': None}}

A spec with a diamond dependency and various build types:

{'dt-diamond': {
    'dt-diamond-left:build,link': {
        'dt-diamond-bottom:build': None
    },
    'dt-diamond-right:build,link': {
        'dt-diamond-bottom:build,link,run': None
    }
}}

The same spec with a double copy of dt-diamond-bottom and no diamond structure:

{'dt-diamond': {
    'dt-diamond-left:build,link': {
        'dt-diamond-bottom:build': None
    },
    'dt-diamond-right:build,link': {
        'dt-diamond-bottom:build,link,run': None
    }
}, normal=False}

Constructing a spec using a Spec object as key:

mpich = Spec('mpich')
libelf = Spec('libelf@1.8.11')
expected_normalized = Spec.from_literal({
    'mpileaks': {
        'callpath': {
            'dyninst': {
                'libdwarf': {libelf: None},
                libelf: None
            },
            mpich: None
        },
        mpich: None
    },
})
static from_node_dict(node)
static from_yaml(stream)

Construct a spec from YAML.

Parameters: stream -- string or file object to read from.

full_hash(length=None)
fullname
get_dependency(name)
index(deptype='all')

Return DependencyMap that points to all the dependencies in this spec.

install_status()

Helper for tree to print DB install status.

static is_virtual(name)

Test if a name is virtual without requiring a Spec.

ne_dag(other, deptypes=True)

True if the full dependency DAGs of specs are not equal.

ne_node(other)

Inequality with another spec, not including dependencies.

normalize(force=False, tests=False, user_spec_deps=None)

When specs are parsed, any dependencies specified are hanging off the root, and ONLY the ones that were explicitly provided are there. Normalization turns a partial flat spec into a DAG, where:

  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.

TODO: normalize should probably implement some form of cycle detection, to ensure that the spec is actually a DAG.

normalized()

Return a normalized copy of this spec without modifying this spec.

old_format(format_string='$_$@$%@+$+$=', **kwargs)

The format strings you can provide are:

$_   Package name
$.   Full package name (with namespace)
$@   Version with '@' prefix
$%   Compiler with '%' prefix
$%@  Compiler with '%' prefix & compiler version with '@' prefix
$%+  Compiler with '%' prefix & compiler flags prefixed by name
$%@+ Compiler, compiler version, and compiler flags with same
     prefixes as above
$+   Options
$=   Architecture prefixed by 'arch='
$/   7-char prefix of DAG hash with '-' prefix
$$   $

You can also use full-string versions, which elide the prefixes:

${PACKAGE}       Package name
${FULLPACKAGE}   Full package name (with namespace)
${VERSION}       Version
${COMPILER}      Full compiler string
${COMPILERNAME}  Compiler name
${COMPILERVER}   Compiler version
${COMPILERFLAGS} Compiler flags
${OPTIONS}       Options
${ARCHITECTURE}  Architecture
${PLATFORM}      Platform
${OS}            Operating System
${TARGET}        Target
${SHA1}          Dependencies 8-char sha1 prefix
${HASH:len}      DAG hash with optional length specifier

${DEP:name:OPTION} Evaluates as OPTION would for self['name']

${SPACK_ROOT}    The spack root directory
${SPACK_INSTALL} The default spack install directory,
                 ${SPACK_PREFIX}/opt
${PREFIX}        The package prefix
${NAMESPACE}     The package namespace

Note these are case-insensitive: for example you can specify either ${PACKAGE} or ${package}.

Optionally you can provide a width, e.g. $20_ for a 20-wide name. Like printf, you can provide '-' for left justification, e.g. $-20_ for a left-justified name.

Anything else is copied verbatim into the output stream.

パラメータ

format_string (str) -- string containing the format to be expanded

キーワード引数
  • color (bool) -- True if returned string is colored

  • transform (dict) -- maps full-string formats to a callable that accepts a string and returns another one

サンプル

The following line:

s = spec.format('$_$@$+')

translates to the name, version, and options of the package, but no dependencies, arch, or compiler.

TODO: allow, e.g., $6# to customize short hash length TODO: allow, e.g., $// for full hash.

package
package_class

Internal package call gets only the class object for a package. Use this to just get package metadata.

patches

Return patch objects for any patch sha256 sums on this Spec.

This is for use after concretization to iterate over any patches associated with this spec.

TODO: this only checks in the package; it doesn't resurrect old patches from install directories, but it probably should.

prefix
static read_yaml_dep_specs(dependency_dict)

Read the DependencySpec portion of a YAML-formatted Spec.

This needs to be backward-compatible with older spack spec formats so that reindex will work on old specs/databases.

root

Follow dependent links and find the root of this spec's DAG.

Spack specs have a single root (the package being installed).

satisfies(other, deps=True, strict=False, strict_deps=False)

Determine if this spec satisfies all constraints of another.

There are two senses for satisfies:

  • loose (default): the absence of a constraint in self implies that it could be satisfied by other, so we only check that there are no conflicts with other for constraints that this spec actually has.

  • strict: strict means that we must meet all the constraints specified on other.

satisfies_dependencies(other, strict=False)

This checks constraints on common dependencies against each other.

short_spec

Returns a version of the spec with the dependencies hashed instead of completely enumerated.

sorted_deps()

Return a list of all dependencies sorted by name.

to_dict(all_deps=False)
to_json(stream=None)
to_node_dict(hash_function=None, all_deps=False)
to_yaml(stream=None, all_deps=False)
traverse(**kwargs)
traverse_edges(visited=None, d=0, deptype='all', dep_spec=None, **kwargs)

Generic traversal of the DAG represented by this spec. This will yield each node in the spec. Options:

order [=pre|post]

Order to traverse spec nodes. Defaults to preorder traversal. Options are:

'pre': Pre-order traversal; each node is yielded before its

children in the dependency DAG.

'post': Post-order traversal; each node is yielded after its

children in the dependency DAG.

cover [=nodes|edges|paths]

Determines how extensively to cover the dag. Possible values:

'nodes': Visit each node in the dag only once. Every node

yielded by this function will be unique.

'edges': If a node has been visited once but is reached along a

new path from the root, yield it but do not descend into it. This traverses each 'edge' in the DAG once.

'paths': Explore every unique path reachable from the root.

This descends into visited subtrees and will yield nodes twice if they're reachable by multiple paths.

depth [=False]

Defaults to False. When True, yields not just nodes in the spec, but also their depth from the root in a (depth, node) tuple.

key [=id]

Allow a custom key function to track the identity of nodes in the traversal.

root [=True]

If False, this won't yield the root node, just its descendents.

direction [=children|parents]

If 'children', does a traversal of this spec's children. If 'parents', traverses upwards in the DAG towards the root.

tree(**kwargs)

Prints out this spec and its dependencies, tree-formatted with indentation.

validate_or_raise()

Checks that names and values in this spec are real. If they're not, it will raise an appropriate exception.

version
virtual

Right now, a spec is virtual if no package exists with its name.

TODO: revisit this -- might need to use a separate namespace and be more explicit about this. Possible idea: just use conventin and make virtual deps all caps, e.g., MPI vs mpi.

virtual_dependencies()

Return list of any virtual deps in this spec.

spack.spec.parse(string)

Returns a list of specs from an input string. For creating one spec, see Spec() constructor.

spack.spec.parse_anonymous_spec(spec_like, pkg_name)

Allow the user to omit the package name part of a spec if they know what it has to be already.

e.g., provides('mpi@2', when='@1.9:') says that this package provides MPI-3 when its version is higher than 1.9.

exception spack.spec.SpecError(message, long_message=None)

ベースクラス: spack.error.SpackError

Superclass for all errors that occur while constructing specs.

exception spack.spec.SpecParseError(parse_error)

ベースクラス: spack.error.SpecError

Wrapper for ParseError for when we're parsing specs.

exception spack.spec.DuplicateDependencyError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when the same dependency occurs in a spec twice.

exception spack.spec.DuplicateVariantError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when the same variant occurs in a spec twice.

exception spack.spec.DuplicateCompilerSpecError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when the same compiler occurs in a spec twice.

exception spack.spec.UnsupportedCompilerError(compiler_name)

ベースクラス: spack.error.SpecError

Raised when the user asks for a compiler spack doesn't know about.

exception spack.spec.UnknownVariantError(pkg, variant)

ベースクラス: spack.error.SpecError

Raised when an unknown variant occurs in a spec.

exception spack.spec.DuplicateArchitectureError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when the same architecture occurs in a spec twice.

exception spack.spec.InconsistentSpecError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when two nodes in the same spec DAG have inconsistent constraints.

exception spack.spec.InvalidDependencyError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when a dependency in a spec is not actually a dependency of the package.

exception spack.spec.NoProviderError(vpkg)

ベースクラス: spack.error.SpecError

Raised when there is no package that provides a particular virtual dependency.

exception spack.spec.MultipleProviderError(vpkg, providers)

ベースクラス: spack.error.SpecError

Raised when there is no package that provides a particular virtual dependency.

exception spack.spec.UnsatisfiableSpecError(provided, required, constraint_type)

ベースクラス: spack.error.SpecError

Raised when a spec conflicts with package constraints. Provide the requirement that was violated when raising.

exception spack.spec.UnsatisfiableSpecNameError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when two specs aren't even for the same package.

exception spack.spec.UnsatisfiableVersionSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec version conflicts with package constraints.

exception spack.spec.UnsatisfiableCompilerSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec comiler conflicts with package constraints.

exception spack.spec.UnsatisfiableVariantSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec variant conflicts with package constraints.

exception spack.spec.UnsatisfiableCompilerFlagSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec variant conflicts with package constraints.

exception spack.spec.UnsatisfiableArchitectureSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec architecture conflicts with package constraints.

exception spack.spec.UnsatisfiableProviderSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a provider is supplied but constraints don't match a vpkg requirement

exception spack.spec.UnsatisfiableDependencySpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when some dependency of constrained specs are incompatible

exception spack.spec.AmbiguousHashError(msg, *specs)

ベースクラス: spack.error.SpecError

exception spack.spec.InvalidHashError(spec, hash)

ベースクラス: spack.error.SpecError

exception spack.spec.NoSuchHashError(hash)

ベースクラス: spack.error.SpecError

exception spack.spec.RedundantSpecError(spec, addition)

ベースクラス: spack.error.SpecError

spack.spec_set module

class spack.spec_set.CombinatorialSpecSet(yaml_like, ignore_invalid=True)

ベースクラス: object

Set of combinatorial Specs constructed from YAML file.

all_package_versions()

Get package/version combinations for all spack packages.

static from_file(path)

spack.stage module

class spack.stage.DIYStage(path)

ベースクラス: object

Simple class that allows any directory to be a spack stage.

cache_local()
check()
create()
destroy()
expand_archive()
fetch(*args, **kwargs)
restage()
class spack.stage.ResourceStage(url_or_fetch_strategy, root, resource, **kwargs)

ベースクラス: spack.stage.Stage

expand_archive()

Changes to the stage directory and attempt to expand the downloaded archive. Fail if the stage is not set up or if the archive is not yet downloaded.

restage()

Removes the expanded archive path if it exists, then re-expands the archive.

exception spack.stage.RestageError(message, long_message=None)

ベースクラス: spack.stage.StageError

"Error encountered during restaging.

class spack.stage.Stage(url_or_fetch_strategy, name=None, mirror_path=None, keep=False, path=None, lock=True, search_fn=None)

ベースクラス: object

Manages a temporary stage directory for building.

A Stage object is a context manager that handles a directory where some source code is downloaded and built before being installed. It handles fetching the source code, either as an archive to be expanded or by checking it out of a repository. A stage's lifecycle looks like this:

with Stage() as stage:      # Context manager creates and destroys the
                            # stage directory
    stage.fetch()           # Fetch a source archive into the stage.
    stage.expand_archive()  # Expand the source archive.
    <install>               # Build and install the archive.
                            # (handled by user of Stage)

When used as a context manager, the stage is automatically destroyed if no exception is raised by the context. If an excpetion is raised, the stage is left in the filesystem and NOT destroyed, for potential reuse later.

You can also use the stage's create/destroy functions manually, like this:

stage = Stage()
try:
    stage.create()          # Explicitly create the stage directory.
    stage.fetch()           # Fetch a source archive into the stage.
    stage.expand_archive()  # Expand the source archive.
    <install>               # Build and install the archive.
                            # (handled by user of Stage)
finally:
    stage.destroy()         # Explicitly destroy the stage directory.

There are two kinds of stages: named and unnamed. Named stages can persist between runs of spack, e.g. if you fetched a tarball but didn't finish building it, you won't have to fetch it again.

Unnamed stages are created using standard mkdtemp mechanisms or similar, and are intended to persist for only one run of spack.

archive_file

Path to the source archive within this stage directory.

cache_local()
check()

Check the downloaded archive against a checksum digest. No-op if this stage checks code out of a repository.

create()

Creates the stage directory.

If get_tmp_root() is None, the stage directory is created directly under spack.paths.stage_path, otherwise this will attempt to create a stage in a temporary directory and link it into spack.paths.stage_path.

destroy()

Removes this stage directory.

expand_archive()

Changes to the stage directory and attempt to expand the downloaded archive. Fail if the stage is not set up or if the archive is not yet downloaded.

expected_archive_files

Possible archive file paths.

fetch(mirror_only=False)

Downloads an archive or checks out code from a repository.

restage()

Removes the expanded archive path if it exists, then re-expands the archive.

save_filename
source_path

Returns the path to the expanded/checked out source code.

To find the source code, this method searches for the first subdirectory of the stage that it can find, and returns it. This assumes nothing besides the archive file will be in the stage path, but it has the advantage that we don't need to know the name of the archive or its contents.

If the fetch strategy is not supposed to expand the downloaded file, it will just return the stage path. If the archive needs to be expanded, it will return None when no archive is found.

stage_locks = {}
exception spack.stage.StageError(message, long_message=None)

ベースクラス: spack.error.SpackError

"Superclass for all errors encountered during staging.

spack.stage.ensure_access(file='/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/var/spack/stage')

Ensure we can access a directory and die with an error if we can't.

spack.stage.get_tmp_root()
spack.stage.purge()

Remove all build directories in the top-level stage path.

spack.store module

Components that manage Spack's installation tree.

An install tree, or "build store" consists of two parts:

  1. A package database that tracks what is installed.

  2. A directory layout that determines how the installations are laid out.

The store contains all the install prefixes for packages installed by Spack. The simplest store could just contain prefixes named by DAG hash, but we use a fancier directory layout to make browsing the store and debugging easier.

The directory layout is currently hard-coded to be a YAMLDirectoryLayout, so called because it stores build metadata within each prefix, in spec.yaml files. In future versions of Spack we may consider allowing install trees to define their own layouts with some per-tree configuration.

class spack.store.Store(root, path_scheme=None, hash_length=None)

ベースクラス: object

A store is a path full of installed Spack packages.

Stores consist of packages installed according to a DirectoryLayout, along with an index, or _database_ of their contents. The directory layout controls what paths look like and how Spack ensures that each uniqe spec gets its own unique directory (or not, though we don't recommend that). The database is a signle file that caches metadata for the entire Spack installation. It prevents us from having to spider the install tree to figure out what's there.

パラメータ
  • root (str) -- path to the root of the install tree

  • path_scheme (str) -- expression according to guidelines in spack.util.path that describes how to construct a path to a package prefix in this store

  • hash_length (int) -- length of the hashes used in the directory layout; spec hash suffixes will be truncated to this length

reindex()

Convenience function to reindex the store DB with its own layout.

spack.store.default_root = '/home/docs/checkouts/readthedocs.org/user_builds/ja-docs/checkouts/latest/docs/ja/_spack_root/opt/spack'

default installation root, relative to the Spack install path

spack.store.retrieve_upstream_dbs()
spack.store.store = <spack.store.Store object>

Singleton store instance

spack.tengine module

class spack.tengine.Context

ベースクラス: object

Base class for context classes that are used with the template engine.

context_properties = []
to_dict()

Returns a dictionary containing all the context properties.

class spack.tengine.ContextMeta

ベースクラス: type

Meta class for Context. It helps reducing the boilerplate in client code.

classmethod context_property(func)

Decorator that adds a function name to the list of new context properties, and then returns a property.

spack.tengine.context_property = <bound method ContextMeta.context_property of <class 'spack.tengine.ContextMeta'>>

A saner way to use the decorator

spack.tengine.make_environment(dirs=None)

Returns an configured environment for template rendering.

spack.tengine.prepend_to_line(text, token)

Prepends a token to each line in text

spack.tengine.quote(text)

Quotes each line in text

spack.url module

This module has methods for parsing names and versions of packages from URLs. The idea is to allow package creators to supply nothing more than the download location of the package, and figure out version and name information from there.

Example: when spack is given the following URL:

It can figure out that the package name is hdf, and that it is at version 4.2.12. This is useful for making the creation of packages simple: a user just supplies a URL and skeleton code is generated automatically.

Spack can also figure out that it can most likely download 4.2.6 at this URL:

This is useful if a user asks for a package at a particular version number; spack doesn't need anyone to tell it where to get the tarball even though it's never been told about that version before.

exception spack.url.UndetectableNameError(path)

ベースクラス: spack.url.UrlParseError

Raised when we can't parse a package name from a string.

exception spack.url.UndetectableVersionError(path)

ベースクラス: spack.url.UrlParseError

Raised when we can't parse a version from a string.

exception spack.url.UrlParseError(msg, path)

ベースクラス: spack.error.SpackError

Raised when the URL module can't parse something correctly.

spack.url.color_url(path, **kwargs)

Color the parts of the url according to Spack's parsing.

Colors are:
Cyan: The version found by parse_version_offset().
Red: The name found by parse_name_offset().
Green: Instances of version string from substitute_version().
Magenta: Instances of the name (protected from substitution).
パラメータ
  • path (str) -- The filename or URL for the package

  • errors (bool) -- Append parse errors at end of string.

  • subs (bool) -- Color substitutions as well as parsed name/version.

spack.url.cumsum(elts, init=0, fn=<function <lambda>>)

Return cumulative sum of result of fn on each element in elts.

spack.url.determine_url_file_extension(path)

This returns the type of archive a URL refers to. This is sometimes confusing because of URLs like:

  1. https://github.com/petdance/ack/tarball/1.93_02

Where the URL doesn't actually contain the filename. We need to know what type it is so that we can appropriately name files in mirrors.

spack.url.find_all(substring, string)

Returns a list containing the indices of every occurrence of substring in string.

spack.url.find_list_url(url)

Finds a good list URL for the supplied URL.

By default, returns the dirname of the archive path.

Provides special treatment for the following websites, which have a unique list URL different from the dirname of the download URL:

GitHub

https://github.com/<repo>/<name>/releases

GitLab

https://gitlab.*/<repo>/<name>/tags

BitBucket

https://bitbucket.org/<repo>/<name>/downloads/?tab=tags

CRAN

https://*.r-project.org/src/contrib/Archive/<name>

パラメータ

url (str) -- The download URL for the package

戻り値

The list URL for the package

戻り値の型

str

spack.url.insensitize(string)

Change upper and lowercase letters to be case insensitive in the provided string. e.g., 'a' becomes '[Aa]', 'B' becomes '[bB]', etc. Use for building regexes.

spack.url.parse_name(path, ver=None)

Try to determine the name of a package from its filename or URL.

パラメータ
  • path (str) -- The filename or URL for the package

  • ver (str) -- The version of the package

戻り値

The name of the package

戻り値の型

str

例外

UndetectableNameError -- If the URL does not match any regexes

spack.url.parse_name_and_version(path)

Try to determine the name of a package and extract its version from its filename or URL.

パラメータ

path (str) -- The filename or URL for the package

戻り値

The name of the package The version of the package

戻り値の型

tuple of (str, Version)A tuple containing

例外
  • UndetectableVersionError -- If the URL does not match any regexes

  • UndetectableNameError -- If the URL does not match any regexes

spack.url.parse_name_offset(path, v=None)

Try to determine the name of a package from its filename or URL.

パラメータ
  • path (str) -- The filename or URL for the package

  • v (str) -- The version of the package

戻り値

A tuple containing:

name of the package, first index of name, length of name, the index of the matching regex the matching regex

戻り値の型

tuple of (str, int, int, int, str)

例外

UndetectableNameError -- If the URL does not match any regexes

spack.url.parse_version(path)

Try to extract a version string from a filename or URL.

パラメータ

path (str) -- The filename or URL for the package

戻り値

The version of the package

戻り値の型

spack.version.Version

例外

UndetectableVersionError -- If the URL does not match any regexes

spack.url.parse_version_offset(path)

Try to extract a version string from a filename or URL.

パラメータ

path (str) -- The filename or URL for the package

戻り値

A tuple containing:

version of the package, first index of version, length of version string, the index of the matching regex the matching regex

戻り値の型

tuple of (Version, int, int, int, str)

例外

UndetectableVersionError -- If the URL does not match any regexes

spack.url.split_url_extension(path)

Some URLs have a query string, e.g.:

  1. https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true

  2. http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz

  3. https://gitlab.kitware.com/vtk/vtk/repository/archive.tar.bz2?ref=v7.0.0

In (1), the query string needs to be stripped to get at the extension, but in (2) & (3), the filename is IN a single final query argument.

This strips the URL into three pieces: prefix, ext, and suffix. The suffix contains anything that was stripped off the URL to get at the file extension. In (1), it will be '?raw=true', but in (2), it will be empty. In (3) the suffix is a parameter that follows after the file extension, e.g.:

  1. ('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7', '.tgz', '?raw=true')

  2. ('http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin', '.tar.gz', None)

  3. ('https://gitlab.kitware.com/vtk/vtk/repository/archive', '.tar.bz2', '?ref=v7.0.0')

spack.url.strip_name_suffixes(path, version)

Most tarballs contain a package name followed by a version number. However, some also contain extraneous information in-between the name and version:

  • rgb-1.0.6

  • converge_install_2.3.16

  • jpegsrc.v9b

These strings are not part of the package name and should be ignored. This function strips the version number and any extraneous suffixes off and returns the remaining string. The goal is that the name is always the last thing in path:

  • rgb

  • converge

  • jpeg

パラメータ
  • path (str) -- The filename or URL for the package

  • version (str) -- The version detected for this URL

戻り値

The path with any extraneous suffixes removed

戻り値の型

str

spack.url.strip_query_and_fragment(path)
spack.url.strip_version_suffixes(path)

Some tarballs contain extraneous information after the version:

  • bowtie2-2.2.5-source

  • libevent-2.0.21-stable

  • cuda_8.0.44_linux.run

These strings are not part of the version number and should be ignored. This function strips those suffixes off and returns the remaining string. The goal is that the version is always the last thing in path:

  • bowtie2-2.2.5

  • libevent-2.0.21

  • cuda_8.0.44

パラメータ

path (str) -- The filename or URL for the package

戻り値

The path with any extraneous suffixes removed

戻り値の型

str

spack.url.substitute_version(path, new_version)

Given a URL or archive name, find the version in the path and substitute the new version for it. Replace all occurrences of the version if they don't overlap with the package name.

Simple example:

substitute_version('http://www.mr511.de/software/libelf-0.8.13.tar.gz', '2.9.3')
>>> 'http://www.mr511.de/software/libelf-2.9.3.tar.gz'

Complex example:

substitute_version('https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.12/src/hdf-4.2.12.tar.gz', '2.3')
>>> 'https://www.hdfgroup.org/ftp/HDF/releases/HDF2.3/src/hdf-2.3.tar.gz'
spack.url.substitution_offsets(path)

This returns offsets for substituting versions and names in the provided path. It is a helper for substitute_version().

spack.url.wildcard_version(path)

Find the version in the supplied path, and return a regular expression that will match this path with any version in its place.

spack.variant module

The variant module contains data structures that are needed to manage variants both in packages and in specs.

class spack.variant.AbstractVariant(name, value)

ベースクラス: object

A variant that has not yet decided who it wants to be. It behaves like a multi valued variant which could do things.

This kind of variant is generated during parsing of expressions like foo=bar and differs from multi valued variants because it will satisfy any other variant with the same name. This is because it could do it if it grows up to be a multi valued variant with the right set of values.

compatible(other)

Returns True if self and other are compatible, False otherwise.

As there is no semantic check, two VariantSpec are compatible if either they contain the same value or they are both multi-valued.

パラメータ

other -- instance against which we test compatibility

戻り値

True or False

戻り値の型

bool

constrain(other)

Modify self to match all the constraints for other if both instances are multi-valued. Returns True if self changed, False otherwise.

パラメータ

other -- instance against which we constrain self

戻り値

True or False

戻り値の型

bool

copy()

Returns an instance of a variant equivalent to self

戻り値

a copy of self

戻り値の型

any variant type

>>> a = MultiValuedVariant('foo', True)
>>> b = a.copy()
>>> assert a == b
>>> assert a is not b
static from_node_dict(name, value)

Reconstruct a variant from a node dict.

satisfies(other)

Returns true if other.name == self.name, because any value that other holds and is not in self yet could be added.

パラメータ

other -- constraint to be met for the method to return True

戻り値

True or False

戻り値の型

bool

value

Returns a tuple of strings containing the values stored in the variant.

戻り値

values stored in the variant

戻り値の型

tuple of str

yaml_entry()

Returns a key, value tuple suitable to be an entry in a yaml dict.

戻り値

(name, value_representation)

戻り値の型

tuple

class spack.variant.BoolValuedVariant(name, value)

ベースクラス: spack.variant.SingleValuedVariant

A variant that can hold either True or False.

class spack.variant.DisjointSetsOfValues(*sets)

ベースクラス: collections.abc.Sequence

Allows combinations from one of many mutually exclusive sets.

The value ('none',) is reserved to denote the empty set and therefore no other set can contain the item 'none'.

パラメータ

*sets (list of tuples) -- mutually exclusive sets of values

allow_empty_set()

Adds the empty set to the current list of disjoint sets.

feature_values = None

Attribute used to track values which correspond to features which can be enabled or disabled as understood by the package's build system.

prohibit_empty_set()

Removes the empty set from the current list of disjoint sets.

validator
with_default(default)

Sets the default value and returns self.

with_error(error_fmt)

Sets the error message format and returns self.

with_non_feature_values(*values)

Marks a few values as not being tied to a feature.

exception spack.variant.DuplicateVariantError(message, long_message=None)

ベースクラス: spack.error.SpecError

Raised when the same variant occurs in a spec twice.

exception spack.variant.InconsistentValidationError(vspec, variant)

ベースクラス: spack.error.SpecError

Raised if the wrong validator is used to validate a variant.

exception spack.variant.InvalidVariantValueError(variant, invalid_values, pkg)

ベースクラス: spack.error.SpecError

Raised when a valid variant has at least an invalid value.

class spack.variant.MultiValuedVariant(name, value)

ベースクラス: spack.variant.AbstractVariant

A variant that can hold multiple values at once.

satisfies(other)

Returns true if other.name == self.name and other.value is a strict subset of self. Does not try to validate.

パラメータ

other -- constraint to be met for the method to return True

戻り値

True or False

戻り値の型

bool

exception spack.variant.MultipleValuesInExclusiveVariantError(variant, pkg)

ベースクラス: spack.error.SpecError, ValueError

Raised when multiple values are present in a variant that wants only one.

class spack.variant.SingleValuedVariant(name, value)

ベースクラス: spack.variant.MultiValuedVariant

A variant that can hold multiple values, but one at a time.

compatible(other)

Returns True if self and other are compatible, False otherwise.

As there is no semantic check, two VariantSpec are compatible if either they contain the same value or they are both multi-valued.

パラメータ

other -- instance against which we test compatibility

戻り値

True or False

戻り値の型

bool

constrain(other)

Modify self to match all the constraints for other if both instances are multi-valued. Returns True if self changed, False otherwise.

パラメータ

other -- instance against which we constrain self

戻り値

True or False

戻り値の型

bool

satisfies(other)

Returns true if other.name == self.name and other.value is a strict subset of self. Does not try to validate.

パラメータ

other -- constraint to be met for the method to return True

戻り値

True or False

戻り値の型

bool

yaml_entry()

Returns a key, value tuple suitable to be an entry in a yaml dict.

戻り値

(name, value_representation)

戻り値の型

tuple

exception spack.variant.UnknownVariantError(pkg, variant)

ベースクラス: spack.error.SpecError

Raised when an unknown variant occurs in a spec.

exception spack.variant.UnsatisfiableVariantSpecError(provided, required)

ベースクラス: spack.error.UnsatisfiableSpecError

Raised when a spec variant conflicts with package constraints.

class spack.variant.Variant(name, default, description, values=(True, False), multi=False, validator=None)

ベースクラス: object

Represents a variant in a package, as declared in the variant directive.

allowed_values

Returns a string representation of the allowed values for printing purposes

戻り値

representation of the allowed values

戻り値の型

str

make_default()

Factory that creates a variant holding the default value.

戻り値

instance of the proper variant

戻り値の型

MultiValuedVariant or SingleValuedVariant or BoolValuedVariant

make_variant(value)

Factory that creates a variant holding the value passed as a parameter.

パラメータ

value -- value that will be hold by the variant

戻り値

instance of the proper variant

戻り値の型

MultiValuedVariant or SingleValuedVariant or BoolValuedVariant

validate_or_raise(vspec, pkg=None)

Validate a variant spec against this package variant. Raises an exception if any error is found.

パラメータ
  • vspec (VariantSpec) -- instance to be validated

  • pkg (Package) -- the package that required the validation, if available

例外
  • InconsistentValidationError -- if vspec.name != self.name

  • MultipleValuesInExclusiveVariantError -- if vspec has multiple values but self.multi == False

  • InvalidVariantValueError -- if vspec.value contains invalid values

variant_cls

Proper variant class to be used for this configuration.

class spack.variant.VariantMap(spec)

ベースクラス: llnl.util.lang.HashableMap

Map containing variant instances. New values can be added only if the key is not already present.

concrete

Returns True if the spec is concrete in terms of variants.

戻り値

True or False

戻り値の型

bool

constrain(other)

Add all variants in other that aren't in self to self. Also constrain all multi-valued variants that are already present. Return True if self changed, False otherwise

パラメータ

other (VariantMap) -- instance against which we constrain self

戻り値

True or False

戻り値の型

bool

copy()

Return an instance of VariantMap equivalent to self.

戻り値

a copy of self

戻り値の型

VariantMap

satisfies(other, strict=False)

Returns True if this VariantMap is more constrained than other, False otherwise.

パラメータ
  • other (VariantMap) -- VariantMap instance to satisfy

  • strict (bool) -- if True return False if a key is in other and not in self, otherwise discard that key and proceed with evaluation

戻り値

True or False

戻り値の型

bool

substitute(vspec)

Substitutes the entry under vspec.name with vspec.

パラメータ

vspec -- variant spec to be substituted

spack.variant.any_combination_of(*values)

Multi-valued variant that allows any combination of the specified values, and also allows the user to specify 'none' (as a string) to choose none of them.

It is up to the package implementation to handle the value 'none' specially, if at all.

パラメータ

*values -- allowed variant values

戻り値

a properly initialized instance of DisjointSetsOfValues

spack.variant.auto_or_any_combination_of(*values)

Multi-valued variant that allows any combination of a set of values (but not the empty set) or 'auto'.

パラメータ

*values -- allowed variant values

戻り値

a properly initialized instance of DisjointSetsOfValues

spack.variant.disjoint_sets(*sets)

Multi-valued variant that allows any combination picking from one of multiple disjoint sets of values, and also allows the user to specify 'none' (as a string) to choose none of them.

It is up to the package implementation to handle the value 'none' specially, if at all.

パラメータ

*sets --

戻り値

a properly initialized instance of DisjointSetsOfValues

spack.variant.implicit_variant_conversion(method)

Converts other to type(self) and calls method(self, other)

パラメータ

method -- any predicate method that takes another variant as an argument

Returns: decorated method

spack.variant.substitute_abstract_variants(spec)

Uses the information in spec.package to turn any variant that needs it into a SingleValuedVariant.

パラメータ

spec -- spec on which to operate the substitution

spack.version module

This module implements Version and version-ish objects. These are:

Version

A single version of a package.

VersionRange

A range of versions of a package.

VersionList

A list of Versions and VersionRanges.

All of these types support the following operations, which can be called on any of the types:

__eq__, __ne__, __lt__, __gt__, __ge__, __le__, __hash__
__contains__
satisfies
overlaps
union
intersection
concrete
class spack.version.Version(string)

ベースクラス: object

Class to represent versions

concrete
dashed

The dashed representation of the version.

Example: >>> version = Version('1.2.3b') >>> version.dashed Version('1-2-3b')

戻り値

The version with separator characters replaced by dashes

戻り値の型

Version

dotted

The dotted representation of the version.

Example: >>> version = Version('1-2-3b') >>> version.dotted Version('1.2.3b')

戻り値

The version with separator characters replaced by dots

戻り値の型

Version

highest()
intersection(other)
is_predecessor(other)

True if the other version is the immediate predecessor of this one. That is, NO versions v exist such that: (self < v < other and v not in self).

is_successor(other)
isdevelop()

Triggers on the special case of the @develop-like version.

joined

The joined representation of the version.

Example: >>> version = Version('1.2.3b') >>> version.joined Version('123b')

戻り値

The version with separator characters removed

戻り値の型

Version

lowest()
overlaps(other)
satisfies(other)

A Version 'satisfies' another if it is at least as specific and has a common prefix. e.g., we want gcc@4.7.3 to satisfy a request for gcc@4.7 so that when a user asks to build with gcc@4.7, we can find a suitable compiler.

underscored

The underscored representation of the version.

Example: >>> version = Version('1.2.3b') >>> version.underscored Version('1_2_3b')

戻り値

The version with separator characters replaced by

underscores

戻り値の型

Version

union(other)
up_to(index)

The version up to the specified component.

Examples: >>> version = Version('1.23-4b') >>> version.up_to(1) Version('1') >>> version.up_to(2) Version('1.23') >>> version.up_to(3) Version('1.23-4') >>> version.up_to(4) Version('1.23-4b') >>> version.up_to(-1) Version('1.23-4') >>> version.up_to(-2) Version('1.23') >>> version.up_to(-3) Version('1')

戻り値

The first index components of the version

戻り値の型

Version

class spack.version.VersionRange(start, end)

ベースクラス: object

concrete
highest()
intersection(other)
lowest()
overlaps(other)
satisfies(other)

A VersionRange satisfies another if some version in this range would satisfy some version in the other range. To do this it must either:

  1. Overlap with the other range

  2. The start of this range satisfies the end of the other range.

This is essentially the same as overlaps(), but overlaps assumes that its arguments are specific. That is, 4.7 is interpreted as 4.7.0.0.0.0... . This function assumes that 4.7 would be satisfied by 4.7.3.5, etc.

Rationale:

If a user asks for gcc@4.5:4.7, and a package is only compatible with gcc@4.7.3:4.8, then that package should be able to build under the constraints. Just using overlaps() would not work here.

Note that we don't need to check whether the end of this range would satisfy the start of the other range, because overlaps() already covers that case.

Note further that overlaps() is a symmetric operation, while satisfies() is not.

union(other)
class spack.version.VersionList(vlist=None)

ベースクラス: object

Sorted, non-redundant list of Versions and VersionRanges.

add(version)
concrete
copy()
static from_dict(dictionary)

Parse dict from to_dict.

highest()

Get the highest version in the list.

intersect(other)

Intersect this spec's list with other.

Return True if the spec changed as a result; False otherwise

intersection(other)
lowest()

Get the lowest version in the list.

overlaps(other)
satisfies(other, strict=False)

A VersionList satisfies another if some version in the list would satisfy some version in the other list. This uses essentially the same algorithm as overlaps() does for VersionList, but it calls satisfies() on member Versions and VersionRanges.

If strict is specified, this version list must lie entirely within the other in order to satisfy it.

to_dict()

Generate human-readable dict for YAML.

union(other)
update(other)
spack.version.ver(obj)

Parses a Version, VersionRange, or VersionList from a string or list of strings.

Module contents

spack.spack_version_info = (0, 12, 1)

major, minor, patch version for Spack, in a tuple

spack.spack_version = '0.12.1'

String containing Spack version joined with .'s

llnl package

Subpackages

llnl.util package

Subpackages
llnl.util.tty package
Submodules
llnl.util.tty.colify module

Routines for printing columnar output. See colify() for more information.

class llnl.util.tty.colify.ColumnConfig(cols)

ベースクラス: object

llnl.util.tty.colify.colified(elts, **options)

Invokes the colify() function but returns the result as a string instead of writing it to an output string.

llnl.util.tty.colify.colify(elts, **options)

Takes a list of elements as input and finds a good columnization of them, similar to how gnu ls does. This supports both uniform-width and variable-width (tighter) columns.

If elts is not a list of strings, each element is first conveted using str().

キーワード引数
  • output (stream) -- A file object to write to. Default is sys.stdout

  • indent (int) -- Optionally indent all columns by some number of spaces

  • padding (int) -- Spaces between columns. Default is 2

  • width (int) -- Width of the output. Default is 80 if tty not detected

  • cols (int) -- Force number of columns. Default is to size to terminal, or single-column if no tty

  • tty (bool) -- Whether to attempt to write to a tty. Default is to autodetect a tty. Set to False to force single-column output

  • method (str) -- Method to use to fit columns. Options are variable or uniform. Variable-width columns are tighter, uniform columns are all the same width and fit less data on the screen

llnl.util.tty.colify.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.

llnl.util.tty.colify.config_uniform_cols(elts, console_width, padding, cols=0)

Uniform-width column fitting algorithm.

Determines the longest element in the list, and determines how many columns of that width will fit on screen. Returns a corresponding column config.

llnl.util.tty.colify.config_variable_cols(elts, console_width, padding, cols=0)

Variable-width column fitting algorithm.

This function determines the most columns that can fit in the screen width. Unlike uniform fitting, where all columns take the width of the longest element in the list, each column takes the width of its own longest element. This packs elements more efficiently on screen.

If cols is nonzero, force

llnl.util.tty.color module

This file implements an expression syntax, similar to printf, for adding ANSI colors to text.

See colorize(), cwrite(), and cprint() for routines that can generate colored output.

colorize will take a string and replace all color expressions with ANSI control codes. If the isatty keyword arg is set to False, then the color expressions will be converted to null strings, and the returned string will have no color.

cwrite and cprint are equivalent to write() and print() calls in python, but they colorize their output. If the stream argument is not supplied, they write to sys.stdout.

Here are some example color expressions:

Expression

Meaning

@r

Turn on red coloring

@R

Turn on bright red coloring

@*{foo}

Bold foo, but don't change text color

@_{bar}

Underline bar, but don't change text color

@*b

Turn on bold, blue text

@_B

Turn on bright blue text with an underline

@.

Revert to plain formatting

@*g{green}

Print out 'green' in bold, green text, then reset to plain.

@*ggreen@.

Print out 'green' in bold, green text, then reset to plain.

The syntax consists of:

color-expr

'@' [style] color-code '{' text '}' | '@.' | '@@'

style

'*' | '_'

color-code

[krgybmcwKRGYBMCW]

text

.*

'@' indicates the start of a color expression. It can be followed by an optional * or _ that indicates whether the font should be bold or underlined. If * or _ is not provided, the text will be plain. Then an optional color code is supplied. This can be [krgybmcw] or [KRGYBMCW], where the letters map to black(k), red(r), green(g), yellow(y), blue(b), magenta(m), cyan(c), and white(w). Lowercase letters denote normal ANSI colors and capital letters denote bright ANSI colors.

Finally, the color expression can be followed by text enclosed in {}. If braces are present, only the text in braces is colored. If the braces are NOT present, then just the control codes to enable the color will be output. The console can be reset later to plain text with '@.'.

To output an @, use '@@'. To output a } inside braces, use '}}'.

exception llnl.util.tty.color.ColorParseError(message)

ベースクラス: Exception

Raised when a color format fails to parse.

class llnl.util.tty.color.ColorStream(stream, color=None)

ベースクラス: object

write(string, **kwargs)
writelines(sequence, **kwargs)
llnl.util.tty.color.cescape(string)

Escapes special characters needed for color codes.

Replaces the following symbols with their equivalent literal forms:

@

@@

}

}}

パラメータ

string (str) -- the string to escape

戻り値

the string with color codes escaped

戻り値の型

(str)

llnl.util.tty.color.cextra(string)

Length of extra color characters in a string

llnl.util.tty.color.clen(string)

Return the length of a string, excluding ansi color sequences.

llnl.util.tty.color.color_when(value)

Context manager to temporarily use a particular color setting.

llnl.util.tty.color.colorize(string, **kwargs)

Replace all color expressions in a string with ANSI control codes.

パラメータ

string (str) -- The string to replace

戻り値

The filtered string

戻り値の型

str

キーワード引数

color (bool) -- If False, output will be plain text without control codes, for output to non-console devices.

llnl.util.tty.color.cprint(string, stream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>, color=None)

Same as cwrite, but writes a trailing newline to the stream.

llnl.util.tty.color.cwrite(string, stream=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>, color=None)

Replace all color expressions in string with ANSI control codes and write the result to the stream. If color is False, this will write plain text with no color. If True, then it will always write colored output. If not supplied, then it will be set based on stream.isatty().

llnl.util.tty.color.get_color_when()

Return whether commands should print color or not.

class llnl.util.tty.color.match_to_ansi(color=True)

ベースクラス: object

escape(s)

Returns a TTY escape sequence for a color

llnl.util.tty.color.set_color_when(when)

Set when color should be applied. Options are:

  • True or 'always': always print color

  • False or 'never': never print color

  • None or 'auto': only print color if sys.stdout is a tty.

llnl.util.tty.log module

Utility classes for logging the output of blocks of code.

class llnl.util.tty.log.Unbuffered(stream)

ベースクラス: object

Wrapper for Python streams that forces them to be unbuffered.

This is implemented by forcing a flush after each write.

write(data)
writelines(datas)
class llnl.util.tty.log.keyboard_input(stream)

ベースクラス: object

Context manager to disable line editing and echoing.

Use this with sys.stdin for keyboard input, e.g.:

with keyboard_input(sys.stdin):
    r, w, x = select.select([sys.stdin], [], [])
    # ... do something with keypresses ...

This disables canonical input so that keypresses are available on the stream immediately. Typically standard input allows line editing, which means keypresses won't be sent until the user hits return.

It also disables echoing, so that keys pressed aren't printed to the terminal. So, the user can hit, e.g., 'v', and it's read on the other end of the pipe immediately but not printed.

When the with block completes, prior TTY settings are restored.

Note: this depends on termios support. If termios isn't available, or if the stream isn't a TTY, this context manager has no effect.

class llnl.util.tty.log.log_output(file_like=None, echo=False, debug=False, buffer=False)

ベースクラス: object

Context manager that logs its output to a file.

In the simplest case, the usage looks like this:

with log_output('logfile.txt'):
    # do things ... output will be logged

Any output from the with block will be redirected to logfile.txt. If you also want the output to be echoed to stdout, use the echo parameter:

with log_output('logfile.txt', echo=True):
    # do things ... output will be logged and printed out

And, if you just want to echo some stuff from the parent, use force_echo:

with log_output('logfile.txt', echo=False) as logger:
    # do things ... output will be logged

    with logger.force_echo():
        # things here will be echoed *and* logged

Under the hood, we spawn a daemon and set up a pipe between this process and the daemon. The daemon writes our output to both the file and to stdout (if echoing). The parent process can communicate with the daemon to tell it when and when not to echo; this is what force_echo does. You can also enable/disable echoing by typing 'v'.

We try to use OS-level file descriptors to do the redirection, but if stdout or stderr has been set to some Python-level file object, we use Python-level redirection instead. This allows the redirection to work within test frameworks like nose and pytest.

force_echo()

Context manager to force local echo, even if echo is off.

Module contents
class llnl.util.tty.SuppressOutput(msg_enabled=True, warn_enabled=True, error_enabled=True)

ベースクラス: object

Class for disabling output in a scope using 'with' keyword

llnl.util.tty.debug(message, *args, **kwargs)
llnl.util.tty.die(message, *args, **kwargs)
llnl.util.tty.error(message, *args, **kwargs)
llnl.util.tty.error_enabled()
llnl.util.tty.get_number(prompt, **kwargs)
llnl.util.tty.get_timestamp(force=False)

Get a string timestamp

llnl.util.tty.get_yes_or_no(prompt, **kwargs)
llnl.util.tty.hline(label=None, **kwargs)

Draw a labeled horizontal line.

キーワード引数
  • char (str) -- Char to draw the line with. Default '-'

  • max_width (int) -- Maximum width of the line. Default is 64 chars.

llnl.util.tty.info(message, *args, **kwargs)
llnl.util.tty.is_debug()
llnl.util.tty.is_stacktrace()
llnl.util.tty.is_verbose()
llnl.util.tty.msg(message, *args, **kwargs)
llnl.util.tty.msg_enabled()
llnl.util.tty.process_stacktrace(countback)

Gives file and line frame 'countback' frames from the bottom

llnl.util.tty.set_debug(flag)
llnl.util.tty.set_error_enabled(flag)
llnl.util.tty.set_msg_enabled(flag)
llnl.util.tty.set_stacktrace(flag)
llnl.util.tty.set_timestamp(flag)
llnl.util.tty.set_verbose(flag)
llnl.util.tty.set_warn_enabled(flag)
llnl.util.tty.terminal_size()

Gets the dimensions of the console: (rows, cols).

llnl.util.tty.verbose(message, *args, **kwargs)
llnl.util.tty.warn(message, *args, **kwargs)
llnl.util.tty.warn_enabled()
Submodules
llnl.util.argparsewriter module
class llnl.util.argparsewriter.ArgparseRstWriter(out=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>, rst_levels=['=', '-', '^', '~', ':', '`'], strip_root_prog=True)

ベースクラス: llnl.util.argparsewriter.ArgparseWriter

Write argparse output as rst sections.

begin_command(prog)
begin_optionals()
begin_positionals()
begin_subcommands(subcommands)
description(description)
line(string='')
optional(opts, help)
positional(name, help)
usage(usage)
class llnl.util.argparsewriter.ArgparseWriter(out=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)

ベースクラス: object

Analyzes an argparse ArgumentParser for easy generation of help.

begin_command(prog)
begin_optionals()
begin_positionals()
begin_subcommands(subcommands)
description(description)
end_command(prog)
end_optionals()
end_positionals()
end_subcommands(subcommands)
optional(option, help)
positional(name, help)
usage(usage)
write(parser, root=True)

Write out details about an ArgumentParser.

パラメータ
  • parser (ArgumentParser) -- an argparse parser

  • root (bool or int) -- if bool, whether to include the root parser; or 1 to flatten the root parser with first-level subcommands

llnl.util.filesystem module
class llnl.util.filesystem.FileFilter(*filenames)

ベースクラス: object

Convenience class for calling filter_file a lot.

filter(regex, repl, **kwargs)
class llnl.util.filesystem.FileList(files)

ベースクラス: collections.abc.Sequence

Sequence of absolute paths to files.

Provides a few convenience methods to manipulate file paths.

basenames

Stable de-duplication of the base-names in the list

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir3/liba.a'])
>>> l.basenames
['liba.a', 'libb.a']
>>> h = HeaderList(['/dir1/a.h', '/dir2/b.h', '/dir3/a.h'])
>>> h.basenames
['a.h', 'b.h']
戻り値

A list of base-names

戻り値の型

list of strings

directories

Stable de-duplication of the directories where the files reside.

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/libc.a'])
>>> l.directories
['/dir1', '/dir2']
>>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
>>> h.directories
['/dir1', '/dir2']
戻り値

A list of directories

戻り値の型

list of strings

joined(separator=' ')
class llnl.util.filesystem.HeaderList(files)

ベースクラス: llnl.util.filesystem.FileList

Sequence of absolute paths to headers.

Provides a few convenience methods to manipulate header paths and get commonly used compiler flags or names.

add_macro(macro)

Add a macro definition

パラメータ

macro (str) -- The macro to add

cpp_flags

Include flags + macro definitions

>>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
>>> h.cpp_flags
'-I/dir1 -I/dir2'
>>> h.add_macro('-DBOOST_DYN_LINK')
>>> h.cpp_flags
'-I/dir1 -I/dir2 -DBOOST_DYN_LINK'
戻り値

A joined list of include flags and macro definitions

戻り値の型

str

directories

Directories to be searched for header files.

headers

Stable de-duplication of the headers.

戻り値

A list of header files

戻り値の型

list of strings

include_flags

Include flags

>>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
>>> h.include_flags
'-I/dir1 -I/dir2'
戻り値

A joined list of include flags

戻り値の型

str

include_regex = re.compile('(.*)(\\binclude\\b)(.*)')
macro_definitions

Macro definitions

>>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
>>> h.add_macro('-DBOOST_LIB_NAME=boost_regex')
>>> h.add_macro('-DBOOST_DYN_LINK')
>>> h.macro_definitions
'-DBOOST_LIB_NAME=boost_regex -DBOOST_DYN_LINK'
戻り値

A joined list of macro definitions

戻り値の型

str

names

Stable de-duplication of header names in the list without extensions

>>> h = HeaderList(['/dir1/a.h', '/dir2/b.h', '/dir3/a.h'])
>>> h.names
['a', 'b']
戻り値

A list of files without extensions

戻り値の型

list of strings

class llnl.util.filesystem.LibraryList(files)

ベースクラス: llnl.util.filesystem.FileList

Sequence of absolute paths to libraries

Provides a few convenience methods to manipulate library paths and get commonly used compiler flags or names

ld_flags

Search flags + link flags

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
>>> l.ld_flags
'-L/dir1 -L/dir2 -la -lb'
戻り値

A joined list of search flags and link flags

戻り値の型

str

libraries

Stable de-duplication of library files.

戻り値

A list of library files

戻り値の型

list of strings

Link flags for the libraries

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
>>> l.link_flags
'-la -lb'
戻り値

A joined list of link flags

戻り値の型

str

names

Stable de-duplication of library names in the list

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir3/liba.so'])
>>> l.names
['a', 'b']
戻り値

A list of library names

戻り値の型

list of strings

search_flags

Search flags for the libraries

>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
>>> l.search_flags
'-L/dir1 -L/dir2'
戻り値

A joined list of search flags

戻り値の型

str

llnl.util.filesystem.ancestor(dir, n=1)

Get the nth ancestor of a directory.

llnl.util.filesystem.can_access(file_name)

True if we have read/write access to the file.

llnl.util.filesystem.change_sed_delimiter(old_delim, new_delim, *filenames)

Find all sed search/replace commands and change the delimiter.

e.g., if the file contains seds that look like 's///', you can call change_sed_delimiter('/', '@', file) to change the delimiter to '@'.

Note that this routine will fail if the delimiter is ' or ". Handling those is left for future work.

パラメータ
  • old_delim (str) -- The delimiter to search for

  • new_delim (str) -- The delimiter to replace with

  • *filenames -- One or more files to search and replace

llnl.util.filesystem.copy_mode(src, dest)

Set the mode of dest to that of src unless it is a link.

llnl.util.filesystem.filter_file(regex, repl, *filenames, **kwargs)

Like sed, but uses python regular expressions.

Filters every line of each file through regex and replaces the file with a filtered version. Preserves mode of filtered files.

As with re.sub, repl can be either a string or a callable. If it is a callable, it is passed the match object and should return a suitable replacement string. If it is a string, it can contain \1, \2, etc. to represent back-substitution as sed would allow.

パラメータ
  • regex (str) -- The regular expression to search for

  • repl (str) -- The string to replace matches with

  • *filenames -- One or more files to search and replace

キーワード引数
  • string (bool) -- Treat regex as a plain string. Default it False

  • backup (bool) -- Make backup file(s) suffixed with ~. Default is True

  • ignore_absent (bool) -- Ignore any files that don't exist. Default is False

llnl.util.filesystem.find(root, files, recursive=True)

Search for files starting from the root directory.

Like GNU/BSD find but written entirely in Python.

Examples:

$ find /usr -name python

is equivalent to:

>>> find('/usr', 'python')
$ find /usr/local/bin -maxdepth 1 -name python

is equivalent to:

>>> find('/usr/local/bin', 'python', recursive=False)

Accepts any glob characters accepted by fnmatch:

Pattern

Meaning

matches everything

?

matches any single character

[seq]

matches any character in seq

[!seq]

matches any character not in seq

パラメータ
  • root (str) -- The root directory to start searching from

  • files (str or collections.Sequence) -- Library name(s) to search for

  • recurse (bool, optional) -- if False search only root folder, if True descends top-down from the root. Defaults to True.

戻り値

The files that have been found

戻り値の型

list of strings

llnl.util.filesystem.find_headers(headers, root, recursive=False)

Returns an iterable object containing a list of full paths to headers if found.

Accepts any glob characters accepted by fnmatch:

Pattern

Meaning

matches everything

?

matches any single character

[seq]

matches any character in seq

[!seq]

matches any character not in seq

パラメータ
  • headers (str or list of str) -- Header name(s) to search for

  • root (str) -- The root directory to start searching from

  • recursive (bool, optional) -- if False search only root folder, if True descends top-down from the root. Defaults to False.

戻り値

The headers that have been found

戻り値の型

HeaderList

llnl.util.filesystem.find_all_headers(root)

Convenience function that returns the list of all headers found in the directory passed as argument.

パラメータ

root (path) -- directory where to look recursively for header files

戻り値

List of all headers found in root and subdirectories.

llnl.util.filesystem.find_libraries(libraries, root, shared=True, recursive=False)

Returns an iterable of full paths to libraries found in a root dir.

Accepts any glob characters accepted by fnmatch:

Pattern

Meaning

matches everything

?

matches any single character

[seq]

matches any character in seq

[!seq]

matches any character not in seq

パラメータ
  • libraries (str or list of str) -- Library name(s) to search for

  • root (str) -- The root directory to start searching from

  • shared (bool, optional) -- if True searches for shared libraries, otherwise for static. Defaults to True.

  • recursive (bool, optional) -- if False search only root folder, if True descends top-down from the root. Defaults to False.

戻り値

The libraries that have been found

戻り値の型

LibraryList

llnl.util.filesystem.find_system_libraries(libraries, shared=True)

Searches the usual system library locations for libraries.

Search order is as follows:

  1. /lib64

  2. /lib

  3. /usr/lib64

  4. /usr/lib

  5. /usr/local/lib64

  6. /usr/local/lib

Accepts any glob characters accepted by fnmatch:

Pattern

Meaning

matches everything

?

matches any single character

[seq]

matches any character in seq

[!seq]

matches any character not in seq

パラメータ
  • libraries (str or list of str) -- Library name(s) to search for

  • shared (bool, optional) -- if True searches for shared libraries, otherwise for static. Defaults to True.

戻り値

The libraries that have been found

戻り値の型

LibraryList

llnl.util.filesystem.fix_darwin_install_name(path)

Fix install name of dynamic libraries on Darwin to have full path.

There are two parts of this task:

  1. Use install_name('-id', ...) to change install name of a single lib

  2. Use install_name('-change', ...) to change the cross linking between libs. The function assumes that all libraries are in one folder and currently won't follow subfolders.

パラメータ

path (str) -- directory in which .dylib files are located

llnl.util.filesystem.force_remove(*paths)

Remove files without printing errors. Like rm -f, does NOT remove directories.

llnl.util.filesystem.copy(src, dest, _permissions=False)

Copies the file src to the file or directory dest.

If dest specifies a directory, the file will be copied into dest using the base filename from src.

パラメータ
  • src (str) -- the file to copy

  • dest (str) -- the destination file or directory

  • _permissions (bool) -- for internal use only

llnl.util.filesystem.install(src, dest)

Installs the file src to the file or directory dest.

Same as copy() with the addition of setting proper permissions on the installed file.

パラメータ
  • src (str) -- the file to install

  • dest (str) -- the destination file or directory

llnl.util.filesystem.copy_tree(src, dest, symlinks=True, ignore=None, _permissions=False)

Recursively copy an entire directory tree rooted at src.

If the destination directory dest does not already exist, it will be created as well as missing parent directories.

If symlinks is true, symbolic links in the source tree are represented as symbolic links in the new tree and the metadata of the original links will be copied as far as the platform allows; if false, the contents and metadata of the linked files are copied to the new tree.

If ignore is set, then each path relative to src will be passed to this function; the function returns whether that path should be skipped.

パラメータ
  • src (str) -- the directory to copy

  • dest (str) -- the destination directory

  • symlinks (bool) -- whether or not to preserve symlinks

  • ignore (function) -- function indicating which files to ignore

  • _permissions (bool) -- for internal use only

llnl.util.filesystem.install_tree(src, dest, symlinks=True, ignore=None)

Recursively install an entire directory tree rooted at src.

Same as copy_tree() with the addition of setting proper permissions on the installed files and directories.

パラメータ
  • src (str) -- the directory to install

  • dest (str) -- the destination directory

  • symlinks (bool) -- whether or not to preserve symlinks

  • ignore (function) -- function indicating which files to ignore

llnl.util.filesystem.is_exe(path)

True if path is an executable file.

llnl.util.filesystem.join_path(prefix, *args)
llnl.util.filesystem.mkdirp(*paths, **kwargs)

Creates a directory, as well as parent directories if needed.

パラメータ

paths (str) -- paths to create with mkdirp

Keyword Aguments:
mode (permission bits or None, optional): optional permissions to

set on the created directory -- use OS default if not provided

Recursively removes any dead link that is present in root.

パラメータ

root (str) -- path where to search for dead links

Removes the argument if it is a dead link.

パラメータ

path (str) -- The potential dead link

llnl.util.filesystem.remove_linked_tree(path)

Removes a directory and its contents.

If the directory is a symlink, follows the link and removes the real directory before removing the link.

パラメータ

path (str) -- Directory to be removed

llnl.util.filesystem.set_executable(path)
llnl.util.filesystem.set_install_permissions(path)

Set appropriate permissions on the installed file.

llnl.util.filesystem.touch(path)

Creates an empty file at the specified path.

llnl.util.filesystem.touchp(path)

Like touch, but creates any parent directories needed for the file.

llnl.util.filesystem.traverse_tree(source_root, dest_root, rel_path='', **kwargs)

Traverse two filesystem trees simultaneously.

Walks the LinkTree directory in pre or post order. Yields each file in the source directory with a matching path from the dest directory, along with whether the file is a directory. e.g., for this tree:

root/
  a/
    file1
    file2
  b/
    file3

When called on dest, this yields:

('root',         'dest')
('root/a',       'dest/a')
('root/a/file1', 'dest/a/file1')
('root/a/file2', 'dest/a/file2')
('root/b',       'dest/b')
('root/b/file3', 'dest/b/file3')
キーワード引数
  • order (str) -- Whether to do pre- or post-order traversal. Accepted values are 'pre' and 'post'

  • ignore (function) -- function indicating which files to ignore

  • follow_nonexisting (bool) -- Whether to descend into directories in src that do not exit in dest. Default is True

  • follow_links (bool) -- Whether to descend into symlinks in src

llnl.util.filesystem.unset_executable_mode(path)
llnl.util.filesystem.working_dir(dirname, **kwargs)
llnl.util.lang module
class llnl.util.lang.HashableMap

ベースクラス: collections.abc.MutableMapping

This is a hashable, comparable dictionary. Hash is performed on a tuple of the values in the dictionary.

copy()

Type-agnostic clone method. Preserves subclass type.

class llnl.util.lang.LazyReference(ref_function)

ベースクラス: object

Lazily evaluated reference to part of a singleton.

class llnl.util.lang.ObjectWrapper(wrapped_object)

ベースクラス: object

Base class that wraps an object. Derived classes can add new behavior while staying undercover.

This class is modeled after the stackoverflow answer: * http://stackoverflow.com/a/1445289/771663

exception llnl.util.lang.RequiredAttributeError(message)

ベースクラス: ValueError

class llnl.util.lang.Singleton(factory)

ベースクラス: object

Simple wrapper for lazily initialized singleton objects.

instance
llnl.util.lang.attr_required(obj, attr_name)

Ensure that a class has a required attribute.

llnl.util.lang.attr_setdefault(obj, name, value)

Like dict.setdefault, but for objects.

llnl.util.lang.caller_locals()

This will return the locals of the parent of the caller. This allows a function to insert variables into its caller's scope. Yes, this is some black magic, and yes it's useful for implementing things like depends_on and provides.

llnl.util.lang.check_kwargs(kwargs, fun)

Helper for making functions with kwargs. Checks whether the kwargs are empty after all of them have been popped off. If they're not, raises an error describing which kwargs are invalid.

Example:

def foo(self, **kwargs):
    x = kwargs.pop('x', None)
    y = kwargs.pop('y', None)
    z = kwargs.pop('z', None)
    check_kwargs(kwargs, self.foo)

# This raises a TypeError:
foo(w='bad kwarg')
class llnl.util.lang.classproperty

ベースクラス: property

classproperty decorator: like property but for classmethods.

llnl.util.lang.dedupe(sequence)

Yields a stable de-duplication of an hashable sequence

パラメータ

sequence -- hashable sequence to be de-duplicated

戻り値

stable de-duplication of the sequence

llnl.util.lang.get_calling_module_name()

Make sure that the caller is a class definition, and return the enclosing module's name.

llnl.util.lang.has_method(cls, name)
llnl.util.lang.in_function(function_name)

True if the caller was called from some function with the supplied Name, False otherwise.

llnl.util.lang.index_by(objects, *funcs)

Create a hierarchy of dictionaries by splitting the supplied set of objects on unique values of the supplied functions. Values are used as keys. For example, suppose you have four objects with attributes that look like this:

a = Spec(name="boost",    compiler="gcc",   arch="bgqos_0")
b = Spec(name="mrnet",    compiler="intel", arch="chaos_5_x86_64_ib")
c = Spec(name="libelf",   compiler="xlc",   arch="bgqos_0")
d = Spec(name="libdwarf", compiler="intel", arch="chaos_5_x86_64_ib")

list_of_specs = [a,b,c,d]
index1 = index_by(list_of_specs, lambda s: s.arch,
                  lambda s: s.compiler)
index2 = index_by(list_of_specs, lambda s: s.compiler)

index1 now has two levels of dicts, with lists at the leaves, like this:

{ 'bgqos_0'           : { 'gcc' : [a], 'xlc' : [c] },
  'chaos_5_x86_64_ib' : { 'intel' : [b, d] }
}

And index2 is a single level dictionary of lists that looks like this:

{ 'gcc'    : [a],
  'intel'  : [b,d],
  'xlc'    : [c]
}

If any elemnts in funcs is a string, it is treated as the name of an attribute, and acts like getattr(object, name). So shorthand for the above two indexes would be:

index1 = index_by(list_of_specs, 'arch', 'compiler')
index2 = index_by(list_of_specs, 'compiler')

You can also index by tuples by passing tuples:

index1 = index_by(list_of_specs, ('arch', 'compiler'))

Keys in the resulting dict will look like ('gcc', 'bgqos_0').

llnl.util.lang.key_ordering(cls)

Decorates a class with extra methods that implement rich comparison operations and __hash__. The decorator assumes that the class implements a function called _cmp_key(). The rich comparison operations will compare objects using this key, and the __hash__ function will return the hash of this key.

If a class already has __eq__, __ne__, __lt__, __le__, __gt__, or __ge__ defined, this decorator will overwrite them.

例外

TypeError -- If the class does not have a _cmp_key method

llnl.util.lang.list_modules(directory, **kwargs)

Lists all of the modules, excluding __init__.py, in a particular directory. Listed packages have no particular order.

llnl.util.lang.load_module_from_file(module_name, module_path)

Loads a python module from the path of the corresponding file.

パラメータ
  • module_name (str) -- namespace where the python module will be loaded, e.g. foo.bar

  • module_path (str) -- path of the python file containing the module

戻り値

A valid module object

例外
  • ImportError -- when the module can't be loaded

  • FileNotFoundError -- when module_path doesn't exist

llnl.util.lang.match_predicate(*args)

Utility function for making string matching predicates.

Each arg can be a: * regex * list or tuple of regexes * predicate that takes a string.

This returns a predicate that is true if: * any arg regex matches * any regex in a list or tuple of regexes matches. * any predicate in args matches.

llnl.util.lang.memoized(func)

Decorator that caches the results of a function, storing them in an attribute of that function.

llnl.util.lang.pretty_date(time, now=None)

Convert a datetime or timestamp to a pretty, relative date.

パラメータ
  • time (datetime or int) -- date to print prettily

  • now (datetime) -- dateimte for 'now', i.e. the date the pretty date is relative to (default is datetime.now())

戻り値

pretty string like 'an hour ago', 'Yesterday',

'3 months ago', 'just now', etc.

戻り値の型

(str)

Adapted from https://stackoverflow.com/questions/1551382.

llnl.util.lang.pretty_string_to_date(date_str, now=None)

Parses a string representing a date and returns a datetime object.

パラメータ

date_str (str) -- string representing a date. This string might be in different format (like YYYY, YYYY-MM, YYYY-MM-DD, YYYY-MM-DD HH:MM, YYYY-MM-DD HH:MM:SS) or be a pretty date (like yesterday or two months ago)

戻り値

datetime object corresponding to date_str

戻り値の型

(datetime)

llnl.util.lang.union_dicts(*dicts)

Use update() to combine all dicts into one.

This builds a new dictionary, into which we update() each element of dicts in order. Items from later dictionaries will override items from earlier dictionaries.

パラメータ

dicts (list) -- list of dictionaries

Return: (dict): a merged dictionary containing combined keys and

values from dicts.

llnl.util.lock module
class llnl.util.lock.Lock(path, start=0, length=0, debug=False, default_timeout=None)

ベースクラス: object

This is an implementation of a filesystem lock using Python's lockf.

In Python, lockf actually calls fcntl, so this should work with any filesystem implementation that supports locking through the fcntl calls. This includes distributed filesystems like Lustre (when flock is enabled) and recent NFS versions.

Note that this is for managing contention over resources between processes and not for managing contention between threads in a process: the functions of this object are not thread-safe. A process also must not maintain multiple locks on the same file.

acquire_read(timeout=None)

Acquires a recursive, shared lock for reading.

Read and write locks can be acquired and released in arbitrary order, but the POSIX lock is held until all local read and write locks are released.

Returns True if it is the first acquire and actually acquires the POSIX lock, False if it is a nested transaction.

acquire_write(timeout=None)

Acquires a recursive, exclusive lock for writing.

Read and write locks can be acquired and released in arbitrary order, but the POSIX lock is held until all local read and write locks are released.

Returns True if it is the first acquire and actually acquires the POSIX lock, False if it is a nested transaction.

release_read()

Releases a read lock.

Returns True if the last recursive lock was released, False if there are still outstanding locks.

Does limited correctness checking: if a read lock is released when none are held, this will raise an assertion error.

release_write()

Releases a write lock.

Returns True if the last recursive lock was released, False if there are still outstanding locks.

Does limited correctness checking: if a read lock is released when none are held, this will raise an assertion error.

class llnl.util.lock.LockTransaction(lock, acquire_fn=None, release_fn=None, timeout=None)

ベースクラス: object

Simple nested transaction context manager that uses a file lock.

This class can trigger actions when the lock is acquired for the first time and released for the last.

If the acquire_fn returns a value, it is used as the return value for __enter__, allowing it to be passed as the as argument of a with statement.

If acquire_fn returns a context manager, its __enter__ function will be called in __enter__ after acquire_fn, and its __exit__ funciton will be called before release_fn in __exit__, allowing you to nest a context manager to be used along with the lock.

Timeout for lock is customizable.

class llnl.util.lock.WriteTransaction(lock, acquire_fn=None, release_fn=None, timeout=None)

ベースクラス: llnl.util.lock.LockTransaction

LockTransaction context manager that does a write and releases it.

class llnl.util.lock.ReadTransaction(lock, acquire_fn=None, release_fn=None, timeout=None)

ベースクラス: llnl.util.lock.LockTransaction

LockTransaction context manager that does a read and releases it.

exception llnl.util.lock.LockError

ベースクラス: Exception

Raised for any errors related to locks.

exception llnl.util.lock.LockTimeoutError

ベースクラス: llnl.util.lock.LockError

Raised when an attempt to acquire a lock times out.

exception llnl.util.lock.LockPermissionError

ベースクラス: llnl.util.lock.LockError

Raised when there are permission issues with a lock.

exception llnl.util.lock.LockROFileError(path)

ベースクラス: llnl.util.lock.LockPermissionError

Tried to take an exclusive lock on a read-only file.

exception llnl.util.lock.CantCreateLockError(path)

ベースクラス: llnl.util.lock.LockPermissionError

Attempt to create a lock in an unwritable location.

llnl.util.multiproc module

This implements a parallel map operation but it can accept more values than multiprocessing.Pool.apply() can. For example, apply() will fail to pickle functions if they're passed indirectly as parameters.

llnl.util.multiproc.spawn(f)
llnl.util.multiproc.parmap(f, elements)
class llnl.util.multiproc.Barrier(n, timeout=None)

ベースクラス: object

Simple reusable semaphore barrier.

Python 2.6 doesn't have multiprocessing barriers so we implement this.

See http://greenteapress.com/semaphores/downey08semaphores.pdf, p. 41.

wait()
Module contents

Module contents

目次と索引