merge from develop
This commit is contained in:
commit
dd26c0bbcc
651 changed files with 20019 additions and 4208 deletions
34
.coveragerc
Normal file
34
.coveragerc
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# -*- conf -*-
|
||||||
|
# .coveragerc to control coverage.py
|
||||||
|
[run]
|
||||||
|
branch = True
|
||||||
|
source = lib
|
||||||
|
omit =
|
||||||
|
lib/spack/spack/test/*
|
||||||
|
lib/spack/env/*
|
||||||
|
lib/spack/docs/*
|
||||||
|
lib/spack/external/*
|
||||||
|
|
||||||
|
[report]
|
||||||
|
# Regexes for lines to exclude from consideration
|
||||||
|
exclude_lines =
|
||||||
|
# Have to re-enable the standard pragma
|
||||||
|
pragma: no cover
|
||||||
|
|
||||||
|
# Don't complain about missing debug-only code:
|
||||||
|
def __repr__
|
||||||
|
if self\.debug
|
||||||
|
|
||||||
|
# Don't complain if tests don't hit defensive assertion code:
|
||||||
|
raise AssertionError
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
# Don't complain if non-runnable code isn't run:
|
||||||
|
if 0:
|
||||||
|
if False:
|
||||||
|
if __name__ == .__main__.:
|
||||||
|
|
||||||
|
ignore_errors = True
|
||||||
|
|
||||||
|
[html]
|
||||||
|
directory = htmlcov
|
20
.flake8
Normal file
20
.flake8
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- conf -*-
|
||||||
|
# flake8 settings for Spack.
|
||||||
|
#
|
||||||
|
# Below we describe which flake8 checks Spack ignores and what the
|
||||||
|
# rationale is.
|
||||||
|
#
|
||||||
|
# Let people line things up nicely:
|
||||||
|
# - E221: multiple spaces before operator
|
||||||
|
# - E241: multiple spaces after ‘,’
|
||||||
|
#
|
||||||
|
# Spack allows wildcard imports:
|
||||||
|
# - F403: disable wildcard import
|
||||||
|
#
|
||||||
|
# These are required to get the package.py files to test clean.
|
||||||
|
# - F821: undefined name (needed for cmake, configure, etc.)
|
||||||
|
# - F999: name name be undefined or undefined from star imports.
|
||||||
|
#
|
||||||
|
[flake8]
|
||||||
|
ignore = E221,E241,F403,F821,F999
|
||||||
|
max-line-length = 79
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -9,3 +9,5 @@
|
||||||
/share/spack/dotkit
|
/share/spack/dotkit
|
||||||
/share/spack/modules
|
/share/spack/modules
|
||||||
/TAGS
|
/TAGS
|
||||||
|
/htmlcov
|
||||||
|
.coverage
|
||||||
|
|
20
.travis.yml
20
.travis.yml
|
@ -6,21 +6,35 @@ python:
|
||||||
# Use new Travis infrastructure (Docker can't sudo yet)
|
# Use new Travis infrastructure (Docker can't sudo yet)
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
# No need to install any deps.
|
# Install coveralls to obtain code coverage
|
||||||
install: true
|
install:
|
||||||
|
- "pip install coveralls"
|
||||||
|
- "pip install flake8"
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
# Need this for the git tests to succeed.
|
# Need this for the git tests to succeed.
|
||||||
- git config --global user.email "spack@example.com"
|
- git config --global user.email "spack@example.com"
|
||||||
- git config --global user.name "Test User"
|
- git config --global user.name "Test User"
|
||||||
|
|
||||||
|
# Need this to be able to compute the list of changed files
|
||||||
|
- git fetch origin develop:develop
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
# Regular spack setup and tests
|
||||||
- . share/spack/setup-env.sh
|
- . share/spack/setup-env.sh
|
||||||
- spack compilers
|
- spack compilers
|
||||||
- spack config get compilers
|
- spack config get compilers
|
||||||
- spack test
|
|
||||||
- spack install -v libdwarf
|
- spack install -v libdwarf
|
||||||
|
|
||||||
|
# Run unit tests with code coverage
|
||||||
|
- coverage run bin/spack test
|
||||||
|
|
||||||
|
# Run flake8 code style checks.
|
||||||
|
- share/spack/qa/run-flake8
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- coveralls
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
recipients:
|
recipients:
|
||||||
|
|
64
LICENSE
64
LICENSE
|
@ -1,56 +1,62 @@
|
||||||
Copyright (c) 2013-2014, Lawrence Livermore National Security, LLC.
|
########################################################################
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE (Lesser GPL)
|
||||||
|
Version 2.1, February 1999
|
||||||
|
########################################################################
|
||||||
|
Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
Produced at the Lawrence Livermore National Laboratory.
|
Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
|
||||||
This file is part of Spack.
|
This file is part of Spack.
|
||||||
Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
LLNL-CODE-647188
|
LLNL-CODE-647188
|
||||||
|
|
||||||
For details, see https://github.com/llnl/spack
|
For details, see https://github.com/llnl/spack
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License (as published by
|
it under the terms of the GNU Lesser General Public License (as
|
||||||
the Free Software Foundation) version 2.1 dated February 1999.
|
published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, but
|
This program is distributed in the hope that it will be useful, but
|
||||||
WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
conditions of the GNU General Public License for more details.
|
conditions of the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
You should have received a copy of the GNU Lesser General Public
|
||||||
along with this program; if not, write to the Free Software Foundation,
|
License along with this program; if not, write to the Free Software
|
||||||
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
OUR NOTICE AND TERMS AND CONDITIONS OF THE GNU GENERAL PUBLIC LICENSE
|
########################################################################
|
||||||
|
LLNL NOTICE AND TERMS AND CONDITIONS OF THE GNU LGPL
|
||||||
|
|
||||||
Our Preamble Notice
|
LLNL Preamble Notice
|
||||||
|
|
||||||
A. This notice is required to be provided under our contract with the
|
A. This notice is required to be provided under LLNL's contract with
|
||||||
U.S. Department of Energy (DOE). This work was produced at the
|
the U.S. Department of Energy (DOE). This work was produced at the
|
||||||
Lawrence Livermore National Laboratory under Contract
|
Lawrence Livermore National Laboratory under Contract
|
||||||
No. DE-AC52-07NA27344 with the DOE.
|
No. DE-AC52-07NA27344 with the DOE.
|
||||||
|
|
||||||
B. Neither the United States Government nor Lawrence Livermore
|
B. Neither the United States Government nor Lawrence Livermore
|
||||||
National Security, LLC nor any of their employees, makes any warranty,
|
National Security, LLC nor any of their employees, makes any
|
||||||
express or implied, or assumes any liability or responsibility for the
|
warranty, express or implied, or assumes any liability or
|
||||||
accuracy, completeness, or usefulness of any information, apparatus,
|
responsibility for the accuracy, completeness, or usefulness of any
|
||||||
product, or process disclosed, or represents that its use would not
|
information, apparatus, product, or process disclosed, or
|
||||||
infringe privately-owned rights.
|
represents that its use would not infringe privately-owned rights.
|
||||||
|
|
||||||
C. Also, reference herein to any specific commercial products,
|
C. Also, reference herein to any specific commercial products,
|
||||||
process, or services by trade name, trademark, manufacturer or
|
process, or services by trade name, trademark, manufacturer or
|
||||||
otherwise does not necessarily constitute or imply its endorsement,
|
otherwise does not necessarily constitute or imply its endorsement,
|
||||||
recommendation, or favoring by the United States Government or
|
recommendation, or favoring by the United States Government or
|
||||||
Lawrence Livermore National Security, LLC. The views and opinions of
|
Lawrence Livermore National Security, LLC. The views and opinions
|
||||||
authors expressed herein do not necessarily state or reflect those of
|
of authors expressed herein do not necessarily state or reflect
|
||||||
the United States Government or Lawrence Livermore National Security,
|
those of the United States Government or Lawrence Livermore
|
||||||
LLC, and shall not be used for advertising or product endorsement
|
National Security, LLC, and shall not be used for advertising or
|
||||||
purposes.
|
product endorsement purposes.
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
The precise terms and conditions for copying, distribution and
|
||||||
modification follows.
|
modification follows.
|
||||||
|
|
||||||
GNU Lesser GPL terms and Conditions for Copying, Distribution, and
|
########################################################################
|
||||||
Modification
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
0. This License Agreement applies to any software library or other
|
||||||
program which contains a notice placed by the copyright holder or
|
program which contains a notice placed by the copyright holder or
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
![image](share/spack/logo/spack-logo-text-64.png "Spack")
|
![image](share/spack/logo/spack-logo-text-64.png "Spack")
|
||||||
============
|
============
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/LLNL/spack.png?branch=develop)](https://travis-ci.org/LLNL/spack)
|
[![Build Status](https://travis-ci.org/LLNL/spack.svg?branch=develop)](https://travis-ci.org/LLNL/spack)
|
||||||
|
[![Coverage Status](https://coveralls.io/repos/github/LLNL/spack/badge.svg?branch=develop)](https://coveralls.io/github/LLNL/spack?branch=develop)
|
||||||
|
|
||||||
Spack is a package management tool designed to support multiple
|
Spack is a package management tool designed to support multiple
|
||||||
versions and configurations of software on a wide variety of platforms
|
versions and configurations of software on a wide variety of platforms
|
||||||
|
@ -62,6 +63,11 @@ a [pull request](https://help.github.com/articles/using-pull-requests/).
|
||||||
When you send your request, make ``develop`` the destination branch on the
|
When you send your request, make ``develop`` the destination branch on the
|
||||||
[Spack repository](https://github.com/LLNL/spack).
|
[Spack repository](https://github.com/LLNL/spack).
|
||||||
|
|
||||||
|
Your contribution will need to pass all the tests run by the `spack test`
|
||||||
|
command, as well as the formatting checks in `share/spack/qa/run-flake8`.
|
||||||
|
You should run both of these before submitting your pull request, to
|
||||||
|
ensure that the online checks succeed.
|
||||||
|
|
||||||
Spack is using a rough approximation of the [Git
|
Spack is using a rough approximation of the [Git
|
||||||
Flow](http://nvie.com/posts/a-successful-git-branching-model/)
|
Flow](http://nvie.com/posts/a-successful-git-branching-model/)
|
||||||
branching model. The ``develop`` branch contains the latest
|
branching model. The ``develop`` branch contains the latest
|
||||||
|
|
24
bin/sbang
24
bin/sbang
|
@ -1,4 +1,28 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
||||||
#
|
#
|
||||||
# `sbang`: Run scripts with long shebang lines.
|
# `sbang`: Run scripts with long shebang lines.
|
||||||
#
|
#
|
||||||
|
|
18
bin/spack
18
bin/spack
|
@ -1,27 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
if not sys.version_info[:2] >= (2,6):
|
if not sys.version_info[:2] >= (2,6):
|
||||||
|
@ -152,7 +152,7 @@ def main():
|
||||||
command = spack.cmd.get_command(args.command)
|
command = spack.cmd.get_command(args.command)
|
||||||
try:
|
try:
|
||||||
return_val = command(parser, args)
|
return_val = command(parser, args)
|
||||||
except SpackError, e:
|
except SpackError as e:
|
||||||
e.die()
|
e.die()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
sys.stderr.write('\n')
|
sys.stderr.write('\n')
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# spack-python
|
# spack-python
|
||||||
|
|
|
@ -5,4 +5,25 @@
|
||||||
# although users can override these settings in their ~/.spack/modules.yaml.
|
# although users can override these settings in their ~/.spack/modules.yaml.
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
modules:
|
modules:
|
||||||
enable: ['tcl', 'dotkit']
|
enable:
|
||||||
|
- tcl
|
||||||
|
- dotkit
|
||||||
|
prefix_inspections:
|
||||||
|
bin:
|
||||||
|
- PATH
|
||||||
|
man:
|
||||||
|
- MANPATH
|
||||||
|
lib:
|
||||||
|
- LIBRARY_PATH
|
||||||
|
- LD_LIBRARY_PATH
|
||||||
|
lib64:
|
||||||
|
- LIBRARY_PATH
|
||||||
|
- LD_LIBRARY_PATH
|
||||||
|
include:
|
||||||
|
- CPATH
|
||||||
|
lib/pkgconfig:
|
||||||
|
- PKGCONFIG
|
||||||
|
lib64/pkgconfig:
|
||||||
|
- PKGCONFIG
|
||||||
|
'':
|
||||||
|
- CMAKE_PREFIX_PATH
|
||||||
|
|
|
@ -149,26 +149,46 @@ customize an installation in :ref:`sec-specs`.
|
||||||
``spack uninstall``
|
``spack uninstall``
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
To uninstall a package, type ``spack uninstall <package>``. This will
|
To uninstall a package, type ``spack uninstall <package>``. This will ask the user for
|
||||||
completely remove the directory in which the package was installed.
|
confirmation, and in case will completely remove the directory in which the package was installed.
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
spack uninstall mpich
|
spack uninstall mpich
|
||||||
|
|
||||||
If there are still installed packages that depend on the package to be
|
If there are still installed packages that depend on the package to be
|
||||||
uninstalled, spack will refuse to uninstall it. You can override this
|
uninstalled, spack will refuse to uninstall it.
|
||||||
behavior with ``spack uninstall -f <package>``, but you risk breaking
|
|
||||||
other installed packages. In general, it is safer to remove dependent
|
|
||||||
packages *before* removing their dependencies.
|
|
||||||
|
|
||||||
A line like ``spack uninstall mpich`` may be ambiguous, if multiple
|
To uninstall a package and every package that depends on it, you may give the
|
||||||
``mpich`` configurations are installed. For example, if both
|
`--dependents` option.
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack uninstall --dependents mpich
|
||||||
|
|
||||||
|
will display a list of all the packages that depends on `mpich` and, upon confirmation,
|
||||||
|
will uninstall them in the right order.
|
||||||
|
|
||||||
|
A line like
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
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
|
``mpich@3.0.2`` and ``mpich@3.1`` are installed, ``mpich`` could refer
|
||||||
to either one. Because it cannot determine which one to uninstall,
|
to either one. Because it cannot determine which one to uninstall,
|
||||||
Spack will ask you to provide a version number to remove the
|
Spack will ask you either to provide a version number to remove the
|
||||||
ambiguity. As an example, ``spack uninstall mpich@3.1`` is
|
ambiguity or use the ``--all`` option to uninstall all of the matching packages.
|
||||||
unambiguous in this scenario.
|
|
||||||
|
You may force uninstall a package with the `--force` option
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
Seeing installed packages
|
Seeing installed packages
|
||||||
|
@ -226,6 +246,12 @@ Packages are divided into groups according to their architecture and
|
||||||
compiler. Within each group, Spack tries to keep the view simple, and
|
compiler. Within each group, Spack tries to keep the view simple, and
|
||||||
only shows the version of installed packages.
|
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 ``-m``, packages which were
|
||||||
|
explicitly installed with ``spack install <package>`` can be singled out with
|
||||||
|
``-e`` and those which have been pulled in only as dependencies with ``-E``.
|
||||||
|
|
||||||
In some cases, there may be different configurations of the *same*
|
In some cases, there may be different configurations of the *same*
|
||||||
version of a package installed. For example, there are two
|
version of a package installed. For example, there are two
|
||||||
installations of of ``libdwarf@20130729`` above. We can look at them
|
installations of of ``libdwarf@20130729`` above. We can look at them
|
||||||
|
@ -352,25 +378,32 @@ how this is done is in :ref:`sec-specs`.
|
||||||
``spack compiler add``
|
``spack compiler add``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
An alias for ``spack compiler find``.
|
||||||
|
|
||||||
|
.. _spack-compiler-find:
|
||||||
|
|
||||||
|
``spack compiler find``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you do not see a compiler in this list, but you want to use it with
|
If you do not see a compiler in this list, but you want to use it with
|
||||||
Spack, you can simply run ``spack compiler add`` with the path to
|
Spack, you can simply run ``spack compiler find`` with the path to
|
||||||
where the compiler is installed. For example::
|
where the compiler is installed. For example::
|
||||||
|
|
||||||
$ spack compiler add /usr/local/tools/ic-13.0.079
|
$ spack compiler find /usr/local/tools/ic-13.0.079
|
||||||
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
|
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
|
||||||
intel@13.0.079
|
intel@13.0.079
|
||||||
|
|
||||||
Or you can run ``spack compiler add`` with no arguments to force
|
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
|
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
|
installed, but you know that new compilers have been added to your
|
||||||
``PATH``. For example, using dotkit, you might do this::
|
``PATH``. For example, using dotkit, you might do this::
|
||||||
|
|
||||||
$ module load gcc-4.9.0
|
$ module load gcc-4.9.0
|
||||||
$ spack compiler add
|
$ spack compiler find
|
||||||
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
|
==> Added 1 new compiler to /Users/gamblin2/.spack/compilers.yaml
|
||||||
gcc@4.9.0
|
gcc@4.9.0
|
||||||
|
|
||||||
This loads the environment module for gcc-4.9.0 to get it into the
|
This loads the environment module for gcc-4.9.0 to add it to
|
||||||
``PATH``, and then it adds the compiler to Spack.
|
``PATH``, and then it adds the compiler to Spack.
|
||||||
|
|
||||||
.. _spack-compiler-info:
|
.. _spack-compiler-info:
|
||||||
|
@ -761,7 +794,7 @@ versions are now filtered out.
|
||||||
|
|
||||||
.. _shell-support:
|
.. _shell-support:
|
||||||
|
|
||||||
Environment modules
|
Integration with module systems
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
@ -771,9 +804,50 @@ Environment modules
|
||||||
interface and/or generated module names may change in future
|
interface and/or generated module names may change in future
|
||||||
versions.
|
versions.
|
||||||
|
|
||||||
Spack provides some limited integration with environment module
|
Spack provides some integration with
|
||||||
systems to make it easier to use the packages it provides.
|
`Environment Modules <http://modules.sourceforge.net/>`_
|
||||||
|
and `Dotkit <https://computing.llnl.gov/?set=jobs&page=dotkit>`_ to make
|
||||||
|
it easier to use the packages it installed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Installing Environment Modules
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In order to use Spack's generated environment modules, you must have
|
||||||
|
installed the *Environment Modules* package. On many Linux
|
||||||
|
distributions, this can be installed from the vendor's repository:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
yum install environment-modules # (Fedora/RHEL/CentOS)
|
||||||
|
apt-get install environment-modules # (Ubuntu/Debian)
|
||||||
|
|
||||||
|
If your Linux distribution does not have
|
||||||
|
Environment Modules, you can get it with Spack:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack install environment-modules
|
||||||
|
|
||||||
|
|
||||||
|
In this case to activate it automatically you need to add the following two
|
||||||
|
lines to your ``.bashrc`` profile (or similar):
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
MODULES_HOME=`spack location -i environment-modules`
|
||||||
|
source ${MODULES_HOME}/Modules/init/bash
|
||||||
|
|
||||||
|
If you use a Unix shell other than ``bash``, modify the commands above
|
||||||
|
accordingly and source the appropriate file in
|
||||||
|
``${MODULES_HOME}/Modules/init/``.
|
||||||
|
|
||||||
|
|
||||||
|
.. TODO : Add a similar section on how to install dotkit ?
|
||||||
|
|
||||||
|
Spack and module systems
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
You can enable shell support by sourcing some files in the
|
You can enable shell support by sourcing some files in the
|
||||||
``/share/spack`` directory.
|
``/share/spack`` directory.
|
||||||
|
|
||||||
|
@ -781,7 +855,7 @@ For ``bash`` or ``ksh``, run:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
. $SPACK_ROOT/share/spack/setup-env.sh
|
. ${SPACK_ROOT}/share/spack/setup-env.sh
|
||||||
|
|
||||||
For ``csh`` and ``tcsh`` run:
|
For ``csh`` and ``tcsh`` run:
|
||||||
|
|
||||||
|
@ -793,17 +867,19 @@ For ``csh`` and ``tcsh`` run:
|
||||||
You can put the above code in your ``.bashrc`` or ``.cshrc``, and
|
You can put the above code in your ``.bashrc`` or ``.cshrc``, and
|
||||||
Spack's shell support will be available on the command line.
|
Spack's shell support will be available on the command line.
|
||||||
|
|
||||||
When you install a package with Spack, it automatically generates an
|
When you install a package with Spack, it automatically generates a module file
|
||||||
environment module that lets you add the package to your environment.
|
that lets you add the package to your environment.
|
||||||
|
|
||||||
Currently, Spack supports the generation of `TCL Modules
|
Currently, Spack supports the generation of `Environment Modules
|
||||||
<http://wiki.tcl.tk/12999>`_ and `Dotkit
|
<http://wiki.tcl.tk/12999>`_ and `Dotkit
|
||||||
<https://computing.llnl.gov/?set=jobs&page=dotkit>`_. Generated
|
<https://computing.llnl.gov/?set=jobs&page=dotkit>`_. Generated
|
||||||
module files for each of these systems can be found in these
|
module files for each of these systems can be found in these
|
||||||
directories:
|
directories:
|
||||||
|
|
||||||
* ``$SPACK_ROOT/share/spack/modules``
|
.. code-block:: sh
|
||||||
* ``$SPACK_ROOT/share/spack/dotkit``
|
|
||||||
|
${SPACK_ROOT}/share/spack/modules
|
||||||
|
${SPACK_ROOT}/share/spack/dotkit
|
||||||
|
|
||||||
The directories are automatically added to your ``MODULEPATH`` and
|
The directories are automatically added to your ``MODULEPATH`` and
|
||||||
``DK_NODE`` environment variables when you enable Spack's `shell
|
``DK_NODE`` environment variables when you enable Spack's `shell
|
||||||
|
@ -859,8 +935,7 @@ of installed packages.
|
||||||
|
|
||||||
The names here should look familiar, they're the same ones from
|
The names here should look familiar, they're the same ones from
|
||||||
``spack find``. You *can* use the names here directly. For example,
|
``spack find``. You *can* use the names here directly. For example,
|
||||||
you could type either of these commands to load the callpath module
|
you could type either of these commands to load the callpath module:
|
||||||
(assuming dotkit and modules are installed):
|
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
|
@ -875,7 +950,7 @@ easy to type. Luckily, Spack has its own interface for using modules
|
||||||
and dotkits. You can use the same spec syntax you're used to:
|
and dotkits. You can use the same spec syntax you're used to:
|
||||||
|
|
||||||
========================= ==========================
|
========================= ==========================
|
||||||
Modules Dotkit
|
Environment Modules Dotkit
|
||||||
========================= ==========================
|
========================= ==========================
|
||||||
``spack load <spec>`` ``spack use <spec>``
|
``spack load <spec>`` ``spack use <spec>``
|
||||||
``spack unload <spec>`` ``spack unuse <spec>``
|
``spack unload <spec>`` ``spack unuse <spec>``
|
||||||
|
@ -942,15 +1017,216 @@ used ``gcc``. You could therefore just type:
|
||||||
|
|
||||||
To identify just the one built with the Intel compiler.
|
To identify just the one built with the Intel compiler.
|
||||||
|
|
||||||
|
Module files generation and customization
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Regenerating Module files
|
Environment Modules and Dotkit files are generated when packages are installed,
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
and are placed in the following directories under the Spack root:
|
||||||
|
|
||||||
Module and dotkit files are generated when packages are installed, and
|
.. code-block:: sh
|
||||||
are placed in the following directories under the Spack root:
|
|
||||||
|
|
||||||
* ``$SPACK_ROOT/share/spack/modules``
|
${SPACK_ROOT}/share/spack/modules
|
||||||
* ``$SPACK_ROOT/share/spack/dotkit``
|
${SPACK_ROOT}/share/spack/dotkit
|
||||||
|
|
||||||
|
The content that gets written in each module file can be customized in two ways:
|
||||||
|
|
||||||
|
1. overriding part of the ``spack.Package`` API within a ``package.py``
|
||||||
|
2. writing dedicated configuration files
|
||||||
|
|
||||||
|
Override ``Package`` API
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
There are currently two methods in ``spack.Package`` that may affect the content
|
||||||
|
of module files:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def setup_environment(self, spack_env, run_env):
|
||||||
|
"""Set up the compile and runtime environments for a package."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||||
|
"""Set up the environment of packages that depend on this one"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
As briefly stated in the comments, the first method lets you customize the
|
||||||
|
module file content for the package you are currently writing, the second
|
||||||
|
allows for modifications to your dependees module file. In both cases one
|
||||||
|
needs to fill ``run_env`` with the desired list of environment modifications.
|
||||||
|
|
||||||
|
Example : ``builtin/packages/python/package.py``
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
The ``python`` package that comes with the ``builtin`` Spack repository
|
||||||
|
overrides ``setup_dependent_environment`` in the following way:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def setup_dependent_environment(self, spack_env, run_env, extension_spec):
|
||||||
|
# ...
|
||||||
|
if extension_spec.package.extends(self.spec):
|
||||||
|
run_env.prepend_path('PYTHONPATH', os.path.join(extension_spec.prefix, self.site_packages_dir))
|
||||||
|
|
||||||
|
to insert the appropriate ``PYTHONPATH`` modifications in the module
|
||||||
|
files of python packages.
|
||||||
|
|
||||||
|
Configuration files
|
||||||
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Another way of modifying the content of module files is writing a
|
||||||
|
``modules.yaml`` configuration file. Following usual Spack conventions, this
|
||||||
|
file can be placed either at *site* or *user* scope.
|
||||||
|
|
||||||
|
The default site configuration reads:
|
||||||
|
|
||||||
|
.. literalinclude:: ../../../etc/spack/modules.yaml
|
||||||
|
:language: yaml
|
||||||
|
|
||||||
|
It basically inspects the installation prefixes for the
|
||||||
|
existence of a few folders and, if they exist, it prepends a path to a given
|
||||||
|
list of environment variables.
|
||||||
|
|
||||||
|
For each module system that can be enabled a finer configuration is possible:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
modules:
|
||||||
|
tcl:
|
||||||
|
# contains environment modules specific customizations
|
||||||
|
dotkit:
|
||||||
|
# contains dotkit specific customizations
|
||||||
|
|
||||||
|
The structure under the ``tcl`` and ``dotkit`` keys is almost equal, and will
|
||||||
|
be showcased in the following by some examples.
|
||||||
|
|
||||||
|
Select module files by spec constraints
|
||||||
|
"""""""""""""""""""""""""""""""""""""""
|
||||||
|
Using spec syntax it's possible to have different customizations for different
|
||||||
|
groups of module files.
|
||||||
|
|
||||||
|
Considering :
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
modules:
|
||||||
|
tcl:
|
||||||
|
all: # Default addition for every package
|
||||||
|
environment:
|
||||||
|
set:
|
||||||
|
BAR: 'bar'
|
||||||
|
^openmpi:: # A double ':' overrides previous rules
|
||||||
|
environment:
|
||||||
|
set:
|
||||||
|
BAR: 'baz'
|
||||||
|
zlib:
|
||||||
|
environment:
|
||||||
|
prepend_path:
|
||||||
|
LD_LIBRARY_PATH: 'foo'
|
||||||
|
zlib%gcc@4.8:
|
||||||
|
environment:
|
||||||
|
unset:
|
||||||
|
- FOOBAR
|
||||||
|
|
||||||
|
what will happen is that:
|
||||||
|
|
||||||
|
- every module file will set ``BAR=bar``
|
||||||
|
- unless the associated spec satisfies ``^openmpi`` in which case ``BAR=baz``
|
||||||
|
- any spec that satisfies ``zlib`` will additionally prepend ``foo`` to ``LD_LIBRARY_PATH``
|
||||||
|
- any spec that satisfies ``zlib%gcc@4.8`` will additionally unset ``FOOBAR``
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
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.
|
||||||
|
|
||||||
|
Filter modifications out of module files
|
||||||
|
""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
Modifications to certain environment variables in module files are generated by
|
||||||
|
default. Suppose you would like to avoid having ``CPATH`` and ``LIBRARY_PATH``
|
||||||
|
modified by your dotkit modules. Then :
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
modules:
|
||||||
|
dotkit:
|
||||||
|
all:
|
||||||
|
filter:
|
||||||
|
environment_blacklist: ['CPATH', 'LIBRARY_PATH'] # Exclude changes to any of these variables
|
||||||
|
|
||||||
|
will generate dotkit module files that will not contain modifications to either
|
||||||
|
``CPATH`` or ``LIBRARY_PATH`` and environment module files that instead will
|
||||||
|
contain those modifications.
|
||||||
|
|
||||||
|
Autoload dependencies
|
||||||
|
"""""""""""""""""""""
|
||||||
|
|
||||||
|
The following lines in ``modules.yaml``:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
modules:
|
||||||
|
tcl:
|
||||||
|
all:
|
||||||
|
autoload: 'direct'
|
||||||
|
|
||||||
|
will produce environment module files that will automatically load their direct
|
||||||
|
dependencies.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Allowed values for ``autoload`` statements
|
||||||
|
Allowed values for ``autoload`` statements are either ``none``, ``direct``
|
||||||
|
or ``all``. In ``tcl`` configuration it is possible to use the option
|
||||||
|
``prerequisites`` that accepts the same values and will add ``prereq``
|
||||||
|
statements instead of automatically loading other modules.
|
||||||
|
|
||||||
|
Blacklist or whitelist the generation of specific module files
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
Sometimes it is desirable not to generate module files, a common use case being
|
||||||
|
not providing the users with software built using the system compiler.
|
||||||
|
|
||||||
|
A configuration file like:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
will skip module file generation for anything that satisfies ``%gcc@4.4.7``,
|
||||||
|
with the exception of specs that satisfy ``gcc`` or ``llvm``.
|
||||||
|
|
||||||
|
Customize the naming scheme and insert conflicts
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
A configuration file like:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Tokens available for the naming scheme
|
||||||
|
currently only the tokens shown in the example are available to construct
|
||||||
|
the naming scheme
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
The ``conflict`` option is ``tcl`` specific
|
||||||
|
|
||||||
|
Regenerating module files
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Sometimes you may need to regenerate the modules files. For example,
|
Sometimes you may need to regenerate the modules files. For example,
|
||||||
if newer, fancier module support is added to Spack at some later date,
|
if newer, fancier module support is added to Spack at some later date,
|
||||||
|
@ -960,7 +1236,7 @@ new features.
|
||||||
.. _spack-module:
|
.. _spack-module:
|
||||||
|
|
||||||
``spack module refresh``
|
``spack module refresh``
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
""""""""""""""""""""""""
|
||||||
|
|
||||||
Running ``spack module refresh`` will remove the
|
Running ``spack module refresh`` will remove the
|
||||||
``share/spack/modules`` and ``share/spack/dotkit`` directories, then
|
``share/spack/modules`` and ``share/spack/dotkit`` directories, then
|
||||||
|
@ -1186,6 +1462,51 @@ several variants:
|
||||||
|
|
||||||
spack deactivate -a python
|
spack deactivate -a python
|
||||||
|
|
||||||
|
Filesystem requirements
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Spack currently 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 may be mounted
|
||||||
|
without ``flock`` support enabled. You can determine how your
|
||||||
|
filesystems are mounted with ``mount -p``. The output for a Lustre
|
||||||
|
filesystem might look like this:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ mount -l | grep lscratch
|
||||||
|
pilsner-mds1-lnet0@o2ib100:/lsd on /p/lscratchd type lustre (rw,nosuid,noauto,_netdev,lazystatfs,flock)
|
||||||
|
porter-mds1-lnet0@o2ib100:/lse on /p/lscratche type lustre (rw,nosuid,noauto,_netdev,lazystatfs,flock)
|
||||||
|
|
||||||
|
Note the ``flock`` option on both Lustre mounts. If you do not see
|
||||||
|
this or a similar option for your filesystem, you may need ot ask your
|
||||||
|
system administrator to enable ``flock``.
|
||||||
|
|
||||||
|
This issue typically manifests with the error below:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ ./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
|
Getting Help
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
.. _site-configuration:
|
.. _configuration:
|
||||||
|
|
||||||
Site configuration
|
Configuration
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
.. _temp-space:
|
.. _temp-space:
|
||||||
|
@ -55,7 +55,7 @@ directory is.
|
||||||
|
|
||||||
|
|
||||||
External Packages
|
External Packages
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
----------------------------
|
||||||
Spack can be configured to use externally-installed
|
Spack can be configured to use externally-installed
|
||||||
packages rather than building its own packages. This may be desirable
|
packages rather than building its own packages. This may be desirable
|
||||||
if machines ship with system packages, such as a customized MPI
|
if machines ship with system packages, such as a customized MPI
|
||||||
|
@ -123,8 +123,68 @@ It could also be used alone to forbid packages that may be
|
||||||
buggy or otherwise undesirable.
|
buggy or otherwise undesirable.
|
||||||
|
|
||||||
|
|
||||||
|
Concretization Preferences
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Spack can be configured to prefer certain compilers, package
|
||||||
|
versions, depends_on, and variants during concretization.
|
||||||
|
The preferred configuration can be controlled via the
|
||||||
|
``~/.spack/packages.yaml`` file for user configuations, or the
|
||||||
|
``etc/spack/packages.yaml`` site configuration.
|
||||||
|
|
||||||
|
|
||||||
|
Here's an example packages.yaml file that sets preferred packages:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
packages:
|
||||||
|
dyninst:
|
||||||
|
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: [mvapich, mpich, openmpi]
|
||||||
|
|
||||||
|
|
||||||
|
At a high level, this example is specifying how packages should be
|
||||||
|
concretized. The dyninst 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 mvapich for
|
||||||
|
its MPI and gcc 4.4.7 (except for Dyninst, 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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Profiling
|
Profiling
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
------------------
|
||||||
|
|
||||||
Spack has some limited built-in support for profiling, and can report
|
Spack has some limited built-in support for profiling, and can report
|
||||||
statistics using standard Python timing tools. To use this feature,
|
statistics using standard Python timing tools. To use this feature,
|
||||||
|
@ -133,7 +193,7 @@ supply ``-p`` to Spack on the command line, before any subcommands.
|
||||||
.. _spack-p:
|
.. _spack-p:
|
||||||
|
|
||||||
``spack -p``
|
``spack -p``
|
||||||
^^^^^^^^^^^^^^^^^^
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
``spack -p`` output looks like this:
|
``spack -p`` output looks like this:
|
||||||
|
|
|
@ -47,7 +47,7 @@ Table of Contents
|
||||||
basic_usage
|
basic_usage
|
||||||
packaging_guide
|
packaging_guide
|
||||||
mirrors
|
mirrors
|
||||||
site_configuration
|
configuration
|
||||||
developer_guide
|
developer_guide
|
||||||
command_index
|
command_index
|
||||||
package_list
|
package_list
|
||||||
|
|
|
@ -703,6 +703,127 @@ Fetching a revision
|
||||||
Subversion branches are handled as part of the directory structure, so
|
Subversion branches are handled as part of the directory structure, so
|
||||||
you can check out a branch or tag by changing the ``url``.
|
you can check out a branch or tag by changing the ``url``.
|
||||||
|
|
||||||
|
|
||||||
|
.. _license:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
# 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 :ref:`mirrors`
|
||||||
|
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:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
# 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:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
.. _patching:
|
.. _patching:
|
||||||
|
|
||||||
Patches
|
Patches
|
||||||
|
@ -1527,8 +1648,8 @@ point will Spack call the ``install()`` method for your package.
|
||||||
Concretization in Spack is based on certain selection policies that
|
Concretization in Spack is based on certain selection policies that
|
||||||
tell Spack how to select, e.g., a version, when one is not specified
|
tell Spack how to select, e.g., a version, when one is not specified
|
||||||
explicitly. Concretization policies are discussed in more detail in
|
explicitly. Concretization policies are discussed in more detail in
|
||||||
:ref:`site-configuration`. Sites using Spack can customize them to
|
:ref:`configuration`. Sites using Spack can customize them to match
|
||||||
match the preferences of their own users.
|
the preferences of their own users.
|
||||||
|
|
||||||
.. _spack-spec:
|
.. _spack-spec:
|
||||||
|
|
||||||
|
@ -1561,60 +1682,8 @@ be concretized on their system. For example, one user may prefer packages
|
||||||
built with OpenMPI and the Intel compiler. Another user may prefer
|
built with OpenMPI and the Intel compiler. Another user may prefer
|
||||||
packages be built with MVAPICH and GCC.
|
packages be built with MVAPICH and GCC.
|
||||||
|
|
||||||
Spack can be configured to prefer certain compilers, package
|
See the `documentation in the config section <concretization-preferences_>`_
|
||||||
versions, depends_on, and variants during concretization.
|
for more details.
|
||||||
The preferred configuration can be controlled via the
|
|
||||||
``~/.spack/packages.yaml`` file for user configuations, or the
|
|
||||||
``etc/spack/packages.yaml`` site configuration.
|
|
||||||
|
|
||||||
|
|
||||||
Here's an example packages.yaml file that sets preferred packages:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
packages:
|
|
||||||
dyninst:
|
|
||||||
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: [mvapich, mpich, openmpi]
|
|
||||||
|
|
||||||
|
|
||||||
At a high level, this example is specifying how packages should be
|
|
||||||
concretized. The dyninst 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 mvapich for
|
|
||||||
its MPI and gcc 4.4.7 (except for Dyninst, 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.
|
|
||||||
|
|
||||||
.. _install-method:
|
.. _install-method:
|
||||||
|
|
||||||
|
@ -1803,15 +1872,15 @@ Compile-time library search paths
|
||||||
* ``-L$dep_prefix/lib``
|
* ``-L$dep_prefix/lib``
|
||||||
* ``-L$dep_prefix/lib64``
|
* ``-L$dep_prefix/lib64``
|
||||||
Runtime library search paths (RPATHs)
|
Runtime library search paths (RPATHs)
|
||||||
* ``-Wl,-rpath,$dep_prefix/lib``
|
* ``$rpath_flag$dep_prefix/lib``
|
||||||
* ``-Wl,-rpath,$dep_prefix/lib64``
|
* ``$rpath_flag$dep_prefix/lib64``
|
||||||
Include search paths
|
Include search paths
|
||||||
* ``-I$dep_prefix/include``
|
* ``-I$dep_prefix/include``
|
||||||
|
|
||||||
An example of this would be the ``libdwarf`` build, which has one
|
An example of this would be the ``libdwarf`` build, which has one
|
||||||
dependency: ``libelf``. Every call to ``cc`` in the ``libdwarf``
|
dependency: ``libelf``. Every call to ``cc`` in the ``libdwarf``
|
||||||
build will have ``-I$LIBELF_PREFIX/include``,
|
build will have ``-I$LIBELF_PREFIX/include``,
|
||||||
``-L$LIBELF_PREFIX/lib``, and ``-Wl,-rpath,$LIBELF_PREFIX/lib``
|
``-L$LIBELF_PREFIX/lib``, and ``$rpath_flag$LIBELF_PREFIX/lib``
|
||||||
inserted on the command line. This is done transparently to the
|
inserted on the command line. This is done transparently to the
|
||||||
project's build system, which will just think it's using a system
|
project's build system, which will just think it's using a system
|
||||||
where ``libelf`` is readily available. Because of this, you **do
|
where ``libelf`` is readily available. Because of this, you **do
|
||||||
|
@ -1831,6 +1900,48 @@ successfully find ``libdwarf.h`` and ``libdwarf.so``, without the
|
||||||
packager having to provide ``--with-libdwarf=/path/to/libdwarf`` on
|
packager having to provide ``--with-libdwarf=/path/to/libdwarf`` on
|
||||||
the command line.
|
the command line.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
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``.
|
||||||
|
|
||||||
|
Compiler flags
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
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``, ``cxx11_flag``, ``cxx14_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
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
variant('openmp', default=True, description="Enable OpenMP support.")
|
||||||
|
|
||||||
|
Message Parsing Interface (MPI)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
It is common for high performance computing software/packages to use ``MPI``.
|
||||||
|
As a result of conretization, a given package can be built using different
|
||||||
|
implementations of MPI such as ``Openmpi``, ``MPICH`` or ``IntelMPI``.
|
||||||
|
In some scenarios to configure a package one have to provide it with appropriate MPI
|
||||||
|
compiler wrappers such as ``mpicc``, ``mpic++``.
|
||||||
|
However different implementations of ``MPI`` may have different names for those
|
||||||
|
wrappers. In order to make package's ``install()`` method indifferent to the
|
||||||
|
choice ``MPI`` implementation, each package which implements ``MPI`` sets up
|
||||||
|
``self.spec.mpicc``, ``self.spec.mpicxx``, ``self.spec.mpifc`` and ``self.spec.mpif77``
|
||||||
|
to point to ``C``, ``C++``, ``Fortran 90`` and ``Fortran 77`` ``MPI`` wrappers.
|
||||||
|
Package developers are advised to use these variables, for example ``self.spec['mpi'].mpicc``
|
||||||
|
instead of hard-coding ``join_path(self.spec['mpi'].prefix.bin, 'mpicc')`` for
|
||||||
|
the reasons outlined above.
|
||||||
|
|
||||||
|
|
||||||
Forking ``install()``
|
Forking ``install()``
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
196
lib/spack/env/cc
vendored
196
lib/spack/env/cc
vendored
|
@ -1,27 +1,27 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# Spack compiler wrapper script.
|
# Spack compiler wrapper script.
|
||||||
|
@ -38,19 +38,27 @@
|
||||||
# -Wl,-rpath arguments for dependency /lib directories.
|
# -Wl,-rpath arguments for dependency /lib directories.
|
||||||
#
|
#
|
||||||
|
|
||||||
# This is the list of environment variables that need to be set before
|
# This is an array of environment variables that need to be set before
|
||||||
# the script runs. They are set by routines in spack.build_environment
|
# the script runs. They are set by routines in spack.build_environment
|
||||||
# as part of spack.package.Package.do_install().
|
# as part of spack.package.Package.do_install().
|
||||||
parameters="
|
parameters=(
|
||||||
SPACK_PREFIX
|
SPACK_PREFIX
|
||||||
SPACK_ENV_PATH
|
SPACK_ENV_PATH
|
||||||
SPACK_DEBUG_LOG_DIR
|
SPACK_DEBUG_LOG_DIR
|
||||||
SPACK_COMPILER_SPEC
|
SPACK_COMPILER_SPEC
|
||||||
SPACK_SHORT_SPEC"
|
SPACK_CC_RPATH_ARG
|
||||||
|
SPACK_CXX_RPATH_ARG
|
||||||
|
SPACK_F77_RPATH_ARG
|
||||||
|
SPACK_FC_RPATH_ARG
|
||||||
|
SPACK_SHORT_SPEC
|
||||||
|
)
|
||||||
|
|
||||||
# The compiler input variables are checked for sanity later:
|
# The compiler input variables are checked for sanity later:
|
||||||
# SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC
|
# SPACK_CC, SPACK_CXX, SPACK_F77, SPACK_FC
|
||||||
# Debug flag is optional; set to true for debug logging:
|
# The default compiler flags are passed from these variables:
|
||||||
|
# SPACK_CFLAGS, SPACK_CXXFLAGS, SPACK_FCFLAGS, SPACK_FFLAGS,
|
||||||
|
# SPACK_LDFLAGS, SPACK_LDLIBS
|
||||||
|
# Debug env var is optional; set to true for debug logging:
|
||||||
# SPACK_DEBUG
|
# SPACK_DEBUG
|
||||||
# Test command is used to unit test the compiler script.
|
# Test command is used to unit test the compiler script.
|
||||||
# SPACK_TEST_COMMAND
|
# SPACK_TEST_COMMAND
|
||||||
|
@ -64,13 +72,12 @@ function die {
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
for param in $parameters; do
|
for param in ${parameters[@]}; do
|
||||||
if [[ -z ${!param} ]]; then
|
if [[ -z ${!param} ]]; then
|
||||||
die "Spack compiler must be run from spack! Input $param was missing!"
|
die "Spack compiler must be run from Spack! Input '$param' is missing."
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
#
|
|
||||||
# Figure out the type of compiler, the language, and the mode so that
|
# Figure out the type of compiler, the language, and the mode so that
|
||||||
# the compiler script knows what to do.
|
# the compiler script knows what to do.
|
||||||
#
|
#
|
||||||
|
@ -78,63 +85,57 @@ done
|
||||||
# 'command' is set based on the input command to $SPACK_[CC|CXX|F77|F90]
|
# 'command' is set based on the input command to $SPACK_[CC|CXX|F77|F90]
|
||||||
#
|
#
|
||||||
# 'mode' is set to one of:
|
# 'mode' is set to one of:
|
||||||
|
# vcheck version check
|
||||||
# cpp preprocess
|
# cpp preprocess
|
||||||
# cc compile
|
# cc compile
|
||||||
# as assemble
|
# as assemble
|
||||||
# ld link
|
# ld link
|
||||||
# ccld compile & link
|
# ccld compile & link
|
||||||
# vcheck version check
|
|
||||||
#
|
|
||||||
# Depending on the mode, we may or may not add extra rpaths.
|
|
||||||
# This variable controls whether they are added.
|
|
||||||
add_rpaths=true
|
|
||||||
|
|
||||||
command=$(basename "$0")
|
command=$(basename "$0")
|
||||||
|
comp="CC"
|
||||||
case "$command" in
|
case "$command" in
|
||||||
|
cpp)
|
||||||
|
mode=cpp
|
||||||
|
;;
|
||||||
cc|c89|c99|gcc|clang|icc|pgcc|xlc)
|
cc|c89|c99|gcc|clang|icc|pgcc|xlc)
|
||||||
command="$SPACK_CC"
|
command="$SPACK_CC"
|
||||||
language="C"
|
language="C"
|
||||||
|
comp="CC"
|
||||||
|
lang_flags=C
|
||||||
;;
|
;;
|
||||||
c++|CC|g++|clang++|icpc|pgc++|xlc++)
|
c++|CC|g++|clang++|icpc|pgc++|xlc++)
|
||||||
command="$SPACK_CXX"
|
command="$SPACK_CXX"
|
||||||
language="C++"
|
language="C++"
|
||||||
|
comp="CXX"
|
||||||
|
lang_flags=CXX
|
||||||
;;
|
;;
|
||||||
f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
|
f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
|
||||||
command="$SPACK_FC"
|
command="$SPACK_FC"
|
||||||
language="Fortran 90"
|
language="Fortran 90"
|
||||||
|
comp="FC"
|
||||||
|
lang_flags=F
|
||||||
;;
|
;;
|
||||||
f77|gfortran|ifort|pgfortran|xlf|nagfor)
|
f77|gfortran|ifort|pgfortran|xlf|nagfor)
|
||||||
command="$SPACK_F77"
|
command="$SPACK_F77"
|
||||||
language="Fortran 77"
|
language="Fortran 77"
|
||||||
;;
|
comp="F77"
|
||||||
cpp)
|
lang_flags=F
|
||||||
mode=cpp
|
|
||||||
;;
|
;;
|
||||||
ld)
|
ld)
|
||||||
mode=ld
|
mode=ld
|
||||||
|
|
||||||
# Darwin's linker has a -r argument that merges object files
|
|
||||||
# together. It doesn't work with -rpath.
|
|
||||||
if [[ $OSTYPE = darwin* ]]; then
|
|
||||||
for arg in "$@"; do
|
|
||||||
if [ "$arg" = -r ]; then
|
|
||||||
add_rpaths=false
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
die "Unkown compiler: $command"
|
die "Unkown compiler: $command"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# If any of the arguments below is present then the mode is vcheck. In
|
# If any of the arguments below are present, then the mode is vcheck.
|
||||||
# vcheck mode nothing is added in terms of extra search paths or
|
# In vcheck mode, nothing is added in terms of extra search paths or
|
||||||
# libraries
|
# libraries.
|
||||||
if [ -z "$mode" ]; then
|
if [[ -z $mode ]]; then
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
if [ "$arg" = -v -o "$arg" = -V -o "$arg" = --version -o "$arg" = -dumpversion ]; then
|
if [[ $arg == -v || $arg == -V || $arg == --version || $arg == -dumpversion ]]; then
|
||||||
mode=vcheck
|
mode=vcheck
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
@ -142,24 +143,27 @@ if [ -z "$mode" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Finish setting up the mode.
|
# Finish setting up the mode.
|
||||||
if [ -z "$mode" ]; then
|
if [[ -z $mode ]]; then
|
||||||
mode=ccld
|
mode=ccld
|
||||||
for arg in "$@"; do
|
for arg in "$@"; do
|
||||||
if [ "$arg" = -E ]; then
|
if [[ $arg == -E ]]; then
|
||||||
mode=cpp
|
mode=cpp
|
||||||
break
|
break
|
||||||
elif [ "$arg" = -S ]; then
|
elif [[ $arg == -S ]]; then
|
||||||
mode=as
|
mode=as
|
||||||
break
|
break
|
||||||
elif [ "$arg" = -c ]; then
|
elif [[ $arg == -c ]]; then
|
||||||
mode=cc
|
mode=cc
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Set up rpath variable according to language.
|
||||||
|
eval rpath=\$SPACK_${comp}_RPATH_ARG
|
||||||
|
|
||||||
# Dump the version and exit if we're in testing mode.
|
# Dump the version and exit if we're in testing mode.
|
||||||
if [ "$SPACK_TEST_COMMAND" = "dump-mode" ]; then
|
if [[ $SPACK_TEST_COMMAND == dump-mode ]]; then
|
||||||
echo "$mode"
|
echo "$mode"
|
||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
@ -170,30 +174,79 @@ if [[ -z $command ]]; then
|
||||||
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
|
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$mode" == vcheck ] ; then
|
if [[ $mode == vcheck ]]; then
|
||||||
exec ${command} "$@"
|
exec ${command} "$@"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Darwin's linker has a -r argument that merges object files together.
|
||||||
|
# It doesn't work with -rpath.
|
||||||
|
# This variable controls whether they are added.
|
||||||
|
add_rpaths=true
|
||||||
|
if [[ $mode == ld && "$SPACK_SHORT_SPEC" =~ "darwin" ]]; then
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [[ $arg == -r ]]; then
|
||||||
|
add_rpaths=false
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
# Save original command for debug logging
|
# Save original command for debug logging
|
||||||
input_command="$@"
|
input_command="$@"
|
||||||
args=("$@")
|
args=("$@")
|
||||||
|
|
||||||
|
# Prepend cppflags, cflags, cxxflags, fcflags, fflags, and ldflags
|
||||||
|
|
||||||
|
# Add ldflags
|
||||||
|
case "$mode" in
|
||||||
|
ld|ccld)
|
||||||
|
args=(${SPACK_LDFLAGS[@]} "${args[@]}") ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Add compiler flags.
|
||||||
|
case "$mode" in
|
||||||
|
cc|ccld)
|
||||||
|
# Add c, cxx, fc, and f flags
|
||||||
|
case $lang_flags in
|
||||||
|
C)
|
||||||
|
args=(${SPACK_CFLAGS[@]} "${args[@]}") ;;
|
||||||
|
CXX)
|
||||||
|
args=(${SPACK_CXXFLAGS[@]} "${args[@]}") ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Add cppflags
|
||||||
|
case "$mode" in
|
||||||
|
cpp|as|cc|ccld)
|
||||||
|
args=(${SPACK_CPPFLAGS[@]} "${args[@]}") ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$mode" in cc|ccld)
|
||||||
|
# Add fortran flags
|
||||||
|
case $lang_flags in
|
||||||
|
F)
|
||||||
|
args=(${SPACK_FFLAGS[@]} "${args[@]}") ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# Read spack dependencies from the path environment variable
|
# Read spack dependencies from the path environment variable
|
||||||
IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
|
IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
|
||||||
for dep in "${deps[@]}"; do
|
for dep in "${deps[@]}"; do
|
||||||
# Prepend include directories
|
# Prepend include directories
|
||||||
if [[ -d $dep/include ]]; then
|
if [[ -d $dep/include ]]; then
|
||||||
if [[ $mode = cpp || $mode = cc || $mode = as || $mode = ccld ]]; then
|
if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then
|
||||||
args=("-I$dep/include" "${args[@]}")
|
args=("-I$dep/include" "${args[@]}")
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prepend lib and RPATH directories
|
# Prepend lib and RPATH directories
|
||||||
if [[ -d $dep/lib ]]; then
|
if [[ -d $dep/lib ]]; then
|
||||||
if [[ $mode = ccld ]]; then
|
if [[ $mode == ccld ]]; then
|
||||||
$add_rpaths && args=("-Wl,-rpath,$dep/lib" "${args[@]}")
|
$add_rpaths && args=("$rpath$dep/lib" "${args[@]}")
|
||||||
args=("-L$dep/lib" "${args[@]}")
|
args=("-L$dep/lib" "${args[@]}")
|
||||||
elif [[ $mode = ld ]]; then
|
elif [[ $mode == ld ]]; then
|
||||||
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
|
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
|
||||||
args=("-L$dep/lib" "${args[@]}")
|
args=("-L$dep/lib" "${args[@]}")
|
||||||
fi
|
fi
|
||||||
|
@ -201,10 +254,10 @@ for dep in "${deps[@]}"; do
|
||||||
|
|
||||||
# Prepend lib64 and RPATH directories
|
# Prepend lib64 and RPATH directories
|
||||||
if [[ -d $dep/lib64 ]]; then
|
if [[ -d $dep/lib64 ]]; then
|
||||||
if [[ $mode = ccld ]]; then
|
if [[ $mode == ccld ]]; then
|
||||||
$add_rpaths && args=("-Wl,-rpath,$dep/lib64" "${args[@]}")
|
$add_rpaths && args=("$rpath$dep/lib64" "${args[@]}")
|
||||||
args=("-L$dep/lib64" "${args[@]}")
|
args=("-L$dep/lib64" "${args[@]}")
|
||||||
elif [[ $mode = ld ]]; then
|
elif [[ $mode == ld ]]; then
|
||||||
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
|
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
|
||||||
args=("-L$dep/lib64" "${args[@]}")
|
args=("-L$dep/lib64" "${args[@]}")
|
||||||
fi
|
fi
|
||||||
|
@ -212,12 +265,20 @@ for dep in "${deps[@]}"; do
|
||||||
done
|
done
|
||||||
|
|
||||||
# Include all -L's and prefix/whatever dirs in rpath
|
# Include all -L's and prefix/whatever dirs in rpath
|
||||||
if [[ $mode = ccld ]]; then
|
if [[ $mode == ccld ]]; then
|
||||||
$add_rpaths && args=("-Wl,-rpath,$SPACK_PREFIX/lib" "-Wl,-rpath,$SPACK_PREFIX/lib64" "${args[@]}")
|
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib64" "${args[@]}")
|
||||||
elif [[ $mode = ld ]]; then
|
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib" "${args[@]}")
|
||||||
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
|
elif [[ $mode == ld ]]; then
|
||||||
|
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
|
||||||
|
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "${args[@]}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add SPACK_LDLIBS to args
|
||||||
|
case "$mode" in
|
||||||
|
ld|ccld)
|
||||||
|
args=("${args[@]}" ${SPACK_LDLIBS[@]}) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
#
|
#
|
||||||
# Unset pesky environment variables that could affect build sanity.
|
# Unset pesky environment variables that could affect build sanity.
|
||||||
#
|
#
|
||||||
|
@ -234,11 +295,14 @@ IFS=':' read -ra spack_env_dirs <<< "$SPACK_ENV_PATH"
|
||||||
spack_env_dirs+=("" ".")
|
spack_env_dirs+=("" ".")
|
||||||
PATH=""
|
PATH=""
|
||||||
for dir in "${env_path[@]}"; do
|
for dir in "${env_path[@]}"; do
|
||||||
remove=""
|
addpath=true
|
||||||
for rm_dir in "${spack_env_dirs[@]}"; do
|
for env_dir in "${spack_env_dirs[@]}"; do
|
||||||
if [[ $dir = $rm_dir ]]; then remove=True; fi
|
if [[ $dir == $env_dir ]]; then
|
||||||
|
addpath=false
|
||||||
|
break
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
if [[ -z $remove ]]; then
|
if $addpath; then
|
||||||
PATH="${PATH:+$PATH:}$dir"
|
PATH="${PATH:+$PATH:}$dir"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -247,7 +311,7 @@ export PATH
|
||||||
full_command=("$command" "${args[@]}")
|
full_command=("$command" "${args[@]}")
|
||||||
|
|
||||||
# In test command mode, write out full command for Spack tests.
|
# In test command mode, write out full command for Spack tests.
|
||||||
if [[ $SPACK_TEST_COMMAND = dump-args ]]; then
|
if [[ $SPACK_TEST_COMMAND == dump-args ]]; then
|
||||||
echo "${full_command[@]}"
|
echo "${full_command[@]}"
|
||||||
exit
|
exit
|
||||||
elif [[ -n $SPACK_TEST_COMMAND ]]; then
|
elif [[ -n $SPACK_TEST_COMMAND ]]; then
|
||||||
|
@ -257,7 +321,7 @@ fi
|
||||||
#
|
#
|
||||||
# Write the input and output commands to debug logs if it's asked for.
|
# Write the input and output commands to debug logs if it's asked for.
|
||||||
#
|
#
|
||||||
if [[ $SPACK_DEBUG = TRUE ]]; then
|
if [[ $SPACK_DEBUG == TRUE ]]; then
|
||||||
input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log"
|
input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log"
|
||||||
output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log"
|
output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log"
|
||||||
echo "[$mode] $command $input_command" >> $input_log
|
echo "[$mode] $command $input_command" >> $input_log
|
||||||
|
|
20
lib/spack/external/nose/LICENSE
vendored
20
lib/spack/external/nose/LICENSE
vendored
|
@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
|
||||||
that what they have is not the original version, so that the original
|
that what they have is not the original version, so that the original
|
||||||
author's reputation will not be affected by problems that might be
|
author's reputation will not be affected by problems that might be
|
||||||
introduced by others.
|
introduced by others.
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
Finally, software patents pose a constant threat to the existence of
|
||||||
any free program. We wish to make sure that a company cannot
|
any free program. We wish to make sure that a company cannot
|
||||||
effectively restrict the users of a free program by obtaining a
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
|
||||||
"work based on the library" and a "work that uses the library". The
|
"work based on the library" and a "work that uses the library". The
|
||||||
former contains code derived from the library, whereas the latter must
|
former contains code derived from the library, whereas the latter must
|
||||||
be combined with the library in order to run.
|
be combined with the library in order to run.
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ Library.
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
and you may at your option offer warranty protection in exchange for a
|
and you may at your option offer warranty protection in exchange for a
|
||||||
fee.
|
fee.
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
of it, thus forming a work based on the Library, and copy and
|
of it, thus forming a work based on the Library, and copy and
|
||||||
distribute such modifications or work under the terms of Section 1
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
that version instead if you wish.) Do not make any other change in
|
that version instead if you wish.) Do not make any other change in
|
||||||
these notices.
|
these notices.
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
Once this change is made in a given copy, it is irreversible for
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
subsequent copies and derivative works made from that copy.
|
subsequent copies and derivative works made from that copy.
|
||||||
|
@ -267,7 +267,7 @@ Library will still fall under Section 6.)
|
||||||
distribute the object code for the work under the terms of Section 6.
|
distribute the object code for the work under the terms of Section 6.
|
||||||
Any executables containing that work also fall under Section 6,
|
Any executables containing that work also fall under Section 6,
|
||||||
whether or not they are linked directly with the Library itself.
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
6. As an exception to the Sections above, you may also combine or
|
||||||
link a "work that uses the Library" with the Library to produce a
|
link a "work that uses the Library" with the Library to produce a
|
||||||
work containing portions of the Library, and distribute that work
|
work containing portions of the Library, and distribute that work
|
||||||
|
@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
use both them and the Library together in an executable that you
|
use both them and the Library together in an executable that you
|
||||||
distribute.
|
distribute.
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
7. You may place library facilities that are a work based on the
|
||||||
Library side-by-side in a single library together with other library
|
Library side-by-side in a single library together with other library
|
||||||
facilities not covered by this License, and distribute such a combined
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
You are not responsible for enforcing compliance by third parties with
|
You are not responsible for enforcing compliance by third parties with
|
||||||
this License.
|
this License.
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
infringement or for any other reason (not limited to patent issues),
|
infringement or for any other reason (not limited to patent issues),
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
|
||||||
the Free Software Foundation. If the Library does not specify a
|
the Free Software Foundation. If the Library does not specify a
|
||||||
license version number, you may choose any version ever published by
|
license version number, you may choose any version ever published by
|
||||||
the Free Software Foundation.
|
the Free Software Foundation.
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
programs whose distribution conditions are incompatible with these,
|
programs whose distribution conditions are incompatible with these,
|
||||||
write to the author to ask for permission. For software which is
|
write to the author to ask for permission. For software which is
|
||||||
|
@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
DAMAGES.
|
DAMAGES.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
@ -500,5 +500,3 @@ necessary. Here is a sample; alter the names:
|
||||||
Ty Coon, President of Vice
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
That's all there is to it!
|
That's all there is to it!
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
|
@ -0,0 +1,24 @@
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
__all__ = ['set_install_permissions', 'install', 'install_tree', 'traverse_tree',
|
__all__ = ['set_install_permissions', 'install', 'install_tree', 'traverse_tree',
|
||||||
'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
|
'expand_user', 'working_dir', 'touch', 'touchp', 'mkdirp',
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""LinkTree class for setting up trees of symbolic links."""
|
"""LinkTree class for setting up trees of symbolic links."""
|
||||||
__all__ = ['LinkTree']
|
__all__ = ['LinkTree']
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import fcntl
|
import fcntl
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""
|
"""
|
||||||
Routines for printing columnar output. See colify() for more information.
|
Routines for printing columnar output. See colify() for more information.
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""
|
"""
|
||||||
This file implements an expression syntax, similar to printf, for adding
|
This file implements an expression syntax, similar to printf, for adding
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""Utility classes for logging the output of blocks of code.
|
"""Utility classes for logging the output of blocks of code.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
|
|
||||||
# Version information
|
# Version information
|
||||||
from spack.version import Version
|
from spack.version import Version
|
||||||
spack_version = Version("0.8.15")
|
spack_version = Version("0.9")
|
||||||
|
|
||||||
#
|
#
|
||||||
# Executables used by Spack
|
# Executables used by Spack
|
||||||
|
@ -140,9 +140,7 @@
|
||||||
# don't add a second username if it's already unique by user.
|
# don't add a second username if it's already unique by user.
|
||||||
if not _tmp_user in path:
|
if not _tmp_user in path:
|
||||||
tmp_dirs.append(join_path(path, '%u', 'spack-stage'))
|
tmp_dirs.append(join_path(path, '%u', 'spack-stage'))
|
||||||
|
else:
|
||||||
for path in _tmp_candidates:
|
|
||||||
if not path in tmp_dirs:
|
|
||||||
tmp_dirs.append(join_path(path, 'spack-stage'))
|
tmp_dirs.append(join_path(path, 'spack-stage'))
|
||||||
|
|
||||||
# Whether spack should allow installation of unsafe versions of
|
# Whether spack should allow installation of unsafe versions of
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://scalability-llnl.github.io/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -34,14 +34,14 @@
|
||||||
|
|
||||||
class InvalidSysTypeError(serr.SpackError):
|
class InvalidSysTypeError(serr.SpackError):
|
||||||
def __init__(self, sys_type):
|
def __init__(self, sys_type):
|
||||||
super(InvalidSysTypeError, self).__init__(
|
super(InvalidSysTypeError,
|
||||||
"Invalid sys_type value for Spack: " + sys_type)
|
self).__init__("Invalid sys_type value for Spack: " + sys_type)
|
||||||
|
|
||||||
|
|
||||||
class NoSysTypeError(serr.SpackError):
|
class NoSysTypeError(serr.SpackError):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(NoSysTypeError, self).__init__(
|
super(NoSysTypeError,
|
||||||
"Could not determine sys_type for this machine.")
|
self).__init__("Could not determine sys_type for this machine.")
|
||||||
|
|
||||||
|
|
||||||
def get_sys_type_from_spack_globals():
|
def get_sys_type_from_spack_globals():
|
||||||
|
@ -69,15 +69,15 @@ def get_sys_type_from_platform():
|
||||||
@memoized
|
@memoized
|
||||||
def sys_type():
|
def sys_type():
|
||||||
"""Returns a SysType for the current machine."""
|
"""Returns a SysType for the current machine."""
|
||||||
methods = [get_sys_type_from_spack_globals,
|
methods = [get_sys_type_from_spack_globals, get_sys_type_from_environment,
|
||||||
get_sys_type_from_environment,
|
|
||||||
get_sys_type_from_platform]
|
get_sys_type_from_platform]
|
||||||
|
|
||||||
# search for a method that doesn't return None
|
# search for a method that doesn't return None
|
||||||
sys_type = None
|
sys_type = None
|
||||||
for method in methods:
|
for method in methods:
|
||||||
sys_type = method()
|
sys_type = method()
|
||||||
if sys_type: break
|
if sys_type:
|
||||||
|
break
|
||||||
|
|
||||||
# Couldn't determine the sys_type for this machine.
|
# Couldn't determine the sys_type for this machine.
|
||||||
if sys_type is None:
|
if sys_type is None:
|
||||||
|
|
|
@ -1,3 +1,27 @@
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
||||||
"""
|
"""
|
||||||
This module contains all routines related to setting up the package
|
This module contains all routines related to setting up the package
|
||||||
build environment. All of this is set up by package.py just before
|
build environment. All of this is set up by package.py just before
|
||||||
|
@ -27,15 +51,16 @@
|
||||||
Skimming this module is a nice way to get acquainted with the types of
|
Skimming this module is a nice way to get acquainted with the types of
|
||||||
calls you can make from within the install() function.
|
calls you can make from within the install() function.
|
||||||
"""
|
"""
|
||||||
import multiprocessing
|
|
||||||
import os
|
import os
|
||||||
import platform
|
|
||||||
import shutil
|
|
||||||
import sys
|
import sys
|
||||||
|
import shutil
|
||||||
|
import multiprocessing
|
||||||
|
import platform
|
||||||
|
|
||||||
import spack
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import *
|
from llnl.util.filesystem import *
|
||||||
|
|
||||||
|
import spack
|
||||||
from spack.environment import EnvironmentModifications, validate
|
from spack.environment import EnvironmentModifications, validate
|
||||||
from spack.util.environment import *
|
from spack.util.environment import *
|
||||||
from spack.util.executable import Executable, which
|
from spack.util.executable import Executable, which
|
||||||
|
@ -91,20 +116,22 @@ def __call__(self, *args, **kwargs):
|
||||||
|
|
||||||
def set_compiler_environment_variables(pkg, env):
|
def set_compiler_environment_variables(pkg, env):
|
||||||
assert pkg.spec.concrete
|
assert pkg.spec.concrete
|
||||||
|
compiler = pkg.compiler
|
||||||
|
flags = pkg.spec.compiler_flags
|
||||||
|
|
||||||
# Set compiler variables used by CMake and autotools
|
# Set compiler variables used by CMake and autotools
|
||||||
assert all(key in pkg.compiler.link_paths for key in ('cc', 'cxx', 'f77', 'fc'))
|
assert all(key in compiler.link_paths for key in ('cc', 'cxx', 'f77', 'fc'))
|
||||||
|
|
||||||
# Populate an object with the list of environment modifications
|
# Populate an object with the list of environment modifications
|
||||||
# and return it
|
# and return it
|
||||||
# TODO : add additional kwargs for better diagnostics, like requestor, ttyout, ttyerr, etc.
|
# TODO : add additional kwargs for better diagnostics, like requestor, ttyout, ttyerr, etc.
|
||||||
link_dir = spack.build_env_path
|
link_dir = spack.build_env_path
|
||||||
env.set('CC', join_path(link_dir, pkg.compiler.link_paths['cc']))
|
env.set('CC', join_path(link_dir, compiler.link_paths['cc']))
|
||||||
env.set('CXX', join_path(link_dir, pkg.compiler.link_paths['cxx']))
|
env.set('CXX', join_path(link_dir, compiler.link_paths['cxx']))
|
||||||
env.set('F77', join_path(link_dir, pkg.compiler.link_paths['f77']))
|
env.set('F77', join_path(link_dir, compiler.link_paths['f77']))
|
||||||
env.set('FC', join_path(link_dir, pkg.compiler.link_paths['fc']))
|
env.set('FC', join_path(link_dir, compiler.link_paths['fc']))
|
||||||
|
|
||||||
# Set SPACK compiler variables so that our wrapper knows what to call
|
# Set SPACK compiler variables so that our wrapper knows what to call
|
||||||
compiler = pkg.compiler
|
|
||||||
if compiler.cc:
|
if compiler.cc:
|
||||||
env.set('SPACK_CC', compiler.cc)
|
env.set('SPACK_CC', compiler.cc)
|
||||||
if compiler.cxx:
|
if compiler.cxx:
|
||||||
|
@ -114,6 +141,18 @@ def set_compiler_environment_variables(pkg, env):
|
||||||
if compiler.fc:
|
if compiler.fc:
|
||||||
env.set('SPACK_FC', compiler.fc)
|
env.set('SPACK_FC', compiler.fc)
|
||||||
|
|
||||||
|
# Set SPACK compiler rpath flags so that our wrapper knows what to use
|
||||||
|
env.set('SPACK_CC_RPATH_ARG', compiler.cc_rpath_arg)
|
||||||
|
env.set('SPACK_CXX_RPATH_ARG', compiler.cxx_rpath_arg)
|
||||||
|
env.set('SPACK_F77_RPATH_ARG', compiler.f77_rpath_arg)
|
||||||
|
env.set('SPACK_FC_RPATH_ARG', compiler.fc_rpath_arg)
|
||||||
|
|
||||||
|
# Add every valid compiler flag to the environment, prefixed with "SPACK_"
|
||||||
|
for flag in spack.spec.FlagMap.valid_compiler_flags():
|
||||||
|
# Concreteness guarantees key safety here
|
||||||
|
if flags[flag] != []:
|
||||||
|
env.set('SPACK_' + flag.upper(), ' '.join(f for f in flags[flag]))
|
||||||
|
|
||||||
env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))
|
env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))
|
||||||
return env
|
return env
|
||||||
|
|
||||||
|
@ -175,8 +214,8 @@ def set_build_environment_variables(pkg, env):
|
||||||
# Add any pkgconfig directories to PKG_CONFIG_PATH
|
# Add any pkgconfig directories to PKG_CONFIG_PATH
|
||||||
pkg_config_dirs = []
|
pkg_config_dirs = []
|
||||||
for p in dep_prefixes:
|
for p in dep_prefixes:
|
||||||
for libdir in ('lib', 'lib64'):
|
for maybe in ('lib', 'lib64', 'share'):
|
||||||
pcdir = join_path(p, libdir, 'pkgconfig')
|
pcdir = join_path(p, maybe, 'pkgconfig')
|
||||||
if os.path.isdir(pcdir):
|
if os.path.isdir(pcdir):
|
||||||
pkg_config_dirs.append(pcdir)
|
pkg_config_dirs.append(pcdir)
|
||||||
env.set_path('PKG_CONFIG_PATH', pkg_config_dirs)
|
env.set_path('PKG_CONFIG_PATH', pkg_config_dirs)
|
||||||
|
@ -213,7 +252,7 @@ def set_module_variables_for_package(pkg, module):
|
||||||
# TODO: of build dependencies, as opposed to link dependencies.
|
# TODO: of build dependencies, as opposed to link dependencies.
|
||||||
# TODO: Currently, everything is a link dependency, but tools like
|
# TODO: Currently, everything is a link dependency, but tools like
|
||||||
# TODO: this shouldn't be.
|
# TODO: this shouldn't be.
|
||||||
m.cmake = which("cmake")
|
m.cmake = Executable('cmake')
|
||||||
|
|
||||||
# standard CMake arguments
|
# standard CMake arguments
|
||||||
m.std_cmake_args = ['-DCMAKE_INSTALL_PREFIX=%s' % pkg.prefix,
|
m.std_cmake_args = ['-DCMAKE_INSTALL_PREFIX=%s' % pkg.prefix,
|
||||||
|
@ -278,21 +317,6 @@ def parent_class_modules(cls):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def setup_module_variables_for_dag(pkg):
|
|
||||||
"""Set module-scope variables for all packages in the DAG."""
|
|
||||||
for spec in pkg.spec.traverse(order='post'):
|
|
||||||
# If a user makes their own package repo, e.g.
|
|
||||||
# spack.repos.mystuff.libelf.Libelf, and they inherit from
|
|
||||||
# an existing class like spack.repos.original.libelf.Libelf,
|
|
||||||
# then set the module variables for both classes so the
|
|
||||||
# parent class can still use them if it gets called.
|
|
||||||
spkg = spec.package
|
|
||||||
modules = parent_class_modules(spkg.__class__)
|
|
||||||
for mod in modules:
|
|
||||||
set_module_variables_for_package(spkg, mod)
|
|
||||||
set_module_variables_for_package(spkg, spkg.module)
|
|
||||||
|
|
||||||
|
|
||||||
def setup_package(pkg):
|
def setup_package(pkg):
|
||||||
"""Execute all environment setup routines."""
|
"""Execute all environment setup routines."""
|
||||||
spack_env = EnvironmentModifications()
|
spack_env = EnvironmentModifications()
|
||||||
|
@ -316,20 +340,27 @@ def setup_package(pkg):
|
||||||
|
|
||||||
set_compiler_environment_variables(pkg, spack_env)
|
set_compiler_environment_variables(pkg, spack_env)
|
||||||
set_build_environment_variables(pkg, spack_env)
|
set_build_environment_variables(pkg, spack_env)
|
||||||
setup_module_variables_for_dag(pkg)
|
|
||||||
|
# traverse in postorder so package can use vars from its dependencies
|
||||||
|
spec = pkg.spec
|
||||||
|
for dspec in pkg.spec.traverse(order='post', root=False):
|
||||||
|
# If a user makes their own package repo, e.g.
|
||||||
|
# spack.repos.mystuff.libelf.Libelf, and they inherit from
|
||||||
|
# an existing class like spack.repos.original.libelf.Libelf,
|
||||||
|
# then set the module variables for both classes so the
|
||||||
|
# parent class can still use them if it gets called.
|
||||||
|
spkg = dspec.package
|
||||||
|
modules = parent_class_modules(spkg.__class__)
|
||||||
|
for mod in modules:
|
||||||
|
set_module_variables_for_package(spkg, mod)
|
||||||
|
set_module_variables_for_package(spkg, spkg.module)
|
||||||
|
|
||||||
# Allow dependencies to modify the module
|
# Allow dependencies to modify the module
|
||||||
spec = pkg.spec
|
dpkg = dspec.package
|
||||||
for dependency_spec in spec.traverse(root=False):
|
|
||||||
dpkg = dependency_spec.package
|
|
||||||
dpkg.setup_dependent_package(pkg.module, spec)
|
dpkg.setup_dependent_package(pkg.module, spec)
|
||||||
|
|
||||||
# Allow dependencies to set up environment as well
|
|
||||||
for dependency_spec in spec.traverse(root=False):
|
|
||||||
dpkg = dependency_spec.package
|
|
||||||
dpkg.setup_dependent_environment(spack_env, run_env, spec)
|
dpkg.setup_dependent_environment(spack_env, run_env, spec)
|
||||||
|
|
||||||
# Allow the package to apply some settings.
|
set_module_variables_for_package(pkg, pkg.module)
|
||||||
pkg.setup_environment(spack_env, run_env)
|
pkg.setup_environment(spack_env, run_env)
|
||||||
|
|
||||||
# Make sure nothing's strange about the Spack environment.
|
# Make sure nothing's strange about the Spack environment.
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import spack
|
import spack
|
||||||
import spack.architecture as architecture
|
import spack.architecture as architecture
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
from subprocess import check_call
|
from subprocess import check_call
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import spack.cmd.location
|
import spack.cmd.location
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2014, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,40 +1,39 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.color import colorize
|
|
||||||
from llnl.util.tty.colify import colify
|
|
||||||
from llnl.util.lang import index_by
|
|
||||||
|
|
||||||
import spack.compilers
|
import spack.compilers
|
||||||
import spack.spec
|
|
||||||
import spack.config
|
import spack.config
|
||||||
from spack.util.environment import get_path
|
import spack.spec
|
||||||
|
from llnl.util.lang import index_by
|
||||||
|
from llnl.util.tty.colify import colify
|
||||||
|
from llnl.util.tty.color import colorize
|
||||||
from spack.spec import CompilerSpec
|
from spack.spec import CompilerSpec
|
||||||
|
from spack.util.environment import get_path
|
||||||
|
|
||||||
description = "Manage compilers"
|
description = "Manage compilers"
|
||||||
|
|
||||||
|
@ -44,10 +43,10 @@ def setup_parser(subparser):
|
||||||
|
|
||||||
scopes = spack.config.config_scopes
|
scopes = spack.config.config_scopes
|
||||||
|
|
||||||
# Add
|
# Find
|
||||||
add_parser = sp.add_parser('add', help='Add compilers to the Spack configuration.')
|
find_parser = sp.add_parser('find', aliases=['add'], help='Search the system for compilers to add to the Spack configuration.')
|
||||||
add_parser.add_argument('add_paths', nargs=argparse.REMAINDER)
|
find_parser.add_argument('add_paths', nargs=argparse.REMAINDER)
|
||||||
add_parser.add_argument('--scope', choices=scopes, default=spack.cmd.default_modify_scope,
|
find_parser.add_argument('--scope', choices=scopes, default=spack.cmd.default_modify_scope,
|
||||||
help="Configuration scope to modify.")
|
help="Configuration scope to modify.")
|
||||||
|
|
||||||
# Remove
|
# Remove
|
||||||
|
@ -70,7 +69,7 @@ def setup_parser(subparser):
|
||||||
help="Configuration scope to read from.")
|
help="Configuration scope to read from.")
|
||||||
|
|
||||||
|
|
||||||
def compiler_add(args):
|
def compiler_find(args):
|
||||||
"""Search either $PATH or a list of paths for compilers and add them
|
"""Search either $PATH or a list of paths for compilers and add them
|
||||||
to Spack's configuration."""
|
to Spack's configuration."""
|
||||||
paths = args.add_paths
|
paths = args.add_paths
|
||||||
|
@ -136,7 +135,8 @@ def compiler_list(args):
|
||||||
|
|
||||||
|
|
||||||
def compiler(parser, args):
|
def compiler(parser, args):
|
||||||
action = { 'add' : compiler_add,
|
action = { 'add' : compiler_find,
|
||||||
|
'find' : compiler_find,
|
||||||
'remove' : compiler_remove,
|
'remove' : compiler_remove,
|
||||||
'rm' : compiler_remove,
|
'rm' : compiler_remove,
|
||||||
'info' : compiler_info,
|
'info' : compiler_info,
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.colify import colify
|
from llnl.util.tty.colify import colify
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
|
|
|
@ -1,27 +1,29 @@
|
||||||
|
_copyright = """\
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
"""
|
||||||
import string
|
import string
|
||||||
import os
|
import os
|
||||||
import hashlib
|
import hashlib
|
||||||
|
@ -47,22 +49,22 @@
|
||||||
|
|
||||||
description = "Create a new package file from an archive URL"
|
description = "Create a new package file from an archive URL"
|
||||||
|
|
||||||
package_template = string.Template("""\
|
package_template = string.Template(
|
||||||
# FIXME:
|
_copyright + """
|
||||||
# This is a template package file for Spack. We've conveniently
|
|
||||||
# put "FIXME" labels next to all the things you'll want to change.
|
|
||||||
#
|
#
|
||||||
# Once you've edited all the FIXME's, delete this whole message,
|
# This is a template package file for Spack. We've put "FIXME"
|
||||||
# save this file, and test out your package like this:
|
# 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 ${name}
|
# spack install ${name}
|
||||||
#
|
#
|
||||||
# You can always get back here to change things with:
|
# You can edit this file again by typing:
|
||||||
#
|
#
|
||||||
# spack edit ${name}
|
# spack edit ${name}
|
||||||
#
|
#
|
||||||
# See the spack documentation for more information on building
|
# See the Spack documentation for more information on packaging.
|
||||||
# packages.
|
# If you submit this package back to Spack as a pull request,
|
||||||
|
# please first remove this boilerplate and all FIXME comments.
|
||||||
#
|
#
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
@ -124,10 +126,12 @@ def __call__(self, stage):
|
||||||
autotools = "configure('--prefix=%s' % prefix)"
|
autotools = "configure('--prefix=%s' % prefix)"
|
||||||
cmake = "cmake('.', *std_cmake_args)"
|
cmake = "cmake('.', *std_cmake_args)"
|
||||||
python = "python('setup.py', 'install', '--prefix=%s' % prefix)"
|
python = "python('setup.py', 'install', '--prefix=%s' % prefix)"
|
||||||
|
r = "R('CMD', 'INSTALL', '--library=%s' % self.module.r_lib_dir, '%s' % self.stage.archive_file)"
|
||||||
|
|
||||||
config_lines = ((r'/configure$', 'autotools', autotools),
|
config_lines = ((r'/configure$', 'autotools', autotools),
|
||||||
(r'/CMakeLists.txt$', 'cmake', cmake),
|
(r'/CMakeLists.txt$', 'cmake', cmake),
|
||||||
(r'/setup.py$', 'python', python))
|
(r'/setup.py$', 'python', python),
|
||||||
|
(r'/NAMESPACE$', 'r', r))
|
||||||
|
|
||||||
# Peek inside the tarball.
|
# Peek inside the tarball.
|
||||||
tar = which('tar')
|
tar = which('tar')
|
||||||
|
@ -272,6 +276,10 @@ def create(parser, args):
|
||||||
if guesser.build_system == 'python':
|
if guesser.build_system == 'python':
|
||||||
name = 'py-%s' % name
|
name = 'py-%s' % name
|
||||||
|
|
||||||
|
# Prepend 'r-' to R package names, by convention.
|
||||||
|
if guesser.build_system == 'r':
|
||||||
|
name = 'r-%s' % name
|
||||||
|
|
||||||
# Create a directory for the new package.
|
# Create a directory for the new package.
|
||||||
pkg_path = repo.filename_for_package_name(name)
|
pkg_path = repo.filename_for_package_name(name)
|
||||||
if os.path.exists(pkg_path) and not args.force:
|
if os.path.exists(pkg_path) and not args.force:
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
description = "Run pydoc from within spack."
|
description = "Run pydoc from within spack."
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import string
|
import string
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import argparse
|
import argparse
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import argparse
|
import argparse
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,77 +1,100 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
|
||||||
import collections
|
|
||||||
import itertools
|
|
||||||
import argparse
|
import argparse
|
||||||
from StringIO import StringIO
|
import sys
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.colify import *
|
|
||||||
from llnl.util.tty.color import *
|
|
||||||
from llnl.util.lang import *
|
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
import spack.spec
|
import spack.spec
|
||||||
|
from llnl.util.lang import *
|
||||||
|
from llnl.util.tty.colify import *
|
||||||
|
from llnl.util.tty.color import *
|
||||||
|
|
||||||
|
description = "Find installed spack packages"
|
||||||
|
|
||||||
description ="Find installed spack packages"
|
|
||||||
|
|
||||||
def setup_parser(subparser):
|
def setup_parser(subparser):
|
||||||
format_group = subparser.add_mutually_exclusive_group()
|
format_group = subparser.add_mutually_exclusive_group()
|
||||||
format_group.add_argument(
|
format_group.add_argument('-s', '--short',
|
||||||
'-s', '--short', action='store_const', dest='mode', const='short',
|
action='store_const',
|
||||||
|
dest='mode',
|
||||||
|
const='short',
|
||||||
help='Show only specs (default)')
|
help='Show only specs (default)')
|
||||||
format_group.add_argument(
|
format_group.add_argument('-p', '--paths',
|
||||||
'-p', '--paths', action='store_const', dest='mode', const='paths',
|
action='store_const',
|
||||||
|
dest='mode',
|
||||||
|
const='paths',
|
||||||
help='Show paths to package install directories')
|
help='Show paths to package install directories')
|
||||||
format_group.add_argument(
|
format_group.add_argument(
|
||||||
'-d', '--deps', action='store_const', dest='mode', const='deps',
|
'-d', '--deps',
|
||||||
|
action='store_const',
|
||||||
|
dest='mode',
|
||||||
|
const='deps',
|
||||||
help='Show full dependency DAG of installed packages')
|
help='Show full dependency DAG of installed packages')
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument('-l', '--long',
|
||||||
'-l', '--long', action='store_true',
|
action='store_true',
|
||||||
|
dest='long',
|
||||||
help='Show dependency hashes as well as versions.')
|
help='Show dependency hashes as well as versions.')
|
||||||
subparser.add_argument(
|
subparser.add_argument('-L', '--very-long',
|
||||||
'-L', '--very-long', action='store_true',
|
action='store_true',
|
||||||
|
dest='very_long',
|
||||||
help='Show dependency hashes as well as versions.')
|
help='Show dependency hashes as well as versions.')
|
||||||
|
subparser.add_argument('-f', '--show-flags',
|
||||||
|
action='store_true',
|
||||||
|
dest='show_flags',
|
||||||
|
help='Show spec compiler flags.')
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'-u', '--unknown', action='store_true',
|
'-e', '--explicit',
|
||||||
|
action='store_true',
|
||||||
|
help='Show only specs that were installed explicitly')
|
||||||
|
subparser.add_argument(
|
||||||
|
'-E', '--implicit',
|
||||||
|
action='store_true',
|
||||||
|
help='Show only specs that were installed as dependencies')
|
||||||
|
subparser.add_argument(
|
||||||
|
'-u', '--unknown',
|
||||||
|
action='store_true',
|
||||||
|
dest='unknown',
|
||||||
help='Show only specs Spack does not have a package for.')
|
help='Show only specs Spack does not have a package for.')
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'-m', '--missing', action='store_true',
|
'-m', '--missing',
|
||||||
|
action='store_true',
|
||||||
|
dest='missing',
|
||||||
help='Show missing dependencies as well as installed specs.')
|
help='Show missing dependencies as well as installed specs.')
|
||||||
subparser.add_argument(
|
subparser.add_argument('-M', '--only-missing',
|
||||||
'-M', '--only-missing', action='store_true',
|
action='store_true',
|
||||||
|
dest='only_missing',
|
||||||
help='Show only missing dependencies.')
|
help='Show only missing dependencies.')
|
||||||
subparser.add_argument(
|
subparser.add_argument('-N', '--namespace',
|
||||||
'-N', '--namespace', action='store_true',
|
action='store_true',
|
||||||
help='Show fully qualified package names.')
|
help='Show fully qualified package names.')
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument('query_specs',
|
||||||
'query_specs', nargs=argparse.REMAINDER,
|
nargs=argparse.REMAINDER,
|
||||||
help='optional specs to filter results')
|
help='optional specs to filter results')
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,23 +112,29 @@ def display_specs(specs, **kwargs):
|
||||||
hashes = True
|
hashes = True
|
||||||
hlen = None
|
hlen = None
|
||||||
|
|
||||||
|
nfmt = '.' if namespace else '_'
|
||||||
|
format_string = '$%s$@$+' % nfmt
|
||||||
|
flags = kwargs.get('show_flags', False)
|
||||||
|
if flags:
|
||||||
|
format_string = '$%s$@$%%+$+' % nfmt
|
||||||
|
|
||||||
# Make a dict with specs keyed by architecture and compiler.
|
# Make a dict with specs keyed by architecture and compiler.
|
||||||
index = index_by(specs, ('architecture', 'compiler'))
|
index = index_by(specs, ('architecture', 'compiler'))
|
||||||
|
|
||||||
# Traverse the index and print out each package
|
# Traverse the index and print out each package
|
||||||
for i, (architecture, compiler) in enumerate(sorted(index)):
|
for i, (architecture, compiler) in enumerate(sorted(index)):
|
||||||
if i > 0: print
|
if i > 0:
|
||||||
|
print
|
||||||
|
|
||||||
header = "%s{%s} / %s{%s}" % (
|
header = "%s{%s} / %s{%s}" % (spack.spec.architecture_color,
|
||||||
spack.spec.architecture_color, architecture,
|
architecture, spack.spec.compiler_color,
|
||||||
spack.spec.compiler_color, compiler)
|
compiler)
|
||||||
tty.hline(colorize(header), char='-')
|
tty.hline(colorize(header), char='-')
|
||||||
|
|
||||||
specs = index[(architecture,compiler)]
|
specs = index[(architecture, compiler)]
|
||||||
specs.sort()
|
specs.sort()
|
||||||
|
|
||||||
nfmt = '.' if namespace else '_'
|
abbreviated = [s.format(format_string, color=True) for s in specs]
|
||||||
abbreviated = [s.format('$%s$@$+' % nfmt, color=True) for s in specs]
|
|
||||||
if mode == 'paths':
|
if mode == 'paths':
|
||||||
# Print one spec per line along with prefix path
|
# Print one spec per line along with prefix path
|
||||||
width = max(len(s) for s in abbreviated)
|
width = max(len(s) for s in abbreviated)
|
||||||
|
@ -114,18 +143,21 @@ def display_specs(specs, **kwargs):
|
||||||
|
|
||||||
for abbrv, spec in zip(abbreviated, specs):
|
for abbrv, spec in zip(abbreviated, specs):
|
||||||
if hashes:
|
if hashes:
|
||||||
print gray_hash(spec, hlen),
|
print(gray_hash(spec, hlen), )
|
||||||
print format % (abbrv, spec.prefix)
|
print(format % (abbrv, spec.prefix))
|
||||||
|
|
||||||
elif mode == 'deps':
|
elif mode == 'deps':
|
||||||
for spec in specs:
|
for spec in specs:
|
||||||
print spec.tree(
|
print(spec.tree(
|
||||||
format='$%s$@$+' % nfmt,
|
format=format_string,
|
||||||
color=True,
|
color=True,
|
||||||
indent=4,
|
indent=4,
|
||||||
prefix=(lambda s: gray_hash(s, hlen)) if hashes else None)
|
prefix=(lambda s: gray_hash(s, hlen)) if hashes else None))
|
||||||
|
|
||||||
elif mode == 'short':
|
elif mode == 'short':
|
||||||
|
# Print columns of output if not printing flags
|
||||||
|
if not flags:
|
||||||
|
|
||||||
def fmt(s):
|
def fmt(s):
|
||||||
string = ""
|
string = ""
|
||||||
if hashes:
|
if hashes:
|
||||||
|
@ -133,19 +165,26 @@ def fmt(s):
|
||||||
string += s.format('$-%s$@$+' % nfmt, color=True)
|
string += s.format('$-%s$@$+' % nfmt, color=True)
|
||||||
|
|
||||||
return string
|
return string
|
||||||
|
|
||||||
colify(fmt(s) for s in specs)
|
colify(fmt(s) for s in specs)
|
||||||
|
# Print one entry per line if including flags
|
||||||
|
else:
|
||||||
|
for spec in specs:
|
||||||
|
# Print the hash if necessary
|
||||||
|
hsh = gray_hash(spec, hlen) + ' ' if hashes else ''
|
||||||
|
print(hsh + spec.format(format_string, color=True) + '\n')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"Invalid mode for display_specs: %s. Must be one of (paths, deps, short)." % mode)
|
"Invalid mode for display_specs: %s. Must be one of (paths,"
|
||||||
|
"deps, short)." % mode) # NOQA: ignore=E501
|
||||||
|
|
||||||
|
|
||||||
def find(parser, args):
|
def find(parser, args):
|
||||||
# Filter out specs that don't exist.
|
# Filter out specs that don't exist.
|
||||||
query_specs = spack.cmd.parse_specs(args.query_specs)
|
query_specs = spack.cmd.parse_specs(args.query_specs)
|
||||||
query_specs, nonexisting = partition_list(
|
query_specs, nonexisting = partition_list(
|
||||||
query_specs, lambda s: spack.repo.exists(s.name))
|
query_specs, lambda s: spack.repo.exists(s.name) or not s.name)
|
||||||
|
|
||||||
if nonexisting:
|
if nonexisting:
|
||||||
msg = "No such package%s: " % ('s' if len(nonexisting) > 1 else '')
|
msg = "No such package%s: " % ('s' if len(nonexisting) > 1 else '')
|
||||||
|
@ -163,13 +202,21 @@ def find(parser, args):
|
||||||
installed = any
|
installed = any
|
||||||
if args.unknown:
|
if args.unknown:
|
||||||
known = False
|
known = False
|
||||||
q_args = { 'installed' : installed, 'known' : known }
|
|
||||||
|
explicit = any
|
||||||
|
if args.explicit:
|
||||||
|
explicit = False
|
||||||
|
if args.implicit:
|
||||||
|
explicit = True
|
||||||
|
|
||||||
|
q_args = {'installed': installed, 'known': known, "explicit": explicit}
|
||||||
|
|
||||||
# Get all the specs the user asked for
|
# Get all the specs the user asked for
|
||||||
if not query_specs:
|
if not query_specs:
|
||||||
specs = set(spack.installed_db.query(**q_args))
|
specs = set(spack.installed_db.query(**q_args))
|
||||||
else:
|
else:
|
||||||
results = [set(spack.installed_db.query(qs, **q_args)) for qs in query_specs]
|
results = [set(spack.installed_db.query(qs, **q_args))
|
||||||
|
for qs in query_specs]
|
||||||
specs = set.union(*results)
|
specs = set.union(*results)
|
||||||
|
|
||||||
if not args.mode:
|
if not args.mode:
|
||||||
|
@ -177,7 +224,8 @@ def find(parser, args):
|
||||||
|
|
||||||
if sys.stdout.isatty():
|
if sys.stdout.isatty():
|
||||||
tty.msg("%d installed packages." % len(specs))
|
tty.msg("%d installed packages." % len(specs))
|
||||||
display_specs(specs, mode=args.mode,
|
display_specs(specs,
|
||||||
|
mode=args.mode,
|
||||||
long=args.long,
|
long=args.long,
|
||||||
very_long=args.very_long,
|
very_long=args.very_long,
|
||||||
namespace=args.namespace)
|
show_flags=args.show_flags)
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import textwrap
|
import textwrap
|
||||||
from llnl.util.tty.colify import *
|
from llnl.util.tty.colify import *
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
@ -78,4 +78,5 @@ def install(parser, args):
|
||||||
ignore_deps=args.ignore_deps,
|
ignore_deps=args.ignore_deps,
|
||||||
make_jobs=args.jobs,
|
make_jobs=args.jobs,
|
||||||
verbose=args.verbose,
|
verbose=args.verbose,
|
||||||
fake=args.fake)
|
fake=args.fake,
|
||||||
|
explicit=True)
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by David Beckingsale, david@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2014, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,54 +1,52 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import argparse
|
import sys
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.lang import partition_list
|
|
||||||
from llnl.util.filesystem import mkdirp
|
|
||||||
|
|
||||||
import spack.cmd
|
import spack.cmd
|
||||||
|
from llnl.util.filesystem import mkdirp
|
||||||
from spack.modules import module_types
|
from spack.modules import module_types
|
||||||
from spack.util.string import *
|
from spack.util.string import *
|
||||||
|
|
||||||
from spack.spec import Spec
|
description = "Manipulate modules and dotkits."
|
||||||
|
|
||||||
description ="Manipulate modules and dotkits."
|
|
||||||
|
|
||||||
|
|
||||||
def setup_parser(subparser):
|
def setup_parser(subparser):
|
||||||
sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='module_command')
|
sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='module_command')
|
||||||
|
|
||||||
refresh_parser = sp.add_parser('refresh', help='Regenerate all module files.')
|
sp.add_parser('refresh', help='Regenerate all module files.')
|
||||||
|
|
||||||
find_parser = sp.add_parser('find', help='Find module files for packages.')
|
find_parser = sp.add_parser('find', help='Find module files for packages.')
|
||||||
find_parser.add_argument(
|
find_parser.add_argument('module_type',
|
||||||
'module_type', help="Type of module to find file for. [" + '|'.join(module_types) + "]")
|
help="Type of module to find file for. [" +
|
||||||
find_parser.add_argument('spec', nargs='+', help='spec to find a module file for.')
|
'|'.join(module_types) + "]")
|
||||||
|
find_parser.add_argument('spec',
|
||||||
|
nargs='+',
|
||||||
|
help='spec to find a module file for.')
|
||||||
|
|
||||||
|
|
||||||
def module_find(mtype, spec_array):
|
def module_find(mtype, spec_array):
|
||||||
|
@ -58,7 +56,8 @@ def module_find(mtype, spec_array):
|
||||||
should type to use that package's module.
|
should type to use that package's module.
|
||||||
"""
|
"""
|
||||||
if mtype not in module_types:
|
if mtype not in module_types:
|
||||||
tty.die("Invalid module type: '%s'. Options are %s" % (mtype, comma_or(module_types)))
|
tty.die("Invalid module type: '%s'. Options are %s" %
|
||||||
|
(mtype, comma_or(module_types)))
|
||||||
|
|
||||||
specs = spack.cmd.parse_specs(spec_array)
|
specs = spack.cmd.parse_specs(spec_array)
|
||||||
if len(specs) > 1:
|
if len(specs) > 1:
|
||||||
|
@ -94,11 +93,9 @@ def module_refresh():
|
||||||
shutil.rmtree(cls.path, ignore_errors=False)
|
shutil.rmtree(cls.path, ignore_errors=False)
|
||||||
mkdirp(cls.path)
|
mkdirp(cls.path)
|
||||||
for spec in specs:
|
for spec in specs:
|
||||||
tty.debug(" Writing file for %s" % spec)
|
|
||||||
cls(spec).write()
|
cls(spec).write()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def module(parser, args):
|
def module(parser, args):
|
||||||
if args.module_command == 'refresh':
|
if args.module_command == 'refresh':
|
||||||
module_refresh()
|
module_refresh()
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import re
|
import re
|
||||||
import cgi
|
import cgi
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import argparse
|
import argparse
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import spack.stage as stage
|
import spack.stage as stage
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack
|
import spack
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://software.llnl.gov/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2014, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack.cmd
|
import spack.cmd
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import argparse
|
import argparse
|
||||||
|
|
|
@ -1,109 +1,128 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
import itertools
|
|
||||||
import re
|
|
||||||
import os
|
|
||||||
import codecs
|
import codecs
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import xml.dom.minidom
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import *
|
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
|
import spack.cmd
|
||||||
|
from llnl.util.filesystem import *
|
||||||
from spack.build_environment import InstallError
|
from spack.build_environment import InstallError
|
||||||
from spack.fetch_strategy import FetchError
|
from spack.fetch_strategy import FetchError
|
||||||
import spack.cmd
|
|
||||||
|
|
||||||
description = "Run package installation as a unit test, output formatted results."
|
description = "Run package installation as a unit test, output formatted results."
|
||||||
|
|
||||||
|
|
||||||
def setup_parser(subparser):
|
def setup_parser(subparser):
|
||||||
subparser.add_argument(
|
subparser.add_argument('-j',
|
||||||
'-j', '--jobs', action='store', type=int,
|
'--jobs',
|
||||||
|
action='store',
|
||||||
|
type=int,
|
||||||
help="Explicitly set number of make jobs. Default is #cpus.")
|
help="Explicitly set number of make jobs. Default is #cpus.")
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument('-n',
|
||||||
'-n', '--no-checksum', action='store_true', dest='no_checksum',
|
'--no-checksum',
|
||||||
|
action='store_true',
|
||||||
|
dest='no_checksum',
|
||||||
help="Do not check packages against checksum")
|
help="Do not check packages against checksum")
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument('-o', '--output', action='store', help="test output goes in this file")
|
||||||
'-o', '--output', action='store', help="test output goes in this file")
|
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument('package', nargs=argparse.REMAINDER, help="spec of package to install")
|
||||||
'package', nargs=argparse.REMAINDER, help="spec of package to install")
|
|
||||||
|
|
||||||
|
|
||||||
class JunitResultFormat(object):
|
|
||||||
def __init__(self):
|
|
||||||
self.root = ET.Element('testsuite')
|
|
||||||
self.tests = []
|
|
||||||
|
|
||||||
def add_test(self, buildId, testResult, buildInfo=None):
|
|
||||||
self.tests.append((buildId, testResult, buildInfo))
|
|
||||||
|
|
||||||
def write_to(self, stream):
|
|
||||||
self.root.set('tests', '{0}'.format(len(self.tests)))
|
|
||||||
for buildId, testResult, buildInfo in self.tests:
|
|
||||||
testcase = ET.SubElement(self.root, 'testcase')
|
|
||||||
testcase.set('classname', buildId.name)
|
|
||||||
testcase.set('name', buildId.stringId())
|
|
||||||
if testResult == TestResult.FAILED:
|
|
||||||
failure = ET.SubElement(testcase, 'failure')
|
|
||||||
failure.set('type', "Build Error")
|
|
||||||
failure.text = buildInfo
|
|
||||||
elif testResult == TestResult.SKIPPED:
|
|
||||||
skipped = ET.SubElement(testcase, 'skipped')
|
|
||||||
skipped.set('type', "Skipped Build")
|
|
||||||
skipped.text = buildInfo
|
|
||||||
ET.ElementTree(self.root).write(stream)
|
|
||||||
|
|
||||||
|
|
||||||
class TestResult(object):
|
class TestResult(object):
|
||||||
PASSED = 0
|
PASSED = 0
|
||||||
FAILED = 1
|
FAILED = 1
|
||||||
SKIPPED = 2
|
SKIPPED = 2
|
||||||
|
ERRORED = 3
|
||||||
|
|
||||||
|
|
||||||
class BuildId(object):
|
class TestSuite(object):
|
||||||
def __init__(self, spec):
|
def __init__(self, filename):
|
||||||
self.name = spec.name
|
self.filename = filename
|
||||||
self.version = spec.version
|
self.root = ET.Element('testsuite')
|
||||||
self.hashId = spec.dag_hash()
|
self.tests = []
|
||||||
|
|
||||||
def stringId(self):
|
def __enter__(self):
|
||||||
return "-".join(str(x) for x in (self.name, self.version, self.hashId))
|
return self
|
||||||
|
|
||||||
def __hash__(self):
|
def append(self, item):
|
||||||
return hash((self.name, self.version, self.hashId))
|
if not isinstance(item, TestCase):
|
||||||
|
raise TypeError('only TestCase instances may be appended to a TestSuite instance')
|
||||||
|
self.tests.append(item) # Append the item to the list of tests
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
if not isinstance(other, BuildId):
|
# Prepare the header for the entire test suite
|
||||||
return False
|
number_of_errors = sum(x.result_type == TestResult.ERRORED for x in self.tests)
|
||||||
|
self.root.set('errors', str(number_of_errors))
|
||||||
|
number_of_failures = sum(x.result_type == TestResult.FAILED for x in self.tests)
|
||||||
|
self.root.set('failures', str(number_of_failures))
|
||||||
|
self.root.set('tests', str(len(self.tests)))
|
||||||
|
|
||||||
return ((self.name, self.version, self.hashId) ==
|
for item in self.tests:
|
||||||
(other.name, other.version, other.hashId))
|
self.root.append(item.element)
|
||||||
|
|
||||||
|
with open(self.filename, 'wb') as file:
|
||||||
|
xml_string = ET.tostring(self.root)
|
||||||
|
xml_string = xml.dom.minidom.parseString(xml_string).toprettyxml()
|
||||||
|
file.write(xml_string)
|
||||||
|
|
||||||
|
|
||||||
|
class TestCase(object):
|
||||||
|
|
||||||
|
results = {
|
||||||
|
TestResult.PASSED: None,
|
||||||
|
TestResult.SKIPPED: 'skipped',
|
||||||
|
TestResult.FAILED: 'failure',
|
||||||
|
TestResult.ERRORED: 'error',
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, classname, name, time=None):
|
||||||
|
self.element = ET.Element('testcase')
|
||||||
|
self.element.set('classname', str(classname))
|
||||||
|
self.element.set('name', str(name))
|
||||||
|
if time is not None:
|
||||||
|
self.element.set('time', str(time))
|
||||||
|
self.result_type = None
|
||||||
|
|
||||||
|
def set_result(self, result_type, message=None, error_type=None, text=None):
|
||||||
|
self.result_type = result_type
|
||||||
|
result = TestCase.results[self.result_type]
|
||||||
|
if result is not None and result is not TestResult.PASSED:
|
||||||
|
subelement = ET.SubElement(self.element, result)
|
||||||
|
if error_type is not None:
|
||||||
|
subelement.set('type', error_type)
|
||||||
|
if message is not None:
|
||||||
|
subelement.set('message', str(message))
|
||||||
|
if text is not None:
|
||||||
|
subelement.text = text
|
||||||
|
|
||||||
|
|
||||||
def fetch_log(path):
|
def fetch_log(path):
|
||||||
|
@ -114,46 +133,76 @@ def fetch_log(path):
|
||||||
|
|
||||||
|
|
||||||
def failed_dependencies(spec):
|
def failed_dependencies(spec):
|
||||||
return set(childSpec for childSpec in spec.dependencies.itervalues() if not
|
return set(item for item in spec.dependencies.itervalues() if not spack.repo.get(item).installed)
|
||||||
spack.repo.get(childSpec).installed)
|
|
||||||
|
|
||||||
|
|
||||||
def create_test_output(topSpec, newInstalls, output, getLogFunc=fetch_log):
|
def get_top_spec_or_die(args):
|
||||||
# Post-order traversal is not strictly required but it makes sense to output
|
specs = spack.cmd.parse_specs(args.package, concretize=True)
|
||||||
# tests for dependencies first.
|
if len(specs) > 1:
|
||||||
for spec in topSpec.traverse(order='post'):
|
tty.die("Only 1 top-level package can be specified")
|
||||||
if spec not in newInstalls:
|
top_spec = iter(specs).next()
|
||||||
continue
|
return top_spec
|
||||||
|
|
||||||
failedDeps = failed_dependencies(spec)
|
|
||||||
|
def install_single_spec(spec, number_of_jobs):
|
||||||
package = spack.repo.get(spec)
|
package = spack.repo.get(spec)
|
||||||
if failedDeps:
|
|
||||||
result = TestResult.SKIPPED
|
|
||||||
dep = iter(failedDeps).next()
|
|
||||||
depBID = BuildId(dep)
|
|
||||||
errOutput = "Skipped due to failed dependency: {0}".format(
|
|
||||||
depBID.stringId())
|
|
||||||
elif (not package.installed) and (not package.stage.source_path):
|
|
||||||
result = TestResult.FAILED
|
|
||||||
errOutput = "Failure to fetch package resources."
|
|
||||||
elif not package.installed:
|
|
||||||
result = TestResult.FAILED
|
|
||||||
lines = getLogFunc(package.build_log_path)
|
|
||||||
errMessages = list(line for line in lines if
|
|
||||||
re.search('error:', line, re.IGNORECASE))
|
|
||||||
errOutput = errMessages if errMessages else lines[-10:]
|
|
||||||
errOutput = '\n'.join(itertools.chain(
|
|
||||||
[spec.to_yaml(), "Errors:"], errOutput,
|
|
||||||
["Build Log:", package.build_log_path]))
|
|
||||||
else:
|
|
||||||
result = TestResult.PASSED
|
|
||||||
errOutput = None
|
|
||||||
|
|
||||||
bId = BuildId(spec)
|
# If it is already installed, skip the test
|
||||||
output.add_test(bId, result, errOutput)
|
if spack.repo.get(spec).installed:
|
||||||
|
testcase = TestCase(package.name, package.spec.short_spec, time=0.0)
|
||||||
|
testcase.set_result(TestResult.SKIPPED, message='Skipped [already installed]', error_type='already_installed')
|
||||||
|
return testcase
|
||||||
|
|
||||||
|
# If it relies on dependencies that did not install, skip
|
||||||
|
if failed_dependencies(spec):
|
||||||
|
testcase = TestCase(package.name, package.spec.short_spec, time=0.0)
|
||||||
|
testcase.set_result(TestResult.SKIPPED, message='Skipped [failed dependencies]', error_type='dep_failed')
|
||||||
|
return testcase
|
||||||
|
|
||||||
|
# Otherwise try to install the spec
|
||||||
|
try:
|
||||||
|
start_time = time.time()
|
||||||
|
package.do_install(keep_prefix=False,
|
||||||
|
keep_stage=True,
|
||||||
|
ignore_deps=False,
|
||||||
|
make_jobs=number_of_jobs,
|
||||||
|
verbose=True,
|
||||||
|
fake=False)
|
||||||
|
duration = time.time() - start_time
|
||||||
|
testcase = TestCase(package.name, package.spec.short_spec, duration)
|
||||||
|
testcase.set_result(TestResult.PASSED)
|
||||||
|
except InstallError:
|
||||||
|
# An InstallError is considered a failure (the recipe didn't work correctly)
|
||||||
|
duration = time.time() - start_time
|
||||||
|
# Try to get the log
|
||||||
|
lines = fetch_log(package.build_log_path)
|
||||||
|
text = '\n'.join(lines)
|
||||||
|
testcase = TestCase(package.name, package.spec.short_spec, duration)
|
||||||
|
testcase.set_result(TestResult.FAILED, message='Installation failure', text=text)
|
||||||
|
|
||||||
|
except FetchError:
|
||||||
|
# A FetchError is considered an error (we didn't even start building)
|
||||||
|
duration = time.time() - start_time
|
||||||
|
testcase = TestCase(package.name, package.spec.short_spec, duration)
|
||||||
|
testcase.set_result(TestResult.ERRORED, message='Unable to fetch package')
|
||||||
|
|
||||||
|
return testcase
|
||||||
|
|
||||||
|
|
||||||
|
def get_filename(args, top_spec):
|
||||||
|
if not args.output:
|
||||||
|
fname = 'test-{x.name}-{x.version}-{hash}.xml'.format(x=top_spec, hash=top_spec.dag_hash())
|
||||||
|
output_directory = join_path(os.getcwd(), 'test-output')
|
||||||
|
if not os.path.exists(output_directory):
|
||||||
|
os.mkdir(output_directory)
|
||||||
|
output_filename = join_path(output_directory, fname)
|
||||||
|
else:
|
||||||
|
output_filename = args.output
|
||||||
|
return output_filename
|
||||||
|
|
||||||
|
|
||||||
def test_install(parser, args):
|
def test_install(parser, args):
|
||||||
|
# Check the input
|
||||||
if not args.package:
|
if not args.package:
|
||||||
tty.die("install requires a package argument")
|
tty.die("install requires a package argument")
|
||||||
|
|
||||||
|
@ -164,48 +213,13 @@ def test_install(parser, args):
|
||||||
if args.no_checksum:
|
if args.no_checksum:
|
||||||
spack.do_checksum = False # TODO: remove this global.
|
spack.do_checksum = False # TODO: remove this global.
|
||||||
|
|
||||||
specs = spack.cmd.parse_specs(args.package, concretize=True)
|
# Get the one and only top spec
|
||||||
if len(specs) > 1:
|
top_spec = get_top_spec_or_die(args)
|
||||||
tty.die("Only 1 top-level package can be specified")
|
# Get the filename of the test
|
||||||
topSpec = iter(specs).next()
|
output_filename = get_filename(args, top_spec)
|
||||||
|
# TEST SUITE
|
||||||
newInstalls = set()
|
with TestSuite(output_filename) as test_suite:
|
||||||
for spec in topSpec.traverse():
|
# Traverse in post order : each spec is a test case
|
||||||
package = spack.repo.get(spec)
|
for spec in top_spec.traverse(order='post'):
|
||||||
if not package.installed:
|
test_case = install_single_spec(spec, args.jobs)
|
||||||
newInstalls.add(spec)
|
test_suite.append(test_case)
|
||||||
|
|
||||||
if not args.output:
|
|
||||||
bId = BuildId(topSpec)
|
|
||||||
outputDir = join_path(os.getcwd(), "test-output")
|
|
||||||
if not os.path.exists(outputDir):
|
|
||||||
os.mkdir(outputDir)
|
|
||||||
outputFpath = join_path(outputDir, "test-{0}.xml".format(bId.stringId()))
|
|
||||||
else:
|
|
||||||
outputFpath = args.output
|
|
||||||
|
|
||||||
for spec in topSpec.traverse(order='post'):
|
|
||||||
# Calling do_install for the top-level package would be sufficient but
|
|
||||||
# this attempts to keep going if any package fails (other packages which
|
|
||||||
# are not dependents may succeed)
|
|
||||||
package = spack.repo.get(spec)
|
|
||||||
if (not failed_dependencies(spec)) and (not package.installed):
|
|
||||||
try:
|
|
||||||
package.do_install(
|
|
||||||
keep_prefix=False,
|
|
||||||
keep_stage=True,
|
|
||||||
ignore_deps=False,
|
|
||||||
make_jobs=args.jobs,
|
|
||||||
verbose=True,
|
|
||||||
fake=False)
|
|
||||||
except InstallError:
|
|
||||||
pass
|
|
||||||
except FetchError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
jrf = JunitResultFormat()
|
|
||||||
handled = {}
|
|
||||||
create_test_output(topSpec, newInstalls, jrf)
|
|
||||||
|
|
||||||
with open(outputFpath, 'wb') as F:
|
|
||||||
jrf.write_to(F)
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
|
@ -1,41 +1,55 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import sys
|
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.colify import colify
|
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
import spack.cmd
|
import spack.cmd
|
||||||
import spack.repository
|
import spack.repository
|
||||||
from spack.cmd.find import display_specs
|
from spack.cmd.find import display_specs
|
||||||
from spack.package import PackageStillNeededError
|
|
||||||
|
|
||||||
description="Remove an installed package"
|
description = "Remove an installed package"
|
||||||
|
|
||||||
|
error_message = """You can either:
|
||||||
|
a) Use a more specific spec, or
|
||||||
|
b) use spack uninstall -a to uninstall ALL matching specs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def ask_for_confirmation(message):
|
||||||
|
while True:
|
||||||
|
tty.msg(message + '[y/n]')
|
||||||
|
choice = raw_input().lower()
|
||||||
|
if choice == 'y':
|
||||||
|
break
|
||||||
|
elif choice == 'n':
|
||||||
|
raise SystemExit('Operation aborted')
|
||||||
|
tty.warn('Please reply either "y" or "n"')
|
||||||
|
|
||||||
|
|
||||||
def setup_parser(subparser):
|
def setup_parser(subparser):
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
|
@ -47,7 +61,98 @@ def setup_parser(subparser):
|
||||||
"supplied spec. i.e., if you say uninstall libelf, ALL versions of " +
|
"supplied spec. i.e., if you say uninstall libelf, ALL versions of " +
|
||||||
"libelf are uninstalled. This is both useful and dangerous, like rm -r.")
|
"libelf are uninstalled. This is both useful and dangerous, like rm -r.")
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'packages', nargs=argparse.REMAINDER, help="specs of packages to uninstall")
|
'-d', '--dependents', action='store_true', dest='dependents',
|
||||||
|
help='Also uninstall any packages that depend on the ones given via command line.'
|
||||||
|
)
|
||||||
|
subparser.add_argument(
|
||||||
|
'-y', '--yes-to-all', action='store_true', dest='yes_to_all',
|
||||||
|
help='Assume "yes" is the answer to every confirmation asked to the user.'
|
||||||
|
|
||||||
|
)
|
||||||
|
subparser.add_argument('packages', nargs=argparse.REMAINDER, help="specs of packages to uninstall")
|
||||||
|
|
||||||
|
|
||||||
|
def concretize_specs(specs, allow_multiple_matches=False, force=False):
|
||||||
|
"""
|
||||||
|
Returns a list of specs matching the non necessarily concretized specs given from cli
|
||||||
|
|
||||||
|
Args:
|
||||||
|
specs: list of specs to be matched against installed packages
|
||||||
|
allow_multiple_matches : boolean (if True multiple matches for each item in specs are admitted)
|
||||||
|
|
||||||
|
Return:
|
||||||
|
list of specs
|
||||||
|
"""
|
||||||
|
specs_from_cli = [] # List of specs that match expressions given via command line
|
||||||
|
has_errors = False
|
||||||
|
for spec in specs:
|
||||||
|
matching = spack.installed_db.query(spec)
|
||||||
|
# For each spec provided, make sure it refers to only one package.
|
||||||
|
# Fail and ask user to be unambiguous if it doesn't
|
||||||
|
if not allow_multiple_matches and len(matching) > 1:
|
||||||
|
tty.error("%s matches multiple packages:" % spec)
|
||||||
|
print()
|
||||||
|
display_specs(matching, long=True, show_flags=True)
|
||||||
|
print()
|
||||||
|
has_errors = True
|
||||||
|
|
||||||
|
# No installed package matches the query
|
||||||
|
if len(matching) == 0 and not force:
|
||||||
|
tty.error("%s does not match any installed packages." % spec)
|
||||||
|
has_errors = True
|
||||||
|
|
||||||
|
specs_from_cli.extend(matching)
|
||||||
|
if has_errors:
|
||||||
|
tty.die(error_message)
|
||||||
|
|
||||||
|
return specs_from_cli
|
||||||
|
|
||||||
|
|
||||||
|
def installed_dependents(specs):
|
||||||
|
"""
|
||||||
|
Returns a dictionary that maps a spec with a list of its installed dependents
|
||||||
|
|
||||||
|
Args:
|
||||||
|
specs: list of specs to be checked for dependents
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dictionary of installed dependents
|
||||||
|
"""
|
||||||
|
dependents = {}
|
||||||
|
for item in specs:
|
||||||
|
lst = [x for x in item.package.installed_dependents if x not in specs]
|
||||||
|
if lst:
|
||||||
|
lst = list(set(lst))
|
||||||
|
dependents[item] = lst
|
||||||
|
return dependents
|
||||||
|
|
||||||
|
|
||||||
|
def do_uninstall(specs, force):
|
||||||
|
"""
|
||||||
|
Uninstalls all the specs in a list.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
specs: list of specs to be uninstalled
|
||||||
|
force: force uninstallation (boolean)
|
||||||
|
"""
|
||||||
|
packages = []
|
||||||
|
for item in specs:
|
||||||
|
try:
|
||||||
|
# should work if package is known to spack
|
||||||
|
packages.append(item.package)
|
||||||
|
except spack.repository.UnknownPackageError as e:
|
||||||
|
# The package.py file has gone away -- but still
|
||||||
|
# want to uninstall.
|
||||||
|
spack.Package(item).do_uninstall(force=True)
|
||||||
|
|
||||||
|
# Sort packages to be uninstalled by the number of installed dependents
|
||||||
|
# This ensures we do things in the right order
|
||||||
|
def num_installed_deps(pkg):
|
||||||
|
return len(pkg.installed_dependents)
|
||||||
|
|
||||||
|
packages.sort(key=num_installed_deps)
|
||||||
|
for item in packages:
|
||||||
|
item.do_uninstall(force=force)
|
||||||
|
|
||||||
|
|
||||||
def uninstall(parser, args):
|
def uninstall(parser, args):
|
||||||
|
@ -56,50 +161,34 @@ def uninstall(parser, args):
|
||||||
|
|
||||||
with spack.installed_db.write_transaction():
|
with spack.installed_db.write_transaction():
|
||||||
specs = spack.cmd.parse_specs(args.packages)
|
specs = spack.cmd.parse_specs(args.packages)
|
||||||
|
# Gets the list of installed specs that match the ones give via cli
|
||||||
|
uninstall_list = concretize_specs(specs, args.all, args.force) # takes care of '-a' is given in the cli
|
||||||
|
dependent_list = installed_dependents(uninstall_list) # takes care of '-d'
|
||||||
|
|
||||||
# For each spec provided, make sure it refers to only one package.
|
# Process dependent_list and update uninstall_list
|
||||||
# Fail and ask user to be unambiguous if it doesn't
|
has_error = False
|
||||||
pkgs = []
|
if dependent_list and not args.dependents and not args.force:
|
||||||
for spec in specs:
|
for spec, lst in dependent_list.items():
|
||||||
matching_specs = spack.installed_db.query(spec)
|
tty.error("Will not uninstall %s" % spec.format("$_$@$%@$#", color=True))
|
||||||
if not args.all and len(matching_specs) > 1:
|
|
||||||
tty.error("%s matches multiple packages:" % spec)
|
|
||||||
print()
|
|
||||||
display_specs(matching_specs, long=True)
|
|
||||||
print()
|
|
||||||
print("You can either:")
|
|
||||||
print(" a) Use a more specific spec, or")
|
|
||||||
print(" b) use spack uninstall -a to uninstall ALL matching specs.")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if len(matching_specs) == 0:
|
|
||||||
if args.force: continue
|
|
||||||
tty.die("%s does not match any installed packages." % spec)
|
|
||||||
|
|
||||||
for s in matching_specs:
|
|
||||||
try:
|
|
||||||
# should work if package is known to spack
|
|
||||||
pkgs.append(s.package)
|
|
||||||
except spack.repository.UnknownPackageError as e:
|
|
||||||
# The package.py file has gone away -- but still
|
|
||||||
# want to uninstall.
|
|
||||||
spack.Package(s).do_uninstall(force=True)
|
|
||||||
|
|
||||||
# Sort packages to be uninstalled by the number of installed dependents
|
|
||||||
# This ensures we do things in the right order
|
|
||||||
def num_installed_deps(pkg):
|
|
||||||
return len(pkg.installed_dependents)
|
|
||||||
pkgs.sort(key=num_installed_deps)
|
|
||||||
|
|
||||||
# Uninstall packages in order now.
|
|
||||||
for pkg in pkgs:
|
|
||||||
try:
|
|
||||||
pkg.do_uninstall(force=args.force)
|
|
||||||
except PackageStillNeededError as e:
|
|
||||||
tty.error("Will not uninstall %s" % e.spec.format("$_$@$%@$#", color=True))
|
|
||||||
print('')
|
print('')
|
||||||
print("The following packages depend on it:")
|
print("The following packages depend on it:")
|
||||||
display_specs(e.dependents, long=True)
|
display_specs(lst, long=True)
|
||||||
print('')
|
print('')
|
||||||
print("You can use spack uninstall -f to force this action.")
|
has_error = True
|
||||||
sys.exit(1)
|
elif args.dependents:
|
||||||
|
for key, lst in dependent_list.items():
|
||||||
|
uninstall_list.extend(lst)
|
||||||
|
uninstall_list = list(set(uninstall_list))
|
||||||
|
|
||||||
|
if has_error:
|
||||||
|
tty.die('You can use spack uninstall --dependents to uninstall these dependencies as well')
|
||||||
|
|
||||||
|
if not args.yes_to_all:
|
||||||
|
tty.msg("The following packages will be uninstalled : ")
|
||||||
|
print('')
|
||||||
|
display_specs(uninstall_list, long=True, show_flags=True)
|
||||||
|
print('')
|
||||||
|
ask_for_confirmation('Do you want to proceed ? ')
|
||||||
|
|
||||||
|
# Uninstall everything on the list
|
||||||
|
do_uninstall(uninstall_list, args.force)
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by David Beckingsale, david@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
import sys
|
||||||
import spack
|
import spack
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import argparse
|
import argparse
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
from llnl.util.tty.colify import colify
|
from llnl.util.tty.colify import colify
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -91,14 +91,25 @@ class Compiler(object):
|
||||||
# version suffix for gcc.
|
# version suffix for gcc.
|
||||||
suffixes = [r'-.*']
|
suffixes = [r'-.*']
|
||||||
|
|
||||||
# Names of generic arguments used by this compiler
|
# Default flags used by a compiler to set an rpath
|
||||||
arg_rpath = '-Wl,-rpath,%s'
|
@property
|
||||||
|
def cc_rpath_arg(self):
|
||||||
|
return '-Wl,-rpath,'
|
||||||
|
|
||||||
# argument used to get C++11 options
|
@property
|
||||||
cxx11_flag = "-std=c++11"
|
def cxx_rpath_arg(self):
|
||||||
|
return '-Wl,-rpath,'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def f77_rpath_arg(self):
|
||||||
|
return '-Wl,-rpath,'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fc_rpath_arg(self):
|
||||||
|
return '-Wl,-rpath,'
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, cspec, cc, cxx, f77, fc):
|
def __init__(self, cspec, cc, cxx, f77, fc, **kwargs):
|
||||||
def check(exe):
|
def check(exe):
|
||||||
if exe is None:
|
if exe is None:
|
||||||
return None
|
return None
|
||||||
|
@ -110,6 +121,15 @@ def check(exe):
|
||||||
self.f77 = check(f77)
|
self.f77 = check(f77)
|
||||||
self.fc = check(fc)
|
self.fc = check(fc)
|
||||||
|
|
||||||
|
# Unfortunately have to make sure these params are accepted
|
||||||
|
# in the same order they are returned by sorted(flags)
|
||||||
|
# in compilers/__init__.py
|
||||||
|
self.flags = {}
|
||||||
|
for flag in spack.spec.FlagMap.valid_compiler_flags():
|
||||||
|
value = kwargs.get(flag, None)
|
||||||
|
if value is not None:
|
||||||
|
self.flags[flag] = value.split()
|
||||||
|
|
||||||
self.spec = cspec
|
self.spec = cspec
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +137,37 @@ def check(exe):
|
||||||
def version(self):
|
def version(self):
|
||||||
return self.spec.version
|
return self.spec.version
|
||||||
|
|
||||||
|
# This property should be overridden in the compiler subclass if
|
||||||
|
# OpenMP is supported by that compiler
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
# If it is not overridden, assume it is not supported and warn the user
|
||||||
|
tty.die("The compiler you have chosen does not currently support OpenMP.",
|
||||||
|
"If you think it should, please edit the compiler subclass and",
|
||||||
|
"submit a pull request or issue.")
|
||||||
|
|
||||||
|
|
||||||
|
# This property should be overridden in the compiler subclass if
|
||||||
|
# C++11 is supported by that compiler
|
||||||
|
@property
|
||||||
|
def cxx11_flag(self):
|
||||||
|
# If it is not overridden, assume it is not supported and warn the user
|
||||||
|
tty.die("The compiler you have chosen does not currently support C++11.",
|
||||||
|
"If you think it should, please edit the compiler subclass and",
|
||||||
|
"submit a pull request or issue.")
|
||||||
|
|
||||||
|
|
||||||
|
# This property should be overridden in the compiler subclass if
|
||||||
|
# C++14 is supported by that compiler
|
||||||
|
@property
|
||||||
|
def cxx14_flag(self):
|
||||||
|
# If it is not overridden, assume it is not supported and warn the user
|
||||||
|
tty.die("The compiler you have chosen does not currently support C++14.",
|
||||||
|
"If you think it should, please edit the compiler subclass and",
|
||||||
|
"submit a pull request or issue.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Compiler classes have methods for querying the version of
|
# Compiler classes have methods for querying the version of
|
||||||
# specific compiler executables. This is used when discovering compilers.
|
# specific compiler executables. This is used when discovering compilers.
|
||||||
|
@ -146,7 +197,6 @@ def f77_version(cls, f77):
|
||||||
def fc_version(cls, fc):
|
def fc_version(cls, fc):
|
||||||
return cls.default_version(fc)
|
return cls.default_version(fc)
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _find_matches_in_path(cls, compiler_names, detect_version, *path):
|
def _find_matches_in_path(cls, compiler_names, detect_version, *path):
|
||||||
"""Finds compilers in the paths supplied.
|
"""Finds compilers in the paths supplied.
|
||||||
|
@ -202,6 +252,10 @@ def check(key):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
successful = [key for key in parmap(check, checks) if key is not None]
|
successful = [key for key in parmap(check, checks) if key is not None]
|
||||||
|
# The 'successful' list is ordered like the input paths.
|
||||||
|
# Reverse it here so that the dict creation (last insert wins)
|
||||||
|
# does not spoil the intented precedence.
|
||||||
|
successful.reverse()
|
||||||
return dict(((v, p, s), path) for v, p, s, path in successful)
|
return dict(((v, p, s), path) for v, p, s, path in successful)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""This module contains functions related to finding compilers on the
|
"""This module contains functions related to finding compilers on the
|
||||||
system and configuring Spack to use multiple compilers.
|
system and configuring Spack to use multiple compilers.
|
||||||
|
@ -255,7 +255,11 @@ def get_compiler(cspec):
|
||||||
else:
|
else:
|
||||||
compiler_paths.append(None)
|
compiler_paths.append(None)
|
||||||
|
|
||||||
return cls(cspec, *compiler_paths)
|
flags = {}
|
||||||
|
for f in spack.spec.FlagMap.valid_compiler_flags():
|
||||||
|
if f in items:
|
||||||
|
flags[f] = items[f]
|
||||||
|
return cls(cspec, *compiler_paths, **flags)
|
||||||
|
|
||||||
matches = find(compiler_spec, arch, scope)
|
matches = find(compiler_spec, arch, scope)
|
||||||
return [get_compiler(cspec) for cspec in matches]
|
return [get_compiler(cspec) for cspec in matches]
|
||||||
|
|
|
@ -1,31 +1,33 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import re
|
import re
|
||||||
import spack.compiler as cpr
|
import spack.compiler as cpr
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
from spack.util.executable import *
|
from spack.util.executable import *
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
from spack.version import ver
|
||||||
|
|
||||||
class Clang(Compiler):
|
class Clang(Compiler):
|
||||||
# Subclasses use possible names of C compiler
|
# Subclasses use possible names of C compiler
|
||||||
|
@ -47,6 +49,29 @@ class Clang(Compiler):
|
||||||
'f77' : 'f77',
|
'f77' : 'f77',
|
||||||
'fc' : 'f90' }
|
'fc' : 'f90' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_apple(self):
|
||||||
|
ver_string = str(self.version)
|
||||||
|
return ver_string.endswith('-apple')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
if self.is_apple:
|
||||||
|
tty.die("Clang from Apple does not support Openmp yet.")
|
||||||
|
else:
|
||||||
|
return "-fopenmp"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx11_flag(self):
|
||||||
|
if self.is_apple:
|
||||||
|
# FIXME: figure out from which version Apple's clang supports c++11
|
||||||
|
return "-std=c++11"
|
||||||
|
else:
|
||||||
|
if self.version < ver('3.3'):
|
||||||
|
tty.die("Only Clang 3.3 and above support c++11.")
|
||||||
|
else:
|
||||||
|
return "-std=c++11"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_version(self, comp):
|
def default_version(self, comp):
|
||||||
"""The '--version' option works for clang compilers.
|
"""The '--version' option works for clang compilers.
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
|
@ -49,14 +49,25 @@ class Gcc(Compiler):
|
||||||
'f77' : 'gcc/gfortran',
|
'f77' : 'gcc/gfortran',
|
||||||
'fc' : 'gcc/gfortran' }
|
'fc' : 'gcc/gfortran' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
return "-fopenmp"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx11_flag(self):
|
def cxx11_flag(self):
|
||||||
if self.version < ver('4.3'):
|
if self.version < ver('4.3'):
|
||||||
tty.die("Only gcc 4.3 and above support c++11.")
|
tty.die("Only gcc 4.3 and above support c++11.")
|
||||||
elif self.version < ver('4.7'):
|
elif self.version < ver('4.7'):
|
||||||
return "-std=gnu++0x"
|
return "-std=c++0x"
|
||||||
else:
|
else:
|
||||||
return "-std=gnu++11"
|
return "-std=c++11"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx14_flag(self):
|
||||||
|
if self.version < ver('4.8'):
|
||||||
|
tty.die("Only gcc 4.8 and above support c++14.")
|
||||||
|
else:
|
||||||
|
return "-std=c++14"
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def fc_version(cls, fc):
|
def fc_version(cls, fc):
|
||||||
|
|
|
@ -1,28 +1,30 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
from spack.version import ver
|
||||||
|
|
||||||
class Intel(Compiler):
|
class Intel(Compiler):
|
||||||
# Subclasses use possible names of C compiler
|
# Subclasses use possible names of C compiler
|
||||||
|
@ -43,6 +45,13 @@ class Intel(Compiler):
|
||||||
'f77' : 'intel/ifort',
|
'f77' : 'intel/ifort',
|
||||||
'fc' : 'intel/ifort' }
|
'fc' : 'intel/ifort' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
if self.version < ver('16.0'):
|
||||||
|
return "-openmp"
|
||||||
|
else:
|
||||||
|
return "-qopenmp"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx11_flag(self):
|
def cxx11_flag(self):
|
||||||
if self.version < ver('11.1'):
|
if self.version < ver('11.1'):
|
||||||
|
@ -68,5 +77,3 @@ def default_version(cls, comp):
|
||||||
"""
|
"""
|
||||||
return get_compiler_version(
|
return get_compiler_version(
|
||||||
comp, '--version', r'\((?:IFORT|ICC)\) ([^ ]+)')
|
comp, '--version', r'\((?:IFORT|ICC)\) ([^ ]+)')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,29 @@
|
||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
class Nag(Compiler):
|
class Nag(Compiler):
|
||||||
# Subclasses use possible names of C compiler
|
# Subclasses use possible names of C compiler
|
||||||
|
@ -20,6 +45,27 @@ class Nag(Compiler):
|
||||||
'f77' : 'nag/nagfor',
|
'f77' : 'nag/nagfor',
|
||||||
'fc' : 'nag/nagfor' }
|
'fc' : 'nag/nagfor' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
return "-openmp"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx11_flag(self):
|
||||||
|
# NAG does not have a C++ compiler
|
||||||
|
# However, it can be mixed with a compiler that does support it
|
||||||
|
return "-std=c++11"
|
||||||
|
|
||||||
|
# Unlike other compilers, the NAG compiler passes options to GCC, which
|
||||||
|
# then passes them to the linker. Therefore, we need to doubly wrap the
|
||||||
|
# options with '-Wl,-Wl,,'
|
||||||
|
@property
|
||||||
|
def f77_rpath_arg(self):
|
||||||
|
return '-Wl,-Wl,,-rpath,'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fc_rpath_arg(self):
|
||||||
|
return '-Wl,-Wl,,-rpath,'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_version(self, comp):
|
def default_version(self, comp):
|
||||||
"""The '-V' option works for nag compilers.
|
"""The '-V' option works for nag compilers.
|
||||||
|
|
|
@ -1,28 +1,29 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
class Pgi(Compiler):
|
class Pgi(Compiler):
|
||||||
# Subclasses use possible names of C compiler
|
# Subclasses use possible names of C compiler
|
||||||
|
@ -43,6 +44,15 @@ class Pgi(Compiler):
|
||||||
'f77' : 'pgi/pgfortran',
|
'f77' : 'pgi/pgfortran',
|
||||||
'fc' : 'pgi/pgfortran' }
|
'fc' : 'pgi/pgfortran' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
return "-mp"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cxx11_flag(self):
|
||||||
|
return "-std=c++11"
|
||||||
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def default_version(cls, comp):
|
def default_version(cls, comp):
|
||||||
"""The '-V' option works for all the PGI compilers.
|
"""The '-V' option works for all the PGI compilers.
|
||||||
|
@ -54,4 +64,3 @@ def default_version(cls, comp):
|
||||||
"""
|
"""
|
||||||
return get_compiler_version(
|
return get_compiler_version(
|
||||||
comp, '-V', r'pg[^ ]* ([^ ]+) \d\d\d?-bit target')
|
comp, '-V', r'pg[^ ]* ([^ ]+) \d\d\d?-bit target')
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,30 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by François Bissey, francois.bissey@canterbury.ac.nz, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from spack.compiler import *
|
from spack.compiler import *
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
from spack.version import ver
|
||||||
|
|
||||||
class Xl(Compiler):
|
class Xl(Compiler):
|
||||||
# Subclasses use possible names of C compiler
|
# Subclasses use possible names of C compiler
|
||||||
|
@ -44,6 +45,10 @@ class Xl(Compiler):
|
||||||
'f77' : 'xl/xlf',
|
'f77' : 'xl/xlf',
|
||||||
'fc' : 'xl/xlf90' }
|
'fc' : 'xl/xlf90' }
|
||||||
|
|
||||||
|
@property
|
||||||
|
def openmp_flag(self):
|
||||||
|
return "-qsmp=omp"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cxx11_flag(self):
|
def cxx11_flag(self):
|
||||||
if self.version < ver('13.1'):
|
if self.version < ver('13.1'):
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""
|
"""
|
||||||
Functions here are used to take abstract specs and make them concrete.
|
Functions here are used to take abstract specs and make them concrete.
|
||||||
|
@ -44,6 +44,7 @@
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from spack.config import *
|
from spack.config import *
|
||||||
|
|
||||||
|
|
||||||
class DefaultConcretizer(object):
|
class DefaultConcretizer(object):
|
||||||
"""This class doesn't have any state, it just provides some methods for
|
"""This class doesn't have any state, it just provides some methods for
|
||||||
concretization. You can subclass it to override just some of the
|
concretization. You can subclass it to override just some of the
|
||||||
|
@ -269,6 +270,59 @@ def concretize_compiler(self, spec):
|
||||||
return True # things changed.
|
return True # things changed.
|
||||||
|
|
||||||
|
|
||||||
|
def concretize_compiler_flags(self, 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.
|
||||||
|
"""
|
||||||
|
ret = False
|
||||||
|
for flag in spack.spec.FlagMap.valid_compiler_flags():
|
||||||
|
try:
|
||||||
|
nearest = next(p for p in spec.traverse(direction='parents')
|
||||||
|
if ((p.compiler == spec.compiler and p is not spec)
|
||||||
|
and flag in p.compiler_flags))
|
||||||
|
if ((not flag in spec.compiler_flags) or
|
||||||
|
sorted(spec.compiler_flags[flag]) != sorted(nearest.compiler_flags[flag])):
|
||||||
|
if flag in spec.compiler_flags:
|
||||||
|
spec.compiler_flags[flag] = list(set(spec.compiler_flags[flag]) |
|
||||||
|
set(nearest.compiler_flags[flag]))
|
||||||
|
else:
|
||||||
|
spec.compiler_flags[flag] = nearest.compiler_flags[flag]
|
||||||
|
ret = True
|
||||||
|
|
||||||
|
except StopIteration:
|
||||||
|
if (flag in spec.root.compiler_flags and ((not flag in spec.compiler_flags) or
|
||||||
|
sorted(spec.compiler_flags[flag]) != sorted(spec.root.compiler_flags[flag]))):
|
||||||
|
if flag in spec.compiler_flags:
|
||||||
|
spec.compiler_flags[flag] = list(set(spec.compiler_flags[flag]) |
|
||||||
|
set(spec.root.compiler_flags[flag]))
|
||||||
|
else:
|
||||||
|
spec.compiler_flags[flag] = spec.root.compiler_flags[flag]
|
||||||
|
ret = True
|
||||||
|
else:
|
||||||
|
if not flag in spec.compiler_flags:
|
||||||
|
spec.compiler_flags[flag] = []
|
||||||
|
|
||||||
|
# Include the compiler flag defaults from the config files
|
||||||
|
# This ensures that spack will detect conflicts that stem from a change
|
||||||
|
# in default compiler flags.
|
||||||
|
compiler = spack.compilers.compiler_for_spec(spec.compiler)
|
||||||
|
for flag in compiler.flags:
|
||||||
|
if flag not in spec.compiler_flags:
|
||||||
|
spec.compiler_flags[flag] = compiler.flags[flag]
|
||||||
|
if compiler.flags[flag] != []:
|
||||||
|
ret = True
|
||||||
|
else:
|
||||||
|
if ((sorted(spec.compiler_flags[flag]) != sorted(compiler.flags[flag])) and
|
||||||
|
(not set(spec.compiler_flags[flag]) >= set(compiler.flags[flag]))):
|
||||||
|
ret = True
|
||||||
|
spec.compiler_flags[flag] = list(set(spec.compiler_flags[flag]) |
|
||||||
|
set(compiler.flags[flag]))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def find_spec(spec, condition):
|
def find_spec(spec, condition):
|
||||||
"""Searches the dag from spec in an intelligent order and looks
|
"""Searches the dag from spec in an intelligent order and looks
|
||||||
for a spec that matches a condition"""
|
for a spec that matches a condition"""
|
||||||
|
@ -330,7 +384,6 @@ def cmp_specs(lhs, rhs):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class UnavailableCompilerVersionError(spack.error.SpackError):
|
class UnavailableCompilerVersionError(spack.error.SpackError):
|
||||||
"""Raised when there is no available compiler that satisfies a
|
"""Raised when there is no available compiler that satisfies a
|
||||||
compiler spec."""
|
compiler spec."""
|
||||||
|
|
|
@ -1,26 +1,27 @@
|
||||||
|
# flake8: noqa
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""This module implements Spack's configuration file handling.
|
"""This module implements Spack's configuration file handling.
|
||||||
|
|
||||||
|
@ -117,22 +118,20 @@
|
||||||
the site configuration will be ignored.
|
the site configuration will be ignored.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
import copy
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
import copy
|
|
||||||
import jsonschema
|
import jsonschema
|
||||||
from jsonschema import Draft4Validator, validators
|
|
||||||
import yaml
|
|
||||||
from yaml.error import MarkedYAMLError
|
|
||||||
from ordereddict_backport import OrderedDict
|
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.filesystem import mkdirp
|
|
||||||
import copy
|
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
|
import yaml
|
||||||
|
from jsonschema import Draft4Validator, validators
|
||||||
|
from llnl.util.filesystem import mkdirp
|
||||||
|
from ordereddict_backport import OrderedDict
|
||||||
from spack.error import SpackError
|
from spack.error import SpackError
|
||||||
|
from yaml.error import MarkedYAMLError
|
||||||
|
|
||||||
# Hacked yaml for configuration files preserves line numbers.
|
# Hacked yaml for configuration files preserves line numbers.
|
||||||
import spack.util.spack_yaml as syaml
|
import spack.util.spack_yaml as syaml
|
||||||
|
@ -195,6 +194,7 @@
|
||||||
'default': [],
|
'default': [],
|
||||||
'items': {
|
'items': {
|
||||||
'type': 'string'},},},},
|
'type': 'string'},},},},
|
||||||
|
|
||||||
'packages': {
|
'packages': {
|
||||||
'$schema': 'http://json-schema.org/schema#',
|
'$schema': 'http://json-schema.org/schema#',
|
||||||
'title': 'Spack package configuration file schema',
|
'title': 'Spack package configuration file schema',
|
||||||
|
@ -238,18 +238,43 @@
|
||||||
'default' : {},
|
'default' : {},
|
||||||
}
|
}
|
||||||
},},},},},},
|
},},},},},},
|
||||||
|
|
||||||
'modules': {
|
'modules': {
|
||||||
'$schema': 'http://json-schema.org/schema#',
|
'$schema': 'http://json-schema.org/schema#',
|
||||||
'title': 'Spack module file configuration file schema',
|
'title': 'Spack module file configuration file schema',
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
|
'definitions': {
|
||||||
|
'array_of_strings': {
|
||||||
|
'type': 'array',
|
||||||
|
'default': [],
|
||||||
|
'items': {
|
||||||
|
'type': 'string'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dictionary_of_strings': {
|
||||||
|
'type': 'object',
|
||||||
'patternProperties': {
|
'patternProperties': {
|
||||||
r'modules:?': {
|
r'\w[\w-]*': { # key
|
||||||
|
'type': 'string'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'dependency_selection': {
|
||||||
|
'type': 'string',
|
||||||
|
'enum': ['none', 'direct', 'all']
|
||||||
|
},
|
||||||
|
'module_file_configuration': {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
'default': {},
|
'default': {},
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
'properties': {
|
'properties': {
|
||||||
'enable': {
|
'filter': {
|
||||||
|
'type': 'object',
|
||||||
|
'default': {},
|
||||||
|
'additionalProperties': False,
|
||||||
|
'properties': {
|
||||||
|
'environment_blacklist': {
|
||||||
'type': 'array',
|
'type': 'array',
|
||||||
'default': [],
|
'default': [],
|
||||||
'items': {
|
'items': {
|
||||||
|
@ -258,6 +283,77 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'autoload': {'$ref': '#/definitions/dependency_selection'},
|
||||||
|
'prerequisites': {'$ref': '#/definitions/dependency_selection'},
|
||||||
|
'conflict': {'$ref': '#/definitions/array_of_strings'},
|
||||||
|
'environment': {
|
||||||
|
'type': 'object',
|
||||||
|
'default': {},
|
||||||
|
'additionalProperties': False,
|
||||||
|
'properties': {
|
||||||
|
'set': {'$ref': '#/definitions/dictionary_of_strings'},
|
||||||
|
'unset': {'$ref': '#/definitions/array_of_strings'},
|
||||||
|
'prepend_path': {'$ref': '#/definitions/dictionary_of_strings'},
|
||||||
|
'append_path': {'$ref': '#/definitions/dictionary_of_strings'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'module_type_configuration': {
|
||||||
|
'type': 'object',
|
||||||
|
'default': {},
|
||||||
|
'anyOf': [
|
||||||
|
{
|
||||||
|
'properties': {
|
||||||
|
'whitelist': {'$ref': '#/definitions/array_of_strings'},
|
||||||
|
'blacklist': {'$ref': '#/definitions/array_of_strings'},
|
||||||
|
'naming_scheme': {
|
||||||
|
'type': 'string' # Can we be more specific here?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'patternProperties': {r'\w[\w-]*': {'$ref': '#/definitions/module_file_configuration'}}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'patternProperties': {
|
||||||
|
r'modules:?': {
|
||||||
|
'type': 'object',
|
||||||
|
'default': {},
|
||||||
|
'additionalProperties': False,
|
||||||
|
'properties': {
|
||||||
|
'prefix_inspections': {
|
||||||
|
'type': 'object',
|
||||||
|
'patternProperties': {
|
||||||
|
r'\w[\w-]*': { # path to be inspected for existence (relative to prefix)
|
||||||
|
'$ref': '#/definitions/array_of_strings'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'enable': {
|
||||||
|
'type': 'array',
|
||||||
|
'default': [],
|
||||||
|
'items': {
|
||||||
|
'type': 'string',
|
||||||
|
'enum': ['tcl', 'dotkit']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'tcl': {
|
||||||
|
'allOf': [
|
||||||
|
{'$ref': '#/definitions/module_type_configuration'}, # Base configuration
|
||||||
|
{} # Specific tcl extensions
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'dotkit': {
|
||||||
|
'allOf': [
|
||||||
|
{'$ref': '#/definitions/module_type_configuration'}, # Base configuration
|
||||||
|
{} # Specific dotkit extensions
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -269,10 +365,10 @@
|
||||||
|
|
||||||
|
|
||||||
def validate_section_name(section):
|
def validate_section_name(section):
|
||||||
"""Raise a ValueError if the section is not a valid section."""
|
"""Exit if the section is not a valid section."""
|
||||||
if section not in section_schemas:
|
if section not in section_schemas:
|
||||||
raise ValueError("Invalid config section: '%s'. Options are %s"
|
tty.die("Invalid config section: '%s'. Options are: %s"
|
||||||
% (section, section_schemas))
|
% (section, " ".join(section_schemas.keys())))
|
||||||
|
|
||||||
|
|
||||||
def extend_with_default(validator_class):
|
def extend_with_default(validator_class):
|
||||||
|
@ -306,13 +402,14 @@ def set_pp_defaults(validator, properties, instance, schema):
|
||||||
yield err
|
yield err
|
||||||
|
|
||||||
return validators.extend(validator_class, {
|
return validators.extend(validator_class, {
|
||||||
"properties" : set_defaults,
|
"properties": set_defaults,
|
||||||
"patternProperties" : set_pp_defaults
|
"patternProperties": set_pp_defaults
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
DefaultSettingValidator = extend_with_default(Draft4Validator)
|
DefaultSettingValidator = extend_with_default(Draft4Validator)
|
||||||
|
|
||||||
|
|
||||||
def validate_section(data, schema):
|
def validate_section(data, schema):
|
||||||
"""Validate data read in from a Spack YAML file.
|
"""Validate data read in from a Spack YAML file.
|
||||||
|
|
||||||
|
@ -347,16 +444,14 @@ def get_section_filename(self, section):
|
||||||
validate_section_name(section)
|
validate_section_name(section)
|
||||||
return os.path.join(self.path, "%s.yaml" % section)
|
return os.path.join(self.path, "%s.yaml" % section)
|
||||||
|
|
||||||
|
|
||||||
def get_section(self, section):
|
def get_section(self, section):
|
||||||
if not section in self.sections:
|
if section not in self.sections:
|
||||||
path = self.get_section_filename(section)
|
path = self.get_section_filename(section)
|
||||||
schema = section_schemas[section]
|
schema = section_schemas[section]
|
||||||
data = _read_config_file(path, schema)
|
data = _read_config_file(path, schema)
|
||||||
self.sections[section] = data
|
self.sections[section] = data
|
||||||
return self.sections[section]
|
return self.sections[section]
|
||||||
|
|
||||||
|
|
||||||
def write_section(self, section):
|
def write_section(self, section):
|
||||||
filename = self.get_section_filename(section)
|
filename = self.get_section_filename(section)
|
||||||
data = self.get_section(section)
|
data = self.get_section(section)
|
||||||
|
@ -370,7 +465,6 @@ def write_section(self, section):
|
||||||
except (yaml.YAMLError, IOError) as e:
|
except (yaml.YAMLError, IOError) as e:
|
||||||
raise ConfigFileError("Error writing to config file: '%s'" % str(e))
|
raise ConfigFileError("Error writing to config file: '%s'" % str(e))
|
||||||
|
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
"""Empty cached config information."""
|
"""Empty cached config information."""
|
||||||
self.sections = {}
|
self.sections = {}
|
||||||
|
@ -413,7 +507,7 @@ def _read_config_file(filename, schema):
|
||||||
|
|
||||||
elif not os.path.isfile(filename):
|
elif not os.path.isfile(filename):
|
||||||
raise ConfigFileError(
|
raise ConfigFileError(
|
||||||
"Invlaid configuration. %s exists but is not a file." % filename)
|
"Invalid configuration. %s exists but is not a file." % filename)
|
||||||
|
|
||||||
elif not os.access(filename, os.R_OK):
|
elif not os.access(filename, os.R_OK):
|
||||||
raise ConfigFileError("Config file is not readable: %s" % filename)
|
raise ConfigFileError("Config file is not readable: %s" % filename)
|
||||||
|
@ -476,7 +570,7 @@ def they_are(t):
|
||||||
# Source dict is merged into dest.
|
# Source dict is merged into dest.
|
||||||
elif they_are(dict):
|
elif they_are(dict):
|
||||||
for sk, sv in source.iteritems():
|
for sk, sv in source.iteritems():
|
||||||
if not sk in dest:
|
if sk not in dest:
|
||||||
dest[sk] = copy.copy(sv)
|
dest[sk] = copy.copy(sv)
|
||||||
else:
|
else:
|
||||||
dest[sk] = _merge_yaml(dest[sk], source[sk])
|
dest[sk] = _merge_yaml(dest[sk], source[sk])
|
||||||
|
@ -539,14 +633,19 @@ def update_config(section, update_data, scope=None):
|
||||||
other yaml-ish structure.
|
other yaml-ish structure.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# read in the config to ensure we've got current data
|
|
||||||
get_config(section)
|
|
||||||
|
|
||||||
validate_section_name(section) # validate section name
|
validate_section_name(section) # validate section name
|
||||||
scope = validate_scope(scope) # get ConfigScope object from string.
|
scope = validate_scope(scope) # get ConfigScope object from string.
|
||||||
|
|
||||||
|
# read in the config to ensure we've got current data
|
||||||
|
configuration = get_config(section)
|
||||||
|
|
||||||
|
if isinstance(update_data, list):
|
||||||
|
configuration = update_data
|
||||||
|
else:
|
||||||
|
configuration.update(update_data)
|
||||||
|
|
||||||
# read only the requested section's data.
|
# read only the requested section's data.
|
||||||
scope.sections[section] = { section : update_data }
|
scope.sections[section] = {section: configuration}
|
||||||
scope.write_section(section)
|
scope.write_section(section)
|
||||||
|
|
||||||
|
|
||||||
|
@ -585,16 +684,20 @@ def spec_externals(spec):
|
||||||
def is_spec_buildable(spec):
|
def is_spec_buildable(spec):
|
||||||
"""Return true if the spec pkgspec is configured as buildable"""
|
"""Return true if the spec pkgspec is configured as buildable"""
|
||||||
allpkgs = get_config('packages')
|
allpkgs = get_config('packages')
|
||||||
name = spec.name
|
if spec.name not in allpkgs:
|
||||||
if not spec.name in allpkgs:
|
|
||||||
return True
|
return True
|
||||||
if not 'buildable' in allpkgs[spec.name]:
|
if 'buildable' not in allpkgs[spec.name]:
|
||||||
return True
|
return True
|
||||||
return allpkgs[spec.name]['buildable']
|
return allpkgs[spec.name]['buildable']
|
||||||
|
|
||||||
|
|
||||||
class ConfigError(SpackError): pass
|
class ConfigError(SpackError):
|
||||||
class ConfigFileError(ConfigError): pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigFileError(ConfigError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def get_path(path, data):
|
def get_path(path, data):
|
||||||
if path:
|
if path:
|
||||||
|
@ -602,6 +705,7 @@ def get_path(path, data):
|
||||||
else:
|
else:
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
class ConfigFormatError(ConfigError):
|
class ConfigFormatError(ConfigError):
|
||||||
"""Raised when a configuration format does not match its schema."""
|
"""Raised when a configuration format does not match its schema."""
|
||||||
def __init__(self, validation_error, data):
|
def __init__(self, validation_error, data):
|
||||||
|
@ -636,5 +740,6 @@ def __init__(self, validation_error, data):
|
||||||
message = '%s: %s' % (location, validation_error.message)
|
message = '%s: %s' % (location, validation_error.message)
|
||||||
super(ConfigError, self).__init__(message)
|
super(ConfigError, self).__init__(message)
|
||||||
|
|
||||||
|
|
||||||
class ConfigSanityError(ConfigFormatError):
|
class ConfigSanityError(ConfigFormatError):
|
||||||
"""Same as ConfigFormatError, raised when config is written by Spack."""
|
"""Same as ConfigFormatError, raised when config is written by Spack."""
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013-2015, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""Spack's installation tracking database.
|
"""Spack's installation tracking database.
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
import time
|
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
|
@ -56,11 +55,12 @@
|
||||||
from spack.error import SpackError
|
from spack.error import SpackError
|
||||||
from spack.repository import UnknownPackageError
|
from spack.repository import UnknownPackageError
|
||||||
|
|
||||||
|
|
||||||
# DB goes in this directory underneath the root
|
# DB goes in this directory underneath the root
|
||||||
_db_dirname = '.spack-db'
|
_db_dirname = '.spack-db'
|
||||||
|
|
||||||
# DB version. This is stuck in the DB file to track changes in format.
|
# DB version. This is stuck in the DB file to track changes in format.
|
||||||
_db_version = Version('0.9')
|
_db_version = Version('0.9.1')
|
||||||
|
|
||||||
# Default timeout for spack database locks is 5 min.
|
# Default timeout for spack database locks is 5 min.
|
||||||
_db_lock_timeout = 60
|
_db_lock_timeout = 60
|
||||||
|
@ -69,10 +69,12 @@
|
||||||
def _autospec(function):
|
def _autospec(function):
|
||||||
"""Decorator that automatically converts the argument of a single-arg
|
"""Decorator that automatically converts the argument of a single-arg
|
||||||
function to a Spec."""
|
function to a Spec."""
|
||||||
|
|
||||||
def converter(self, spec_like, *args, **kwargs):
|
def converter(self, spec_like, *args, **kwargs):
|
||||||
if not isinstance(spec_like, spack.spec.Spec):
|
if not isinstance(spec_like, spack.spec.Spec):
|
||||||
spec_like = spack.spec.Spec(spec_like)
|
spec_like = spack.spec.Spec(spec_like)
|
||||||
return function(self, spec_like, *args, **kwargs)
|
return function(self, spec_like, *args, **kwargs)
|
||||||
|
|
||||||
return converter
|
return converter
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,22 +94,28 @@ class InstallRecord(object):
|
||||||
dependents left.
|
dependents left.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def __init__(self, spec, path, installed, ref_count=0):
|
|
||||||
|
def __init__(self, spec, path, installed, ref_count=0, explicit=False):
|
||||||
self.spec = spec
|
self.spec = spec
|
||||||
self.path = str(path)
|
self.path = str(path)
|
||||||
self.installed = bool(installed)
|
self.installed = bool(installed)
|
||||||
self.ref_count = ref_count
|
self.ref_count = ref_count
|
||||||
|
self.explicit = explicit
|
||||||
|
|
||||||
def to_dict(self):
|
def to_dict(self):
|
||||||
return { 'spec' : self.spec.to_node_dict(),
|
return {
|
||||||
'path' : self.path,
|
'spec': self.spec.to_node_dict(),
|
||||||
'installed' : self.installed,
|
'path': self.path,
|
||||||
'ref_count' : self.ref_count }
|
'installed': self.installed,
|
||||||
|
'ref_count': self.ref_count,
|
||||||
|
'explicit': self.explicit
|
||||||
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_dict(cls, spec, dictionary):
|
def from_dict(cls, spec, dictionary):
|
||||||
d = dictionary
|
d = dictionary
|
||||||
return InstallRecord(spec, d['path'], d['installed'], d['ref_count'])
|
return InstallRecord(spec, d['path'], d['installed'], d['ref_count'],
|
||||||
|
d.get('explicit', False))
|
||||||
|
|
||||||
|
|
||||||
class Database(object):
|
class Database(object):
|
||||||
|
@ -155,17 +163,14 @@ def __init__(self, root, db_dir=None):
|
||||||
self.lock = Lock(self._lock_path)
|
self.lock = Lock(self._lock_path)
|
||||||
self._data = {}
|
self._data = {}
|
||||||
|
|
||||||
|
|
||||||
def write_transaction(self, timeout=_db_lock_timeout):
|
def write_transaction(self, timeout=_db_lock_timeout):
|
||||||
"""Get a write lock context manager for use in a `with` block."""
|
"""Get a write lock context manager for use in a `with` block."""
|
||||||
return WriteTransaction(self, self._read, self._write, timeout)
|
return WriteTransaction(self, self._read, self._write, timeout)
|
||||||
|
|
||||||
|
|
||||||
def read_transaction(self, timeout=_db_lock_timeout):
|
def read_transaction(self, timeout=_db_lock_timeout):
|
||||||
"""Get a read lock context manager for use in a `with` block."""
|
"""Get a read lock context manager for use in a `with` block."""
|
||||||
return ReadTransaction(self, self._read, None, timeout)
|
return ReadTransaction(self, self._read, None, timeout)
|
||||||
|
|
||||||
|
|
||||||
def _write_to_yaml(self, stream):
|
def _write_to_yaml(self, stream):
|
||||||
"""Write out the databsae to a YAML file.
|
"""Write out the databsae to a YAML file.
|
||||||
|
|
||||||
|
@ -181,9 +186,9 @@ def _write_to_yaml(self, stream):
|
||||||
# different paths, it can't differentiate.
|
# different paths, it can't differentiate.
|
||||||
# TODO: fix this before we support multiple install locations.
|
# TODO: fix this before we support multiple install locations.
|
||||||
database = {
|
database = {
|
||||||
'database' : {
|
'database': {
|
||||||
'installs' : installs,
|
'installs': installs,
|
||||||
'version' : str(_db_version)
|
'version': str(_db_version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,17 +197,18 @@ def _write_to_yaml(self, stream):
|
||||||
except YAMLError as e:
|
except YAMLError as e:
|
||||||
raise SpackYAMLError("error writing YAML database:", str(e))
|
raise SpackYAMLError("error writing YAML database:", str(e))
|
||||||
|
|
||||||
|
|
||||||
def _read_spec_from_yaml(self, hash_key, installs, parent_key=None):
|
def _read_spec_from_yaml(self, hash_key, installs, parent_key=None):
|
||||||
"""Recursively construct a spec from a hash in a YAML database.
|
"""Recursively construct a spec from a hash in a YAML database.
|
||||||
|
|
||||||
Does not do any locking.
|
Does not do any locking.
|
||||||
"""
|
"""
|
||||||
if hash_key not in installs:
|
|
||||||
parent = read_spec(installs[parent_key]['path'])
|
|
||||||
|
|
||||||
spec_dict = installs[hash_key]['spec']
|
spec_dict = installs[hash_key]['spec']
|
||||||
|
|
||||||
|
# Install records don't include hash with spec, so we add it in here
|
||||||
|
# to ensure it is read properly.
|
||||||
|
for name in spec_dict:
|
||||||
|
spec_dict[name]['hash'] = hash_key
|
||||||
|
|
||||||
# Build spec from dict first.
|
# Build spec from dict first.
|
||||||
spec = Spec.from_node_dict(spec_dict)
|
spec = Spec.from_node_dict(spec_dict)
|
||||||
|
|
||||||
|
@ -217,7 +223,6 @@ def _read_spec_from_yaml(self, hash_key, installs, parent_key=None):
|
||||||
spec._mark_concrete()
|
spec._mark_concrete()
|
||||||
return spec
|
return spec
|
||||||
|
|
||||||
|
|
||||||
def _read_from_yaml(self, stream):
|
def _read_from_yaml(self, stream):
|
||||||
"""
|
"""
|
||||||
Fill database from YAML, do not maintain old data
|
Fill database from YAML, do not maintain old data
|
||||||
|
@ -239,7 +244,8 @@ def _read_from_yaml(self, stream):
|
||||||
return
|
return
|
||||||
|
|
||||||
def check(cond, msg):
|
def check(cond, msg):
|
||||||
if not cond: raise CorruptDatabaseError(self._index_path, msg)
|
if not cond:
|
||||||
|
raise CorruptDatabaseError(self._index_path, msg)
|
||||||
|
|
||||||
check('database' in yfile, "No 'database' attribute in YAML.")
|
check('database' in yfile, "No 'database' attribute in YAML.")
|
||||||
|
|
||||||
|
@ -248,13 +254,17 @@ def check(cond, msg):
|
||||||
check('installs' in db, "No 'installs' in YAML DB.")
|
check('installs' in db, "No 'installs' in YAML DB.")
|
||||||
check('version' in db, "No 'version' in YAML DB.")
|
check('version' in db, "No 'version' in YAML DB.")
|
||||||
|
|
||||||
|
installs = db['installs']
|
||||||
|
|
||||||
# TODO: better version checking semantics.
|
# TODO: better version checking semantics.
|
||||||
version = Version(db['version'])
|
version = Version(db['version'])
|
||||||
if version != _db_version:
|
if version > _db_version:
|
||||||
raise InvalidDatabaseVersionError(_db_version, version)
|
raise InvalidDatabaseVersionError(_db_version, version)
|
||||||
|
elif version < _db_version:
|
||||||
|
self.reindex(spack.install_layout)
|
||||||
|
installs = dict((k, v.to_dict()) for k, v in self._data.items())
|
||||||
|
|
||||||
# Iterate through database and check each record.
|
# Iterate through database and check each record.
|
||||||
installs = db['installs']
|
|
||||||
data = {}
|
data = {}
|
||||||
for hash_key, rec in installs.items():
|
for hash_key, rec in installs.items():
|
||||||
try:
|
try:
|
||||||
|
@ -265,25 +275,25 @@ def check(cond, msg):
|
||||||
# hashes are the same.
|
# hashes are the same.
|
||||||
spec_hash = spec.dag_hash()
|
spec_hash = spec.dag_hash()
|
||||||
if not spec_hash == hash_key:
|
if not spec_hash == hash_key:
|
||||||
tty.warn("Hash mismatch in database: %s -> spec with hash %s"
|
tty.warn(
|
||||||
% (hash_key, spec_hash))
|
"Hash mismatch in database: %s -> spec with hash %s" %
|
||||||
|
(hash_key, spec_hash))
|
||||||
continue # TODO: is skipping the right thing to do?
|
continue # TODO: is skipping the right thing to do?
|
||||||
|
|
||||||
# Insert the brand new spec in the database. Each
|
# Insert the brand new spec in the database. Each
|
||||||
# spec has its own copies of its dependency specs.
|
# spec has its own copies of its dependency specs.
|
||||||
# TODO: would a more immmutable spec implementation simplify this?
|
# TODO: would a more immmutable spec implementation simplify
|
||||||
|
# this?
|
||||||
data[hash_key] = InstallRecord.from_dict(spec, rec)
|
data[hash_key] = InstallRecord.from_dict(spec, rec)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
tty.warn("Invalid database reecord:",
|
tty.warn("Invalid database reecord:",
|
||||||
"file: %s" % self._index_path,
|
"file: %s" % self._index_path,
|
||||||
"hash: %s" % hash_key,
|
"hash: %s" % hash_key, "cause: %s" % str(e))
|
||||||
"cause: %s" % str(e))
|
|
||||||
raise
|
raise
|
||||||
|
|
||||||
self._data = data
|
self._data = data
|
||||||
|
|
||||||
|
|
||||||
def reindex(self, directory_layout):
|
def reindex(self, directory_layout):
|
||||||
"""Build database index from scratch based from a directory layout.
|
"""Build database index from scratch based from a directory layout.
|
||||||
|
|
||||||
|
@ -308,7 +318,6 @@ def reindex(self, directory_layout):
|
||||||
self._data = old_data
|
self._data = old_data
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def _check_ref_counts(self):
|
def _check_ref_counts(self):
|
||||||
"""Ensure consistency of reference counts in the DB.
|
"""Ensure consistency of reference counts in the DB.
|
||||||
|
|
||||||
|
@ -330,9 +339,8 @@ def _check_ref_counts(self):
|
||||||
found = rec.ref_count
|
found = rec.ref_count
|
||||||
if not expected == found:
|
if not expected == found:
|
||||||
raise AssertionError(
|
raise AssertionError(
|
||||||
"Invalid ref_count: %s: %d (expected %d), in DB %s"
|
"Invalid ref_count: %s: %d (expected %d), in DB %s" %
|
||||||
% (key, found, expected, self._index_path))
|
(key, found, expected, self._index_path))
|
||||||
|
|
||||||
|
|
||||||
def _write(self):
|
def _write(self):
|
||||||
"""Write the in-memory database index to its file path.
|
"""Write the in-memory database index to its file path.
|
||||||
|
@ -354,7 +362,6 @@ def _write(self):
|
||||||
os.remove(temp_file)
|
os.remove(temp_file)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
||||||
def _read(self):
|
def _read(self):
|
||||||
"""Re-read Database from the data in the set location.
|
"""Re-read Database from the data in the set location.
|
||||||
|
|
||||||
|
@ -369,8 +376,7 @@ def _read(self):
|
||||||
# reindex() takes its own write lock, so no lock here.
|
# reindex() takes its own write lock, so no lock here.
|
||||||
self.reindex(spack.install_layout)
|
self.reindex(spack.install_layout)
|
||||||
|
|
||||||
|
def _add(self, spec, path, directory_layout=None, explicit=False):
|
||||||
def _add(self, spec, path, directory_layout=None):
|
|
||||||
"""Add an install record for spec at path to the database.
|
"""Add an install record for spec at path to the database.
|
||||||
|
|
||||||
This assumes that the spec is not already installed. It
|
This assumes that the spec is not already installed. It
|
||||||
|
@ -392,11 +398,11 @@ def _add(self, spec, path, directory_layout=None):
|
||||||
rec.path = path
|
rec.path = path
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self._data[key] = InstallRecord(spec, path, True)
|
self._data[key] = InstallRecord(spec, path, True,
|
||||||
|
explicit=explicit)
|
||||||
for dep in spec.dependencies.values():
|
for dep in spec.dependencies.values():
|
||||||
self._increment_ref_count(dep, directory_layout)
|
self._increment_ref_count(dep, directory_layout)
|
||||||
|
|
||||||
|
|
||||||
def _increment_ref_count(self, spec, directory_layout=None):
|
def _increment_ref_count(self, spec, directory_layout=None):
|
||||||
"""Recursively examine dependencies and update their DB entries."""
|
"""Recursively examine dependencies and update their DB entries."""
|
||||||
key = spec.dag_hash()
|
key = spec.dag_hash()
|
||||||
|
@ -415,7 +421,7 @@ def _increment_ref_count(self, spec, directory_layout=None):
|
||||||
self._data[key].ref_count += 1
|
self._data[key].ref_count += 1
|
||||||
|
|
||||||
@_autospec
|
@_autospec
|
||||||
def add(self, spec, path):
|
def add(self, spec, path, explicit=False):
|
||||||
"""Add spec at path to database, locking and reading DB to sync.
|
"""Add spec at path to database, locking and reading DB to sync.
|
||||||
|
|
||||||
``add()`` will lock and read from the DB on disk.
|
``add()`` will lock and read from the DB on disk.
|
||||||
|
@ -424,30 +430,27 @@ def add(self, spec, path):
|
||||||
# TODO: ensure that spec is concrete?
|
# TODO: ensure that spec is concrete?
|
||||||
# Entire add is transactional.
|
# Entire add is transactional.
|
||||||
with self.write_transaction():
|
with self.write_transaction():
|
||||||
self._add(spec, path)
|
self._add(spec, path, explicit=explicit)
|
||||||
|
|
||||||
|
|
||||||
def _get_matching_spec_key(self, spec, **kwargs):
|
def _get_matching_spec_key(self, spec, **kwargs):
|
||||||
"""Get the exact spec OR get a single spec that matches."""
|
"""Get the exact spec OR get a single spec that matches."""
|
||||||
key = spec.dag_hash()
|
key = spec.dag_hash()
|
||||||
if not key in self._data:
|
if key not in self._data:
|
||||||
match = self.query_one(spec, **kwargs)
|
match = self.query_one(spec, **kwargs)
|
||||||
if match:
|
if match:
|
||||||
return match.dag_hash()
|
return match.dag_hash()
|
||||||
raise KeyError("No such spec in database! %s" % spec)
|
raise KeyError("No such spec in database! %s" % spec)
|
||||||
return key
|
return key
|
||||||
|
|
||||||
|
|
||||||
@_autospec
|
@_autospec
|
||||||
def get_record(self, spec, **kwargs):
|
def get_record(self, spec, **kwargs):
|
||||||
key = self._get_matching_spec_key(spec, **kwargs)
|
key = self._get_matching_spec_key(spec, **kwargs)
|
||||||
return self._data[key]
|
return self._data[key]
|
||||||
|
|
||||||
|
|
||||||
def _decrement_ref_count(self, spec):
|
def _decrement_ref_count(self, spec):
|
||||||
key = spec.dag_hash()
|
key = spec.dag_hash()
|
||||||
|
|
||||||
if not key in self._data:
|
if key not in self._data:
|
||||||
# TODO: print something here? DB is corrupt, but
|
# TODO: print something here? DB is corrupt, but
|
||||||
# not much we can do.
|
# not much we can do.
|
||||||
return
|
return
|
||||||
|
@ -460,7 +463,6 @@ def _decrement_ref_count(self, spec):
|
||||||
for dep in spec.dependencies.values():
|
for dep in spec.dependencies.values():
|
||||||
self._decrement_ref_count(dep)
|
self._decrement_ref_count(dep)
|
||||||
|
|
||||||
|
|
||||||
def _remove(self, spec):
|
def _remove(self, spec):
|
||||||
"""Non-locking version of remove(); does real work.
|
"""Non-locking version of remove(); does real work.
|
||||||
"""
|
"""
|
||||||
|
@ -479,7 +481,6 @@ def _remove(self, spec):
|
||||||
# query spec was passed in.
|
# query spec was passed in.
|
||||||
return rec.spec
|
return rec.spec
|
||||||
|
|
||||||
|
|
||||||
@_autospec
|
@_autospec
|
||||||
def remove(self, spec):
|
def remove(self, spec):
|
||||||
"""Removes a spec from the database. To be called on uninstall.
|
"""Removes a spec from the database. To be called on uninstall.
|
||||||
|
@ -496,7 +497,6 @@ def remove(self, spec):
|
||||||
with self.write_transaction():
|
with self.write_transaction():
|
||||||
return self._remove(spec)
|
return self._remove(spec)
|
||||||
|
|
||||||
|
|
||||||
@_autospec
|
@_autospec
|
||||||
def installed_extensions_for(self, extendee_spec):
|
def installed_extensions_for(self, extendee_spec):
|
||||||
"""
|
"""
|
||||||
|
@ -507,13 +507,12 @@ def installed_extensions_for(self, extendee_spec):
|
||||||
try:
|
try:
|
||||||
if s.package.extends(extendee_spec):
|
if s.package.extends(extendee_spec):
|
||||||
yield s.package
|
yield s.package
|
||||||
except UnknownPackageError as e:
|
except UnknownPackageError:
|
||||||
continue
|
continue
|
||||||
# skips unknown packages
|
# skips unknown packages
|
||||||
# TODO: conditional way to do this instead of catching exceptions
|
# TODO: conditional way to do this instead of catching exceptions
|
||||||
|
|
||||||
|
def query(self, query_spec=any, known=any, installed=True, explicit=any):
|
||||||
def query(self, query_spec=any, known=any, installed=True):
|
|
||||||
"""Run a query on the database.
|
"""Run a query on the database.
|
||||||
|
|
||||||
``query_spec``
|
``query_spec``
|
||||||
|
@ -553,14 +552,16 @@ def query(self, query_spec=any, known=any, installed=True):
|
||||||
for key, rec in self._data.items():
|
for key, rec in self._data.items():
|
||||||
if installed is not any and rec.installed != installed:
|
if installed is not any and rec.installed != installed:
|
||||||
continue
|
continue
|
||||||
if known is not any and spack.repo.exists(rec.spec.name) != known:
|
if explicit is not any and rec.explicit != explicit:
|
||||||
|
continue
|
||||||
|
if known is not any and spack.repo.exists(
|
||||||
|
rec.spec.name) != known:
|
||||||
continue
|
continue
|
||||||
if query_spec is any or rec.spec.satisfies(query_spec):
|
if query_spec is any or rec.spec.satisfies(query_spec):
|
||||||
results.append(rec.spec)
|
results.append(rec.spec)
|
||||||
|
|
||||||
return sorted(results)
|
return sorted(results)
|
||||||
|
|
||||||
|
|
||||||
def query_one(self, query_spec, known=any, installed=True):
|
def query_one(self, query_spec, known=any, installed=True):
|
||||||
"""Query for exactly one spec that matches the query spec.
|
"""Query for exactly one spec that matches the query spec.
|
||||||
|
|
||||||
|
@ -572,7 +573,6 @@ def query_one(self, query_spec, known=any, installed=True):
|
||||||
assert len(concrete_specs) <= 1
|
assert len(concrete_specs) <= 1
|
||||||
return concrete_specs[0] if concrete_specs else None
|
return concrete_specs[0] if concrete_specs else None
|
||||||
|
|
||||||
|
|
||||||
def missing(self, spec):
|
def missing(self, spec):
|
||||||
with self.read_transaction():
|
with self.read_transaction():
|
||||||
key = spec.dag_hash()
|
key = spec.dag_hash()
|
||||||
|
@ -587,7 +587,10 @@ class _Transaction(object):
|
||||||
|
|
||||||
Timeout for lock is customizable.
|
Timeout for lock is customizable.
|
||||||
"""
|
"""
|
||||||
def __init__(self, db, acquire_fn=None, release_fn=None,
|
|
||||||
|
def __init__(self, db,
|
||||||
|
acquire_fn=None,
|
||||||
|
release_fn=None,
|
||||||
timeout=_db_lock_timeout):
|
timeout=_db_lock_timeout):
|
||||||
self._db = db
|
self._db = db
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
|
@ -622,11 +625,11 @@ def _exit(self):
|
||||||
class CorruptDatabaseError(SpackError):
|
class CorruptDatabaseError(SpackError):
|
||||||
def __init__(self, path, msg=''):
|
def __init__(self, path, msg=''):
|
||||||
super(CorruptDatabaseError, self).__init__(
|
super(CorruptDatabaseError, self).__init__(
|
||||||
"Spack database is corrupt: %s. %s" %(path, msg))
|
"Spack database is corrupt: %s. %s" % (path, msg))
|
||||||
|
|
||||||
|
|
||||||
class InvalidDatabaseVersionError(SpackError):
|
class InvalidDatabaseVersionError(SpackError):
|
||||||
def __init__(self, expected, found):
|
def __init__(self, expected, found):
|
||||||
super(InvalidDatabaseVersionError, self).__init__(
|
super(InvalidDatabaseVersionError, self).__init__(
|
||||||
"Expected database version %s but found version %s"
|
"Expected database version %s but found version %s" %
|
||||||
% (expected, found))
|
(expected, found))
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""This package contains directives that can be used within a package.
|
"""This package contains directives that can be used within a package.
|
||||||
|
|
||||||
|
@ -45,11 +45,8 @@ class OpenMpi(Package):
|
||||||
* ``resource``
|
* ``resource``
|
||||||
|
|
||||||
"""
|
"""
|
||||||
__all__ = ['depends_on', 'extends', 'provides', 'patch', 'version',
|
|
||||||
'variant', 'resource']
|
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import inspect
|
|
||||||
import os.path
|
import os.path
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
|
@ -67,6 +64,9 @@ class OpenMpi(Package):
|
||||||
from spack.resource import Resource
|
from spack.resource import Resource
|
||||||
from spack.fetch_strategy import from_kwargs
|
from spack.fetch_strategy import from_kwargs
|
||||||
|
|
||||||
|
__all__ = ['depends_on', 'extends', 'provides', 'patch', 'version', 'variant',
|
||||||
|
'resource']
|
||||||
|
|
||||||
#
|
#
|
||||||
# This is a list of all directives, built up as they are defined in
|
# This is a list of all directives, built up as they are defined in
|
||||||
# this file.
|
# this file.
|
||||||
|
@ -122,15 +122,14 @@ class Foo(Package):
|
||||||
|
|
||||||
def __init__(self, dicts=None):
|
def __init__(self, dicts=None):
|
||||||
if isinstance(dicts, basestring):
|
if isinstance(dicts, basestring):
|
||||||
dicts = (dicts,)
|
dicts = (dicts, )
|
||||||
elif type(dicts) not in (list, tuple):
|
elif type(dicts) not in (list, tuple):
|
||||||
raise TypeError(
|
raise TypeError(
|
||||||
"dicts arg must be list, tuple, or string. Found %s"
|
"dicts arg must be list, tuple, or string. Found %s" %
|
||||||
% type(dicts))
|
type(dicts))
|
||||||
|
|
||||||
self.dicts = dicts
|
self.dicts = dicts
|
||||||
|
|
||||||
|
|
||||||
def ensure_dicts(self, pkg):
|
def ensure_dicts(self, pkg):
|
||||||
"""Ensure that a package has the dicts required by this directive."""
|
"""Ensure that a package has the dicts required by this directive."""
|
||||||
for d in self.dicts:
|
for d in self.dicts:
|
||||||
|
@ -142,7 +141,6 @@ def ensure_dicts(self, pkg):
|
||||||
raise spack.error.SpackError(
|
raise spack.error.SpackError(
|
||||||
"Package %s has non-dict %s attribute!" % (pkg, d))
|
"Package %s has non-dict %s attribute!" % (pkg, d))
|
||||||
|
|
||||||
|
|
||||||
def __call__(self, directive_function):
|
def __call__(self, directive_function):
|
||||||
directives[directive_function.__name__] = self
|
directives[directive_function.__name__] = self
|
||||||
|
|
||||||
|
@ -263,7 +261,8 @@ def variant(pkg, name, default=False, description=""):
|
||||||
description = str(description).strip()
|
description = str(description).strip()
|
||||||
|
|
||||||
if not re.match(spack.spec.identifier_re, name):
|
if not re.match(spack.spec.identifier_re, name):
|
||||||
raise DirectiveError("Invalid variant name in %s: '%s'" % (pkg.name, name))
|
raise DirectiveError("Invalid variant name in %s: '%s'" %
|
||||||
|
(pkg.name, name))
|
||||||
|
|
||||||
pkg.variants[name] = Variant(default, description)
|
pkg.variants[name] = Variant(default, description)
|
||||||
|
|
||||||
|
@ -271,31 +270,37 @@ def variant(pkg, name, default=False, description=""):
|
||||||
@directive('resources')
|
@directive('resources')
|
||||||
def resource(pkg, **kwargs):
|
def resource(pkg, **kwargs):
|
||||||
"""
|
"""
|
||||||
Define an external resource to be fetched and staged when building the package. Based on the keywords present in the
|
Define an external resource to be fetched and staged when building the
|
||||||
dictionary the appropriate FetchStrategy will be used for the resource. Resources are fetched and staged in their
|
package. Based on the keywords present in the dictionary the appropriate
|
||||||
own folder inside spack stage area, and then linked into the stage area of the package that needs them.
|
FetchStrategy will be used for the resource. Resources are fetched and
|
||||||
|
staged in their own folder inside spack stage area, and then linked into
|
||||||
|
the stage area of the package that needs them.
|
||||||
|
|
||||||
List of recognized keywords:
|
List of recognized keywords:
|
||||||
|
|
||||||
* 'when' : (optional) represents the condition upon which the resource is needed
|
* 'when' : (optional) represents the condition upon which the resource is
|
||||||
* 'destination' : (optional) path where to link the resource. This path must be relative to the main package stage
|
needed
|
||||||
area.
|
* 'destination' : (optional) path where to link the resource. This path
|
||||||
* 'placement' : (optional) gives the possibility to fine tune how the resource is linked into the main package stage
|
must be relative to the main package stage area.
|
||||||
area.
|
* 'placement' : (optional) gives the possibility to fine tune how the
|
||||||
|
resource is linked into the main package stage area.
|
||||||
"""
|
"""
|
||||||
when = kwargs.get('when', pkg.name)
|
when = kwargs.get('when', pkg.name)
|
||||||
destination = kwargs.get('destination', "")
|
destination = kwargs.get('destination', "")
|
||||||
placement = kwargs.get('placement', None)
|
placement = kwargs.get('placement', None)
|
||||||
# Check if the path is relative
|
# Check if the path is relative
|
||||||
if os.path.isabs(destination):
|
if os.path.isabs(destination):
|
||||||
message = "The destination keyword of a resource directive can't be an absolute path.\n"
|
message = "The destination keyword of a resource directive can't be"
|
||||||
|
" an absolute path.\n"
|
||||||
message += "\tdestination : '{dest}\n'".format(dest=destination)
|
message += "\tdestination : '{dest}\n'".format(dest=destination)
|
||||||
raise RuntimeError(message)
|
raise RuntimeError(message)
|
||||||
# Check if the path falls within the main package stage area
|
# Check if the path falls within the main package stage area
|
||||||
test_path = 'stage_folder_root/'
|
test_path = 'stage_folder_root'
|
||||||
normalized_destination = os.path.normpath(join_path(test_path, destination)) # Normalized absolute path
|
normalized_destination = os.path.normpath(join_path(test_path, destination)
|
||||||
|
) # Normalized absolute path
|
||||||
if test_path not in normalized_destination:
|
if test_path not in normalized_destination:
|
||||||
message = "The destination folder of a resource must fall within the main package stage directory.\n"
|
message = "The destination folder of a resource must fall within the"
|
||||||
|
" main package stage directory.\n"
|
||||||
message += "\tdestination : '{dest}'\n".format(dest=destination)
|
message += "\tdestination : '{dest}'\n".format(dest=destination)
|
||||||
raise RuntimeError(message)
|
raise RuntimeError(message)
|
||||||
when_spec = parse_anonymous_spec(when, pkg.name)
|
when_spec = parse_anonymous_spec(when, pkg.name)
|
||||||
|
@ -307,6 +312,7 @@ def resource(pkg, **kwargs):
|
||||||
|
|
||||||
class DirectiveError(spack.error.SpackError):
|
class DirectiveError(spack.error.SpackError):
|
||||||
"""This is raised when something is wrong with a package directive."""
|
"""This is raised when something is wrong with a package directive."""
|
||||||
|
|
||||||
def __init__(self, directive, message):
|
def __init__(self, directive, message):
|
||||||
super(DirectiveError, self).__init__(message)
|
super(DirectiveError, self).__init__(message)
|
||||||
self.directive = directive
|
self.directive = directive
|
||||||
|
@ -314,6 +320,7 @@ def __init__(self, directive, message):
|
||||||
|
|
||||||
class CircularReferenceError(DirectiveError):
|
class CircularReferenceError(DirectiveError):
|
||||||
"""This is raised when something depends on itself."""
|
"""This is raised when something depends on itself."""
|
||||||
|
|
||||||
def __init__(self, directive, package):
|
def __init__(self, directive, package):
|
||||||
super(CircularReferenceError, self).__init__(
|
super(CircularReferenceError, self).__init__(
|
||||||
directive,
|
directive,
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -1,7 +1,31 @@
|
||||||
import os
|
##############################################################################
|
||||||
import os.path
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
|
# LLNL-CODE-647188
|
||||||
|
#
|
||||||
|
# For details, see https://github.com/llnl/spack
|
||||||
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
##############################################################################
|
||||||
import collections
|
import collections
|
||||||
import inspect
|
import inspect
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
|
||||||
class NameModifier(object):
|
class NameModifier(object):
|
||||||
|
@ -15,7 +39,8 @@ class NameValueModifier(object):
|
||||||
def __init__(self, name, value, **kwargs):
|
def __init__(self, name, value, **kwargs):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.value = value
|
self.value = value
|
||||||
self.args = {'name': name, 'value': value}
|
self.separator = kwargs.get('separator', ':')
|
||||||
|
self.args = {'name': name, 'value': value, 'delim': self.separator}
|
||||||
self.args.update(kwargs)
|
self.args.update(kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,44 +51,50 @@ def execute(self):
|
||||||
|
|
||||||
class UnsetEnv(NameModifier):
|
class UnsetEnv(NameModifier):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
os.environ.pop(self.name, None) # Avoid throwing if the variable was not set
|
# Avoid throwing if the variable was not set
|
||||||
|
os.environ.pop(self.name, None)
|
||||||
|
|
||||||
|
|
||||||
class SetPath(NameValueModifier):
|
class SetPath(NameValueModifier):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
string_path = concatenate_paths(self.value)
|
string_path = concatenate_paths(self.value, separator=self.separator)
|
||||||
os.environ[self.name] = string_path
|
os.environ[self.name] = string_path
|
||||||
|
|
||||||
|
|
||||||
class AppendPath(NameValueModifier):
|
class AppendPath(NameValueModifier):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(':') if environment_value else []
|
directories = environment_value.split(
|
||||||
|
self.separator) if environment_value else []
|
||||||
directories.append(os.path.normpath(self.value))
|
directories.append(os.path.normpath(self.value))
|
||||||
os.environ[self.name] = ':'.join(directories)
|
os.environ[self.name] = self.separator.join(directories)
|
||||||
|
|
||||||
|
|
||||||
class PrependPath(NameValueModifier):
|
class PrependPath(NameValueModifier):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(':') if environment_value else []
|
directories = environment_value.split(
|
||||||
|
self.separator) if environment_value else []
|
||||||
directories = [os.path.normpath(self.value)] + directories
|
directories = [os.path.normpath(self.value)] + directories
|
||||||
os.environ[self.name] = ':'.join(directories)
|
os.environ[self.name] = self.separator.join(directories)
|
||||||
|
|
||||||
|
|
||||||
class RemovePath(NameValueModifier):
|
class RemovePath(NameValueModifier):
|
||||||
def execute(self):
|
def execute(self):
|
||||||
environment_value = os.environ.get(self.name, '')
|
environment_value = os.environ.get(self.name, '')
|
||||||
directories = environment_value.split(':') if environment_value else []
|
directories = environment_value.split(
|
||||||
directories = [os.path.normpath(x) for x in directories if x != os.path.normpath(self.value)]
|
self.separator) if environment_value else []
|
||||||
os.environ[self.name] = ':'.join(directories)
|
directories = [os.path.normpath(x) for x in directories
|
||||||
|
if x != os.path.normpath(self.value)]
|
||||||
|
os.environ[self.name] = self.separator.join(directories)
|
||||||
|
|
||||||
|
|
||||||
class EnvironmentModifications(object):
|
class EnvironmentModifications(object):
|
||||||
"""
|
"""
|
||||||
Keeps track of requests to modify the current environment.
|
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:
|
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
|
- 'filename' : filename of the module where the caller is defined
|
||||||
- 'lineno': line number where the request occurred
|
- 'lineno': line number where the request occurred
|
||||||
- 'context' : line of code that issued the request that failed
|
- 'context' : line of code that issued the request that failed
|
||||||
|
@ -71,10 +102,10 @@ class EnvironmentModifications(object):
|
||||||
|
|
||||||
def __init__(self, other=None):
|
def __init__(self, other=None):
|
||||||
"""
|
"""
|
||||||
Initializes a new instance, copying commands from other if it is not None
|
Initializes a new instance, copying commands from other if not None
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
other: another instance of EnvironmentModifications from which (optional)
|
other: another instance of EnvironmentModifications (optional)
|
||||||
"""
|
"""
|
||||||
self.env_modifications = []
|
self.env_modifications = []
|
||||||
if other is not None:
|
if other is not None:
|
||||||
|
@ -93,7 +124,8 @@ def extend(self, other):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _check_other(other):
|
def _check_other(other):
|
||||||
if not isinstance(other, EnvironmentModifications):
|
if not isinstance(other, EnvironmentModifications):
|
||||||
raise TypeError('other must be an instance of EnvironmentModifications')
|
raise TypeError(
|
||||||
|
'other must be an instance of EnvironmentModifications')
|
||||||
|
|
||||||
def _get_outside_caller_attributes(self):
|
def _get_outside_caller_attributes(self):
|
||||||
stack = inspect.stack()
|
stack = inspect.stack()
|
||||||
|
@ -101,12 +133,10 @@ def _get_outside_caller_attributes(self):
|
||||||
_, filename, lineno, _, context, index = stack[2]
|
_, filename, lineno, _, context, index = stack[2]
|
||||||
context = context[index].strip()
|
context = context[index].strip()
|
||||||
except Exception:
|
except Exception:
|
||||||
filename, lineno, context = 'unknown file', 'unknown line', 'unknown context'
|
filename = 'unknown file'
|
||||||
args = {
|
lineno = 'unknown line'
|
||||||
'filename': filename,
|
context = 'unknown context'
|
||||||
'lineno': lineno,
|
args = {'filename': filename, 'lineno': lineno, 'context': context}
|
||||||
'context': context
|
|
||||||
}
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
def set(self, name, value, **kwargs):
|
def set(self, name, value, **kwargs):
|
||||||
|
@ -170,7 +200,8 @@ def prepend_path(self, name, path, **kwargs):
|
||||||
|
|
||||||
def remove_path(self, name, path, **kwargs):
|
def remove_path(self, name, path, **kwargs):
|
||||||
"""
|
"""
|
||||||
Stores in the current object a request to remove a path from a path list
|
Stores in the current object a request to remove a path from a path
|
||||||
|
list
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
name: name of the path list in the environment
|
name: name of the path list in the environment
|
||||||
|
@ -185,7 +216,8 @@ def group_by_name(self):
|
||||||
Returns a dict of the modifications grouped by variable name
|
Returns a dict of the modifications grouped by variable name
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
dict mapping the environment variable name to the modifications to be done on it
|
dict mapping the environment variable name to the modifications to
|
||||||
|
be done on it
|
||||||
"""
|
"""
|
||||||
modifications = collections.defaultdict(list)
|
modifications = collections.defaultdict(list)
|
||||||
for item in self:
|
for item in self:
|
||||||
|
@ -203,34 +235,39 @@ def apply_modifications(self):
|
||||||
Applies the modifications and clears the list
|
Applies the modifications and clears the list
|
||||||
"""
|
"""
|
||||||
modifications = self.group_by_name()
|
modifications = self.group_by_name()
|
||||||
# Apply the modifications to the environment variables one variable at a time
|
# Apply modifications one variable at a time
|
||||||
for name, actions in sorted(modifications.items()):
|
for name, actions in sorted(modifications.items()):
|
||||||
for x in actions:
|
for x in actions:
|
||||||
x.execute()
|
x.execute()
|
||||||
|
|
||||||
|
|
||||||
def concatenate_paths(paths):
|
def concatenate_paths(paths, separator=':'):
|
||||||
"""
|
"""
|
||||||
Concatenates an iterable of paths into a string of column separated paths
|
Concatenates an iterable of paths into a string of paths separated by
|
||||||
|
separator, defaulting to colon
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
paths: iterable of paths
|
paths: iterable of paths
|
||||||
|
separator: the separator to use, default ':'
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
string
|
string
|
||||||
"""
|
"""
|
||||||
return ':'.join(str(item) for item in paths)
|
return separator.join(str(item) for item in paths)
|
||||||
|
|
||||||
|
|
||||||
def set_or_unset_not_first(variable, changes, errstream):
|
def 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
|
Check if we are going to set or unset something after other modifications
|
||||||
|
have already been requested
|
||||||
"""
|
"""
|
||||||
indexes = [ii for ii, item in enumerate(changes) if ii != 0 and type(item) in [SetEnv, UnsetEnv]]
|
indexes = [ii for ii, item in enumerate(changes)
|
||||||
|
if ii != 0 and type(item) in [SetEnv, UnsetEnv]]
|
||||||
if indexes:
|
if indexes:
|
||||||
good = '\t \t{context} at {filename}:{lineno}'
|
good = '\t \t{context} at {filename}:{lineno}'
|
||||||
nogood = '\t--->\t{context} at {filename}:{lineno}'
|
nogood = '\t--->\t{context} at {filename}:{lineno}'
|
||||||
errstream('Suspicious requests to set or unset the variable \'{var}\' found'.format(var=variable))
|
message = 'Suspicious requests to set or unset the variable \'{var}\' found' # NOQA: ignore=E501
|
||||||
|
errstream(message.format(var=variable))
|
||||||
for ii, item in enumerate(changes):
|
for ii, item in enumerate(changes):
|
||||||
print_format = nogood if ii in indexes else good
|
print_format = nogood if ii in indexes else good
|
||||||
errstream(print_format.format(**item.args))
|
errstream(print_format.format(**item.args))
|
||||||
|
@ -238,8 +275,8 @@ def set_or_unset_not_first(variable, changes, errstream):
|
||||||
|
|
||||||
def validate(env, errstream):
|
def validate(env, errstream):
|
||||||
"""
|
"""
|
||||||
Validates the environment modifications to check for the presence of suspicious patterns. Prompts a warning for
|
Validates the environment modifications to check for the presence of
|
||||||
everything that was found
|
suspicious patterns. Prompts a warning for everything that was found
|
||||||
|
|
||||||
Current checks:
|
Current checks:
|
||||||
- set or unset variables after other changes on the same variable
|
- set or unset variables after other changes on the same variable
|
||||||
|
@ -250,3 +287,20 @@ def validate(env, errstream):
|
||||||
modifications = env.group_by_name()
|
modifications = env.group_by_name()
|
||||||
for variable, list_of_changes in sorted(modifications.items()):
|
for variable, list_of_changes in sorted(modifications.items()):
|
||||||
set_or_unset_not_first(variable, list_of_changes, errstream)
|
set_or_unset_not_first(variable, list_of_changes, errstream)
|
||||||
|
|
||||||
|
|
||||||
|
def filter_environment_blacklist(env, variables):
|
||||||
|
"""
|
||||||
|
Generator that filters out any change to environment variables present in
|
||||||
|
the input list
|
||||||
|
|
||||||
|
Args:
|
||||||
|
env: list of environment modifications
|
||||||
|
variables: list of variable names to be filtered
|
||||||
|
|
||||||
|
Yields:
|
||||||
|
items in env if they are not in variables
|
||||||
|
"""
|
||||||
|
for item in env:
|
||||||
|
if item.name not in variables:
|
||||||
|
yield item
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""
|
"""
|
||||||
Fetch strategies are used to download source code into a staging area
|
Fetch strategies are used to download source code into a staging area
|
||||||
|
@ -57,7 +57,6 @@
|
||||||
from spack.util.compression import decompressor_for, extension
|
from spack.util.compression import decompressor_for, extension
|
||||||
|
|
||||||
import spack.util.pattern as pattern
|
import spack.util.pattern as pattern
|
||||||
|
|
||||||
"""List of all fetch strategies, created by FetchStrategy metaclass."""
|
"""List of all fetch strategies, created by FetchStrategy metaclass."""
|
||||||
all_strategies = []
|
all_strategies = []
|
||||||
|
|
||||||
|
@ -82,13 +81,16 @@ class FetchStrategy(object):
|
||||||
|
|
||||||
class __metaclass__(type):
|
class __metaclass__(type):
|
||||||
"""This metaclass registers all fetch strategies in a list."""
|
"""This metaclass registers all fetch strategies in a list."""
|
||||||
|
|
||||||
def __init__(cls, name, bases, dict):
|
def __init__(cls, name, bases, dict):
|
||||||
type.__init__(cls, name, bases, dict)
|
type.__init__(cls, name, bases, dict)
|
||||||
if cls.enabled: all_strategies.append(cls)
|
if cls.enabled:
|
||||||
|
all_strategies.append(cls)
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# The stage is initialized late, so that fetch strategies can be constructed
|
# The stage is initialized late, so that fetch strategies can be
|
||||||
# at package construction time. This is where things will be fetched.
|
# constructed at package construction time. This is where things
|
||||||
|
# will be fetched.
|
||||||
self.stage = None
|
self.stage = None
|
||||||
|
|
||||||
def set_stage(self, stage):
|
def set_stage(self, stage):
|
||||||
|
@ -97,15 +99,20 @@ def set_stage(self, stage):
|
||||||
self.stage = stage
|
self.stage = stage
|
||||||
|
|
||||||
# Subclasses need to implement these methods
|
# Subclasses need to implement these methods
|
||||||
def fetch(self): pass # Return True on success, False on fail.
|
def fetch(self):
|
||||||
|
pass # Return True on success, False on fail.
|
||||||
|
|
||||||
def check(self): pass # Do checksum.
|
def check(self):
|
||||||
|
pass # Do checksum.
|
||||||
|
|
||||||
def expand(self): pass # Expand archive.
|
def expand(self):
|
||||||
|
pass # Expand archive.
|
||||||
|
|
||||||
def reset(self): pass # Revert to freshly downloaded state.
|
def reset(self):
|
||||||
|
pass # Revert to freshly downloaded state.
|
||||||
|
|
||||||
def archive(self, destination): pass # Used to create tarball for mirror.
|
def archive(self, destination):
|
||||||
|
pass # Used to create tarball for mirror.
|
||||||
|
|
||||||
def __str__(self): # Should be human readable URL.
|
def __str__(self): # Should be human readable URL.
|
||||||
return "FetchStrategy.__str___"
|
return "FetchStrategy.__str___"
|
||||||
|
@ -139,10 +146,12 @@ def __init__(self, url=None, digest=None, **kwargs):
|
||||||
# If URL or digest are provided in the kwargs, then prefer
|
# If URL or digest are provided in the kwargs, then prefer
|
||||||
# those values.
|
# those values.
|
||||||
self.url = kwargs.get('url', None)
|
self.url = kwargs.get('url', None)
|
||||||
if not self.url: self.url = url
|
if not self.url:
|
||||||
|
self.url = url
|
||||||
|
|
||||||
self.digest = kwargs.get('md5', None)
|
self.digest = kwargs.get('md5', None)
|
||||||
if not self.digest: self.digest = digest
|
if not self.digest:
|
||||||
|
self.digest = digest
|
||||||
|
|
||||||
self.expand_archive = kwargs.get('expand', True)
|
self.expand_archive = kwargs.get('expand', True)
|
||||||
|
|
||||||
|
@ -157,12 +166,30 @@ def fetch(self):
|
||||||
tty.msg("Already downloaded %s" % self.archive_file)
|
tty.msg("Already downloaded %s" % self.archive_file)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
possible_files = self.stage.expected_archive_files
|
||||||
|
save_file = None
|
||||||
|
partial_file = None
|
||||||
|
if possible_files:
|
||||||
|
save_file = self.stage.expected_archive_files[0]
|
||||||
|
partial_file = self.stage.expected_archive_files[0] + '.part'
|
||||||
|
|
||||||
tty.msg("Trying to fetch from %s" % self.url)
|
tty.msg("Trying to fetch from %s" % self.url)
|
||||||
|
|
||||||
curl_args = ['-O', # save file to disk
|
if partial_file:
|
||||||
|
save_args = ['-C',
|
||||||
|
'-', # continue partial downloads
|
||||||
|
'-o',
|
||||||
|
partial_file] # use a .part file
|
||||||
|
else:
|
||||||
|
save_args = ['-O']
|
||||||
|
|
||||||
|
curl_args = save_args + [
|
||||||
'-f', # fail on >400 errors
|
'-f', # fail on >400 errors
|
||||||
'-D', '-', # print out HTML headers
|
'-D',
|
||||||
'-L', self.url, ]
|
'-', # print out HTML headers
|
||||||
|
'-L', # resolve 3xx redirects
|
||||||
|
self.url,
|
||||||
|
]
|
||||||
|
|
||||||
if sys.stdout.isatty():
|
if sys.stdout.isatty():
|
||||||
curl_args.append('-#') # status bar when using a tty
|
curl_args.append('-#') # status bar when using a tty
|
||||||
|
@ -170,14 +197,16 @@ def fetch(self):
|
||||||
curl_args.append('-sS') # just errors when not.
|
curl_args.append('-sS') # just errors when not.
|
||||||
|
|
||||||
# Run curl but grab the mime type from the http headers
|
# Run curl but grab the mime type from the http headers
|
||||||
headers = spack.curl(
|
headers = spack.curl(*curl_args, output=str, fail_on_error=False)
|
||||||
*curl_args, output=str, fail_on_error=False)
|
|
||||||
|
|
||||||
if spack.curl.returncode != 0:
|
if spack.curl.returncode != 0:
|
||||||
# clean up archive on failure.
|
# clean up archive on failure.
|
||||||
if self.archive_file:
|
if self.archive_file:
|
||||||
os.remove(self.archive_file)
|
os.remove(self.archive_file)
|
||||||
|
|
||||||
|
if partial_file and os.path.exists(partial_file):
|
||||||
|
os.remove(partial_file)
|
||||||
|
|
||||||
if spack.curl.returncode == 22:
|
if spack.curl.returncode == 22:
|
||||||
# This is a 404. Curl will print the error.
|
# This is a 404. Curl will print the error.
|
||||||
raise FailedDownloadError(
|
raise FailedDownloadError(
|
||||||
|
@ -188,27 +217,33 @@ def fetch(self):
|
||||||
raise FailedDownloadError(
|
raise FailedDownloadError(
|
||||||
self.url,
|
self.url,
|
||||||
"Curl was unable to fetch due to invalid certificate. "
|
"Curl was unable to fetch due to invalid certificate. "
|
||||||
"This is either an attack, or your cluster's SSL configuration "
|
"This is either an attack, or your cluster's SSL "
|
||||||
"is bad. If you believe your SSL configuration is bad, you "
|
"configuration is bad. If you believe your SSL "
|
||||||
"can try running spack -k, which will not check SSL certificates."
|
"configuration is bad, you can try running spack -k, "
|
||||||
|
"which will not check SSL certificates."
|
||||||
"Use this at your own risk.")
|
"Use this at your own risk.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# This is some other curl error. Curl will print the
|
# This is some other curl error. Curl will print the
|
||||||
# error, but print a spack message too
|
# error, but print a spack message too
|
||||||
raise FailedDownloadError(
|
raise FailedDownloadError(
|
||||||
self.url, "Curl failed with error %d" % spack.curl.returncode)
|
self.url,
|
||||||
|
"Curl failed with error %d" % spack.curl.returncode)
|
||||||
|
|
||||||
# Check if we somehow got an HTML file rather than the archive we
|
# Check if we somehow got an HTML file rather than the archive we
|
||||||
# asked for. We only look at the last content type, to handle
|
# asked for. We only look at the last content type, to handle
|
||||||
# redirects properly.
|
# redirects properly.
|
||||||
content_types = re.findall(r'Content-Type:[^\r\n]+', headers)
|
content_types = re.findall(r'Content-Type:[^\r\n]+', headers)
|
||||||
if content_types and 'text/html' in content_types[-1]:
|
if content_types and 'text/html' in content_types[-1]:
|
||||||
tty.warn("The contents of " + self.archive_file + " look like HTML.",
|
tty.warn(
|
||||||
|
"The contents of " + self.archive_file + " look like HTML.",
|
||||||
"The checksum will likely be bad. If it is, you can use",
|
"The checksum will likely be bad. If it is, you can use",
|
||||||
"'spack clean <package>' to remove the bad archive, then fix",
|
"'spack clean <package>' to remove the bad archive, then fix",
|
||||||
"your internet gateway issue and install again.")
|
"your internet gateway issue and install again.")
|
||||||
|
|
||||||
|
if save_file:
|
||||||
|
os.rename(partial_file, save_file)
|
||||||
|
|
||||||
if not self.archive_file:
|
if not self.archive_file:
|
||||||
raise FailedDownloadError(self.url)
|
raise FailedDownloadError(self.url)
|
||||||
|
|
||||||
|
@ -227,14 +262,16 @@ def expand(self):
|
||||||
|
|
||||||
self.stage.chdir()
|
self.stage.chdir()
|
||||||
if not self.archive_file:
|
if not self.archive_file:
|
||||||
raise NoArchiveFileError("URLFetchStrategy couldn't find archive file",
|
raise NoArchiveFileError(
|
||||||
|
"URLFetchStrategy couldn't find archive file",
|
||||||
"Failed on expand() for URL %s" % self.url)
|
"Failed on expand() for URL %s" % self.url)
|
||||||
|
|
||||||
decompress = decompressor_for(self.archive_file)
|
decompress = decompressor_for(self.archive_file)
|
||||||
|
|
||||||
# Expand all tarballs in their own directory to contain
|
# Expand all tarballs in their own directory to contain
|
||||||
# exploding tarballs.
|
# exploding tarballs.
|
||||||
tarball_container = os.path.join(self.stage.path, "spack-expanded-archive")
|
tarball_container = os.path.join(self.stage.path,
|
||||||
|
"spack-expanded-archive")
|
||||||
mkdirp(tarball_container)
|
mkdirp(tarball_container)
|
||||||
os.chdir(tarball_container)
|
os.chdir(tarball_container)
|
||||||
decompress(self.archive_file)
|
decompress(self.archive_file)
|
||||||
|
@ -275,19 +312,24 @@ def check(self):
|
||||||
"""Check the downloaded archive against a checksum digest.
|
"""Check the downloaded archive against a checksum digest.
|
||||||
No-op if this stage checks code out of a repository."""
|
No-op if this stage checks code out of a repository."""
|
||||||
if not self.digest:
|
if not self.digest:
|
||||||
raise NoDigestError("Attempt to check URLFetchStrategy with no digest.")
|
raise NoDigestError(
|
||||||
|
"Attempt to check URLFetchStrategy with no digest.")
|
||||||
|
|
||||||
checker = crypto.Checker(self.digest)
|
checker = crypto.Checker(self.digest)
|
||||||
if not checker.check(self.archive_file):
|
if not checker.check(self.archive_file):
|
||||||
raise ChecksumError(
|
raise ChecksumError(
|
||||||
"%s checksum failed for %s" % (checker.hash_name, self.archive_file),
|
"%s checksum failed for %s" %
|
||||||
|
(checker.hash_name, self.archive_file),
|
||||||
"Expected %s but got %s" % (self.digest, checker.sum))
|
"Expected %s but got %s" % (self.digest, checker.sum))
|
||||||
|
|
||||||
@_needs_stage
|
@_needs_stage
|
||||||
def reset(self):
|
def reset(self):
|
||||||
"""Removes the source path if it exists, then re-expands the archive."""
|
"""
|
||||||
|
Removes the source path if it exists, then re-expands the archive.
|
||||||
|
"""
|
||||||
if not self.archive_file:
|
if not self.archive_file:
|
||||||
raise NoArchiveFileError("Tried to reset URLFetchStrategy before fetching",
|
raise NoArchiveFileError(
|
||||||
|
"Tried to reset URLFetchStrategy before fetching",
|
||||||
"Failed on reset() for URL %s" % self.url)
|
"Failed on reset() for URL %s" % self.url)
|
||||||
|
|
||||||
# Remove everythigng but the archive from the stage
|
# Remove everythigng but the archive from the stage
|
||||||
|
@ -317,14 +359,16 @@ def __init__(self, name, *rev_types, **kwargs):
|
||||||
|
|
||||||
# Set a URL based on the type of fetch strategy.
|
# Set a URL based on the type of fetch strategy.
|
||||||
self.url = kwargs.get(name, None)
|
self.url = kwargs.get(name, None)
|
||||||
if not self.url: raise ValueError(
|
if not self.url:
|
||||||
|
raise ValueError(
|
||||||
"%s requires %s argument." % (self.__class__, name))
|
"%s requires %s argument." % (self.__class__, name))
|
||||||
|
|
||||||
# Ensure that there's only one of the rev_types
|
# Ensure that there's only one of the rev_types
|
||||||
if sum(k in kwargs for k in rev_types) > 1:
|
if sum(k in kwargs for k in rev_types) > 1:
|
||||||
raise FetchStrategyError(
|
raise FetchStrategyError(
|
||||||
"Supply only one of %s to fetch with %s" % (
|
"Supply only one of %s to fetch with %s" % (
|
||||||
comma_or(rev_types), name))
|
comma_or(rev_types), name
|
||||||
|
))
|
||||||
|
|
||||||
# Set attributes for each rev type.
|
# Set attributes for each rev type.
|
||||||
for rt in rev_types:
|
for rt in rev_types:
|
||||||
|
@ -362,8 +406,68 @@ def __repr__(self):
|
||||||
return "%s<%s>" % (self.__class__, self.url)
|
return "%s<%s>" % (self.__class__, self.url)
|
||||||
|
|
||||||
|
|
||||||
|
class GoFetchStrategy(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
|
||||||
|
"""
|
||||||
|
enabled = True
|
||||||
|
required_attributes = ('go', )
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
# Discards the keywords in kwargs that may conflict with the next
|
||||||
|
# call to __init__
|
||||||
|
forwarded_args = copy.copy(kwargs)
|
||||||
|
forwarded_args.pop('name', None)
|
||||||
|
|
||||||
|
super(GoFetchStrategy, self).__init__('go', **forwarded_args)
|
||||||
|
self._go = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def go_version(self):
|
||||||
|
vstring = self.go('version', output=str).split(' ')[2]
|
||||||
|
return Version(vstring)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def go(self):
|
||||||
|
if not self._go:
|
||||||
|
self._go = which('go', required=True)
|
||||||
|
return self._go
|
||||||
|
|
||||||
|
@_needs_stage
|
||||||
|
def fetch(self):
|
||||||
|
self.stage.chdir()
|
||||||
|
|
||||||
|
tty.msg("Trying to get go resource:", self.url)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir('go')
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
env = dict(os.environ)
|
||||||
|
env['GOPATH'] = os.path.join(os.getcwd(), 'go')
|
||||||
|
self.go('get', '-v', '-d', self.url, env=env)
|
||||||
|
|
||||||
|
def archive(self, destination):
|
||||||
|
super(GoFetchStrategy, self).archive(destination, exclude='.git')
|
||||||
|
|
||||||
|
@_needs_stage
|
||||||
|
def reset(self):
|
||||||
|
self.stage.chdir_to_source()
|
||||||
|
self.go('clean')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "[go] %s" % self.url
|
||||||
|
|
||||||
|
|
||||||
class GitFetchStrategy(VCSFetchStrategy):
|
class GitFetchStrategy(VCSFetchStrategy):
|
||||||
"""Fetch strategy that gets source code from a git repository.
|
"""
|
||||||
|
Fetch strategy that gets source code from a git repository.
|
||||||
Use like this in a package:
|
Use like this in a package:
|
||||||
|
|
||||||
version('name', git='https://github.com/project/repo.git')
|
version('name', git='https://github.com/project/repo.git')
|
||||||
|
@ -379,10 +483,11 @@ class GitFetchStrategy(VCSFetchStrategy):
|
||||||
* ``commit``: Particular commit hash in the repo
|
* ``commit``: Particular commit hash in the repo
|
||||||
"""
|
"""
|
||||||
enabled = True
|
enabled = True
|
||||||
required_attributes = ('git',)
|
required_attributes = ('git', )
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
# Discards the keywords in kwargs that may conflict with the next call to __init__
|
# Discards the keywords in kwargs that may conflict with the next call
|
||||||
|
# to __init__
|
||||||
forwarded_args = copy.copy(kwargs)
|
forwarded_args = copy.copy(kwargs)
|
||||||
forwarded_args.pop('name', None)
|
forwarded_args.pop('name', None)
|
||||||
|
|
||||||
|
@ -495,7 +600,8 @@ class SvnFetchStrategy(VCSFetchStrategy):
|
||||||
required_attributes = ['svn']
|
required_attributes = ['svn']
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
# Discards the keywords in kwargs that may conflict with the next call to __init__
|
# Discards the keywords in kwargs that may conflict with the next call
|
||||||
|
# to __init__
|
||||||
forwarded_args = copy.copy(kwargs)
|
forwarded_args = copy.copy(kwargs)
|
||||||
forwarded_args.pop('name', None)
|
forwarded_args.pop('name', None)
|
||||||
|
|
||||||
|
@ -556,14 +662,16 @@ def __str__(self):
|
||||||
|
|
||||||
|
|
||||||
class HgFetchStrategy(VCSFetchStrategy):
|
class HgFetchStrategy(VCSFetchStrategy):
|
||||||
"""Fetch strategy that gets source code from a Mercurial repository.
|
"""
|
||||||
|
Fetch strategy that gets source code from a Mercurial repository.
|
||||||
Use like this in a package:
|
Use like this in a package:
|
||||||
|
|
||||||
version('name', hg='https://jay.grs.rwth-aachen.de/hg/lwm2')
|
version('name', hg='https://jay.grs.rwth-aachen.de/hg/lwm2')
|
||||||
|
|
||||||
Optionally, you can provide a branch, or revision to check out, e.g.:
|
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')
|
version('torus',
|
||||||
|
hg='https://jay.grs.rwth-aachen.de/hg/lwm2', branch='torus')
|
||||||
|
|
||||||
You can use the optional 'revision' attribute to check out a
|
You can use the optional 'revision' attribute to check out a
|
||||||
branch, tag, or particular revision in hg. To prevent
|
branch, tag, or particular revision in hg. To prevent
|
||||||
|
@ -576,7 +684,8 @@ class HgFetchStrategy(VCSFetchStrategy):
|
||||||
required_attributes = ['hg']
|
required_attributes = ['hg']
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
# Discards the keywords in kwargs that may conflict with the next call to __init__
|
# Discards the keywords in kwargs that may conflict with the next call
|
||||||
|
# to __init__
|
||||||
forwarded_args = copy.copy(kwargs)
|
forwarded_args = copy.copy(kwargs)
|
||||||
forwarded_args.pop('name', None)
|
forwarded_args.pop('name', None)
|
||||||
|
|
||||||
|
@ -655,7 +764,8 @@ def from_kwargs(**kwargs):
|
||||||
return fetcher(**kwargs)
|
return fetcher(**kwargs)
|
||||||
# Raise an error in case we can't instantiate any known strategy
|
# Raise an error in case we can't instantiate any known strategy
|
||||||
message = "Cannot instantiate any FetchStrategy"
|
message = "Cannot instantiate any FetchStrategy"
|
||||||
long_message = message + " from the given arguments : {arguments}".format(srguments=kwargs)
|
long_message = message + " from the given arguments : {arguments}".format(
|
||||||
|
srguments=kwargs)
|
||||||
raise FetchError(message, long_message)
|
raise FetchError(message, long_message)
|
||||||
|
|
||||||
|
|
||||||
|
@ -667,7 +777,7 @@ def for_package_version(pkg, version):
|
||||||
"""Determine a fetch strategy based on the arguments supplied to
|
"""Determine a fetch strategy based on the arguments supplied to
|
||||||
version() in the package description."""
|
version() in the package description."""
|
||||||
# If it's not a known version, extrapolate one.
|
# If it's not a known version, extrapolate one.
|
||||||
if not version in pkg.versions:
|
if version not in pkg.versions:
|
||||||
url = pkg.url_for_version(version)
|
url = pkg.url_for_version(version)
|
||||||
if not url:
|
if not url:
|
||||||
raise InvalidArgsError(pkg, version)
|
raise InvalidArgsError(pkg, version)
|
||||||
|
@ -735,7 +845,8 @@ def __init__(self, msg, long_msg=None):
|
||||||
|
|
||||||
class InvalidArgsError(FetchError):
|
class InvalidArgsError(FetchError):
|
||||||
def __init__(self, pkg, version):
|
def __init__(self, pkg, version):
|
||||||
msg = "Could not construct a fetch strategy for package %s at version %s"
|
msg = ("Could not construct a fetch strategy for package %s at "
|
||||||
|
"version %s")
|
||||||
msg %= (pkg.name, version)
|
msg %= (pkg.name, version)
|
||||||
super(InvalidArgsError, self).__init__(msg)
|
super(InvalidArgsError, self).__init__(msg)
|
||||||
|
|
||||||
|
@ -752,4 +863,5 @@ class NoStageError(FetchError):
|
||||||
|
|
||||||
def __init__(self, method):
|
def __init__(self, method):
|
||||||
super(NoStageError, self).__init__(
|
super(NoStageError, self).__init__(
|
||||||
"Must call FetchStrategy.set_stage() before calling %s" % method.__name__)
|
"Must call FetchStrategy.set_stage() before calling %s" %
|
||||||
|
method.__name__)
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""Functions for graphing DAGs of dependencies.
|
"""Functions for graphing DAGs of dependencies.
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
"""This package contains modules with hooks for various stages in the
|
"""This package contains modules with hooks for various stages in the
|
||||||
Spack install process. You can add modules here and they'll be
|
Spack install process. You can add modules here and they'll be
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import spack.modules
|
import spack.modules
|
||||||
|
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
|
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||||
# Produced at the Lawrence Livermore National Laboratory.
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
#
|
#
|
||||||
# This file is part of Spack.
|
# This file is part of Spack.
|
||||||
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||||
# LLNL-CODE-647188
|
# LLNL-CODE-647188
|
||||||
#
|
#
|
||||||
# For details, see https://github.com/llnl/spack
|
# For details, see https://github.com/llnl/spack
|
||||||
# Please also see the LICENSE file for our notice and the LGPL.
|
# Please also see the LICENSE file for our notice and the LGPL.
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License (as published by
|
# it under the terms of the GNU Lesser General Public License (as
|
||||||
# the Free Software Foundation) version 2.1 dated February 1999.
|
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||||
#
|
#
|
||||||
# This program is distributed in the hope that it will be useful, but
|
# This program is distributed in the hope that it will be useful, but
|
||||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||||
# conditions of the GNU General Public License for more details.
|
# conditions of the GNU Lesser General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public License
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
# License along with this program; if not, write to the Free Software
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue