Compare commits

...

2516 Commits

Author SHA1 Message Date
Matthew Krafczyk
81424dce5c Merge branch 'workaround/yt-py-pillow' into yt-dev-working-branch 2017-01-17 15:32:30 -06:00
Matthew Krafczyk
65be1a93f1 Merge branch 'update/yt-rockstar' into yt-dev-working-branch 2017-01-17 15:31:49 -06:00
Matthew Krafczyk
e2d4dadf33 Merge branch 'update/dev-yt' into yt-dev-working-branch 2017-01-17 15:31:14 -06:00
Matthew Krafczyk
67bfb782ef Merge branch 'new-package/rockstar' into yt-dev-working-branch 2017-01-17 15:30:59 -06:00
Matthew Krafczyk
40cbe69897 Fix installation of rockstar. 2017-01-17 15:28:57 -06:00
Matthew Krafczyk
fa39273e1f Correct how rockstar prefix is found and written to file 2017-01-16 12:04:52 -05:00
Matthew Krafczyk
ef32f3880f Add rockstar support to py-yt package 2017-01-16 12:04:51 -05:00
Matthew Krafczyk
31f7a01a9d Correct rockstar package installation process
Needed to change the way the necessary prefixes are found as well as
how the completed package is copied.

There should probably be a way to do the copying in a more 'spack' way.
2017-01-16 11:29:37 -05:00
Matthew Krafczyk
d74309a7b7 Correct how rockstar prefix is found and written to file 2017-01-16 11:29:37 -05:00
Matthew Krafczyk
190bd6ca65 Create rockstar package
rockstar is a halo finding algorithm
2017-01-16 11:29:37 -05:00
Matthew Krafczyk
209eb83d0d Add a +devmode variant to yt
When specifying +devmode when installing yt, a link to the source
directory will be used instead of creating an egg. This eases the
development process as changes you make in the yt source directory will
be instantly available when building the package as a diy.
2017-01-16 11:26:26 -05:00
Matthew Krafczyk
f10c3ca55e Add py-pillow explicit dependency 2017-01-16 11:25:45 -05:00
Matthew Krafczyk
dcab47cdc0 Add -d and -j options to diy
Also add -j to the common arguments
2017-01-16 11:16:36 -05:00
George Hartzell
aa3cc0ea81 Add lmod support for spack module loads (#2758)
The `spack module loads` command only supported tcl and dotkit.
This adds support for lmod.
2017-01-16 03:25:39 -08:00
Jon Rood
6e8058ad41 Specify Python location in VisIt in a more uniform fashion. (#2803) 2017-01-16 03:21:52 -08:00
Todd Gamblin
de7be6694f Fix issue with Mac OS version detection in m4 package. (#2835) 2017-01-16 03:03:52 -08:00
Denis Davydov
8365dbd959 petsc: add 64bit variant (#2655)
* petsc: add 64bit variant

* hypre: add int64 variant

* superlu-dist: add int64 variant

* petsc: add int64 variant

* metis: rename idx64 to int64 to make it consistent with other packages

* mumps: rename idx64 to int64 to make it consistent with other packages

* dealii: rename 64bit to int64 to make it consistent with other packages
2017-01-16 02:23:07 -08:00
Axel Huebl
e2697e4a37 isl: add latest version (#2834)
added latest version of isl. Needed to get llvm/clang in the latest
trunk to build via spack, but there are more versions available.
what is the policy regarding those? Add what we need for now?
2017-01-16 01:17:35 -08:00
becker33
a091eeceab Parser fix (#2769)
* Fixed parser to eliminate need for escape quotes. TODO: Fix double call to shlex, fix spaces in spec __str__

* Fixed double shlex

* cleanup

* rebased on develop

* Fixed parsing for multiple specs; broken since #360

* Revoked elimination of the `-` sigil in the syntax, and added it back into tests

* flake8

* more flake8

* Cleaned up dead code and added comments to parsing code

* bugfix for spaces in arguments; new bug found in testing

* Added unit tests for kv pairs in parsing/lexing

* Even more flake8

* ... yet another flake8

* Allow multiple specs in install

* unfathomable levels of flake8

* Updated documentation to match parser fix
2017-01-15 19:17:54 -08:00
Jon Rood
b2f29b855b Updating BoxLib with the ability to build again. (#2813)
* Updating BoxLib with the ability to build again.

* Using Spack MPI compilers directly.

* Fixing typo.

* Using tarball from github archive for boxlib.
2017-01-15 17:07:44 -08:00
Adam J. Stewart
e3a631c90e Add Astra package (#2800) 2017-01-15 16:23:52 -08:00
Adam J. Stewart
f480e3449e Added customization for make targets in 'build' and 'install' phases for CMakePackage (#2742)
* Added customization for make targets in 'build' and 'install' phases for CMakePackage

* Use rst in build system docs so that Sphinx generates nice API docs

* Allow AutotoolsPackages to be built in a different directory

* Flake8

* Fix missing import

* Allow configure to be located in different directory

* Update espressopp to use build targets

* Flake8

* Sphinx fix, lists must be a new paragraph

* Back out change that allowed a configure script in a different directory than build_directory

* Add missing deps, build in parallel

* Missing space for rst list
2017-01-15 16:23:16 -08:00
Jean-Paul Pelteret
4b7b595e3c New package: CppAD (#2832) 2017-01-15 16:20:26 -08:00
Adam J. Stewart
f2d4c15395 Remove cmake build dep from CMakePackages (#2684) 2017-01-15 03:18:52 -08:00
Adam J. Stewart
7fce4c5083 Add list_url to cmake (#2714) 2017-01-15 03:16:41 -08:00
Axel Huebl
3f7b4ab7aa Clang & Boost: No PCH (#2827)
Although it hurts a little, officially pre-compiled headers in
boost are only supported for gcc & msvc and the latest clang
releases still fail to build boost with it.

Therefore, I disabled building those to get boost build with
clang 3.9.0 on an Ubuntu 14.04 (x86).

Links to documentation and boost bug reports are inline, so
people can later on check if they still apply. Seems just to
be a bug in `Boost.Build` that tries to set `-o` with multiple
output files.
2017-01-15 02:38:14 -08:00
Todd Gamblin
0d367bbd20 Add a test to exercise non-buildable external packages. (#2833) 2017-01-15 02:37:20 -08:00
becker33
677623962e Fixed find -lp command (coloring was broken) (#2820) 2017-01-15 02:36:36 -08:00
Axel Huebl
5c4d2627ff Packages: Add CUDA8 (#2823)
Adds the latest CUDA release, 8.0.44.
2017-01-15 02:35:53 -08:00
Adam J. Stewart
367f46eee2 Add old version of PGI (#2784) 2017-01-15 02:35:27 -08:00
Adam J. Stewart
12edc4e369 Add latest version of PETSc (#2783) 2017-01-15 02:34:48 -08:00
Massimiliano Culpo
436f6a4ab6 get_std_cmake_args delegates to CMakePackage._std_args fixes #2665 (#2805) 2017-01-15 02:34:15 -08:00
danielsjensen1
957cb968c6 Features/octopus 6.0 (#2819)
* Added support for Octopus 6.0 and the optional libraries: metis, parmetis, netcdf, arpack-ng, and scalapack.

* Fix PEP 8 line too long error.

* Changed format syntax {} to {0} to support Python 2.6.
2017-01-15 02:30:47 -08:00
Gregory Lee
c6c6773c03 added psutil python package (#2812) 2017-01-15 02:30:12 -08:00
Stephen McDowell
1f4ca71e21 Adding the py-ipdb package for more stable debugging with iPython. (#2824)
* Adding the py-ipdb package for more stable debugging with iPython.

* Removing deprecated python support, adding missing dependencies.

* Adding version checks for (i)python
2017-01-15 02:29:29 -08:00
Matthew Scott Krafczyk
28ea72d5b2 Add the package py-sphinx-bootstrap-theme (#2825) 2017-01-15 02:27:17 -08:00
Andrey Prokopenko
1128922b44 boost: fixing boost-1.55.0 for gcc-5 (#2822)
boost-1.55.0 requires patching when compiling with gcc-5. See these
threads:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=197594
https://svn.boost.org/trac/boost/ticket/10125

Fixes #2821.
2017-01-13 08:43:50 -08:00
Massimiliano Culpo
cd511791d1 configure and build command: fix the stop iteration semantics
- broke somewhere between bdf4832269 (#2810) and 17b13b161b
2017-01-12 09:11:48 -08:00
Massimiliano Culpo
de2cb864fa mirror: fix error for some specs during concretization (#2806) 2017-01-11 07:38:22 -08:00
Jim Galarowicz
481bc91854 Update the boost versions used by openspeedshop. Boost-1.60 to current latest causes compile errors when building openspeedshop. (#2300)
* Update the krell institute products to use the latest features of spack for building on cluster platforms.

* Address travis error messages and resubmit the pull request.

* Update the contents of openspeedshop package.py so it passes the flake8 tests.

* Fix flake8 error-whitespack issue in mrnet package.py file.

* Add updates based on spack reviewer feedback.

* More fixes based on comments from reviewers.  Switch using extend to using append, remove additional setting of PATH and LD_LIBRARY_PATH that should not be required due to RPATH.

* More review related changes.  Update MPIOption.append lines and take out xercesc references.

* Create a base options function for common openspeedshop base cmake options to reduce redundencies.

* Add libxml2+python depends on to get around issues with the libxml2 package file.

* Using boost over 1.60.0 causes compile errors.  This is a known boost bug. Also, dyninst-9.2.0 is set to be the vesrion of dyninst to use with OSS, as of now. The newer version fails to build.

* Fix bad syntax in specifying the boost version range.

* Update the version numbers for the krell institute components and tools: cbtf and openspeedshop.

* Do not build glib for qt3, it is not needed and causes build problems at this time anyway.
2017-01-10 12:28:05 -08:00
Todd Gamblin
f5557b5723 Change nargs='*' to argparse.REMAINDER for constraint options. (#2798) 2017-01-10 12:25:41 -08:00
Massimiliano Culpo
a7a77b5b41 openjpeg: fixes url (#2790) 2017-01-10 09:14:16 -08:00
Adam J. Stewart
1ece25bdc2 Temporary workaround for R concretization bug (#2756) 2017-01-09 19:07:49 -08:00
sknigh
c7ca96b327 Added list_url to r-dt package (#1533) 2017-01-09 14:37:06 -08:00
Elizabeth Fischer
402dfe30f9 Get Rid of nobuild, nolink, and alldeps (#2765)
* Removing the nobuild, nolink, and alldeps dependency types in favor of being explicit.
* This will help with maintenance going forward, as adding more dependency types won't affect existing declared dependencies in weird ways.
* default deptype is still `('build', 'link')`
2017-01-07 19:59:02 -08:00
Adam J. Stewart
68baac0549 Various updates to the NCO package and dependencies (#2639)
* Remove +mpi variant from NCO

* Update NCO deps to AutotoolsPackage

* Update the other NetCDF packages to AutotoolsPackage

* ANTLR has a nolink deptype on java, don't worry about csharp

* Remove restrictions from NCO package, fix homepage

* Add version 4.6.3 of NCO

* Missed AutotoolsPackage for NetCDF-CXX4

* NetCDF tests fail when run in parallel

* Remove commented out dependency

* Add documentation dependency
2017-01-07 18:06:59 -08:00
Adam J. Stewart
a0195371e8 Unset PETSC_DIR during installation (#2768)
* Set PETSC_DIR during installation

* Move env var unsets to setup_environment

* Fix unset var name and number of args
2017-01-07 17:38:53 -08:00
James Wynne III
b7fdc03bd5 Added needed deps for bbcp (#2773) 2017-01-07 16:30:54 -08:00
Adam J. Stewart
daff3c0908 Preliminary RPackage class (#2761) 2017-01-07 16:28:52 -08:00
Todd Gamblin
f379697985 Fix issues linking hDF5 1.8.14 and below on Ubuntu. (#2772) 2017-01-07 09:03:50 -08:00
Cyrus Harrison
e39ba88e9c add conduit 0.2.1 release (#2766) 2017-01-06 12:33:51 -08:00
Bruno Turcksin
2f173bda9c Add boost 1.63.0 (#2743) 2017-01-06 11:44:41 -08:00
Gregory Lee
a016fd01ec Merge pull request #2740 from jrood-nrel/jonrood
Renaming mkl to intel-mkl
2017-01-06 11:01:16 -08:00
Axel Huebl
05d77917fd GitLab: Tarball Version Test (#2296)
* GitLab: Tarball Version Test

Upload a test demonstrating #2290

* Add GitLab parsing
2017-01-06 08:53:19 -08:00
Gregory Lee
7b337de93e various python package version and dependency updates (#2751)
* various python package version and dependency updates

* various python package version and dependency updates
2017-01-06 08:50:06 -08:00
Christoph Junghans
8dc056130c espressopp: package for the ESPResSo++ software (#2602)
* espressopp: package for the ESPResSo++ software

This commit adds a package for the ESPResSo++
simulation software.

* Move Espressopp package to CMakePackage

This commit moves Espressopp package to CMakePackage.
Addresses some comments in the PR.

* Remove run_tests and changed type of dependencies

Addressed some comments from @adamjstewart.
Removed global run_tests setting and removed type from many
dependencies. Set type for py-mpi4py to 'nolink'.

* Updated to last version and fix mpi4py dependency

Added latest espressopp version and changed mpi4py (version) dependency for
different espressopp versions.

* Changed mpi4py version requirements for espressopp

Changed py-mpi4py version requirements for espressopp@1.9.4 according
to the package build requirements for that version.
2017-01-05 21:20:55 -08:00
Matthew Krafczyk
8c650303ff Add dependencies and finish the py-tornado package.
This adds the following packages:

 py-backports-shutil-get-terminal-size  py-nbformat
 py-backports-ssl-match-hostname        py-pathlib2
 py-entrypoints                         py-pickleshare
 py-futures                             py-pip
 py-ipykernel                           py-prompt-toolkit
 py-ipython-genutils                    py-ptyprocess
 py-ipywidgets                          py-simplegeneric
 py-jupyter-client                      py-singledispatch
 py-jupyter-console                     py-terminado
 py-jupyter-core                        py-traitlets
 py-jupyter-notebook                    py-wcwidth
 py-monotonic                           py-widgetsnbextension
 py-nbconvert
2017-01-05 16:10:30 -08:00
Jean-Paul Pelteret
6a5185a2a7 Added npm, node.js, and Jupyter dependencies
Adds the following packages:
  node-js  py-backports-abc  py-functools32  py-pycurl   py-vcversione
  npm      py-certifi        py-jsonschema   py-tornado  py-zmq

- Added python packages that are dependencies for the Jupyter suite
- Update new python packaages to use extension package install function.
- Added npm and node-js packages
2017-01-05 16:10:30 -08:00
Mario Melara
3d54c3c689 Correct env vars for modulecmd; Fixes #1481 (#2745)
Don't override MODULEPATH with PATH, PATH has no modulefiles

PEP8 compliance
2017-01-05 11:15:38 -08:00
Massimiliano Culpo
9271c69b5d test: fixed 'refresh_builtin_mock' fixture (#2748) 2017-01-05 10:25:24 -08:00
Elizabeth Fischer
3dd4a01a5e Standardize package names: lower-case, not Mixed_CASE (#2475)
* Rename packages

* Upcasing depends_on() in packages.

* Downcased extends('r')

* Fixed erroneously changed URL that had slipped through.

* Fixed typo

* Fixed link from documentation into package source code.

* Fixed another doc problem.

* Changed underscores to dashes in package names.

* Added test to enforce lowercase, no-underscore naming convention.

* Fix r-xgboost

* Downcase more instances of 'R' in package auto-creation.

* Fix test.

* Converted unit test packages to use dashes not underscores

* Downcase `r` in the docs.

* Update module_file_support.rst

Fix r->R for class R.
2017-01-04 18:24:07 -08:00
Jon Rood
01406251c9 Intel-mkl provides mkl 2017-01-04 14:02:23 -07:00
Jon Rood
c8405b4b5f Renaming mkl to intel-mkl 2017-01-04 13:55:08 -07:00
George Hartzell
4e653254c5 Use zlib's "fossil" site for old tarballs (#2735)
* Use zlib's "fossil" site for old tarballs

Following citibeth's suggestion in #2732, use zlib's "fossil"
site (not to be confused with the sqlite team's VCS...) for retrieving
old tarballs.

Digests for 1.2.{8,10} match and both install for me on CentOS 7.

* Use zlib's "fossil" URL as the one true URL

Everything seems to be available at zlib's "fossil" URL, so just use
it as the one and only url.

(and fix a flake8 complaint about a comment)
2017-01-04 11:43:10 -08:00
Cyrus Harrison
eaa24b08fd add package for conduit (#2670)
* add package for conduit

* try to fix main conduit docstring

* use join_path instead of pjoin

* address a few requests in pr #2670

change name of 'github-master' to 'master'

change 'docs' variant to 'doc', set default to False

remove explicit +shared variant spec for silo and hdf5 deps
(in the conduit +shared case) cases since they default to True

add reference to static rpath issue
(https://github.com/LLNL/spack/issues/2658)

* address pr #2670 requests

add todos and more info on why variants for deps where selected
use python module install python to enable spack activate
use .format instead of %s
2017-01-04 10:20:08 -08:00
Jeffrey Salmond
e57fc3d950 opencoarrays: new version (#2734)
* add version 1.8.0

* remove depends_on('cmake') as it is now unecessary

* remove 'coarrays' as a virtual package
2017-01-04 08:40:55 -08:00
Jean-Paul Pelteret
4ff33d41a7 New package: ccache (#2721) 2017-01-04 08:39:58 -08:00
Elizabeth Fischer
03471469e7 libpng: Upgrade versions to fix vulnerability. (#2723) 2017-01-04 08:32:10 -08:00
George Hartzell
2e24a3a2be zlib@1.2.10 and R do not get along, work around it (#2727)
* zlib@1.2.10 and R do not get along, work around it

R's configure script has trouble with version numbers > 1.2.9.

This works around it by constraining R to 1.2.8.

I'm working with some R folk on getting it fixed going forward.

* Add adamjstewart's change.
2017-01-04 07:51:16 -08:00
Barry Smith
2322deda65 Update to latest zlib version, server no longer provides older version (#2720)
* Update to latest zlib version, server no longer provides older version

Funded-by: IDEAS
Project: IDEAS/xSDK

* Add alternative URL for previous release of zlib
2017-01-03 13:52:14 -08:00
Todd Gamblin
d32d5e45fb Fix issues when a package provides the same vdep twice. (#2710)
* Fix issues when a package provides the same vdep twice.

- provides() now adds to a set of provided vdeps instead of a single one.

* flake8
2017-01-02 18:40:57 -08:00
Massimiliano Culpo
34d23c617c tests: coverage combine run only if tests succeeded (#2712) 2017-01-01 13:05:33 -08:00
Todd Gamblin
b9ec69dce1 Disallow vdeps in packages.yaml (#2699)
* Consolidate packages.yaml code to preferred_packages

* Add validation check and a test for packages.py parsing.

* flake8
2016-12-31 08:12:38 -08:00
Adam J. Stewart
040f8a7176 Add latest version of gmp (#2695) 2016-12-30 22:53:54 -08:00
Adam J. Stewart
8cb54a9a67 Fix missing debug parameter for parse_version() (#2696) 2016-12-30 22:52:49 -08:00
Todd Gamblin
c88df5819d Fix test command arg handling. 2016-12-30 17:18:19 -08:00
Todd Gamblin
b5537553f2 Run coverage for the spack install command as well as spack test.
- Also don't run coverage on OSX.
2016-12-30 17:18:19 -08:00
Michael Kuhn
a42f340d37 Allow setting default variants (#2644) 2016-12-30 14:11:39 -08:00
Todd Gamblin
d52c44cba9 Add OSX build to .travis.yml. Clean up .travis.yml (#2689)
* Add OSX build to .travis.yml.  Clean up .travis.yml
* Add gcc/gfortran to the mac brew setup.
2016-12-30 13:59:21 -08:00
Todd Gamblin
972a277956 Fix Python issue with build failures; Add test case for build failures. (#2687) 2016-12-30 11:37:50 -08:00
Todd Gamblin
5fbab1f4b5 Concretize preserves deptypes (#2681)
Concretization preserves deptypes
2016-12-29 14:43:59 -08:00
Todd Gamblin
d6390c159f Fix issues related to the switchover to pytest. (#2685)
- Remove stale reference to `import nose` from `bin/spack` script.
- Add `py` to externals (missing dependency for `pytest`)
2016-12-29 11:59:45 -08:00
Massimiliano Culpo
7ea10e768e unit tests: replace nose with pytest (#2502)
* Porting: substitute nose with ytest

This huge commit substitutes nose with pytest as a testing system. Things done here:

* deleted external/nose as it is no longer used
* moved mock resources in their own directory 'test/mock/'
* ported two tests (cmd/find, build_system) to pytest native syntax as an example
* build_environment, log: used monkeypatch instead of try/catch
* moved global mocking of fetch_cache to an auto-used fixture
* moved global mocking from test/__init__.py to conftest.py
* made `spack test` a wrapper around pytest
* run-unit-tests: avoid running python 2.6 tests under coverage to speed them up
* use `pytest --cov` instead of coverage run to cut down testing time

* mock/packages_test: moved mock yaml configuration to files instead of leaving it in the code as string literals

* concretize.py: ported tests to native pytest, reverted multiprocessing in pytest.ini as it was creating the wrong report for coveralls

* conftest.py, fixtures: added docstrings

* concretize_preferences.py: uses fixtures instead of subclassing MockPackagesTest

* directory_layout.py: uses fixtures instead of subclassing MockPackagesTest

* install.py: uses fixtures instead of subclassing MockPackagesTest

* optional_deps.py: uses fixtures instead of subclassing MockPackagesTest

optional_deps.py: uses fixtures instead of subclassing MockPackagesTest

* packages.py: uses fixtures instead of subclassing MockPackagesTest

* provider_index.py: uses fixtures instead of subclassing MockPackagesTest

* spec_yaml.py: uses fixtures instead of subclassing MockPackagesTest

* multimethod.py: uses fixtures instead of subclassing MockPackagesTest

* install.py: now uses mock_archive_url

* git_fetch.py: uses fixtures instead of subclassing MockPackagesTest

* hg_fetch.py: uses fixtures instead of subclassing MockPackagesTest

* svn_fetch.py, mirror.py: uses fixtures instead of subclassing MockPackagesTest
repo.py: deleted

* test_compiler_cmd.py: uses fixtures instead of subclassing MockPackagesTest

* cmd/module.py, cmd/uninstall.py: uses fixtures instead of subclassing MockDatabase

* database.py: uses fixtures instead of subclassing MockDatabase, removed mock/database

* pytest: uncluttering fixture implementations

* database: changing the scope to 'module'

* config.py: uses fixtures instead of subclassing MockPackagesTest

* spec_dag.py, spec_semantics.py: uses fixtures instead of subclassing MockPackagesTest

* stage.py: uses fixtures instead of subclassing MockPackagesTest. Removed mock directory

* pytest: added docstrings to all the fixtures

* pytest: final cleanup

* build_system_guess.py: fixed naming and docstrings as suggested by @scheibelp

* spec_syntax.py: added expected failure on parsing multiple specs closes #1976

* Add pytest and pytest-cov to Spack externals.

* Make `spack flake8` ignore externals.

* run-unit-tests runs spack test and not pytest.

* Remove all the special stuff for `spack test`

- Remove `conftest.py` magic and all the special case stuff in `bin/spack`

- Spack commands can optionally take unknown arguments, if they want to
  handle them.

- `spack test` is now a command like the others.

- `spack test` now just delegates its arguments to `pytest`, but it does
  it by receiving unknown arguments and NOT taking an explicit
  help argument.

* Fix error in fixtures.

* Improve `spack test` command a bit.

- Now supports an approximation of the old simple interface
- Also supports full pytest options if you want them.

* Use external coverage instead of pytest-cov

* Make coverage use parallel-mode.

* change __init__.py docs to include pytest
2016-12-29 07:48:48 -08:00
Elizabeth Fischer
88f57d7543 Allow exclusion of packages from spack module loads (#2667)
* Allow exclusion of packages from `spack module loads`

* Comment out excluded packages instead of not showing them at all.
2016-12-28 13:31:18 -08:00
Massimiliano Culpo
17b13b161b Directive inheritance: laziness for the win (#2623)
* inheritance of directives: using meta-classes to inject attributes coming from directives into packages + lazy directives

* _dep_types -> dependency_types
* using a meta-class to inject directives into packages
* directives are lazy

fixes #2466

* directives.py: allows for multiple inheritance. Added blank lines as suggested by @tgamblin

* directives.py: added a test for simple inheritance of directives

* Minor improvement requested by @tgamblin

CMakePackage: importing names from spack.directives
directives: wrap __new__ to respect pep8

* Refactoring requested by @tgamblin

directives: removed global variables in favor of class variables. Simplified the interface for directives (they return a callable on a package or a list of them).
2016-12-28 12:37:02 -08:00
Thierry
857dac88c8 init yorick package (#2635)
* init yorick package

* attempt at picking up SPACK's compiler choice, todo ~X variant.

* sphinx docstring error ?

* version# tarball, ~X default, docstring fix

* sphinx docstring fix(?)
2016-12-28 10:08:02 -08:00
George Hartzell
18c10f2bad Cleanup post luafilesystem version de-underscoring (#2683)
The upstream luafilesystem tarball/version had a wayward/inconsistent
underscore in their more recent version tag.  The played badly with
our package fetching machinery (due to recent changes?).

Upstream cleaned up their bit which required some touchups here.

- updated the url
- updated the version (digest)
- updated the format statement for the path to the rockspec.
2016-12-27 11:49:53 -08:00
Mayeul d'Avezac
81c1404b9c Adds catch, cppunit, spdlog, tinyxml(1 and 2), google benchmark (#2627)
* Adds catch, cppunit, spdlog, tinyxml(1 and 2), google benchmark

Tinyxml comes in two flavors, 1 and 2. Each comes in several
versions... So they cannot be easily united into a single package.

* Use CMakePackage and friends, add copyright

Also eleminate debug/release variants, since it no longuer fits in the
CMakePackage format.

* Remove unnecessary url

* spdlog now has tagged releases

* Remove unnecessary url argument

* Fewer quotes in cmake args, because magic

* Incorrect base class for tinyxml
2016-12-27 00:32:29 -08:00
Michael Kuhn
baaa613e44 Update wx to 3.1.0 (#2641) 2016-12-27 00:18:26 -08:00
Adam J. Stewart
29bac34c1d Ensure that every file in Spack has a license (#2659)
* Ensure that every package has a license

Also fixes URLs with http://http:// doubled.

This is a continuation of #2656.

* Add license to every file in Spack

* Make sure Todd is the author of all packages

* Fix flake8 tests

* Don't license external Sphinx docs

* Don't display licenses in tutorial example packages

Also fixes typos and converts command-line examples
from tcsh to bash, which is more common
2016-12-27 00:17:12 -08:00
Matthew Scott Krafczyk
3e92ffde7d Update py-cython with new pypi.io url and new version (#2650) 2016-12-25 19:48:11 -08:00
Adam J. Stewart
f34c5367d5 Better tabulation for spack checksum (#2673) 2016-12-25 19:25:53 -08:00
Denis Davydov
91bfebbed8 filter_system_path: additionally filter system prefixes (#2672)
That's because in set_build_environment_variables()
the funciton filter_system_paths() is actually applied to
package prefixes, and not to prefix/lib or prefix/include.
2016-12-25 19:24:56 -08:00
Bruno Turcksin
e16908b16b Add 64 bit variant to dealii. (#2654) 2016-12-25 18:55:14 -08:00
Adam J. Stewart
b240fdb2b9 Add latest version of Python 2 (#2668) 2016-12-25 18:53:16 -08:00
Michael Kuhn
33592d0142 Update gcc to 6.3.0 (#2669) 2016-12-25 18:52:58 -08:00
Todd Gamblin
c4afaabea9 Add argument to spack spec to show deptypes. (#2680)
- `-t` | `--types` argument now shows deptypes in `spack spec`
2016-12-25 14:15:58 -08:00
George Hartzell
041f96b349 Update the texlive distro digest. (#2679)
sigh.
2016-12-25 12:37:03 -08:00
Adam J. Stewart
7e8767e3fd Remove usernames from paths in docs (#2675)
* Remove usernames from paths in docs

* Fix path export
2016-12-25 12:36:35 -08:00
Massimiliano Culpo
8fe5fb7988 go: fixed GOROOT_BOOTSTRAP without workarounds (#2671) 2016-12-25 12:33:57 -08:00
Adam J. Stewart
c3cd948537 Modify github archive regex to support luaposix (#2677) 2016-12-25 12:32:19 -08:00
Michael Kuhn
e340f275b8 Update cairo to 1.14.8, gtkplus to 2.24.31 and pango to 1.40.3 (#2642) 2016-12-21 15:03:28 -08:00
Kim Serradell
70a4c4e105 Bug fontconfig (#2652)
* Added uuid: OSSP uuid is a ISO-C:1999 application programming interface

* Fixed install error in cmor package

* Added uuid: OSSP uuid is a ISO-C:1999 application programming interface

* Fixed install error in cmor package

* Modifiying fontconfig file to allow install in OpenSuse 13.2

* Adding pkg-config dependency to freetype and libxml2

* Removed first possible solution. With @adamjstewart selecting the one adding pkg-config to dependencies
2016-12-21 14:27:15 -08:00
Federico Padua
60dc751225 Fix homepage for the package libspatialindex (#2656)
Small fix for the homepage of the package libspatialindex.
2016-12-21 14:23:32 -08:00
scheibelp
3f1cdbf5ef Revert #2292: use frontend compiler for build deps (#2549)
The primary goal of #2292 was to use the frontend compiler to make
build dependencies like cmake on HPC platforms. It turns out that
while this works in some cases, it did not handle cases where a
package was a link dependency of the root and of a build dependency
(and could produce incorrect concretizations which would not build).
2016-12-20 00:21:25 -08:00
Michael Kuhn
3ce3165ae6 Update gdal to 2.1.2 (#2643) 2016-12-19 17:06:57 -08:00
Adam J. Stewart
b3ba45afa9 Various improvements to H5hut (#2636) 2016-12-19 17:06:14 -08:00
Todd Gamblin
c89de04f40 Support Yorick versions (#2640) 2016-12-19 14:55:23 -08:00
Andrey Prokopenko
d306893d83 moab: changed trilinos dependency to zoltan, and added fortran variant (#2582)
Trilinos dependency is very heavy, the zoltan one is light. I'm not sure
if there is a situation where one needs the former.
2016-12-19 14:41:09 -08:00
Adam J. Stewart
d24186ea84 Update PnetCDF to AutotoolsPackage (#2637) 2016-12-19 14:26:47 -08:00
George Hartzell
d8efeabf77 Update digest for vim@8.0 tarball. (#2600)
* Update digest for vim@8.0 tarball.

The digest appears to have changed.

The new digest value matches the value in their
[MD5SUMS](ftp://ftp.vim.org/pub/vim/unix/MD5SUMS)
file.

* Change ftp.vim.org -> github.com/vim/vim/archive

Vim seems to do weekly releases, but the name of the tarball on
ftp.vim.org doesn't change so we have to regularly play 'update the
digest' (aka Internet whack-a-mole).

This commit changes the url so that we are now downloading particular
versions from the Vim project's github archive.

I didn't walk back through of time to get all of the versions that
used to be explicit.  I grabbed the final `7.4` and the current `8.0`
releases.  If people need more we can add them.
2016-12-19 14:26:16 -08:00
Todd Gamblin
4b7b6768e6 Modify github regex to support NCO. (#2633) 2016-12-19 14:17:18 -08:00
Adam J. Stewart
46436a0909 GSL: Add latest version, update to AutotoolsPackage (#2630) 2016-12-19 09:21:38 -08:00
Todd Gamblin
a2b4146e10 Fixes for various hash issues (#2626)
* Better output for disambiguate_specs()

* Fix wrong exception name.

* Fix satsifies(): concrete specs require matching by hash.

- Fixes uninstall by hash and other places where we need to match a
  specific spec.

- Fix an error in provider_index (satisfies() call was backwards)

- Fix an error in satisfies_dependencies(): checks were too shallow.

* Fix default args in Spec.tree()

* Move installed_dependents() to DB to avoid unknown package error.

* Make `spack find` and `sapck.store.db.query()` faster for hashes.

* Add a test to ensure satisfies() respects concrete Specs' hashes.
2016-12-19 09:09:53 -08:00
Adam J. Stewart
08d323b1f8 NCO: Add latest version, update to AutotoolsPackage (#2629) 2016-12-19 08:49:37 -08:00
Todd Gamblin
b18738e03d Add gawk (GNU awk) (#2625)
* Add gawk, GNU awk.

* flake8 fix.
2016-12-18 22:35:23 -08:00
George Hartzell
6e1b3f621d Feature/add package for fastqc (#1573)
* Add package for fastqc

This tool is a java mess.  Their Way To Do It is to just copy the entire
tree into it's final resting place, make the perl script at the top
level executable and take it from there.

Yuck.

This package assumes that `set_executable` actually sets all the user
bits.  If that change doesn't go in, then something equivalent needs to
be done.

* Use chmod to make fastqc executable

I haven't gotten any feedback on changing set-executable, so switch to
using chmod (from the cuda package).

* Flake8 cleanup

* Install files neatly, don't just copy top level of dir

Rather than blindly copying everything in the distribution, carefully
put the necessary bits into reasonable places.  Neatness counts, etc...

This requires patching the `fastqc` perl script, so this commit adds a
patch file.

* Additional pep8 cleanup

* Let dependency handle adding jdk to PATH

* Flake8 cleanup

* Ensure that java is on PATH

I thought that the run dependency on the jdk would put
java on my PATH, but it does not appear to work.

For now, do it by hand.
2016-12-18 16:38:14 -08:00
Alfredo Adolfo Gimenez
68e9a2ed8d Added customization for make targets in 'build' and 'install' phases for AutotoolsPackage (#2464)
* Customization for make targets in build and test phases for AutotoolsPackage

* Updated Blitz++ to use customized make build and test targets

* Removed flake8 error

* Removed make test customization, added make install customization, need to figure out issues with multiple make targets

* Changed build_targets and install_targets to normal attributes
2016-12-18 16:27:47 -08:00
Chris MacMackin
0de7b5504e py-markdown: Add new package for python-markdown. (#2611)
* py-markdown: Add new package for python-markdown.

* py-markdown: Added restrictions on Python version.

* py-markdown: Removed upper-limit on compatible Python versions.

* py-markdown: Reinstated upper bound on Python version. Also fixed small formatting error.
2016-12-18 16:23:31 -08:00
Denis Davydov
1c0f28c559 gmsh: add 2.15.0 and switch to CMakePackage (#2620) 2016-12-18 16:20:37 -08:00
Denis Davydov
da2350a1c9 tbb: add 2017.3 (#2619) 2016-12-18 16:20:26 -08:00
Denis Davydov
aeb58dc2de cmake: add 3.7.1 (#2618) 2016-12-18 16:20:13 -08:00
Gregory Lee
592df25aef build fixes for openblas (#2601)
* build fixes for openblas

* avx2 in openblas nnot supported with older gcc

* merge fix for openblas
2016-12-17 17:04:59 -08:00
Denis Davydov
0ef55b831f dealii: fix config for Netcdf with lib64 (#2616) 2016-12-17 08:57:33 -08:00
Chris MacMackin
a1a41bb4c7 graphviz: fixed build error due to specifying ltdl lib but not include. (#2609)
* graphviz: fixed build error due to specifying ltdl lib but not include.

* graphviz: Fixed dependencies on libtool and expat.
2016-12-16 16:22:13 -08:00
Andrey Prokopenko
394f010952 libmesh: added mpi variant (#2584) 2016-12-16 15:39:55 -08:00
Thierry
5f88bea442 init nfft 3.3.2 package file (#2612)
* init nfft 3.3.2 package file

* shorten comment line
2016-12-16 15:36:34 -08:00
Chris MacMackin
3089d118c1 py-beautifulsoup4: Added version 4.5.1 (#2610) 2016-12-16 14:21:26 -08:00
Jon Rood
d7ff4b8f34 Updating Trilinos with superlu variant and fixing git branch version options. (#2604) 2016-12-16 14:14:50 -08:00
Adam J. Stewart
36072c4776 [HACK] Make concretization great again! (#2590)
* Always default to +mpi

* Always default to ~X
2016-12-16 10:49:02 -08:00
Massimiliano Culpo
87c9b01033 openblas: derives from MakefilePackage (#2488)
* MakefilePackage: changed build_args and install_args for consistency with #2464
openblas: derives from MakefilePackage

* MakefilePackage: changed default edit behavior
2016-12-15 10:15:52 -08:00
Massimiliano Culpo
f9ca5b9f27 go: see #2567, temporary fix (#2588) 2016-12-15 09:12:33 -08:00
Todd Gamblin
6971918c27 Add GNU patch to Spack. (#2598) 2016-12-15 01:35:45 -08:00
Mario Melara
32cecf55ee Fix target for compiler on CNL operating systems (#2580)
Changes any to a string to avoid <built-in function any> being
incorrectly added to target in compilers.yaml.
2016-12-14 14:37:14 -08:00
Jean-Paul Pelteret
8816cdea9e Blacklist flex 2.6.2 by commenting out package version (#2571)
Fixes #2554
2016-12-14 14:34:55 -08:00
Adam J. Stewart
1ac4ae0b41 Make unzip quiet (#2593) 2016-12-14 14:24:02 -08:00
George Hartzell
f487102c0c Update texlive digest (#2591)
Texlive is *live*, they update the contents of their tarball on a whim.

Here's the current one.
2016-12-14 11:55:48 -08:00
Kim Serradell
c02de564e4 New package py-cdo (#2569)
* Add python cdo support

* Correct pypi url

* Corrected a blanck space that was failing CI

* Corrected url that was failing CI

* Following @alalazo indications, Write this line wrapping it around 80 chars to pass Travis

* Added cdo package depency
2016-12-13 14:36:06 -08:00
Mario Melara
01230a62d4 Change attribute to match ArchSpec refactor (#2579)
Fixes issue #2578
2016-12-13 13:58:03 -08:00
Gregory Lee
392ed4f0cc Merge pull request #2506 from skosukhin/pr_python
A couple of updates for python package.
2016-12-13 13:56:15 -08:00
Ben Morgan
fb809189d3 Better cxx11/14/17 flags for GNU/Clang/Intel (#2539)
* Better cxx11/14 flags for GNU/Clang/Intel

- GCC 4.8 only supports -std=c++1y for C++14
- Use CMake's rules for AppleClang to set cxx11 and cxx14 flags based on
  Apple Xcode/LLVM version
- Use CMake's rules for Intel to add support for cxx14 flags based on
  Intel version.

* Add cxx17_flag property

Implement property in compiler for c++17 as per those for c++11/14.
Add concrete support for GNU/Clang:

- Return -std=c++1z for GCC 5 and above per GCC documentation
- Return -std=c++1z for Clang 3.5 and above per Clang documentation
- Return -std=c++1z for Apple LLVM 6.1 and above per CMake's rules
2016-12-13 13:15:10 -08:00
amklinv
f613445eb2 Added support for xSDKTrilinos package (#2201)
* Added support for xSDKTrilinos package

* Updated xsdktrilinos/package.py for PR review

* Added trilinos version # reqs to xsdktrilinos

* xsdktrilinos now uses CMakePackage

* Cleaned up xsdktrilinos/package.py

* Removed unused cxxflags from xsdktrilinos

* Removed unused sys import from xsdktrilinos
2016-12-13 11:50:10 -08:00
Elizabeth Fischer
4f9e548bf6 Update spack setup and spack graph to be consistent with recent refactoring (#2317)
* Update `spack setup` and `spack graph` to be consistent with c557e765 and 9347f869.  Fixes #2316.

* Added another "fix" necessary to make `spack setup` work.

* Added another "fix" necessary to make `spack setup` work. (reverted from commit 7f0d3ecb38)
2016-12-13 10:48:40 -08:00
Denis Davydov
d855403546 likwid: remote root from INSTALL_CHOWN (#2564) 2016-12-13 10:46:31 -08:00
Denis Davydov
fab9af7081 slepc/petsc: fix python dependency (#2560) 2016-12-13 01:32:42 -08:00
Todd Gamblin
8496d8ff77 Add a test to ensure package names have the right case. (#2562) 2016-12-13 01:23:40 -08:00
Sergey Kosukhin
d8c4418952 Updated python: refactoring and warning messages. 2016-12-13 08:36:56 +01:00
Sergey Kosukhin
3ba88a7509 Updated python: pass LDSHARED to dependants' setup scripts. 2016-12-13 08:36:56 +01:00
Sergey Kosukhin
ec855df071 Updated python: account for lib64 when filtering compilers. 2016-12-13 08:36:56 +01:00
Sergey Kosukhin
58cb2cc2af Updated python: reformat code. 2016-12-13 08:36:56 +01:00
Adam J. Stewart
9f71382912 Add missing bzip2 dependency to freetype (#2536)
* Add freetype dependency on bzip2

* Switch package with an install method for the docs
2016-12-12 14:20:36 -08:00
Jean-Paul Pelteret
6698650679 Doxygen: Add new version (#2561) 2016-12-12 13:45:29 -08:00
Sergey Kosukhin
8f28c9009e Set parent process's input stream inside the build process. (#2535) 2016-12-12 11:55:13 -08:00
Denis Davydov
eb645a8e46 p4est: remove unneded lua dependency (#2559) 2016-12-12 09:51:58 -08:00
Todd Gamblin
d3d87ea190 Add documentation for repositories and namespaces. (#2474)
* Add documentation for repositories and namespaces.

* Update and extend repository documentation per review.

- Also add `-N` argument for `spack spec`
2016-12-12 00:54:20 -08:00
Javier
641db8b9bd New package - r-xgboost (#2493) 2016-12-11 11:49:33 -08:00
Denis Davydov
c8a89d84b5 atlas: fix lapack stage path (#2371)
* atlas: fix lapack stage path

* atlas: add a few links to other package managers
2016-12-11 11:48:23 -08:00
Denis Davydov
d8fd5835b6 rename: add new package (#2486) 2016-12-11 11:44:30 -08:00
Stephen McDowell
7e96b09e63 [docs] missin .. code-block:: console in Spack 101 (#2530)
The advanced [Uninstalling Packages](spack.readthedocs.io/en/latest/tutorial_sc16_spack_basics.html#uninstalling-packages) via hash has a couple missing `.. code-block:: console` directives ;)

I have no idea what branch to direct this to though...
2016-12-11 11:40:36 -08:00
Denis Davydov
62dedc80b1 likwid: add todo (#2531)
* likwid: add todo

* liwkid: add a note on hwloc dependency
2016-12-11 11:39:56 -08:00
Denis Davydov
6475937fc2 numdiff: fix dependency type on macOS (#2538) 2016-12-11 11:38:40 -08:00
Sergey Kosukhin
42dbd4f855 Updated cmor: corrected way to set constraints for the extendee. (#2543) 2016-12-11 11:37:00 -08:00
Jean-Paul Pelteret
70f1e92951 Update Adol-C package (#2556)
Rename developer version, add new version, and make patch version
specific.
2016-12-11 11:35:57 -08:00
Denis Davydov
1570f90fde clang: do xcode mockup iff requested by a package (#2544)
* clang: do xcode mockup iff requested by a package

* add a note

* add pkg to setup_custom_environment() and decide whether or not to use mockup XCode there based on the package
2016-12-10 16:23:39 -08:00
Stephen McDowell
b03881d1bb Eigen 3.3.1 is latest stable version. (#2551)
Main page states [3.3.1 is latest stable](http://eigen.tuxfamily.org/index.php?title=Main_Page).
2016-12-10 16:23:20 -08:00
Stephen McDowell
3887d9b2bc Scotch 6.0.4 is available. (#2552)
Source project page states [6.0.4 is latest stable](http://scotch.gforge.inria.fr/)
2016-12-10 16:23:03 -08:00
Barry Smith
3a1e191b72 Implementation of spack file for Pflotran (#2444)
Supports installing both a "known version" of PETSc/PFlotran that works and
the develop/master branches of both packages

Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 4 hour
2016-12-10 16:22:36 -08:00
Tom Scogland
943c007fb5 update flux dependencies and package (#2541)
* update flux dependencies and package

* refinements from @adamjstewart

* fix flux document generation

The docbook-xsl package has been added, and correctly configures catalog
files to generate documentation correctly with asciidoc.
2016-12-09 17:19:53 -08:00
Denis Davydov
d7e9134d42 astyle: do not set user/group when installing on macOS (#2542)
* astyle: do not set user/group when installing on macOS

* astyle: add new version
2016-12-09 10:58:08 -08:00
Denis Davydov
4d0ea423fb petsc: explicitly disable X11 (#2533)
otherwise petsc may pickup libX11 on login nodes during config/build,
but libX11 may not be available on computation nodes.
2016-12-09 08:43:38 -08:00
becker33
3f8613ae42 Make targets an attribute of compilers (#2500)
* Make targets an attribute of compilers, similar to OS. Allows users to use `spack compiler find` to add compilers for the same platform/os but different targets when spack is installed on a file system mounted on machines with different targets.

* Changed get_compilers() method to treat old compilers with no target as target='any'

* flake8 changes

* Address change requests for comments/code clarity
2016-12-08 22:40:26 -08:00
Sergey Kosukhin
10591fb87f Json loader now returns str objects instead of unicode. (#2524) 2016-12-08 13:42:18 -08:00
Sergey Kosukhin
607f4e7b81 Added packages: cmor and uuid. (#2527)
* Added package 'uuid'.

* Added package 'cmor'.

* Updated 'cmor' and 'uuid': docstring formatting.
2016-12-08 12:09:21 -08:00
scheibelp
065e3d7c0d Revert to-string for CNL operating system (#2526) 2016-12-08 11:41:34 -08:00
Todd Gamblin
be300eb6d5 Add support for parsing R-XML URL versions. (#2525)
* Add support for parsing R-XML URL versions.

* Better url-parse debug output.

- just print the debug stuff all the time.

* fix R-XML versions.
2016-12-08 11:08:58 -08:00
George Hartzell
65df417444 Update emacs: current release, use our x11 bits (#2052)
* Update emacs: current release, use our x11 bits

Add checksum for 25.1 release.

Rework the X support:

- use Spack's X11 bits
- add ability to specify an X toolkit (gtk or athena, default is gtk).
- change toolkit names to align with Emacs' configure usage.

* PEP8 cleanups.

* glib dependency should not be type=build

I'd like to blame that on a typo, but it's a few too many characters
for that to be viable.  I'm not sure what I was thinking.

* Pass X variant down: emacs->pango->cairo

* X variants default to False, warn on bad toolkit

Change the X variants for emacs, pango and cairo to default to False.

Check that the toolkit is a valid choice and give a reasonable error if
not.

* Fix flake8 issue, reword warning text

* gtkplus needs to use +X variant for pango to work

In order for a useful variant of pango to be built into the spec I
needed to make the dependency on gtkplus explicitly specify it's X
variant.  The X variant is the default, but that wasn't enough to make
it happy.  Since it's happiness is the most imporant thing in the
world, this change! :)
2016-12-08 09:43:29 -08:00
Adam J. Stewart
ed8060abe0 Scotch fails to build with latest flex (#2523) 2016-12-08 09:37:18 -08:00
Denis Davydov
cab8788f53 dealii: remove dependencies which are not needed (#2522) 2016-12-08 07:29:22 -08:00
Pramod Kumbhar
29e42143e0 fix for bluegene-q platform (#1980)
* fix for  bluegene-q platform

* change powerpc to ppc64

* change CNK to cnk
2016-12-08 01:01:02 -08:00
scheibelp
83c9f7a4f2 Fix deptypes for deps specified on command line (#2307)
Fixes #2306

Any dependency explicitly mentioned in a spec string ended up with the
build and link deptypes unconditionally. This fixes dependency
resolution to ensure that packages which are mentioned in the spec
string have their deptypes determined by the dependency information
in the package.py files. For example if a package has cmake as a build
dependency, and cmake is mentioned as a dependency in the spec string
for the package, then it ends up with just the build deptype.
2016-12-08 00:54:30 -08:00
scheibelp
30daf95ae8 Use frontend OS for build/run deps by default (#2292)
Packages built targeting a backend may depend on packages like cmake
which can be built against the frontend. With this commit, any build
dependency or child of a build dependency will target the frontend by
default. In compiler concretization when packages copy compilers from
nearby packages, build dependencies use compiler information from
other build dependencies, and link dependencies avoid using compiler
information from build dependencies.
2016-12-08 00:51:19 -08:00
George Hartzell
5f01f273e0 Add version/digest for emacs 25.1 (#2511)
* Add version/digest for emacs 25.1

* Put newest version at top of list
2016-12-07 16:33:41 -08:00
Andrey Prokopenko
bb7b51855a yaml-cpp: add boost dependency (#2517)
yaml-cpp has a boost dependency, and according to [yaml-cpp
page](https://github.com/jbeder/yaml-cpp):
    yaml-cpp 0.5.3 has been released! This is a bug fix release. It also
    will be the last release that uses Boost; futures releases will require
    C++11 instead.
2016-12-07 13:55:12 -08:00
Tom Scogland
e0f5b12475 add ACLOCAL_PATH updates for packages that register m4 macros (#2518) 2016-12-07 13:53:57 -08:00
Oliver Breitwieser
55059a53a3 Fixed spelling of variable (#2516) 2016-12-07 13:08:51 -08:00
George Hartzell
72c01fbd33 Building lua-luafilesystem requires a newish-git (#2515)
See #2059 for background.

I'm unable to install `lmod` because lua-luafilesystem fails.

The luarocks install bits attempt to do a shallow clone of the luafilesystem
sources and the default git on my CentOS 7 test box (`git version 1.8.3.1`)
fails.

This adds a build dependency that ensures that a relatively modern git is
available.
2016-12-07 12:12:53 -08:00
George Hartzell
f3410a0b1d Update texlive digest value (#2514)
* Update texlive digest value

While the discussion in #2494 progresses, this changes fixes the digest
values so that builds succeeed.

* Add warning that texlive is not repeatably installable
2016-12-07 12:02:22 -08:00
Andrey Prokopenko
3088cb171e netcdf: add checksum for 4.3.3.1 version (#2509) 2016-12-07 09:34:31 -08:00
Andrey Prokopenko
8239bd1681 cmake: added checksum for 3.1.0 version (#2508) 2016-12-07 09:33:54 -08:00
Barry Smith
4e6f6320ad hypre, superlu-dist, trilinos - support using develop/master branches of these packages (#2443)
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1 hour
2016-12-06 13:55:58 -08:00
Barry Smith
76dae1dc5f hypre, superlu-dist, trilinos - support using develop/master branches of these packages (#2443)
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1 hour
2016-12-06 12:10:51 -08:00
Joseph Ciurej
9c57a49bf4 Fixed a few minor issues with the 'fontconfig' package install script. (#2491) 2016-12-06 10:39:59 -08:00
Andrey Prokopenko
9edb31a51c hdf5: added 'pic' variant (#2373) 2016-12-05 11:57:04 -08:00
Todd Gamblin
089e5b5996 Remove CYAML tests from Spack now that the DB is JSON. (#2487) 2016-12-05 10:31:49 -08:00
Adam J. Stewart
9115ab5097 Add Java support to OpenMPI (#2285)
* Update OpenMPI to the AutotoolsPackage

* Add Java support to OpenMPI

* Fix missing commas

* Be more specific about what versions support what flags

* Revert description for thread_multiple variant
2016-12-05 10:15:12 -08:00
Elizabeth Fischer
cd0524b5b7 py-rtree: Added package (#1548)
* py-rtree: Added package

* py-rtree = RTree (spatial indexing) data structure for Python
* libspatialindex = Underlying C library wrapped by py-rtree

* Flake8 and Copyright issues.

* Fix Python syntax error.

* Fixed dependency type error.

* Added new version, based on updates requested in upstream PR

* 1. Change cmake to build dependency.
2. Updated to CMakePackage
2016-12-05 10:08:52 -08:00
Todd Gamblin
41b8f31bcd Use JSON for the database instead of YAML. (#2189)
* Use JSON for the database instead of YAML.

- JSON is much faster than YAML *and* can preserve ordered keys.
  - 170x+ faster than Python YAML when using unordered dicts
  - 55x faster than Python YAML (both using OrderedDicts)
  - 8x faster than C YAML (with OrderedDicts)

- JSON is built into Python, unlike C YAML, so doesn't add a dependency.
- Don't need human readability for the package database.
- JSON requires no major changes to the code -- same object model as YAML.
- add to_json, from_json methods to spec.

* Add tests to ensure JSON and YAML don't need to be ordered in DB.

* Write index.json first time it's not found instead of requiring reindex.

* flake8 bug.
2016-12-05 10:03:58 -08:00
Adam J. Stewart
161d6205b2 Allow spack create to handle packages with period in name (#2351)
* Allow spack create to handle packages with period in name

* Update tests to handle new package name detection scheme
2016-12-05 09:34:14 -08:00
Denis Davydov
24093a932c ghostcript-fonts: fix install on macOS (#2482) 2016-12-05 08:28:35 -08:00
Denis Davydov
2d1ab68656 xextproto: fix on macOS by not running parallel build (#2483) 2016-12-05 08:28:02 -08:00
Massimiliano Culpo
2634e4909f travis: sphinx does not support python 2.6 anymore (#2485) 2016-12-05 08:27:03 -08:00
Todd Gamblin
b8b14c84e0 Bugfix: restore __contains__ method after ArchSpec refactor. (#2481) 2016-12-04 16:22:16 -08:00
George Hartzell
f0dcb5bbf7 Update go to 1.7.4 and 1.6.4 to fix security issues (#2467)
* Update go to 1.7.4 and 1.6.4 to fix security issues

The go team recently rolled out two releases to address security
issues.  Details available on the [go release
site](https://golang.org/doc/devel/release.html).

This commit updates our explicitly supported versions.

It also includes a comment about two CentOS requirements (enable
user_namespace and ensure that the static c library is installed) that
are required for the pacakges to pass their tests.

* Flake8 cleanup
2016-12-03 16:44:03 -08:00
Andrey Prokopenko
f17c22dfb5 zlib: added 'pic' variant (#2470)
It looks more complicated because zlib has custom configure which does
not support CFLAGS option. So instead, we take it from environment.
2016-12-03 16:43:44 -08:00
George Hartzell
6ddc518417 Update git package to include 2.11.0 (#2471) 2016-12-03 16:41:12 -08:00
Joseph Ciurej
552b4eae9e Fixes to Handling Multiple Architectures (#2261)
* Added some notes about how multiarch detection could be fixed.

* Implemented a preliminary version of the "spack.spec.ArchSpec" class.

* Updated the "spack.spec.Spec" class to use "ArchSpec" instead of "Arch".

* Fixed a number of small bugs in the "spack.spec.ArchSpec" class.

* Fixed the 'Concretizer.concretize_architecture' method so that it uses the new architecture specs.

* Updated the package class to properly use arch specs.
Removed a number of unused architecture functions.

* Fixed up a number of bugs that were causing the regression tests to fail.
Added a couple of additional regression tests related to architecture parsing/specification.
Fixed a few bugs with setting reserved os/target values on "ArchSpec" objects.
Removed a number of unnecessary functions in the "spack.architecture" and "spack.concretize" modules.

* Fixed a few bugs with reading architecture information from specs.
Updated the tests to use a uniform architecture to improve reliability.
Fixed a few minor style issues.

* Adapted the compiler component of Spack to use arch specs.

* Implemented more test cases for the extended architecture spec features.
Improved error detection for multiple arch components in a spec.

* Fix for backwards compatibility with v0.8 and prior

* Changed os to unknown for compatibility specs

* Use `spack09` instead of `spackcompat` for the platform of old specs.
2016-12-03 15:38:31 -08:00
hegner
2f46613132 Fix download URL and dependencies for py-pypar (#2430)
* fix download URL and dependencies for py-pypar

* use url_for_version in py-pypar
2016-12-02 13:56:00 -08:00
Nicolas Richart
cc92b9a3a2 foam-extend: modification to accept flex version >= 2.6 (#2452)
* Modification to accept flex version >= 2.6 + bug fix on paraview dependency

* flake8 "corrections"
2016-12-02 13:51:03 -08:00
Elizabeth Fischer
18878a8615 doxygen: Disable unnecessary graphviz dependency by default. (#2323) 2016-12-02 10:56:40 -08:00
Jon Rood
8b612d3568 Updating SuperLU package to use pic_flag instead of -fPIC, and removing specific version for default install method. (#2456) 2016-12-02 10:47:35 -08:00
Jon Rood
946605a4c9 Updating yaml-cpp from Package to CMakePackage. (#2457) 2016-12-02 10:41:18 -08:00
Gregory Lee
84dc0b5b83 new intel parallel studio versions (#2459) 2016-12-02 10:35:36 -08:00
Andrey Prokopenko
3024c0096a cmake: update the requirements for --no-system-jsoncpp option (#2312)
The option appeared in CMake 3.2 (specifically, in 3.2.0-rc2, see
https://cmake.org/pipermail/cmake-developers/2015-February/024552.html).
2016-12-01 17:51:00 -08:00
George Hartzell
c01f78e515 Make X11 font install dir the font search default (#2203)
* Make X11 font install dir the font search default

We install the X11 fonts into `/share/fonts` beneath the font-util
installation prefix, but that directory is not one of the places that
the font subsystem searches.

This commit makes the fontconfig package depend on the font-util
package, and then it makes

```python
spec['font-util'].prefix + "/share/fonts"
```

be the fontconfig default font location.

Before this change, plots drawn by R have bounding boxes where font
glyphs should be.  After this change fonts appear as expected.

* Enrich description string (trigger new CI run)

Improve the docstring for the package.

Also interested in the side effect of triggering another CI run
to see if the recent flake8 fix lets this PR run clean.

* Flake8 cleanups
2016-12-01 17:38:00 -08:00
hegner
8dae60c5f0 Fix py-scientificpython and py-argcomplete dependencies (#2420)
* add missing py-numpy dependency to scipy

* add missing setuptools build dependency to py-argcomplete
2016-12-01 14:34:07 -08:00
Sergey Kosukhin
c6e2d9c1b0 Updated hdf5: new versions added. (#2442)
* Updated hdf5: new versions added.

* Updated hdf5: url_for_version() accounts for per-version urls.
2016-12-01 14:31:27 -08:00
Matt Belhorn
e26a0be731 Does nothing if no prexisting config.guess is found. (#2446)
* Does nothing if no prexisting config.guess is found.

* Update name for RHEL OS.
2016-12-01 11:54:48 -06:00
TomasPuverle
f1fe614d67 Update tutorial_sc16_packaging.rst (#2450)
Fixed a typo.
2016-12-01 11:53:18 -06:00
TomasPuverle
a961797155 Update workflows.rst (#2451)
Fixed a typo.
2016-12-01 11:53:03 -06:00
Sergey Kosukhin
051720defd More informative help messages for spack config. (#2453) 2016-12-01 11:52:56 -06:00
Bruno Turcksin
bc4237c93e Update trilinos version to 12.10.1 (#2454) 2016-12-01 11:52:05 -06:00
Denis Davydov
6ce0ee49a9 likwid: add new package (#2455) 2016-12-01 11:51:23 -06:00
Gregory Lee
8e816f8f88 Merge pull request #2364 from davydden/ips_mkl
intel-parallel-studio: fix location of MKL libs
2016-12-01 09:21:37 -08:00
George Hartzell
8ab69c4d32 Update R&friends to use our X11 libs (#2053)
* Update R&friends to use our X11 libs

Add `depends_on()`'s for R, Cairo, and Tk so that they use the Spack X
bits.

* Conditionalize X stuff on variant

Another step towards hooking up the X stuff.

There's still discussion happening on the issue, but this is better
than the 'everything must build with X' state that it was in.
2016-11-30 15:49:49 -06:00
Adam J. Stewart
6cc9b31747 Allow shell support to work when set -u is set (#2418) 2016-11-29 17:04:29 -08:00
Javier
5eb7026dd1 New package - r-irkernel (#2434)
* New package - r-irkernel

* New package - r-pbdzmq, dependency of r-irkernel

* Adding blank line expected by flake8 tests
2016-11-29 16:59:28 -08:00
Joseph Ciurej
3d439d8946 Added the '+debug' and '+except' variants to the 'tetgen' package. (#2370)
Fixed a bug that was causing memory errors after asserts in 'tetgen@1.5.0'.
2016-11-29 16:18:03 -06:00
hegner
c3e34b480a CDash fixes (#2438)
use short spec instead of spec as CDash has a limitation in name length
mark all problems as 'FAILED' as CDash does not understand "ERRORED" status
2016-11-29 13:30:59 -06:00
Javier
e3778923b6 New package - r-rbokeh (#2436) 2016-11-29 11:29:46 -06:00
Erik Schnetter
00ad8e87f4 jemalloc: Update to 4.3.1 (#2435)
This corrects a severe problem (segfault) on macos Sierra.
2016-11-29 09:51:55 -06:00
Barry Smith
4d56d4f1f9 add support for installing the development (master) version of PETSc (#2431)
Funded-by:  IDEAS
Project:  IDEAS/xSDK
Time:   .3 hours
x
2016-11-29 09:28:09 -06:00
hegner
a6d579ea15 add headers neede for CDASH to junit output (#2433) 2016-11-29 08:29:57 -06:00
Adam J. Stewart
664939eeba Fix building latest version of flex (#2401)
* Fix building latest version of flex

* Don't need when clause

* Remove perl deps, shebang too long
2016-11-28 09:48:34 -08:00
hegner
a2e6de9b5d add missing zeromq dependency to r-rzmq (#2425) 2016-11-28 09:14:16 -08:00
Javier
bb5bd8091d New package - r-pryr (#2424) 2016-11-28 09:14:10 -08:00
Javier
2d43b56deb New package - r-uuid (#2423) 2016-11-28 09:14:05 -08:00
Javier
6e68a01e50 New package - r-rmarkdown (#2422) 2016-11-28 09:14:00 -08:00
Javier
6c2729ae6f New package - r-repr (#2421) 2016-11-28 09:13:20 -08:00
Denis Davydov
d2d23b76da hdf5: fix for lib64 installation (#2349) 2016-11-28 09:12:48 -08:00
Denis Davydov
b47bd9cc00 scotch: fix compilation on macOS (#2326) 2016-11-26 16:48:50 -08:00
Javier
eeb9c84677 New package - r-rinside (#2416)
* New package - r-rinside

* Changes to pass flake8 test
2016-11-26 16:48:04 -08:00
Javier
1cdfc30374 New package - r-rsnns (#2415) 2016-11-26 16:47:56 -08:00
Javier
0c4e97b6a1 New package - r-rzmq (#2414)
* New package - r-rzmq

* Adding homepage
2016-11-26 16:47:47 -08:00
Javier
7baa6e824b New package - r-irdisplay (#2413) 2016-11-26 16:47:38 -08:00
Javier
cc0d08255c New package - r-hexbin (#2412) 2016-11-26 16:47:25 -08:00
Andrey Prokopenko
8f0b91edaa netcdf: multiple improvements (#2377)
- Added 'dap' and 'cdmremote' variants
  This is based on work in #2324 with the following motivation:
      Turn off DAP support by deafult.  DAP requires curl, which has issues
      with circular dependencies.  For 95% of NetCDF users that do not need
      DAP, turning it off avoides this rats nest of problems.
- Added 'parallel-netcdf' variant
  To support work with parallel-netcdf
- Added 'shared' and 'static' build separation
2016-11-24 13:52:28 -08:00
George Hartzell
cde8f697a9 Bugfix/update go packages (#2369)
* Update go-bootstrap package

The last C based Go src tree was the 1.4 series.  For a while they
were cutting new releases so that people could bootstrap from a C only
system.  Now they're recommending that you either use the release-1.4
branch or that you use a date-stamped tarball that they'll produce on
an as-needed basis.

There are several issues that keep 1.4.2 from building on a CentOS 7
system.

I've switched to the date based tarball.

The cgo bits were also mis-behaving, but they're not needed for the
bootstrapping task so I've set an environment variable that disables
them.

Details [on the install-from-source
page](https://golang.org/doc/install/source#go14) and these issues:

- https://github.com/golang/go/issues/17545
- https://github.com/golang/go/issues/16352.

* Update go package

Switched from pulling from the git repository to using the source
tarballs and added digest values.

Added support for 1.7.3, continued supporting 1.6.2, including patches
for a couple of problems (details in
[17545](https://github.com/golang/go/issues/17545) and
[17986](https://github.com/golang/go/issues/17986).

Dropped support for 1.5.4 and 1.4.2 because they no longer pass their
tests and the patches above to not apply.
2016-11-24 12:25:51 -08:00
Andrey Prokopenko
11bfccd53f Adding pic_flag property to compilers (#2375)
Different compilers have different flags for PIC (position-independent
code). This patch provides a common ground to accessing it inside specs.

See discussions in #508 and #2373. This patch does not address the issue
of mixed compilers as mentioned in #508.
2016-11-24 12:25:22 -08:00
scheibelp
261d36e801 Add dynamic search option for package sources (#2270)
Package provides a 'list_url' attribute which may be searched to find
download links. #1822 created a slowdown for all tests by always
searching this URL. This reenables dynamic search only in cases where
all other fetchers fail. This also only enables dynamic search when
'mirror_only' is set to false.
2016-11-24 12:21:05 -08:00
Javier
9c267e9c73 Updated version - r-lattice (#2410) 2016-11-24 12:19:42 -08:00
Javier
09a5826903 New package - r-testit (#2409) 2016-11-24 12:19:10 -08:00
Javier
f4fc670ab4 New package - r-highr (#2408) 2016-11-24 12:19:05 -08:00
Javier
bb3239903b New package - r-knitr (#2407) 2016-11-24 12:19:01 -08:00
Javier
8949e67ce3 New package - r-gistr (#2406) 2016-11-24 12:18:57 -08:00
Javier
85638aad03 New package - r-formatr (#2405)
* New package - r-formatr

* Block comment should start with '# '
2016-11-24 12:18:47 -08:00
Javier
4214281ab3 New package - r-evaluate (#2404) 2016-11-24 12:18:41 -08:00
Gregory Lee
96bc3ff8f6 added qt variants for pyqt to build (#2389) 2016-11-23 14:10:12 -08:00
Jon Rood
a6db0bfae2 Updating SuperLU package file with ability to build version 4.3. (#2390)
* Updating SuperLU package file with ability to build version 4.3 (before they added cmake) with external blas or internal blas, and added capability to build the latest version 5.2.1 (with cmake) with internal blas.

* Updating SuperLU package file with suggested changes, i.e. reorganizing installation methods based on version, adding cmake dependency when necessary, removing any use of internal blas, and also adding fpic variant.

* Fixing flake8 failures.
2016-11-23 13:26:00 -08:00
Javier
c3aa5443b9 Adding R library r-bitops (#2382) 2016-11-23 13:24:35 -08:00
Adam J. Stewart
e60bccd95c Fix indentation for newly created packages (#2391) 2016-11-23 10:58:13 -08:00
Javier
7bda4e98b3 New package - r-catools (#2394)
* New package - r-catools

* Splitting lines to pass flake8 travis test
2016-11-23 10:57:47 -08:00
Javier
b085ce9e94 New package - r-partykit (#2395)
* New package - r-partykit

* Splitting lines to pass flake8 travis test
2016-11-23 10:57:23 -08:00
Javier
0eddf8421d New package - r-formula (#2396) 2016-11-23 10:56:59 -08:00
Javier
d6710a6aaf New package - r-deoptim (#2397) 2016-11-23 10:56:37 -08:00
Javier
74e6db9060 New package - r-c50 (#2393)
* Adding R library r-bitops

* New package - r-c50
2016-11-23 10:56:13 -08:00
Jon Rood
f8d038c0b8 New package yaml-cpp (#2399)
* Adding new package for yaml-cpp.

* Removing gcc specific c++11 flag. Adding fpic variant. Fixing formatting.
2016-11-23 10:54:22 -08:00
Matthew Scott Krafczyk
1fbe67af3d Update flex package url's and versions (#2384)
* Update flex package url's and versions

The old sourceforge page for flex is now defunct. While version 2.6.0
still downloads fine, later versions are no longer hosted there.
Development continues on github. I've adjusted urls to point to this
new location.

In addition, from 2.6.0 onwards, a new naming scheme for releases seems
to have been adopted. I've created a url_for_version function to sort
this out.

* Change flex to an AutotoolsPackage

Also move the url_for_version function to the end of the package
definition.

* Implement the autoreconf function for flex
2016-11-22 14:30:25 -08:00
Adam J. Stewart
f351e4402c Update external distro package to 1.0.1 (#2381) 2016-11-22 14:01:01 -08:00
Todd Gamblin
1901b05b9c Forgot http:// in tutorial link. 2016-11-22 01:24:48 -08:00
Todd Gamblin
c394046971 Fix broken doc links. 2016-11-22 00:55:04 -08:00
becker33
5e73266572 Merge pull request #2291 from ax3l/topic-icet
Packages: Add IceT
2016-11-21 14:27:17 -08:00
becker33
294ad3e818 Merge pull request #2343 from krafczyk/features/better_diagnostics
Improve diagnostics to ease debugging
2016-11-21 14:22:26 -08:00
becker33
760bca3048 Merge pull request #2376 from aprokop/misprint_fix
llvm-lld: minor misprint fix
2016-11-21 14:12:44 -08:00
Andrey Prokopenko
3954fc8545 llvm-lld: minor misprint fix 2016-11-21 16:22:31 -05:00
Glenn Johnson
a8e40bf803 intel-parallel-studio: fix location of MKL libs 2016-11-18 23:16:47 +01:00
Matthew Krafczyk
f1b26cb72e Improve stacktrace printing
Sometimes files in the stacktrace are not from spack. Remove these
files before finding the spack root.
2016-11-17 12:51:41 -05:00
Matthew Krafczyk
de7171db8a Use better scheme for getting root directory 2016-11-16 12:14:25 -05:00
Matthew Krafczyk
6c854246aa Fix some formatting errors caught by flake8. 2016-11-16 11:58:36 -05:00
Matthew Krafczyk
8e6d890a19 -s now includes the file and line number with info
The option -s now causes file and line number information to be printed
along with any invocation of msg, info, etc...

This will greatly ease debugging.
2016-11-16 11:58:36 -05:00
Denis Davydov
a5fb33b0e4 python: symlink lib64/python2.7/lib-dynload/ to lib/python2.7/lib-dynload/ (#2295) 2016-11-16 07:29:08 -07:00
Todd Gamblin
2611cbed40 Move tutorial slides to external link and stop using git LFS (#2341)
- Seems like older git versions won't be able to clone an LFS repo.

- Reverting to an external link for the slides to avoid storing an 8MB
  file in the repo and to avoid using git LFS.
2016-11-15 14:11:26 -07:00
Todd Gamblin
2fcac22e66 Add tutorial link to README 2016-11-14 18:35:21 -07:00
Todd Gamblin
85a05681cc Add SC16 tutorial to the Spack docs. (#2334) 2016-11-14 18:23:30 -07:00
Todd Gamblin
bdd1069a9e Add SC16 tutorial to the Spack docs. 2016-11-14 18:08:21 -07:00
becker33
93287b950b Merge pull request #1547 from citibeth/efischer/160816-PyPathspec
py-pathspec: New package
2016-11-14 15:13:21 -08:00
Axel Huebl
4b82d881dc Add Package: IceT
Adds the IceT compositing library from Sandia/Kitware.
Most default functionality needed for image compositing is
added, OpenGL acceleration for very large displays is disabled.

Downstream usage:
  most VTK based software which supports parallel image compositing,
such as VisIt, Paraview and in our use-case
[ISAAC](https://github.com/ComputationalRadiationPhysics/isaac).
2016-11-13 16:50:14 -07:00
becker33
b13b253ced Edited/fixed basic usage tutorial (#2329)
* Colify compiler output

* Edited/fixed basic usage tutorial

* fix console spacing.
2016-11-13 09:29:32 -07:00
Massimiliano Culpo
103a98a468 fake install: mock include directory (#2294) 2016-11-13 04:45:50 -07:00
Massimiliano Culpo
7e93a0e5f1 install: fixed choices for --only (removed the default) fixes #2303 (#2308) 2016-11-13 04:45:29 -07:00
Kelly Thompson
05c6c40e36 Force the recipe for Lua to use the spack compiler. (#2299)
* Force the recipe for Lua to use the spack compiler.

I'm not sure how the old recipe worked for anyone. The Lua Makefiles set
`CC=gcc` and for my spack environment the first `gcc` found in my `PATH` is
`$SPACK_ROOT/lib/spack/env/gcc`, which is a directory. This caused the build
to fail. My change drops the `-std=gnu99`, but this option doesn't appear
to be required for a sucessful build.

* Preserve the '-std=gnu99' compile option.
2016-11-12 21:46:59 -07:00
Elizabeth Fischer
8c0c3263e2 Simplify the CMake build to make it more robust. (#2325)
* Simplify the CMake build to make it more robust.

* ncurses on by default.
2016-11-12 21:26:40 -07:00
Todd Gamblin
a5934fcaa6 Remove automake dep in libelf. (#2328) 2016-11-12 21:25:14 -07:00
Gregory Becker
7201053f2a Basic usage step-by-step tutorial 2016-11-12 16:55:37 -07:00
Matthew LeGendre
216d269f1d Add packaging tutorial to docs (#2315)
* Add packaging tutorial to docs

* packaging tutorial: formatting
2016-11-12 07:45:50 -08:00
Adam J. Stewart
09470ec672 Add VizGlow package (#2298) 2016-11-10 21:55:27 -08:00
Axel Huebl
42cc997aea Packages: Add Jansson (#2287)
This adds the built recipe for
[Jansson](http://www.digip.org/jansson/),
*a C library for encoding, decoding and manipulating JSON data.*

GitHub Repo: https://github.com/akheron/jansson

Downstream Usage:
  In [ISAAC](https://github.com/ComputationalRadiationPhysics/isaac)
which is an *in situ visualization library* based on
  [alpaka](https://github.com/ComputationalRadiationPhysics/alpaka)
and/or CUDA which is used in
  [PIConGPU](https://github.com/ComputationalRadiationPhysics/picongpu).
2016-11-10 21:52:49 -08:00
Denis Davydov
7cb756cdbb tree: use Spack's compiler and fix installation on macOS (#2293) 2016-11-10 21:52:22 -08:00
Axel Huebl
26ed2327ae Packages: Add libwebsockets (#2288)
This adds the built recipe for
[libwebsockets](https://libwebsockets.org/lws-api-doc-master/html/index.html),
a *C library for lightweight websocket clients and servers*.

GitHub Repo: https://github.com/warmcat/libwebsockets

Downstream Usage:
  In [ISAAC](https://github.com/ComputationalRadiationPhysics/isaac)
which is an *in situ visualization library* based on
  [alpaka](https://github.com/ComputationalRadiationPhysics/alpaka)
and/or CUDA which is used in
  [PIConGPU](https://github.com/ComputationalRadiationPhysics/picongpu).
2016-11-10 21:51:50 -08:00
Adam J. Stewart
99cf7b4ab3 Run HDF 5 tests post-installation (#2297) 2016-11-10 21:50:32 -08:00
scheibelp
bece9aca84 Allow compiler wrapper to modify environment (#2275)
* Allow compiler wrapper to modify environment

This adds the ability to set environment variables in the compiler
wrappers. These are specified as part of the compilers.yaml config.
The user may also specify RPATHs in compilers.yaml that should be
added.

* Minor doc tweak
2016-11-09 08:00:34 -08:00
christianbaensch
2e11e7e456 Update package.py with/out CUDA support (#2266)
Adding some lines to prevent from using any CUDA stuff, if NVIDIA CUDA Developement Kit was installed before.
2016-11-09 07:37:40 -08:00
Massimiliano Culpo
e5edac8af6 zlib, tar: passed to AutotoolsPackage (#2273) 2016-11-09 07:37:08 -08:00
Massimiliano Culpo
01e42bfea0 find, uninstall: improved user interaction in the case of empty DB (#2278) 2016-11-09 07:36:45 -08:00
Gregory Lee
1b64213b10 added numpy version 1.11.2 and moved url to pypi.io (#2286) 2016-11-09 07:35:30 -08:00
Oliver Breitwieser
98f27a89ec Add py-pudb package (#2289) 2016-11-09 07:34:30 -08:00
Oliver Breitwieser
68f79043aa Add 1.5.3 for py-matplotlib and moved to pypi.io (#2271)
* Added version 1.5.3 for py-matplotlib

* Updated url to pypi.io so all versions are properly downloaded.
2016-11-09 07:34:17 -08:00
Sergey Kosukhin
4457c6a2ad Updated environment-modules package: (#2279)
Added 'lib64' directory as a possible option where tclConfig.sh file can be found.
2016-11-08 07:19:31 -08:00
Pramod Kumbhar
ba58a9f30d fix tau installation issue (#2269)
* fix tau installation issue : setup_environment() is
called before install phase when 'Makefile.*' doesn't
exist (causing list index out of range error).

* Added detailed comment suggested by @alalazo
2016-11-08 07:18:14 -08:00
Gregory Lee
1f5ca24197 Merge pull request #2197 from skosukhin/ext_bugfix
Updated python package reflecting the changes in 9347f86
2016-11-07 16:05:57 -08:00
Todd Gamblin
908ba6e3d6 Waste less space when fetching cached archives, simplify fetch messages. (#2264)
* Waste less space when fetching cached archives, simplify fetch messages.

- Just symlink cached files into the stage instead of copying them with curl.
- Don't copy linked files back into the cache when done fetching.

* Fixes for review.

* more updates

* last update
2016-11-07 01:34:30 -08:00
Todd Gamblin
08477f6624 Don't automatically spider remote list_urls before making stage. (#2263)
- This might be useful but we don't want to do it unconditionally.
2016-11-06 20:50:14 -08:00
becker33
49b1c0df2b Changed cflag matching to exact rather than subset. (#2227)
Not the desired eventual behavior, but cflag subset matching is not currently working for anonymous specs and this provides a temporary solution by restricting the feature until it is fixed.
2016-11-06 15:32:05 -08:00
Adam J. Stewart
ca5f713282 Further restrict versions of GCC patched (#2259) 2016-11-06 15:31:48 -08:00
George Hartzell
7f5d1953d4 Wordsmithing/minor-edits to module tutorial (#2256)
* Wordsmithing/minor-edits to module tutorial

A small set of wordsmithing, spell checking and minor edits to the fancy
new modules tutorial!

* Fix typo (sneaky z key...)

* Fix "S:" and "manual<" typos
2016-11-06 14:56:41 -08:00
Todd Gamblin
544b147370 Add detection for redhat enterprise server to distro.py (#2262) 2016-11-06 14:23:21 -08:00
Michael Kuron
6f2c05b888 Add PFFT parallel FFT package (#2255)
* Add PFFT parallel FFT package

* pfft: fix non-double precision
2016-11-05 12:19:19 -07:00
Massimiliano Culpo
6c1113769b mpich: updated package to build_systems (#2254)
* mpich: updated package to build_systems

* qa : flake8 issues
2016-11-05 11:23:57 -07:00
Massimiliano Culpo
1bef2b7e98 variable referenced before assignment (#2252) 2016-11-05 10:15:29 -07:00
Jeffrey Salmond
a260e7e860 Bugfix in concretize_compiler (#2196)
* fix bug in search for concrete compiler

* simplify implementation of concretize_compiler

* fix flake8 errors
2016-11-04 23:20:49 -07:00
Adam J. Stewart
6d1c32d46a Add STAR-CCM+ package (#2202)
* Add STAR-CCM+ package

* Cleanup commented out code
2016-11-04 23:16:20 -07:00
Sergey Kosukhin
6dfc536ecd Updated py-netcdf: added dependency on py-setuptools. (#2213) 2016-11-04 23:15:55 -07:00
George Hartzell
bcee2ca162 New texlive release, updating the digest to match (#2218)
* November 1 seems to have brought a new texlive release, updating the
digest to match.

Also switching the url from their automagic mirror to an explicit
site to avoid inconsistencies during their updates.

It seems like only yesterday (#2073) that I updated this....

* Add comment to url warning about mirror updates

Add a comment to the download info warning to use a
specific site rather than the mirror, to avoid wobbles
during their asynchronous updates.

* Fix typo ('to no' -> 'do not')
2016-11-04 23:14:48 -07:00
scheibelp
0940ee6015 Fixes #1520 (#1822)
Some packages which include resources fetched from source control
repositories terminated package installs because they failed to
archive; specifically, this included all SCM resources which identify
a specific state of the repo - for example a revision in svn or a
tag/revision in git. This is because the resource stage creation
logic did not choose an appropriate archive name for these kinds of
resources.
2016-11-04 20:14:56 -07:00
Adam J. Stewart
4e6d535058 Set Clang as the default compiler on macOS (#2225)
* Set OS-specific default compilers

* Fix flake8 warnings
2016-11-04 17:32:25 -07:00
Todd Gamblin
78154a63e8 Fix bug in distribution detection on unsupported platforms. 2016-11-04 16:49:19 -07:00
Jeffrey Salmond
9cd83a4efb Use code from the distro package to improve linux distro detection. (#1629)
* Use code from the `distro` package to improve linux distro detection.

Various issues [1] [2] with the platform.linux_distribution function led
to the function being deprecated in python 3.4. The pipi package distro
[3] contains compatible improved code that better tracks current methods
for identifying linux distributions (see, for example, [4],[5]).

[1]: https://bugs.python.org/issue20454
[2]: http://bugs.python.org/issue1322
[3]: https://pypi.python.org/pypi/distro
[4]: https://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/lsbrelease.html
[5]: https://www.freedesktop.org/software/systemd/man/os-release.html

* fix (potential) unicode problems
2016-11-04 16:38:44 -07:00
Axel Huebl
c3d9dda0e5 libSplash: Add 1.6.0 Release (#2244)
* libSplash: Add 1.6.0 Release

Add the latest release of libSplash, version 1.6.0.

* Fix flake8 checks (another loop inversion issue)
2016-11-04 16:27:17 -07:00
Massimiliano Culpo
401b4cb137 module files tutorial : first complete draft (#2228)
* module files tutorial : first complete draft

- first complete draft for module files tutorial
- minor corrections to module file reference

* module file tutorial : first batch of corrections

- module avail spelled out fully
- typos from @adamjstewart
- rewording of a few sentences

* module file tutorial : first batch of corrections

- emphasized lines in yaml files

* module file tutorial : fixes according to @citibeth and @adamjstewart reviews

- used long format for command options
- reworded unclear sentence on tokes
- reworked table in reference manual to make it clearer

* module file tutorial : implemented corrections collected on site from @schlyfts

* module file tutorial : removed comment (@hartzell suggestion)
2016-11-04 12:55:43 -07:00
Gregory Lee
ee6eb508cb patch older config.guess for newer architectures (#2221) 2016-11-04 12:12:37 -07:00
Massimiliano Culpo
296a349d49 setup script for bash : fixes #2209 for sh setup (#2212) 2016-11-04 12:00:01 -07:00
Jeffrey Salmond
472ad39db3 updates to matio package (#2243)
* updates to matio package

- update to a AutoTools package
- add variants for hdf5 and zlib
- add latest version

* fix flake8 error
2016-11-04 11:56:47 -07:00
Jeffrey Salmond
f01b9797d7 opencoarrays package fixes and new version (#2239)
* fix and simplify opencoarrays package using new CMakePackge methods

* add new version
2016-11-04 11:50:25 -07:00
Todd Gamblin
2536029ea9 Better spack spec (#2238)
* Add options for hashes, tree depth, and YAML to `spack spec`.

- Can now display hashes with `spack spec`, like `spack find`.
  - Removed the old "ids" argument to `spack spec` (which
    printed numerical values)b

- Can output YAML spec from `spack spec` with `-y`

- Can control depth of DAG traversal with --cover=[nodes|edges|paths]

- Can print install status (installed, missing, not installed) with -I

* Don't use YAML aliases in specs.

- Force Spack's YAML dumper to ignore aliases.
- aliases cause non-canonical YAML to be used in DAG hash, and result in
  redundant hashes.
- add a test to ensure this behavior stays
2016-11-04 11:47:57 -07:00
Peter J. Scheibel
9a585e6c6a Make spec.format properties case-insensitive 2016-11-04 11:41:20 -07:00
Peter J. Scheibel
74b439b7f1 Support 'COMPILERVERSION' in spec format string 2016-11-04 11:41:20 -07:00
Jeffrey Salmond
a135a1245a tweaks to packages using CMakePackage (#2241)
* fix to trilinos package

* fix to dealii package

* fix to everytrace package

* fix to everytrace-example package

* changes suggested by @davydden
2016-11-04 10:57:53 -07:00
Denis Davydov
29f81b7775 trilinos: switch to CMakePackage and minor cleanup (#2226) 2016-11-04 02:00:03 -07:00
Denis Davydov
453331dba0 dealii: switch to CMakePackage and minor cleanup (#2237) 2016-11-04 01:46:39 -07:00
Denis Davydov
1eeef97c78 remove obsolete instructions on hacking clang+gfortran (#2217)
* remove obsolete instructions on hacking clang+gfortran

* add detailed instructions on how to setup Clang+gfortran on macOS
2016-11-03 08:06:33 -07:00
Massimiliano Culpo
36a4ca8b11 spack install: forward sys.stdin to child processes (#2158)
* spack install: forward sys.stdin to child processes fixes #2140

 - [ ] redirection process is spawned in __enter__ instead of __init__
 - [ ] sys.stdin is forwarded to child processes

* log: wrapped __init__ definition
2016-11-03 08:03:10 -07:00
Massimiliano Culpo
5b5894afba spack find: accepts anonymous specs as arguments fixes #2170 (#2188) 2016-11-03 00:45:15 -07:00
Pramod Kumbhar
b706da1109 Set TAU_MAKEFILE env variable (#2210)
* In order to use TAU module, we have to set TAU_MAKEFILE env variable.

* updated with suggestions from @citibeth
2016-11-02 15:05:47 -05:00
Todd Gamblin
b304387308 Fix style checker bug. (#2214)
* Fix style checker bug.

* spack flake8: print cwd-relative paths by default, with root-relative option.
2016-11-02 12:17:35 -05:00
Barry Smith
9455621ec2 Add support for gfortran to be used with clang (#2192)
1) list gfortran as a fc and f77 compiler that can work with clang
2) allow compatible gfortran to ./spack compiler find with clang by matching version numbers

This is based on the discussions in

https://github.com/LLNL/spack/issues/237
https://github.com/dealii/dealii/wiki/deal.II-in-Spack#mixing-gcc-and-clang-on-osx

This is not a long term solution but something to get us through the next months until the compiler
infrastructure is reworked to allow mixing and matching for C/C++ and Fortran compilers

Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1.5 hours
2016-11-02 11:17:13 -05:00
Sergey Kosukhin
8fb5cb2137 Added first version of the NCL package. (#2195)
Without GRIB2 and HDF-EOS support yet.
2016-11-02 10:20:57 -05:00
Peter Doak
1aa5d4875e Nmap package added (#2206)
* works to build newest version of nmap with gcc@5.3.0

* formatting

* clean up
2016-11-01 16:10:39 -07:00
scheibelp
45a4388164 Update references in debug command (#2204) 2016-11-01 13:55:13 -07:00
Sergey Kosukhin
62eba4774d Updated python package reflecting the changes in 9347f86 2016-11-01 16:15:34 +01:00
Todd Gamblin
edfe2297fd Improved package.py error handling. (#2187)
- Detailed debug information is now handed back to the parent process
  from builds, for *any* type of exception.

- previously this only worked for Spack ProcessErrors, but now it works
  for any type of error raised in a child.

- Spack will print an error message and source code context for build
  errors by default.

- It will print a stack trace when using `spack -d`, even when the error
  occurred in the child process.
2016-10-31 15:32:19 -07:00
Todd Gamblin
1b7f9e24f4 Add spack flake8 command. (#2186)
- Ported old run-flake8-tests qa script to `spack flake8` command.
- New command does not modify files in the source tree
- Copies files to a temp stage modifies them there, and runs tests.
- Updated docs and `run-flake8-tests` script to call `spack flake8`.
2016-10-31 11:40:20 -07:00
Todd Gamblin
4be703cde0 Allow common args to be written the same way regular args are. 2016-10-30 23:55:00 -07:00
Todd Gamblin
8f21332fec Bugfix: '::' only worked on top-level key in config.
- generalized and fixed to work with any key in YAML file
- simplified schema writing, as well
- add more unit tests for the config system
- Rename test/yaml.py to test/spack_yaml.py
  - Add test/yaml.pyc to ignored pyc files.
2016-10-30 23:55:00 -07:00
Todd Gamblin
d155156e32 Documentation for configuration 2016-10-30 23:55:00 -07:00
Todd Gamblin
b962622975 Add spack arch --platform option 2016-10-30 23:55:00 -07:00
Todd Gamblin
db89b534bd travis.yml: Only build master and develop on push 2016-10-30 23:55:00 -07:00
Todd Gamblin
58e76721b9 Make provider_index use spack yaml for cleaner output. 2016-10-30 23:55:00 -07:00
Todd Gamblin
da760a66de source_cache, misc_cache, verify_ssl, checksum, & dirty in config.yaml
- Added new preferences to config.yaml:
  - source_cache
  - misc_cache
  - verify_ssl
  - checksum
  - dirty
2016-10-30 23:55:00 -07:00
Todd Gamblin
22b14e0f23 Add module_roots to config.yaml 2016-10-30 23:55:00 -07:00
Todd Gamblin
0da639298c Move temp directory configuration to config.yaml
- Moved temp finding logic to spack.stage
- Updated stage tests
- Added tests for new path substaitution of $user, $spack, $tempdir
2016-10-30 23:55:00 -07:00
Todd Gamblin
9347f86939 Rename install.yaml -> config.yaml, install_area -> "store"
- Added a schema for config.yaml
- Moved install tree configuration to config.yaml
- Moved etc/spack/install.yaml to etc/spack/defaults/config.yaml
- renamed install_area to "store", to use a term in common with guix/nix.
  - in `config.yaml` file, it's called the `install_tree` to be more
    intuitive to users.
  - `install_tree` might've worked in the code, but `install_tree` is
    already a global function in the spack namespace, from
    llnl.util.filesystem.
2016-10-30 23:55:00 -07:00
Benedikt Hegner
24901f7a38 add documentation for new option to set install area 2016-10-30 23:55:00 -07:00
Benedikt Hegner
c557e76565 refactor settings for install area and make them config options 2016-10-30 23:55:00 -07:00
Matt Belhorn
7ccf56a0b7 Removes cyclic dependency on spack.config. (#2121)
Merge #2030 added a cyclic dependency between the Cray platform needing
to read a `targets.yaml` config file and `config.py` needing to get the
platform names.

This commit removes the cyclic dependency in favor of the more general
config scheme. It also removes the now functionless `targets.yaml`
config file. This breaks 'frontend' targets on the Cray platform but
all architecture targets, including the frontend, that are provided by
CrayPE are added to the Platform anyway so users can be explicit about
the architecture targeted by the Cray compiler wrappers:

```
spack spec libelf arch=cray-CNL-frontend
```

becomes

```
spack spec libelf arch=cray-CNL-mc8         # on an XK7 or
spack spec libelf arch=cray-CNL-sandybridge # on an older XC30, etc..
```

The only way the 'frontend' target can be defined after this commit is
through target environment variables.
2016-10-30 21:02:27 -07:00
Barry Smith
a714377123 python: PYTHONHOME may not be the same as the prefix of the python executable (#2173)
On MacOS, brew installs /usr/local/bin/python but the Python prefix is not /usr/local/bin
Use the python command sys.exec to get the correct directory, instead of the ad hoc self.prefix
previously used

This was a bear to debug; been driving me nuts since I started using spack.
Since spack passes PYTHONHOME down to package builds in the environment
it was passing PYTHONHOME of /usr/local/bin to the PETSc build that uses Python so
the PETSc Python ./configure errored immediately with

ImportError: No module named site

since python could find no python modules. Todd Gamblin pointed out that my first try to fix
this was wrong since it assumed the spack python was the same python used to run spack. Elizabeth Fischer
suggested how to get it to work also with python3

Funded-by: IDEAS
Project: IDEAS/xSDK
Time:  7 hours
Thanks-to: Todd Gamblin, Elizabeth Fischer
2016-10-30 17:13:16 -07:00
Massimiliano Culpo
9989f8e267 module file support: major rework of docs (#2169)
* module file support: major rework of docs

* module file support: fixed issues found by @adamjstewart

- list or enumeration should not be indented
- use console instead of bash or csh in things that are not scripts
- other typos

* module file support: fixed other issues found by @adamjstewart

- tables should not be indented
- substitute lines with pyobject to import an entire function
- get help output running commands
- typos

* module file support: fixes according to review comments

- @citibeth moved `spack module loads` after `spack load`
- @glennpj tried to clarify installation table + changes to language
- @tgamblin Removed top level section and moved the whole thing into the reference manual

* module file support: moved directive before spack module loads
2016-10-30 12:41:41 -07:00
Massimiliano Culpo
4d35ac6a16 configuration file for modules : fixed enable keyword (#2176)
- enable keyword works again
- test/modules.py : proper clean-up after tests
2016-10-30 12:30:51 -07:00
Gregory Lee
dbd9f1c5a1 updated gtk and gobject dependences (#2126) 2016-10-30 11:50:36 -07:00
Barry Smith
ef2c42a889 Do not check directory layout for external packages (#2172)
External packages do not have an spec.yaml file so don't check for it.
Without this change any time a package depends on an external package
when the new package is installed you will get the error

Install prefix exists but contains no spec.yaml

This problem has also haunted me since I started using Spack since PETSc
depends on Python and I used an external python but fortunately it
was relatively easy to debug once I could reproduce it at will.

Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1 hour
2016-10-29 20:57:41 -07:00
Matthew Scott Krafczyk
c2d58d39dd Import dso_suffix from spack.build_environment in abi.py (#2174)
Fixes #1845
2016-10-29 16:47:06 -07:00
Adam J. Stewart
893b2e4f62 Update license directory for intel-paralel-studio (#2163) 2016-10-29 14:30:00 -07:00
scheibelp
23683c65de Use Spec.format for token substitution in modules (#1848)
This replaces a custom token-based substitution format with calls to
Spec.format in modules.py

This also resolves a couple issues:

- LmodModules set configuration globally instead of in its initializer
  which meant test-specific configuration was not applied
- Added support for setting hash_length=0 for LmodModules. This only
  affects the module filename and not the directory names for the
  hierarchy tokens in the path. This includes an additional unit test.
2016-10-29 13:56:34 -07:00
Joseph Ciurej
c82985cb5e Update and Clean Up the Visit and VTK Packages (#2167)
* Made some refactoring improvements to the 'visit' and 'vtk' packages.

* Added a small fix for the 'vtk' package when building with 'qt+webkit'.
2016-10-28 17:59:21 -07:00
Adam J. Stewart
58409a2eaf Fix rpath linking for NAG, add documentation on setup (#2142) 2016-10-27 15:28:09 -07:00
Adam J. Stewart
dd53ddb003 Add latest version of Intel Parallel Studio XE (#2151) 2016-10-27 12:58:31 -07:00
Elizabeth Fischer
12270b9dbf Remove support for deprecated package. See also #2085 and #2086 (#2090) 2016-10-26 21:53:08 -07:00
Barry Smith
eb36b2a622 Get Trilinos 12.6.2 to build with Intel compilers and spack (#2102)
Funded-by: IDEAS
Project: IDEAS/xSDK
Time:  2 hours
2016-10-26 21:52:29 -07:00
George Hartzell
bf08bd7076 Fix typo: _choiches -> _choices (#2127)
The breaks `spack create`.
2016-10-26 20:39:08 -07:00
George Hartzell
e652a32f05 typo: vlaues -> values (#2147) 2016-10-26 17:51:01 -07:00
Elizabeth Fischer
3895c974a0 Removed documentation on false paths as per #2083 (#2146)
Removed documentation on false paths as per #2083
2016-10-26 17:11:54 -07:00
Denis Davydov
9f54cea5c5 document recommended usage of system blas/lapack (#2081)
* document recommended usage of system blas/lapack

* update doc

* minor

* reword
2016-10-26 16:22:18 -07:00
Massimiliano Culpo
37dc719d13 ProcessError : now the exception is correctly pickled and passed across processes. (#2143) 2016-10-26 15:17:20 -07:00
Axel Huebl
0007877944 libSplash: Add 1.5.0 Release (#2137)
Add the latest release of libSplash, version 1.5.0.
2016-10-26 14:23:09 -07:00
Massimiliano Culpo
e73ab84680 spack install : added --log-format option (incorporates test-install command) (#2112)
* spack install : added --log-format option (incorporates test-install command)

fixes #1907

* qa : removed extra whitespace
2016-10-26 14:22:46 -07:00
Denis Davydov
46433b9eb3 require fortran for MPI providers to avoid delayed compiler errors (#1937)
* openmpi: require fortran for now

* mpich: requre fortran for now

* mvapich2: require fortran for now

* openmpi: flake8 fixes
2016-10-26 09:12:26 -07:00
Jim Galarowicz
92f17eeba7 Develop: Resolve issue 2070 with new depends_on clause in the openspeedshop package file. (#2136)
* Update the krell institute products to use the latest features of spack for building on cluster platforms.

* Address travis error messages and resubmit the pull request.

* Update the contents of openspeedshop package.py so it passes the flake8 tests.

* Fix flake8 error-whitespack issue in mrnet package.py file.

* Add updates based on spack reviewer feedback.

* More fixes based on comments from reviewers.  Switch using extend to using append, remove additional setting of PATH and LD_LIBRARY_PATH that should not be required due to RPATH.

* More review related changes.  Update MPIOption.append lines and take out xercesc references.

* Create a base options function for common openspeedshop base cmake options to reduce redundencies.

* Add libxml2+python depends on to get around issues with the libxml2 package file.
2016-10-26 08:37:02 -07:00
Denis Davydov
33fb7bbd1b add a unit test for conretization with develop version (#2064) 2016-10-26 01:49:52 -07:00
Denis Davydov
e65c9f6865 veclibfort: add new package (#2080)
* veclibfort: add new package

* veclibfort: add a small test
2016-10-26 01:49:06 -07:00
George Hartzell
89c1d361b2 Add package for ant (#2133)
Add a package for ant, a java build tool.
2016-10-25 23:57:27 -07:00
George Hartzell
37dede3163 Add package for maven (#2132)
Add a package that installed the pre-built maven distribution.

I've given up, for now, on building maven from source.  That processed
stumbled on two points before I gave up:

1. It downloaded several hundred .{pop,jar} files and I despaired of
   figuring out some way of mirroring and checksumming them; and

2. It exploded complaining about too many unacceptable license files,
   which seems odd in its own source tree.

Perhaps someone with more Java fu that I admit to can figure it out.
In the meantime, this is useful.
2016-10-25 23:56:31 -07:00
Denis Davydov
39772e4c4c filter system paths (#2083)
* add filter_system_paths()

* filter system paths in set_build_environment_variables()

* two function: lib/inc + bin

* reverse order in bin

* fix order

* minor

* improvements of the code

* more cleanup

* alternative solution for filter_bins

* fiddle base alalazo's approach

* minor

* minor
2016-10-25 11:25:13 -07:00
Barry Smith
3de26ff3d7 openblas: Fixes to get OpenBLAS to install with Intel compilers (#2101)
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: 1 hour
2016-10-25 11:12:22 -07:00
Stephen Herbein
14e3a541e1 Add latest versions of Flux prerequisites (#2108)
* libsodium: add latest versions, fix old versions

older versions of libsodium were added to an "old" subdirectory

* zeromq: add 4.1.4

prerequiste for the latest develop version of flux
2016-10-25 11:11:23 -07:00
Mayeul d'Avezac
65c250699f pkg-config variant to use internal glib (#2104)
Pkg-config depends on glib which depends on pkg-config. As a result,
pkg-config used to build glib internally. However, this fails on Mac.
Building pkg-config with an internal glib is now a variant, turned on
by default, and required to build glib.
2016-10-25 11:08:32 -07:00
Adam J. Stewart
a250792202 Find compatibility versions of GCC (#2099) 2016-10-25 11:07:49 -07:00
Adam J. Stewart
08300ccffb Allow newer versions of GCC to compile older versions of GCC (#2107)
* Add patch allowing GCC 6 to compile GCC 5

* Expand patch version range
2016-10-25 11:06:33 -07:00
George Hartzell
14ed97f219 Update cask to v0.8.1 (#2125) 2016-10-25 10:58:50 -07:00
Adam J. Stewart
eeded917cd Rename xpyb to py-xpyb (#2120) 2016-10-25 10:10:16 -07:00
Massimiliano Culpo
7a575d2f4b multimethod.py : calls functools.wraps before returning the correct method fixes #2118 (#2119) 2016-10-25 08:30:40 -07:00
Mayeul d'Avezac
1928d83259 Tells boost explictly about python libraries and headers (#2106)
* Tells boost explictly about libraries and headers

Ideally, bjam would determine the libraries and headers from the
executable. But it doesn't. This rigs a best guess for python libraries
and headers.

* Move glob import to top of file

* variable name change: alllibs --> all_libs

* Use dso suffix rather than hard-coded string

* Use only MAJOR.MINOR when setting up python in bjam
2016-10-25 08:10:52 -07:00
Massimiliano Culpo
b27e78cd78 spack setup : fixed regression after #1186 (#2117) 2016-10-25 07:53:11 -07:00
Denis Davydov
d7b624457f gmp: fix a bug (#2114) 2016-10-25 07:08:52 -07:00
Todd Gamblin
0f6a5cd385 Merge pull request #1186 from epfl-scitas/features/install_with_phases
do_install : allow for an arbitrary number of phases
2016-10-24 17:13:49 -07:00
Todd Gamblin
c1ad4bde28 Rename EditableMakefile to MakefilePackage 2016-10-24 16:41:20 -07:00
Joseph Ciurej
7dd14870ce Bug Fix : Apply Compiler Flags Specified by Manual Compiler Configuration (#1532)
* Fixed a bug causing config-specified compiler flags to be ignored.
Updated the compiler config so all flags are in a separate section.

* Updated the documentation for the `compilers.yaml` file spec.

* Implemented basic testing for the 'flags' section of compiler config.

* Fixed a few minor problems with the manual compiler config documentation.
2016-10-24 14:37:03 -07:00
George Hartzell
e35c023c61 Typo: becuase -> because (#2110) 2016-10-24 14:28:04 -07:00
Barry Smith
453ad8df9d Get netlib-lapack to compile with Intel and add deprecated routines (#2103)
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: .4 hours
2016-10-24 14:25:59 -07:00
Mayeul d'Avezac
509bbd7067 Adds new versions to eigen (#2105)
* Adds new versions to eigen

* Reorder versions from oldest to newest
2016-10-24 11:09:17 -07:00
Elizabeth Fischer
4f0b7cd2c2 Small fix to docs. (#2092) 2016-10-24 11:09:02 -07:00
Massimiliano Culpo
8af9881e9b spack test : exits after ctrl+c fixes #2029 (#2082) 2016-10-24 11:07:08 -07:00
alalazo
7bd735416d package.py : moved each specialized package to its own module file 2016-10-23 22:38:19 +02:00
alalazo
e0f3188970 spack setup : improved error message 2016-10-23 19:10:07 +02:00
alalazo
fa3f07c092 CMakePackage, AutotoolsPackage : added default behavior on check 2016-10-23 19:02:46 +02:00
alalazo
ebbbed166e Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases_rebase 2016-10-23 13:35:12 +02:00
alalazo
284ed13fa6 spack.error : fixed pickling and representation to permit to pass FetchErrors 2016-10-23 13:34:29 +02:00
Barry Smith
9d3d492214 mumps: Add support for Intel compiler and insure both lapack and blas… (#2076)
* mumps: Add support for Intel compiler and insure both lapack and blas libraries are passed to the examples

Likely it was not discoverged before that the examples require both lapack and blas libraries because it
was tested with Openblas which is one large library containing everything.
Funded-by: IDEAS
Project: IDEAS/xSDK
Time: .3 hours

* flake8 fix.
2016-10-22 15:57:44 -07:00
Joseph Ciurej
9f3a46c6c1 Add Package : OpenSceneGraph (#2075)
* Created the initial version of the 'OpenSceneGraph' package.

* Added 'zlib' as a dependency and linked it during the build step.

* Fixed a few minor PEP8 style violations in the 'OpenSceneGraph' package.

* Added cmake as a build dependency and improved the build procedure.

* Made a few important argument updates to improve package compatibility.

* Fixed up a few remaining style issues in the 'openscenegraph' package.

* Added a description for the 'openscenegraph' package.

* Fixed a bug that was causing some 'openscenegraph@3.2.3%gcc' installs to fail.

* Fixed a number of small issues with the 'openscenegraph' package.

* Removed a number of superfluous flags from the 'openscenegraph' install.
2016-10-22 15:14:29 -07:00
Jean-Paul Pelteret
7565f9dcdb Add new package "gource" and dependencies "glew, sdl, sdl-image". (#2084) 2016-10-22 14:28:59 -07:00
alalazo
bdf4832269 spack build, spack configure : added commands 2016-10-22 17:08:52 +02:00
alalazo
484aaf50cc CMakePackage : changed method name from wdir to build_directory 2016-10-22 14:54:26 +02:00
alalazo
8091a3d6cb do_install : use build_system_class attribute instead of type(self).__base__ 2016-10-22 10:48:16 +02:00
alalazo
c84123dce5 spack info : shows the build-system class used 2016-10-22 10:39:33 +02:00
George Hartzell
cfbacdb41e Updated the texlive digest value (#2073)
The texlive tarball, install-tl-unx.tar.gz is unversioned and changes
periodically.  When it does, the digest needs to change too.  This does
that.
2016-10-21 16:57:42 -07:00
Matthew LeGendre
859d296105 Don't clear LD_LIBRARY_PATH and friends from compiler wrappers (#2074)
* Don't clear LD_LIBRARY_PATH and friends from compiler wrappers

* remove debugging print
2016-10-21 16:25:12 -07:00
alalazo
482f60d1d3 packages : moved decorators into AutotoolsPackage and CMakePackage 2016-10-22 01:03:07 +02:00
alalazo
012da99644 spack create : fixed typo 2016-10-22 00:10:37 +02:00
alalazo
e8dafd1090 Removed space before colon in FIXME:, added one line description of guess classes 2016-10-21 23:54:11 +02:00
Joseph Ciurej
6464d6682c Update Package : Qt (Add 'WebKit' Support) (#1455)
* Added the '+webkit' variant to the 'qt' package.

* Made 'qmake' an available executable to 'qt' depdendents.
2016-10-21 14:13:56 -07:00
Matthew LeGendre
79c20a7edd Merge pull request #2071 from mplegendre/bug_concretize_external_virtuals
Bug concretize external virtuals
2016-10-21 13:47:25 -07:00
alalazo
715e029361 spack info : added phases 2016-10-21 22:44:41 +02:00
Matthew LeGendre
5ff08386af Remove unnecessary blackslash for flake8 2016-10-21 13:17:23 -07:00
alalazo
fd2b72fd0f qa : flake8 issues 2016-10-21 22:15:29 +02:00
alalazo
04821c7be8 spack create : now creates packages that are derived from AutotoolsPackage and CMakePackage 2016-10-21 22:12:21 +02:00
Matthew LeGendre
73b46a92bc Fix concretize bug where provider sort couldn't handle version ranges 2016-10-21 11:59:41 -07:00
Matthew LeGendre
9f36ae4e20 Extend concretization test to excercise bug in concretize's provider sorting 2016-10-21 11:57:57 -07:00
Adam J. Stewart
52158d9316 Add new Version property to handle joined version numbers (#2062)
* Add new version property to handle joined version numbers

* Add unit test for new joined property

* Add documentation on version.up_to() and version.joined
2016-10-21 07:49:36 -07:00
Adam J. Stewart
c513fd72fb Add latest version of Armadillo (#2061) 2016-10-21 07:39:48 -07:00
Massimiliano Culpo
aa86432ec6 patch directive : fixed retrieval from urls ( fixes #1584 ) (#2039)
* patch directive : fixed retrieval from urls fixes #1584

 - add support for 'gz' archives
 - fixed bugs with URL patches
 - updated nwchem

* patch directive : added checksum to UrlPatch

 - refactored classes in patch.py
 - updated nwchem

* patch directive : added caching
2016-10-21 07:32:52 -07:00
alalazo
2251428f0a CMakePackage : changed list() to [] 2016-10-21 13:01:55 +02:00
alalazo
5ce3071143 do_install : removed install_self from the list of arguments (leftover after rebasing #1956) 2016-10-21 12:51:38 +02:00
alalazo
213e3f0860 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases_rebase
Conflicts:
	lib/spack/spack/cmd/install.py
	lib/spack/spack/cmd/setup.py
2016-10-21 12:38:43 +02:00
Matthew LeGendre
8de143a994 Fixes needed to build gcc on Linux/ppc64le (#2057)
* Fixes needed to build gcc on Linux/ppc64le

* flake8 fix.
2016-10-19 23:29:59 -07:00
Todd Gamblin
4b5281bfe6 Update mail map. So many email aliases. 2016-10-19 22:47:39 -07:00
George Hartzell
027632cbac Fix cdd package definition, dotted is a property (#2054)
Things that accessed the cdd package, such as `spack info cdd run
tripped over a buglet in the *cdd* package, causing them to exit with
something like this:

```
Caused by:
TypeError: 'str' object is not callable
  File "/rss/spack/lib/spack/spack/repository.py", line 584, in get
    self._instances[key] = package_class(copy)
  File "/rss/spack/lib/spack/spack/package.py", line 398, in __init__
    f = fs.for_package_version(self, self.version)
  File "/rss/spack/lib/spack/spack/fetch_strategy.py", line 852, in for_package_version
    attrs['url'] = pkg.url_for_version(version)
  File "/rss/spack/var/spack/repos/builtin/packages/cdd/package.py", line 40, in url_for_version
    str(version.dotted()).replace('.', ''))
```

@tgamblin pointed out that `dotted` is a property, not a functin call
and that the parentheses are therefor inappropriate.

This deletes the parentheses.  `spack info cdd` now works for me.
2016-10-19 12:28:26 -07:00
George Hartzell
dbbef6ba23 Add package for htop (#2051)
Add package for htop, an interactive text-mode process viewer for
Unix systems.  Think top, with pretty colors and dyanmic bar graphs.

More info [here](https://github.com/hishamhm/htop).
2016-10-19 10:33:49 -07:00
scheibelp
8111a4bb9d Don't cache truncated dag hash for spec (#2048)
If Spec.dag_hash was called for the first time with a 'length'
specified, the cached hash was truncated. This ensures that the
full hash is cached.
2016-10-18 22:34:46 -07:00
Massimiliano Culpo
0a3cc5e8e3 Package.do_install : removed install_self from arguments (#1956)
* Removes the extra argument from Package.do_install while maintaining the changes in behavior pulled in #1603

* install : removed -i and -d shorthands (breaks backward compatibility)

* Change ':' to ','
2016-10-18 14:25:07 -07:00
Denis Davydov
0e59ade030 petsc: minor fixes... (#2036)
* petsc: require boost for :3.5 only

* petsc: turn off download for c2html and hwloc
2016-10-18 08:09:18 -07:00
Eric
306eea5e59 Support for bazel (#2023)
* Add package bazel

* Add support for bazel-based builds
2016-10-18 07:46:42 -07:00
Denis Davydov
4c2af4f888 superlu-dist: add 5.1.0 and 5.1.1 (#2038) 2016-10-18 07:45:48 -07:00
Denis Davydov
dd28f5b5eb mumps: add 5.0.2 (#2041) 2016-10-18 07:38:30 -07:00
Denis Davydov
5f20c43315 hypre: add 2.11.1 (#2040) 2016-10-18 07:38:15 -07:00
Jim Galarowicz
87adcfeea8 Update the Krell Institute products to use the latest features of spa… (#1984)
* Update the krell institute products to use the latest features of spack for building on cluster platforms.

* Address travis error messages and resubmit the pull request.

* Update the contents of openspeedshop package.py so it passes the flake8 tests.

* Fix flake8 error-whitespack issue in mrnet package.py file.

* Add updates based on spack reviewer feedback.

* More fixes based on comments from reviewers.  Switch using extend to using append, remove additional setting of PATH and LD_LIBRARY_PATH that should not be required due to RPATH.

* More review related changes.  Update MPIOption.append lines and take out xercesc references.

* Create a base options function for common openspeedshop base cmake options to reduce redundencies.
2016-10-17 01:18:30 -07:00
Pramod Kumbhar
b5e20018b5 fix download url for paraver (#2033)
* fix download url for paraver

* added note to remove older version
2016-10-17 01:17:01 -07:00
Adam J. Stewart
d891143a08 Ignore GPG/PGP signatures/checksums when finding available downloads (#2028)
* Ignore GPG/PGP signatures/checksums when finding available downloads

* Remove duplicated basename
2016-10-16 14:46:29 -07:00
Todd Gamblin
193f68083f Platform-specific config scopes (#2030)
* Add platform-specific configuration scopes.

* Update `spack config` to use the new scope arguments.
2016-10-15 17:00:11 -07:00
Pramod Kumbhar
e93c9060f5 fix sqlite download url (#2031) 2016-10-15 16:31:23 -07:00
Massimiliano Culpo
8d5961ecaf spack purge : updated documentation fixes #1938 (#2025) 2016-10-15 15:51:49 -07:00
Massimiliano Culpo
9726574846 travis : unit tests will run with and without libyaml (#2024)
* travis : unit tests will run with and without libyaml

* travis : fixed package that are installed
2016-10-15 14:21:50 -07:00
Elizabeth Fischer
3dbde09747 Workaround for illegal package merging in py-matplotlib/py-basemap (#1964)
* Workaround for illegal package merging in py-matplotlib/py-basemap

# Conflicts:
#	var/spack/repos/builtin/packages/py-basemap/package.py

* flake8

* flake8

* Be conservative: only apply the namespace package fix for Python >= 3.5.2

* flake8

* Bug fix
2016-10-14 16:09:54 -07:00
Adam J. Stewart
fbe9142b7e Fix list_url for fish shell (#2022) 2016-10-14 12:46:59 -07:00
John Finigan
4be224238e py-macs2: New package (#2011)
* py-macs2: New package

* py-macs2: add py-numpy@1.6: dependency
2016-10-14 12:00:56 -07:00
Kelly Thompson
e359a7ca59 Add missing 'import os'. (#2012) 2016-10-14 12:00:43 -07:00
Denis Davydov
48f23aadbe dealii: remove extra test which are now mostly integrated in make test (#2013) 2016-10-14 09:49:31 -07:00
Adam J. Stewart
78d3c7e2a2 Major updates to Contribution Guide (#1968)
* Major updates to Contribution Guide

* Grammar changes

* Fix missing/extra backticks

* Rewording, links, and tips added
2016-10-14 09:16:13 -07:00
Denis Davydov
0d89e5e32b Package/petsc slepc new versions (#2019)
* petsc: add 3.7.4

* slepc: add 3.7.3
2016-10-14 08:25:22 -07:00
Todd Gamblin
d861a52ebe Use cYAML if it is available in Python. (#2010) 2016-10-12 18:25:18 -07:00
Elizabeth Fischer
b27f4e3aeb py-matplotlib: Add variants for optional dependencies. (#2008) 2016-10-12 14:55:38 -07:00
Elizabeth Fischer
67ef6df4db Made optional CGAL dependencies optional. (#2006)
* Made optional CGAL dependencies optional.

* cgal: Added note explaining that the CORE library is not the same as core CGAL functionality.

* Bug fix and flake8

* flake8
2016-10-12 13:02:06 -07:00
Ben Boeckel
b369be65d7 Mock up Xcode devdir to make Qt5 work on Mac OS X (#1832)
* build_environment: allow compilers to set up an environment

* clang: mock up a toolchain directory for xcode

Some projects ignore CC and CXX flags and instead use xcode to find the
toolchain. Clang on Apple should set up the environment properly.
Arguably, every compiler could do this on Apple, but let's see how this
works out just for AppleClang for now.

The Documentation directory is ~1.7G and the excluded platforms add up
to about 7G. Ignoring swift saves another 500M. The resulting Xcode.app
copy is in the 2G range.

* compiler: set member variables early

This is required so that later methods can query things such as the
version of the compiler.

* compiler: support finding the real path of the compiler

On Apple, the /usr/bin compilers are actually wrapping tools themselves
which query xcrun for the currently selected Xcode installation. Pierce
this veil and get the real, full path the to underlying compilers
instead.

* icu4c: install with rpath

On macOS, icu installs with a library ID of the library name. Enabling
rpath makes its ID its full installed path which lets Qt5 link against
it successfully.

* qt: no -no-gtkstyle flag on Qt5 on macOS
2016-10-12 09:58:12 -07:00
Massimiliano Culpo
1925db5c77 spack list : updated documentation (#2004)
* spack list : updated documentation

* spack list : removed space before ':'
2016-10-12 09:43:28 -07:00
Glenn Johnson
5b070418e7 Documentation for modules configuration options (#1685)
This PR add documentation for the `suffixes` and `hash_length` options
for modules.yaml.

This resolves #1416.
2016-10-11 23:14:42 -07:00
Todd Gamblin
488e1bab2c Make insecure option work with curl AND git. (#1786) 2016-10-11 23:13:40 -07:00
Elizabeth Fischer
a6f85f51d0 patchelf: Add version (#1540)
* patchelf: Add version

* flake8

* Removed unnecessary url_for_version() function.

* Restored old URL
2016-10-11 23:11:25 -07:00
Denis Davydov
025b914079 oce: fix for Sierra (#1934) 2016-10-11 23:10:51 -07:00
Massimiliano Culpo
eb17895630 environment modifications : permit to pass parameters along with file to be sourced (#1626) 2016-10-11 22:55:14 -07:00
gmatteo
949766d92e Abinit: Added package(s) (#1995)
* First version of Abinit package

* Ignore *.swp files

* Add libxc, etsf_io packages

* AtomPaw package

* Make Abinit depend on mpi@2: and external version of libxc, netcdf, hdf5, etsf_io

* etsf_io: install Fortran modules in prefix.include

* Remove etsf_io from abinit requirements

* Add libxc2.2.1 (required by Abinit and atompaw)

* Cleanup

* Run make check

* Cleanup

* Use ld_flags instead of hard-coded libs, fix pep8, add copyright

* Put scalapack before lapackblas
2016-10-11 15:22:46 -07:00
Joseph Ciurej
37d125b890 Update Package : ExodusII (#1504)
* Added support for the 'maxdims' and 'maxvars' flags for 'NetCDF'.

* Added the '+mpi' variant and improved dependencies for 'exodusii'.
Improved the 'exodusii' package so that it's less reliant on patches.

* Added better type checking to variant values in the 'netcdf' package.

* Corrected the required CMake version for the 'exodusii' package.

* Fixed the dependencies of the '+mpi' variant of the 'exodusii' package.
2016-10-11 14:53:02 -07:00
Adam J. Stewart
6dc8bbcb3a Package all of Xorg/X11/XCB (#1740)
* Updates to Mesa and other Xorg packages

* Add packages for all Xorg Protocol extensions

* Add packages for first half of Xorg libraries

* Add packages for remaining Xorg libraries

* Add packages for all Xorg utilities

* Add packages for Xorg documentation tools

* Add build deps to Xorg protocol headers

* Add packages for XCB

* Add build deps to Xorg libraries

* Add build deps to Xorg utilities

* Add packages for Xorg fonts and font-related utilities

* Change font deptype from build to default

I wasn't sure which deptype was appropriate at first since none of
the packages are actually linked together. I initially chose the
build deptype for this reason. However, the font packages don't
install into their own prefix. They install into font-config. If
font-config is a build dependency, that means you can uninstall it
without uninstalling the font packages, which wouldn't make sense
since they install into font-config. So I switched them back to
the default deptype.

* Minor formatting changes to ncview

* Add half-way done xorg-server package

* Add packages for Xorg test suites, not yet tested!

* Add packages for Xorg data

* Add first quarter of Xorg apps

* Add more packages for Xorg apps

* Add dependencies to mesa

* Remove comments from mesa package

* Flake8

* Add more packages for Xorg apps

* Add more packages for Xorg apps

* Add more packages for Xorg apps

* Add more packages for Xorg apps

* Add more packages for Xorg apps

* Add package for Sublime Text

* Add packages for remaining Xorg apps

* Revisit testing packages, add missing dependencies

* Add dependencies, clean up FIXMEs
2016-10-11 09:42:20 -07:00
alalazo
dd56784d28 qa : flake8 issues 2016-10-11 16:44:18 +02:00
alalazo
c7a5dd36e2 qa : flake8 issues 2016-10-11 16:30:06 +02:00
alalazo
ab995df777 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases_rebase
Conflicts:
	lib/spack/spack/build_environment.py
	lib/spack/spack/cmd/install.py
	lib/spack/spack/cmd/setup.py
	lib/spack/spack/package.py
	var/spack/repos/builtin/packages/gmp/package.py
	var/spack/repos/builtin/packages/hdf5/package.py
2016-10-11 16:28:08 +02:00
Mario Melara
b42dbc01fe Use python platform.system for system ID (#1499)
* Rebase and merging using platform.system

Rebasing and merging using platform.system instead of uname -a.

* Add missing import platform statement

* Remove subprocess import

Remove ununsed import subprocess to make changes flak8 compliant
2016-10-11 07:04:29 -07:00
Denis Davydov
4d939802ae hypre: fix blas/lapack for MKL (#1993) 2016-10-11 06:48:16 -07:00
Todd Gamblin
1dff309a3f Merge pull request #1989 from KineticTheory/cray_compile_wrappers
On Cray machines, use the Cray compile wrappers instead of MPI wrappers.
2016-10-11 06:46:29 -07:00
Todd Gamblin
f9d8325cc2 Merge pull request #1562 from LLNL/features/db-locking
Finer-grained locking
2016-10-11 02:35:46 -07:00
Adam J. Stewart
aa079dbdf1 Add variant to MPICH to enable ROMIO support (#1944) 2016-10-11 02:16:01 -07:00
Denis Davydov
49aed3969c tethex: add a new package (#1991) 2016-10-11 02:13:25 -07:00
Todd Gamblin
9c5c8b22c8 Fix bug in spack debug create-db-tarball
- Fix a bug handling '/' characters in branch names.

- Make tarballs use a descriptive name for the top-level directory, not
  just `opt`.
2016-10-11 01:55:33 -07:00
Todd Gamblin
f0edfa6edf Roll my my own bit_length function for Python 2.6 compatibility. 2016-10-11 01:55:33 -07:00
Todd Gamblin
222f551c37 Use a single lock file for stages and a single file for prefixes.
- Locks now use fcntl range locks on a single file.

How it works for prefixes:

- Each lock is a byte range lock on the nth byte of a file.

- The lock file is ``spack.installed_db.prefix_lock`` -- the DB tells us
  what to call it and it lives alongside the install DB.  n is the
  sys.maxsize-bit prefix of the DAG hash.

For stages, we take the sha1 of the stage name and use that to select a
byte to lock.

With 100 concurrent builds, the likelihood of a false lock collision is
~5.36e-16, so this scheme should retain more than sufficient paralellism
(with no chance of false negatives), and get us reader-writer lock
semantics with a single file, so no need to clean up lots of lock files.
2016-10-11 01:55:33 -07:00
Todd Gamblin
080a78664e Add tests for locks with byte ranges. 2016-10-11 01:55:33 -07:00
Todd Gamblin
3d8d8d3644 Fix bug with lock upgrades.
- Closing and re-opening to upgrade to write will lose all existing read
  locks on this process.
  - If we didn't allow ranges, sleeping until no reads would work.
  - With ranges, we may never be able to take some legal write locks
    without invalidating all reads. e.g., if a write lock has distinct
    range from all reads, it should just work, but we'd have to close the
    file, reopen, and re-take reads.

- It's easier to just check whether the file is writable in the first
  place and open for writing from the start.

- Lock now only opens files read-only if we *can't* write them.
2016-10-11 01:55:33 -07:00
Todd Gamblin
a024c6df95 Add base32_prefix_bits function to get prefix of DAG hash as an int. 2016-10-11 01:55:32 -07:00
Todd Gamblin
da6bbfb2d4 Add byte-range parameters to llnl.util.lock 2016-10-11 01:55:32 -07:00
Todd Gamblin
ea10e3bab0 Remove need to touch lock files before using.
- Locks will now create enclosing directories and touch the lock file
  automatically.
2016-10-11 01:55:32 -07:00
Todd Gamblin
907fe912ef Make llnl.util.lock use file objects instead of low-level OS fds.
- Make sure we write, truncate, flush when setting PID and owning host in
  the file.
2016-10-11 01:55:32 -07:00
alalazo
f229290880 stage : try to remove dead links only of folder that you actually care about
A use case where the previous approach was failing is :

 - more than one spack process running on compute nodes
 - stage directory is a link to fast LOCAL storage

 In this case the processes may try to unlink something that is "dead" for them, but actually used by other processes on storage they cannot see.
2016-10-11 01:55:32 -07:00
alalazo
f47dcdc47a lockfiles : creates directory for locks if not already present 2016-10-11 01:55:32 -07:00
alalazo
a3fc492d45 diy : removed global write lock on the db 2016-10-11 01:55:32 -07:00
alalazo
74fb1029fa uninstall : removed global lock 2016-10-11 01:55:25 -07:00
alalazo
b3a6e307b9 unit tests : fixed failing tests 2016-10-11 01:38:27 -07:00
alalazo
34fe51a4aa install : finer graned locking for install command 2016-10-11 01:38:27 -07:00
Adam J. Stewart
5988b3a222 More specific dependency versions, wrap make check (#1962) 2016-10-11 01:36:40 -07:00
Sergey Kosukhin
7fd639d6fc Update libjpeg-turbo: added new version and removed redundant dependency. (#1897) 2016-10-11 01:32:05 -07:00
James Wynne III
bd61a36587 Fixed set operation from undefined += to a union (#1963)
Fixed flake8 issues
2016-10-11 01:30:11 -07:00
Massimiliano Culpo
b7a612dcdf spack list : merged package-list into list (#1932)
* spack list : merged package-list into the command

* list : removed option for case sensitivity
2016-10-11 01:22:53 -07:00
Denis Davydov
6c250ab486 pango: add missing dependency (#1958) 2016-10-11 01:19:44 -07:00
Denis Davydov
907546b55e libcerf: fix for modern clang (#1959) 2016-10-11 01:19:12 -07:00
scheibelp
9e7f53a35a [WIP] Use boost system layout by default (#1955)
Use boost system layout by default
2016-10-11 01:17:26 -07:00
Erik Schnetter
f555b8110d Charm++: Ignore compiler warnings while configuring (#1981) 2016-10-11 00:45:01 -07:00
Kelly Thompson
ff1108712c Make CMake-based builds more verbose by default. (#1988) 2016-10-11 00:43:36 -07:00
Kelly Thompson
1891ce3545 Trilinos: Use more flexible option for locating the BLAS library directory. (#1987)
+ This change fixes a problem that manifests when trilinos is built against a
  MKL installation defined as an external package. In this scenario, the MKL
  libraries are found one directory deeper than for the case where spack
  provides MKL. The extra directory is a platform name like 'intel64'.
+ The changes in this PR were recommended by contributor @davydden. I
  implemented and tested with intel@16.0.3. These changes fix the issue I
  reported. I did not attempt building trilinos against other BLAS
  implementations.
+ fixes #1923
2016-10-11 00:42:59 -07:00
Massimiliano Culpo
b1a2728af6 uninstall : permits to uninstall all installed software fixes #1477 (#1973) 2016-10-11 00:42:31 -07:00
Massimiliano Culpo
c8bf8a5e6e md5 : normalizes input before computing the md5 fixes #1508 (#1977)
Bottomline :

- fetcher change the current working directory
- relative paths were resolved differently depending on the prder f evaluation
2016-10-11 00:37:29 -07:00
Pramod Kumbhar
afd5d6b5cd hpx5 version update (#1967) 2016-10-11 00:36:31 -07:00
Geoffrey Oxberry
9a05ffea27 Mfem 3.2 (#1202)
* mfem: add tarball extension

Add tarball extension as a result of a feature added in PR#1926, which
fixes earlier issues in this PR (PR#1202). Prior to adding this feature,
Spack would not autodetect the extension of the tarball downloaded from
the redirected, shorted Google URL, requiring a messy hack. This hack
worked for mfem version 3.1, but led to errors when adding mfem version
3.2 because the files downloaded from Google did not contain the package
name, version number, or extension. Adding the extension enables Spack
to rename the tarball downloaded from Google to a sensible name that is
compatible with its filename parsing algorithms so that Spack "does the
right thing" (detects that the file is a GZipped tarball, decompresses
it, runs GNU Make) in fetching and staging the package.

* mfem: add linkage to KLU & BTF

Add linkage to the KLU & BTF solvers, which are now enabled in MFEM for
versions 3.2 and later.

* mfem: Add superlu-dist variant

Add linkage to SuperLU_DIST, which is a new linear solver interface for
MFEM versions 3.2 and later.

* mfem: add netcdf variant for cubit mesh support

Add NetCDF variant for MFEM versions 3.2 and later; installing the
NetCDF interfaces enables CUBIT mesh support.
2016-10-11 00:33:26 -07:00
Kelly (KT) Thompson
3553c8b9e9 On Cray machines, use the Cray compile wrappers instead of MPI wrappers.
+ Cray compile wrappers are MPI wrappers.
+ Packages that need to be compiled with MPI compile wrappers normally use
  'mpicc', 'mpic++' and 'mpif90' provided by the MPI vendor. However, when using
  cray-mpich as the MPI vendor, the compile wrappers 'CC', 'cc' and 'ftn' must
  be used.
+ In this scenario, the mpich package is hijacked by specifying cray-mpich as an
  external package under the 'mpich:' section of packages.yaml. For example:

  packages:
    mpich:
      modules:
        mpich@7.4.2%intel@16.0.3 arch=cray-CNL-haswell: cray-mpich/7.4.2
      buildable: False
    all:
      providers:
        mpi: [mpich]

+ This change allows packages like parmetis to be built using the Cray compile
  wrappers. For example: 'spack install parmetis%intel@16.0.3 ^mpich@7.4.2 os=CNL'
+ This commit relies on the existence of the environment variable CRAYPE_VERSION
  to determine if the current machine is running a Cray environment. This check is
  insufficient, but I'm not sure how to improve this logic.
+ Fixes #1827
2016-10-10 19:10:26 -06:00
Kelly Thompson
29fc9cd22c Update package to use MPI compile wrappers as specified in MPI package. (#1985)
+ Previouly, these strings were hard coded to 'mpicc', 'mpic++', and 'mpifort'.
2016-10-10 15:33:00 -07:00
Denis Davydov
c2ca8693e9 fix blas-lapack in scipy and numpy (#1949)
* fix blas-lapack in scipy and numpy

* py-numpy: do not set rpath on macOS

* py-scipy: do not set Blas/Lapack. This appears to be picked up from py-numpy

* py-numpy: don't write rpath= in Sierra only

* py-numpy: add a link to build notes
2016-10-10 12:38:44 -07:00
Erik Schnetter
377ac68690 Correct Charm++ install procedure (#1957)
Charm++ only creates symbolic links instead of copying files. Correct this.
2016-10-10 09:13:20 -07:00
Jean-Paul Pelteret
876c26f658 Add documentation for standard python repositories. (#1970)
Fixes #1939
2016-10-07 22:46:22 -07:00
Jean-Paul Pelteret
d3daa829f0 Added symengine and associated packages (#1885)
Symengine and associated packages
2016-10-07 22:45:24 -07:00
Isuru Fernando
ccf530ba5e Check for -r in ccld mode too (#1972) 2016-10-07 22:44:37 -07:00
Massimiliano Culpo
efae58a4ef fixes #858 (#1961)
Fix spack uninstall -f
2016-10-07 11:30:10 -07:00
Todd Gamblin
dbc864c9db Restore default RPATH settings but allow packages to limit to immediate deps. (#1954)
- Some packages (netcdf) NEED RPATHs for transitive deps.
- Others (dealii) will exceed OS limits when the DAG is too large.
2016-10-06 15:57:23 -07:00
Denis Davydov
9683e0df07 atlas: add 3.10.3 (#1952) 2016-10-06 15:23:18 -07:00
Joseph Ciurej
82fcc5e1de Feature Proposal : Make All Python Extensions User Configuration Independent (#1435)
* Updated all Python extension packages to use 'setup_py' on install.

* Fixed a few minor style issues with the updated Python packages.
2016-10-06 14:43:49 -07:00
Adam J. Stewart
415ddeecf8 Fix bugs preventing readthedocs from rebuilding the documentation (#1945) 2016-10-06 12:50:49 -07:00
Sergey Kosukhin
ebef9628a3 Update gmp: fixed an issue with intel compiler. (#1898) 2016-10-06 12:49:03 -07:00
Jay
6e9353f1a8 Updated nettle to have m4 as an immediate dependency (#1946)
* Updated nettle to have m4 as an immediate dependency to match new PATH
construction logic which only includes immediate dependencies.

* Update package.py
2016-10-06 11:50:50 -07:00
Elizabeth Fischer
98f8f40896 [Bug Fix (and docs too)] : Do not select @develop version by default (#1933)
* This fixes a bug in concretization.  Before the recent change to the
algorithm, the intent was that the @develop version, although
"greater" than numberic versions, is never preferred BY DEFAULT over
numeric versions.

To test this... suppose you have a package with no `preferred=True` in
it, and nothing in `packages.yaml`, but with a `develop` version.  For
the sake of this example, I've hacked my `python/package.py` to work
this way.

Without bugfix (WRONG: user should never get develop by default):

```
  python@develop%clang@7.3.0-apple~tk~ucs4 arch=darwin-elcapitan-x86_64
      ...
```

With bugfix (RIGHT: largest numeric version selected):

```
  python@3.5.2%clang@7.3.0-apple~tk~ucs4 arch=darwin-elcapitan-x86_64
      ...
```

* Documented version selection in concretization algo.

* Fix typos

* flake8
2016-10-06 09:08:15 -07:00
Denis Davydov
2ccb3d5531 add contribution guide focused on Git and PRs (#1664) 2016-10-06 07:45:47 -07:00
Adam J. Stewart
83a074eea6 Fix various documentation bugs (#1678)
* Fix various documentation bugs

* Keep long option names, but don't include in Command Index

* Use long option name

* Explicitly designate sections to be listed in the Command Index

* Consistent menu bar titles
2016-10-06 02:49:44 -07:00
James Wynne III
7dc11472bf Sqlite ppc64le configure build guess fix (#1684)
* Added check for ppc64le because configure cant guess the build type for rhel on ppc64le

Expand/clarify description of dependency types

Refactored getting the arch so that its less verbose

* Fixed flake8 issues
2016-10-06 02:48:05 -07:00
Sergey Kosukhin
92ca6d6423 Update pixman: mmx is disabled only for MacOS. (#1896) 2016-10-06 02:43:34 -07:00
Sergey Kosukhin
4cce23ea89 Update libtiff: updated homepage and fetch urls. (#1895)
* Update libtiff: updated homepage and fetch urls.

* Update libtiff: new version 4.0.6.
2016-10-06 02:43:23 -07:00
Matt Belhorn
6b98e86056 Fixes bug closing Executable file io-streams (#1890)
Input/output/error streams not directed to None or 'str' were not being closed
because `close()` method was being called on the argument value (a string type)
instead of the open file descriptor object.
2016-10-06 02:41:28 -07:00
Elizabeth Fischer
3de3664671 Fix fetch() method. Was being called with "wrong" arguments, raising exception. (#1916)
DIYFetchBugfix
2016-10-06 02:40:24 -07:00
Elizabeth Fischer
264604df3e cgal: build out of source. (#1918)
* cgal: build out of source.

* Simplify cmake out-of-source.
2016-10-06 02:36:27 -07:00
Elizabeth Fischer
208537f6f2 Fix Issues with non-numeric versions, as well as preferred=True (#1561)
* Fix bug in handling of precedence of preferred=True vs. versions given in packages.yaml (#1556)

* Standardized comparison of versions: numeric versions are always greater than non-numeric versions; and non-numeric versions are sorted alphabetically.

This is
   a) simple
   b) ensures that non-numeric versions (such as 'develop') in package.py are not chosen ahead of numeric versions, when nothing is specified in packages.yaml

Fixes Issue #1557

* Removed debugging output

* Fix variable shadowing bug

* Ensure develop < numeric version.

* Bug fix.

* Passes all unit tests in versions.py

* flake8 fixes

* flake8 fixes

* Changed type test to be more correct.

See http://stackoverflow.com/questions/8203336/difference-between-int-and-numbers-integral-in-python
2016-10-06 02:35:34 -07:00
Jeffrey Salmond
a648dc6b33 add python options to vtk package (#1931) 2016-10-06 02:29:25 -07:00
Elizabeth Fischer
2966f174ae mumps: Add alternate download location (in comments) (#1919) 2016-10-05 23:15:38 -07:00
scheibelp
508d79c475 Handle packages with unparseable extensions (#1758)
This closes #1757 which provides an example of a url scheme where the
version appears after the extension. Instead of extending the parsing
logic to handle this case, this commit allows the user to specify
their extension type. This helps Spack choose the appropriate
decompressor and mirror archive filename.
2016-10-05 22:45:02 -07:00
Geoffrey Oxberry
6f0b32a71f docs/getting_started: s/Macintosn/Macintosh/; (#1928) 2016-10-05 21:15:54 -07:00
Elizabeth Fischer
015e29efe1 Documentation Improvements for SC16 (#1676)
* Transferred pending changes from efischer/develop

* 1. Rewrite of "Getting Started": everything you need to set up Spack, even on old/ornery systems.  This is not a reference manual section; items covered here are covered more systematically elsewhere in the manual.  Some sections were moved here from elsewhere.

2. Beginning to write three methods of application developer support.  Two methods were moved from elsewhere.

* Edits...

* Moved sections in preparation for additional text to be added from old efischer/docs branch.

* Moved 2 more sections.

* Avoid accid

* Applied proofreading edits from @adamjstewart

* Fixed non-standard section characters.

* Moved section on profiling to the developer's guide.

* Still working on Spack workflows...

* Finished draft of packaging_guide.rst

* Renamed sample projects.

* Updates to docstrings

* Added documentation to resolve #638 (content taken from #846)

* Added section on resolving inconsistent run dependencies.  Addresses #645

* Showed how to build Python extensions only compatible with certain versions of Python.

* Added examples of getting the right behavior from depends_on().  See #1035

* Added section on Intel compilers and their GCC masquerading feature.  Addresses #638, #1687.

* Fixed formatting

* Added fixes to filesystem views.  Added a caveats section to ``spack setup``.

* Updated section on Intel compiler configuration because compiler flags currently do not work (see #1687)

* Defined trusted downloads, and updated text based on them. (See #1696)

* Added workflow to deal with buggy upstream software.  See #1683

* Added proper separation between Spack Docs vs. Reference Manual

* Renamed spack_workflows to workflows.  Resolves a conflict with the .gitignore file.

* Removed repeated section.

* Created new "Vendor Specific Compiler Configuration" section and organized existing Intel section into it.  Added new PGI and NAG sections; but they need to be expanded  / rewritten based on the existing text plus research through Spack issues on GitHub.

* Fixed text on `spack load --dependencies` to conform to reality.  See #1662

* Added patching as option for upstream bugfixes.

* Added section on using licensed compilers.

* Added section on non-downloadable tarballs.

* Wrote sections on NAG and PGI.  Arranged compilers in alphabetical order.

* Fix indent.

* Fixed typos.

* Clarified dependency types.

* Applied edits from Adam J. Stewart.  Spellchecked workflows and getting_started.

* Removed spurious header

* Fixed Sphinx errors

* Fixed erroneous symbol in docstring.

* Fix many typos and formatting problems.

* Spacing changes

* Added section on fixing Git problems.  See #1779

* Fixed signature of install() method.

* Addressed system packages in greater detail.  See #1794 #1795

* Fixed typos

* Fixed quotes

* Duplicate section on Spack profiling removed from configuration.rst.  It had earlier been moved to developer_guide.rst, where it fits better.

* Minor edits

- Tweak supported platform language.
- Various small changes to the new getting started guide.

* Fixed bug with quotes.
2016-10-05 13:00:27 -07:00
Elizabeth Fischer
abc9412f23 New command flag: spack install --dependencies-only (#1603)
* 1. Renamed ignore_deps variable to install_deps (use positive logic).  UI remains the same.

2. install_self kwarg added to do_install().  Enables installation of a package's dependencies without installing the package itself.

3. Added `spack install --dependencies-only <package>` command.

* Flak8 fixes

* Indentation problem
2016-10-05 11:23:06 -07:00
Adam J. Stewart
6ee020cea4 Add package for CONVERGE CFD (#1905) 2016-10-05 10:37:50 -07:00
Adam J. Stewart
95b07c365c Add latest versions, resolve variant resolution bug (#1909) 2016-10-05 10:37:35 -07:00
Elizabeth Fischer
8e75575b88 Added missing function for CMake builds. (#1250)
* Added missing function for CMake builds.

* Update build_environment.py

* std_cmake_args

Changed std_cmake_args to use get_std_cmake_args().

* Update build_environment.py

Delete additional lines subsumed by get_std_cmake_args()

* flake8.
2016-10-05 10:37:20 -07:00
Elizabeth Fischer
42c69b3809 everytrace: New package (#1543)
* everytrace: New package

Everytrace ensures that stack trace is obtained every time a program exits, for whatever reason.

* everytrace: Change CMake to build dependency

* Renamed to everytrace-example, flake8 and copyright issues.

* flake8

* Missing type=build
2016-10-05 10:03:05 -07:00
Adam J. Stewart
d5e5e4ed1a Add missing dependencies for Flake8 (#1883)
* Warn user if flake8 can't find setuptools

* Add missing dependencies of flake8

* Updates to py-autopep8, make packages activateable

* Check for presence of setuptools for Sphinx too

* Fix bug in order of commands
2016-10-05 10:00:31 -07:00
Elizabeth Fischer
42a60b2434 Added copyright and build deps specification; should be ready to merge. 2016-10-05 12:14:08 -04:00
Axel Huebl
ac3e21f8d4 PNGwriter, libSplash: Add master version (#1744)
* PNGwriter, libSplash: Add `master` version

* PNGwriter, libSplash: Add `dev` versions

Can be used for now, `develop` is currently discouraged.
2016-10-05 06:46:20 -07:00
Denis Davydov
4e5d340665 boost: set 1.61 as preffered until 1.62 is fixed (#1908) 2016-10-05 05:16:06 -07:00
alalazo
7a26c60dbd Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases_rebase
Conflicts:
	lib/spack/spack/cmd/setup.py
	lib/spack/spack/package.py
	var/spack/repos/builtin/packages/gmp/package.py
2016-10-05 09:33:59 +02:00
Todd Gamblin
bff1656a1a Read-only locks should close fd before opening for write. (#1906)
- Fixes bad file descriptor error in lock acquire, #1904
- Fix bug introduced in previous PR #1857
- Backported fix from soon-to-be merged fine-grained DB locking branch.
2016-10-04 15:36:37 -07:00
Pramod Kumbhar
9daafc32f1 Packages for Darshan I/O performance characterization tool from ANL (#1900) 2016-10-04 14:40:35 -07:00
Todd Gamblin
544fa3eddb Fix some documentation build warnings. (#1902)
- Fix issue with package_list.py regeneration confusing Sphinx.
- Add -E option to avoid caching and make Sphinx happy.
2016-10-04 12:37:57 -07:00
Adam J. Stewart
7806fded3e Update documentation URL after switch to readthedocs (#1901) 2016-10-04 11:47:25 -07:00
Todd Gamblin
e9d4780bbc Rework build environment and cc to use smaller RPATHs. (#1894)
- Fixed up dependency management so that:
  - build deps go in PATH and -I
  - link deps go in -L args
  - only *immediate* link deps are RPATH'd

The latter reduces the number of libraries that need to be added to
DT_NEEDED / LC_RPATH.  This removes redundant RPATHs to transitive
dependencies.
2016-10-04 09:40:28 -07:00
Sergey Kosukhin
1d981ebd50 A set of tools used in climate modeling and numerical weather prediction. (#1317)
* Update grib-api: switched to cmake building system.

* Update harfbuzz: added pkg-config dependency.

* Update pango: added pkg-config dependency.

* Add libemos package.

* Add Magics (from ECMWF) package.

* Revert "Variant for building cdo without mpi (#1638)":
CDO does not use MPI.

This reverts commit 079d063c6d.

* Update CDO package: full featured implementation.

* Update magics: added python as build dependency.

* Update cdo: added disabling configuration options.
2016-10-04 09:29:22 -07:00
Todd Gamblin
36c79e9df6 Fixes #1893: missing import 2016-10-04 01:49:07 -07:00
Ivo Jimenez
d36028cff4 Adds mpip package (#1886) 2016-10-04 01:30:52 -07:00
Ivo Jimenez
2c701d372e Adds lulesh package (#1887) 2016-10-04 01:28:23 -07:00
Pramod Kumbhar
e546d6246f Spack package for HPCToolkit (#1892)
* Spack package for HPCToolkit (performance analysis tool)

* Correction for PR comments, make flake8 happy

* update note / comments
2016-10-04 01:02:50 -07:00
Massimiliano Culpo
50fcade81b cp2k : added support for libint, fixed compilation issues on elpa (#1889) 2016-10-03 08:25:36 -07:00
Geoffrey Oxberry
df79ba0dcf gcc: fix darwin dispatch/object.h header issue (#1518)
Fixes #1203. Apple ships headers in Yosemite (and possibly earlier) that
are gcc-incompatible, but compile fine with clang. The fix is to copy
the offending system header from /usr/include/${REST_OF_HEADER_PATH} to
${GCC_PREFIX}/include/${REST_OF_HEADER_PATH} and replace the non-gcc-
compatible features with gcc-compatible equivalents.

See https://github.com/hashdist/hashstack/pull/771/files for
inspiration, and
http://hamelot.io/programming/osx-gcc-dispatch_block_t-has-not-been-declared-invalid-typedef/
for a description of the header issue.
2016-10-02 18:54:43 -07:00
Nicolas Richart
16f99bd0b2 Adding latest version of fenics (#1528)
* Adding last version of fenics and making trilinos not ambiguous on hdf5

* forcing fenics to ignore hdf5 cxx

* Adding deptypes and correcting the hdf5 patch

* flake8 corrections

* cleaning some useless code
2016-10-02 18:51:34 -07:00
Adam J. Stewart
2ce1b388c9 Run make clean to prevent warning messages (#1742)
* Run make clean to prevent warning messages

* Don't delete temporary files after completion
2016-10-02 18:51:09 -07:00
Kelly Thompson
621a4d637d Provide newer versions of llvm (3.8.1, 3.9.0) (#1765)
* Provide new versions of llvm.

+ Provide file list and md5 hashes for 3.8.1 and 3.9.0.
+ Clean up indentation for the 'releases' data structure to improve
  consistency.

* Adding a block of code to the 'resources' structure for cfe.

* Merge cfe and clang resources into single entity.
2016-10-02 18:50:42 -07:00
Alfredo Adolfo Gimenez
1ea9582218 Added hadoop, spark, and variant spark+hadoop (#1833)
* Added hadoop, spark, and variant spark+hadoop

* Docstrings, dependency types, urls, copyright

* Flake8 fixes, link dependency for hadoop

* Build type for spark, env problem setting JAVA_HOME
2016-10-02 18:49:30 -07:00
Erik Schnetter
b22956bab2 git: Don't link against -lrt on Darwin (#1877)
There is no librt on Darwin, and it's not necessary either.
2016-10-02 18:37:45 -07:00
Erik Schnetter
28b48f3e1a Update PAPI to 5.5.0 (#1878) 2016-10-02 18:37:26 -07:00
Erik Schnetter
b2ff9dbcd4 Update tmux to 2.3.0 (#1879) 2016-10-02 18:37:17 -07:00
Kelly Thompson
051c5dbc27 New package: libquo (#1880)
* New package: libquo

libquo is a high-level, easy to use programming interface tailored specifically
for MPI/MPI+X codes that may benefit from evolving process binding policies
during their execution. QUO allows for arbitrary process binding policies to
be enacted and reverted during the execution of an MPI/MPI+X application as
different computational phases are entered and exited, respectively.

https://github.com/losalamos/libquo

* Remove use of 'which' and fix style non-conformance.
2016-10-02 18:36:48 -07:00
Bruno Turcksin
e854e053e4 Add boost 1.62.0 (#1882) 2016-10-02 18:36:31 -07:00
Jean-Paul Pelteret
c86d4c8920 Added bash-completion package (#951) 2016-10-02 17:50:39 -07:00
Pramod Kumbhar
4b34ba1035 pdt url change to download full installer tarball (#1881) 2016-09-30 14:31:28 -07:00
Michael Kuhn
8d1ec0df3d Fix read locks on read-only file systems (#1857) 2016-09-30 09:45:08 -07:00
Pramod Kumbhar
6c627dbac9 Add cube variant for building GUI component with qt, parallel built supported (#1525) 2016-09-29 15:37:35 -04:00
Pramod Kumbhar
6ec46ca802 updated to latest available package and fixed installation issue (old packages are no longer available for download) (#1523) 2016-09-29 15:37:07 -04:00
Mitchell Devlin
86cad961e5 added libxstream (#1454) 2016-09-29 15:36:37 -04:00
Adam J. Stewart
deb1cb4805 Add libint package (#1264)
* Add libint package

* Add Intel optimization flags recommended by CP2K

* Add new version and Intel compiler optimization flags for libxc

* Add older version of libint

* Libint depends on GMP C++ library
2016-09-29 15:35:10 -04:00
Robert D. French
a77b48f491 Library for manipulating grib1 and grib2 files (#1736)
Pro tips from @adamjstewart:
* line too long in package description
* name it grib-api instead of grib_api
* depend on netcdf without reference to unnecessary constraints
2016-09-28 17:02:29 -04:00
Elizabeth Fischer
3352889d73 py-pil: Protect against building with Python3. (#1868)
* py-pil: Does not build with Python3.

* Set py-pillow to be the default pil provider

* Update package.py

* Change to comments requested by adamjstewart

* Remove version constraint from extends(), avoid a Spack bug.
2016-09-28 16:51:41 -04:00
Erik Schnetter
4040792501 Update Qthreads to 1.11 (#1863) 2016-09-28 15:22:02 -04:00
Todd Gamblin
295742e2b5 Fixes #1860. Subversion builds sequentially due to race. 2016-09-28 15:18:52 -04:00
Robert D. French
fea0a74bec vim8 is out! (#1753)
* depends on ncurses for 8.0 or higher
2016-09-28 15:17:15 -04:00
Todd Gamblin
cb229f0842 Fixes #1720: spack reindex fails with invalid ref count. (#1867)
* Fixes #1720: spack reindex fails with invalid ref count.

- Database graph wasn't being built properly; dependencies were set up
  incorrectly in the nodes that ended up in the graph on reindex.

- Reworked _add to increment ref count properly and to always build
  bottom-up to make the logic simpler to understand.

* Add checks to ensure DB is a valid merkle tree.
2016-09-28 15:00:26 -04:00
Adam J. Stewart
66c2ac0bc9 Tell Mercurial where to find CA certs (#1873) 2016-09-28 14:58:51 -04:00
Elizabeth Fischer
9aa77178f3 Prohibit Python3 in Python version check. (#1872) 2016-09-28 12:36:25 -04:00
Adam J. Stewart
6df84a794b Add single letter arg flags for spack graph (#1871) 2016-09-28 12:09:31 -04:00
Todd Gamblin
78f4081bc9 Merge pull request #1862 from LLNL/features/graph-improvements
spack graph improvements
2016-09-28 00:10:14 -04:00
Todd Gamblin
05d52752ff Make graph_ascii support deptypes.
- fix deptype support
- by default, graph command omits build depedencies
- update docs to use deptype args
2016-09-27 23:49:41 -04:00
Todd Gamblin
f082d26ddd Fixes #1098: spack graph crashes for large graphs.
- Fixed logic for collapsing backward edges

- Last collapse now depends on whether prior step in left collapse
  sequence alrady did the collapse.
2016-09-27 23:28:51 -04:00
Todd Gamblin
0d3d74e5c2 Improvements to the Spack graph command.
- Distinguish between static (package) and dynamic (spec) graphs.

  - static graphs ignore conditions and multiple instances (hashes) and
    plot raw dependencies among packages.

  - dynamic graphs include information from particular specs (instances of
    packages) and can have multiple instances with hashes.

- Allow graphing all packages in the install DB.

  - useful for debugging.
2016-09-27 11:00:50 -04:00
Todd Gamblin
43ca805248 Factor out canonical_deptype function, cleanup spec.py 2016-09-27 11:00:50 -04:00
Todd Gamblin
cd960caf8d Clean up Exceptions in spec.py 2016-09-27 11:00:45 -04:00
Adam J. Stewart
9b575dd976 Various updates to scipy and numpy (#1856) 2016-09-27 10:56:24 -04:00
Michael Kuhn
00b3aa77ae Update cdo to 1.7.2 (#1858) 2016-09-27 10:56:04 -04:00
Erik Schnetter
88af9f783d Make PETSc build on Darwin (#1835)
Don't set cpp when building on Darwin.
2016-09-26 10:38:02 -07:00
Erik Schnetter
3282eaea8d Update OpenSSL (#1853) 2016-09-26 10:37:40 -07:00
Denis Davydov
1e10309ff7 some fixes to blas/lapack usage in packages (#1852)
* atlas: fix unit test

* openblas: remove symlinks; use lapack_libs.ld_flags in the test

* mkl: fix openmp variant of blas/lapack libs

* intel-parallel-studio: fix openmp variant of blas/lapack libs

* netlib-scalapack: fix blas/lapack for multilib case (e.g. mkl)

* arpack-ng: fix blas/lapack for multilib case (e.g. mkl)

* petsc: explicitly specify blas/lapack

* minor

* cantera: fix blas/lapack usage

* ipopt: fix blas/lapack usage

* netlib-lapack: fix external blas usage

* mfem: fix lapack/blas usage

* superlu-mt: fix blas usage

* flake8 fixes
2016-09-26 10:37:23 -07:00
Todd Gamblin
cb36aadaf6 Fix doc bugs, widen columns in the package list 2016-09-23 18:07:33 -07:00
Patrick Gartung
ec91152a36 a few package used in HEP including ROOT6 2016-09-23 18:07:22 -07:00
Adam J. Stewart
64194a823a Remove duplicate ICU package (#1837)
* Remove duplicate ICU package

* Ignore deleted files during flake8 tests

* Rename Boost ICU variant
2016-09-23 14:16:59 -07:00
Denis Davydov
6ef6428331 m4: fix compilation on Sierra with GCC (#1844)
* m4: fix compilation on Sierra with GCC

* m4: check macOS version
2016-09-23 13:38:29 -07:00
Bruno Turcksin
98d54182d3 Add Trilinos 12.8.1 (#1843) 2016-09-23 13:36:21 -07:00
Erik Schnetter
73ec2a27d0 Don't require git for Julia @0.5: (#1834) 2016-09-23 13:35:12 -07:00
Erik Schnetter
8147a09489 Update jemalloc to 4.2.1 (#1839) 2016-09-23 13:32:57 -07:00
Robert D. French
3d282b9239 Add libmesh, needed for some FEM applications (#1846) 2016-09-23 13:26:27 -07:00
Denis Davydov
df5e151049 hypre: fix a bug with blas/lapack names (#1841) 2016-09-23 10:06:18 -07:00
Erik Schnetter
c0ebbc97c9 Update OpenSSL (#1836)
This is a security update with priority "HIGH".
2016-09-23 08:21:15 -07:00
Denis Davydov
462a4a1353 boost: fix a bug which broke it on macOS with clang+gfortran (#1816)
* dealii: add missing python dependency

* boost: fix a bug which  broke it on macOS with clang+gfortran

Boost was using gcc compiler instead of clang++, which lead to
cryptic Undefined symbols linking errors for boost::python::objects::function_object()
when building other packages against boost+python.

* boost: add exceptions for intel

* boost: use spack_cxx
2016-09-22 13:47:22 -07:00
Adam J. Stewart
a638b62ab1 Updates to CGAL and ICU4C packages (#1828) 2016-09-22 11:50:50 -07:00
Ben Boeckel
c7860322f5 package: fix variable name usage (#1829) 2016-09-22 11:47:25 -07:00
Adam J. Stewart
f1f301ad3b Fix spack checksum output indentation (#1826) 2016-09-22 11:33:29 -07:00
Elizabeth Fischer
64c3b11478 suitesparse: Added +fpic (for linking with shared libraries) (#1542) 2016-09-22 11:03:49 -07:00
Erik Schnetter
7ad6c35627 New package "charm" for the Charm++ parallel programming framework (#1766) 2016-09-22 00:48:00 -07:00
Eric
025b779a30 Fix sbang for perl (#1802)
* Perform shebang fix for all files

* Fix sbang for perl scripts

Otherwise perl would look at the #! line and call sbang again, resulting
in an infinite loop.
2016-09-22 00:43:47 -07:00
Elizabeth Fischer
98f9dd266f Remove SPACK_DIRTY env var (#1818)
* Removed SPACK_DIRTY env var support.

* Finished removing SPACK_DIRTY support.

* Minor changes.
2016-09-22 00:43:33 -07:00
Massimiliano Culpo
1db2552644 fix : stops infinite recursion for python 2.6 (#1823) 2016-09-22 00:31:28 -07:00
Massimiliano Culpo
d848559f70 Reworking of lapack_shared_libs and similar properties (#1682)
* Turned <provider>_libs into an iterable

Modifications :
- added class LibraryList + unit tests
- added convenience functions `find_libraries` and `dedupe`
- modifed non Intel blas/lapack providers
- modified packages using blas_shared_libs and similar functions

* atlas : added pthread variant

* intel packages : added lapack_libs and blas_libs

* find_library_path : removed unused function

* PR review : fixed last issues

* LibraryList : added test on __add__ return type

* LibraryList : added __radd__ fixed unit tests

fix : failing unit tests due to missing `self`

* cp2k and dependecies : fixed blas-lapack related statements in package.py
2016-09-21 12:27:59 -07:00
Todd Gamblin
6b6f868f2a Flake8 fixes. 2016-09-21 04:35:15 -07:00
Todd Gamblin
786ab114b7 Merge branch 'qt-osx' of git://github.com/mathstuf/spack into mathstuf-qt-osx 2016-09-21 04:32:03 -07:00
George Hartzell
51d869493a Add package for bedtools2 (#1572)
Add package for bedtools2, with support for v2.25.0 and v2.26.0.
2016-09-21 04:23:03 -07:00
George Hartzell
db0baaafe3 Add package for bamtools (#1571)
bamtools provides a C++ API & command-line toolkit for working with BAM
data.
2016-09-21 04:22:55 -07:00
Mayeul d'Avezac
3d1c92e22c Update espresso recipe to track change in spack internals (#1734) 2016-09-21 04:18:35 -07:00
Adam J. Stewart
cf925ddc97 Add missing build dependencies to hdf package (#1812) 2016-09-21 04:16:57 -07:00
Kelly Thompson
3d3614e522 Update to allow netlib-scalapack to build against netlib-lapack. (#1539) 2016-09-21 04:10:30 -07:00
Glenn Johnson
c1284a9046 Stop python from linking with system ncurses (#1672)
Python will look to link with libncursesw in preference to libncurses. Since
ncurses in spack is built without suffixes there is no libncursesw and
python will link to the system libncursesw for _curses.so and
_curses_panel.so, as well as libpanelw for _curses_panel.so.

This PR introduces a patch that simple removes the check for ncursesw in
setup.py and therefore sets `curses_library` to `ncurses`.
2016-09-21 04:02:28 -07:00
Glenn Johnson
851b58248d Build pkg-config files for ncurses (#1673) 2016-09-21 04:02:07 -07:00
Elizabeth Fischer
899f3a7e37 Fixed bug propagating --dirty flag to sub-installs. (#1625)
* Fixed bug propagating --dirty flag to sub-installs.

* Fix syntax error

* Allow --dirty flag to be set with SPACK_DIRTY env var.

* Added dirty flag to `spack diy` and `spack setup`, as is currently in `spack install`

* flake8
2016-09-21 03:56:56 -07:00
Glenn Johnson
73012ec4c8 Rework libgd package (#1679)
* Added missing libtiff dependency
* added dependency on fontconfig
* Added version 2.2.3
* use autotools rather than cmake

The cmake build was not producing a complete install.
* There was no versioning of the installed libraries.
* gdlib-config was missing
* pkgconfig directory was missing

These problems do not happen when built with autotools.
2016-09-21 01:56:20 -07:00
Matt Belhorn
94b24e8893 Adds all available CrayPE CPU targets to platform by default. (#1745) 2016-09-21 01:48:33 -07:00
Todd Gamblin
ae6252ca5f Merge branch 'efischer/160914-FixBinutils226Question' of git://github.com/citibeth/spack into bugfix/efischer-160914-FixBinutils226Question 2016-09-21 01:45:38 -07:00
Axel Huebl
d3e04b3daf Close #1683 Apply ADIOS 1.10.0 Patch (HDF5 1.10+) (#1699)
* Close #1683 Apply ADIOS 1.10.0 Patch

Also correct version dependencies and comments.

* Clean Up ADIOS

- add develop
- simplify HDF5 options (parallel only)
- remove optional netCDF (not fully v4)
2016-09-21 00:55:54 -07:00
Massimiliano Culpo
3254d2f8f9 cp2k : added dependencies (#1724)
* wannier90 : added package (#24)

* wannier90 : added package

* cp2k : added dependency on wannier90

* elpa : updated package, added cp2k dependency (#26)

Conflicts:
	var/spack/repos/builtin/packages/elpa/package.py
2016-09-21 00:53:06 -07:00
Alfredo Adolfo Gimenez
02307cf7ce Set JAVA_HOME on module load and on dependent installs. (#1716)
* Set JAVA_HOME on module load and on dependent installs.

* Include environment setup from dependencies in dependee module (#1714)
2016-09-21 00:52:09 -07:00
Massimiliano Culpo
1cc48bf7d7 grackle : added package (#1725)
Modifications :

* grackle : added package
* grackle : added version 2.2
2016-09-21 00:51:49 -07:00
Erik Schnetter
3c7ea3000a Wrap yt package (#1751)
yt is a python package for analyzing and visualizing volumetric, multi-resolution data from astrophysical simulations, radio telescopes, and a burgeoning interdisciplinary community.
2016-09-21 00:37:46 -07:00
Sergey Kosukhin
746495896c Qt library: added variant to enable/disable compilation of examples (#1763) 2016-09-21 00:25:14 -07:00
Patrick Gartung
e6dc448f18 Compiling python with gnu c++ on macos fails with toolboxglue enabled. 2016-09-20 23:34:15 -07:00
Denis Davydov
27801c354b fix MacOs class for Sierra (#1811) 2016-09-20 17:25:23 -07:00
Gregory L. Lee
25ee9456f5 added STAT release 3.0.0 2016-09-20 16:09:31 -07:00
Erik Schnetter
ef1f441424 Julia: Add version 0.5.0 (#1809) 2016-09-20 12:40:58 -07:00
Adam J. Stewart
db483e77e4 Remove url_for_version as it breaks spack info (#1503) 2016-09-20 10:17:51 -07:00
Joseph Ciurej
7f9e89eb53 Update Package: Git-LFS (#1769)
* Fixed a few small bugs in the 'git-lfs' install script.

* Fixed a bug in the '(go|go-bootstrap)@1.4.2+test' install scripts.

* Fixing a minor style issue in the 'git-lfs' install script.
2016-09-20 10:08:25 -07:00
Erik Schnetter
00bac8f294 PETSc: Explicitly point to cpp when configuring (#1807)
I encountered an HPC system where PETSc's configure stage does not find a valid `cpp` (C preprocessor). Explicitly pointing to Spack's `cpp` wrapper resolves the problem.
2016-09-20 10:05:57 -07:00
Adam J. Stewart
f180d748be Remove lingering boilerplate FIXMEs (#1756) 2016-09-20 08:01:55 -07:00
Massimiliano Culpo
eb8a0ef75e fix : failing unit tests due to missing self (#1806) 2016-09-20 07:47:13 -07:00
Joseph Ciurej
2cbae1d691 Update Package: Metis (#1783)
* Fixed a bug that was causing post-install METIS tests to fail.

* Improved the patching procedure used in the 'metis' install script.

* Enabled patch skipping for the 'metis' and 'parmetis' packages.

* Fixed some minor style issues in the 'parmetis' package.

* Improved the 'metis' test fix and added 'run_tests' support.
2016-09-20 02:48:31 -07:00
Robert D. French
5c11fe88df Add UberFTP utility (#1780) 2016-09-20 02:47:10 -07:00
Denis Davydov
1565a643bd dealii: add 8.4.2 (#1782) 2016-09-20 02:46:57 -07:00
Bruno Turcksin
20fcd3f1dd Add Python support to gdb. (#1790) 2016-09-20 02:46:30 -07:00
Joseph Ciurej
e73a7c80bf Update Package : Zoltan (#1793)
* Refactored and reorganized the 'zoltan' install script.

* Fixed a few bugs with the '+mpi' and '+fortan' variants of 'zoltan'.

* Reintroduced and improved the '+shared' variant for the 'zoltan' package.

* Improved compatibility with different MPI providers for 'zoltan'.
2016-09-20 02:46:13 -07:00
Eric
c9fe2cd469 Fix format string (in class RemoveFailedError) (#1803) 2016-09-20 02:27:35 -07:00
Tom Merrick
d71f8dcab5 samtools could not find the ncurses library (#1785) 2016-09-20 02:27:19 -07:00
Massimiliano Culpo
ea446c0f0e lmod : added support for the creation of hierarchical lua module files (#1723)
Includes :
- treatment of a generic hierarchy (i.e. lapack + mpi + compiler)
- possibility to specify which compilers are to be considered Core
- correct treatment of the 'family' directive
- unit tests for most new features
2016-09-20 02:26:25 -07:00
Eric
efadc0e299 Allow multi-user installations (#1804)
When re-using previously downloaded tarballs, spack copies from
`var/spack/stage/PACKAGE-VERSION-HASH/downloaded_file` to
`var/spack/cache/PACKAGE/downloaded_file`. This fails if the source is owned by
a different user (`shutil.copy` tries to retain all meta data including file
ownership). Change to a non-meta-data copy function (`shutil.copyfile`).
2016-09-20 02:18:26 -07:00
Erik Schnetter
bd6aac3102 Update Julia to 0.4.7 (#1805) 2016-09-20 02:16:25 -07:00
Erik Schnetter
bddb15ef4c Make VisIt build again (#1762)
- add new version 2.10.3
- explicitly require hdf5 variant ~mpi, since we don't know how to build with mpicc
- explicitly disable glew since it may not be installed
2016-09-20 02:15:58 -07:00
Erik Schnetter
70424b511e Work around cmake problems in VTK (#1761)
The cmake scripts can't handle the semicolons in gcc's version output. Filter them out before detecting the version.
2016-09-20 02:15:37 -07:00
Erik Schnetter
2a558e9d7a Tighten HDF5 version requirements for Silo (#1760) 2016-09-20 02:14:55 -07:00
Erik Schnetter
8426b65592 Make cmake @2.8 build again (#1759) 2016-09-20 02:14:37 -07:00
Erik Schnetter
140f1773cf Update hwloc to 1.11.4 (#1752) 2016-09-20 02:14:17 -07:00
Erik Schnetter
682ac5194e Declare py-beautifulsoup4's dependency on py-setuptools (#1748) 2016-09-20 02:14:06 -07:00
Erik Schnetter
48c87da07b Update curl to 7.50.3 (#1747)
* Update curl to 7.50.2
* Update curl to 7.50.3
2016-09-20 02:13:54 -07:00
Erik Schnetter
bbdc429db3 Update OpenMPI to 2.0.1 (#1721) 2016-09-20 02:13:40 -07:00
Erik Schnetter
2e490050f6 Update OpenBLAS to 0.2.19 (#1702) 2016-09-20 02:13:25 -07:00
Erik Schnetter
ebde2a101e Reorder versions in openssl (#1601) 2016-09-20 02:13:14 -07:00
Erik Schnetter
ee2ddaa7cc Update mbedtls to 2.3.0 (#1600) 2016-09-20 02:13:03 -07:00
Erik Schnetter
6848752fed Update cereal to 1.2.1 (#1599) 2016-09-20 02:12:52 -07:00
Erik Schnetter
dfad4a0abc Update binutils to 2.27 (#1598) 2016-09-20 02:12:40 -07:00
Michael Kuhn
7043fff807 Fix location -p and -P (#1776) 2016-09-15 10:48:28 +08:00
Michael Kuhn
7fd44a983d Update mvapich2 to 2.2 (#1775) 2016-09-15 10:42:57 +08:00
Erik Schnetter
6117ef44e4 Make libstdc++-detection work on Darwin (#1778) 2016-09-15 10:42:14 +08:00
Elizabeth Fischer
2a823fbdfd [RtM] Added py-proj/package.py (RtM = Ready to Merge) (#717)
* Added py-proj package

* Added bug-fix patched version to the package.

* Removed dependency of py-proj on proj.

* py-proj: Added missing dependency

* py-proj: Removed versions from forked repos, now that necessary bug fixes have been merged into the main repo.

* Update package.py

Added a blank line that Travis wanted.

* 1. Added copyright
2. Used setup_py
3. Added type='build' for dependencies.
2016-09-15 10:35:57 +08:00
Elizabeth Fischer
a954d0976a Put back full-length URL. 2016-09-14 16:52:33 -04:00
Elizabeth Fischer
595ec7e034 Bug fix capturing which packages work with which binutils. 2016-09-14 16:50:17 -04:00
Elizabeth Fischer
4a1df7e0b2 Resolved issues of py-pillow, py-scipy and binutils dependencies. Resolves #1506
py-pillow: Remove version dependency on binutils@2.25.  In tests, it works just fine with binutils@2.26.

Fixed flake8 issues.
2016-09-14 10:56:08 -04:00
Erik Schnetter
1d09d1a4e2 Update netlib-lapack to 3.6.1 (#1597) 2016-09-09 13:50:37 -07:00
Erik Schnetter
567d67fae2 Add libiconv dependency for git (#1468)
Also remove "--without-pcre" flag that git does not understand any more.
2016-09-09 12:57:49 -07:00
Erik Schnetter
8249108cc6 Qthreads: Switch back to using tarball to get released version (#1739)
* Qthreads: Switch back to using tarball for download

* Don't require autotools any more

* Re-enable autotools

* Remove autotools again

* Use .tar.bz tarball; remove outdated code
2016-09-09 06:56:11 -07:00
Erik Schnetter
e06a0271a4 New package h5hut (#1737)
* New package h5hut -- High-Performance I/O Library for Particle-based Simulations

* Set up MPI compilers

* Add version 1.8.12 to HDF5

* Correct Sphinx error
2016-09-08 13:27:47 -07:00
Erik Schnetter
ff7c0335ff Declare fontconfig dependency on pkg-config (#1686) 2016-09-08 12:15:42 -07:00
Todd Gamblin
3d3d65f3f7 Merge pull request #1553 from adamjstewart/fixes/netcdf-hdf5
Fix NetCDF/HDF5 dependency resolution problems
2016-09-08 11:58:46 -07:00
Adam J. Stewart
a22f5d8d86 Don't overwrite PYTHONPATH in docs Makefile (#1693) 2016-09-08 09:02:56 -07:00
Adam J. Stewart
06d8a3ad23 Add missing dependency for run-doc-tests (#1691) 2016-09-08 09:02:38 -07:00
Adam J. Stewart
0586b388df Add latest version of libpng, ncview depends on libpng (#1502)
* Add latest version of libpng

* ncview depends on libpng
2016-09-08 09:02:10 -07:00
scheibelp
fd02a140c4 Fix fetching non-expanded resources from mirrors (#1310)
This closes #1308, where fetching a non-expanded resource from a mirror
will cause an error.

This also ensures that when a URL resource is fetched from a mirror,
that it will be named as though it were retrieved from the original
URL. This is particularly useful for non-expanded resources since it
ensures that the resource name is consistent for the installation
(this is less important for expanded resources because the build takes
place inside the expanded resource).
2016-09-07 07:02:24 -07:00
Ian Lee
d55b17dd65 Fixed broken link in README (#1733) 2016-09-06 14:52:44 -07:00
Ben Boeckel
77611913c6 qt: only pass -qt-xcb on non-OS X 2016-09-06 16:53:38 -04:00
Ben Boeckel
112122bc28 qt: progress on qt5.5 on osx
Qt5.5 searches for the SDK itself and just ignores environment variables
like CC and CXX, skipping the spack wrappers.
2016-09-06 16:01:16 -04:00
Ben Boeckel
fca26c0b79 qt: make -no-phonon specific to qt4 2016-09-06 16:00:22 -04:00
Ben Boeckel
67462ca65a qt: fix pcre header conflict in javascriptcore 2016-09-06 16:00:21 -04:00
Ben Boeckel
4687860885 qt: force the 10.9 SDK on macos
The 10.11 SDK fails to configure.
2016-09-06 16:00:21 -04:00
Ben Boeckel
a05a6456d5 glib: build on macos 2016-09-06 16:00:21 -04:00
Ben Boeckel
b810a113af pixman: disable mmx 2016-09-06 16:00:21 -04:00
Ben Boeckel
3df1eeccb9 qt: setup the sdk and platform arguments 2016-09-06 16:00:21 -04:00
Ben Boeckel
71c357e485 qt: support building with 10.10+ SDKs 2016-09-06 16:00:21 -04:00
Ben Boeckel
aa9faceb03 qt: disable phonon support 2016-09-06 16:00:21 -04:00
Ben Boeckel
6075abfbdb qt: depend on icu4c 2016-09-06 16:00:21 -04:00
Ben Boeckel
a9bfd88248 qt: depend on OpenSSL
OS X doesn't come with an OpenSSL supported by Qt4.
2016-09-06 16:00:21 -04:00
Ben Boeckel
4c566617f7 qt: make libxcb a conditional dependency
OS X doesn't have X (usually).
2016-09-06 16:00:21 -04:00
Ben Boeckel
5ba1144515 qt: create a dbus variant 2016-09-06 16:00:20 -04:00
Ben Boeckel
4b471ecc6e qt: support detecting newer SDK paths 2016-09-06 15:59:46 -04:00
Todd Gamblin
f34dd94166 Add debug command for creating tarball of install DB. 2016-09-06 07:55:54 -07:00
Robert D. French
ccfbfcc890 ITS XML Translation Tool (#1728) 2016-09-06 06:56:13 -07:00
Jeffrey Salmond
26d45bc106 fontconfig: add --disable-docs to configure (#1729) 2016-09-06 06:55:58 -07:00
Kelly Thompson
f0192edf0d For OpenMPI v 2+, add a configure option to provide C++ bindings. (#1730)
+ Starting with version 2.0, OpenMPI no longer provides C++ bindings by default
  (libmpi_cxx.so). Add a configure option to instruct the build to also build
  and install libmpi_cxx.so.
+ This MPI feature is needed by at least one spack package (moab).
2016-09-06 06:55:37 -07:00
Todd Gamblin
a8b4a0f287 Merge pull request #1731 from epfl-scitas/packages/plumed_gslcblas
plumed : avoid linking with libgslcblas
2016-09-06 06:55:16 -07:00
Todd Gamblin
1cb6f31b03 Merge pull request #1732 from epfl-scitas/fixes/autoload_and_build_dependencies
fix : ('build',) type dependencies are not accounted when autoloading
2016-09-06 06:55:02 -07:00
alalazo
fc576a40d6 modules : ('build',) type dependencies are not accounted when autoloading
fixes #1681
2016-09-06 15:07:11 +02:00
alalazo
d39b666913 plumed : avoid linking with libgslcblas 2016-09-06 11:21:26 +02:00
alalazo
47f6a6d3cf Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases_rebase
Conflicts:
	lib/spack/spack/build_environment.py
	lib/spack/spack/package.py
	var/spack/repos/builtin/packages/astyle/package.py
	var/spack/repos/builtin/packages/lzo/package.py
	var/spack/repos/builtin/packages/openjpeg/package.py
	var/spack/repos/builtin/packages/swiftsim/package.py
2016-09-04 10:12:52 +02:00
Axel Huebl
16c5403ab3 spack boostrap: fix missing include (#1657)
fix a missing include in booststrap.
found on debian 8 with python 2.7
2016-09-03 09:43:00 -07:00
Massimiliano Culpo
497bbb3ae3 added package : pexsi (#1550)
* pexsi : added package
* cp2k : added pexsi (works for gcc+openmpi with and without plumed)
2016-09-03 08:13:47 -07:00
becker33
fa310c825d Merge pull request #1704 from eschnett/eschnett/libiconf-gets
Make libiconv work with C11
2016-09-02 16:46:40 -07:00
becker33
6de191a926 Merge pull request #1708 from robertdfrench/globus-toolkit
Globus Toolkit
2016-09-02 15:31:34 -07:00
Todd Gamblin
07fa1cd5f8 Attributes for directives need to be set at class construction time. (#1718)
- moved ensure_dicts() call from Package.__init__ to
  Package.__metaclass__.
2016-09-02 15:10:30 -07:00
becker33
ea6143402f Merge pull request #1715 from alfredo-gimenez/bugfix/vim
Fix vim package.
2016-09-02 14:59:14 -07:00
becker33
83a8a8ed22 Merge pull request #1717 from alfredo-gimenez/features/sbt
Add sbt (scala build tool) package
2016-09-02 14:56:44 -07:00
Alfredo Gimenez
19102559f0 Add sbt (scala build tool) package 2016-09-02 14:15:20 -07:00
Alfredo Gimenez
817c120b1c Fix vim package 2016-09-02 14:09:46 -07:00
Erik Schnetter
d78d18c4bd Update OpenMPI description (#1705) 2016-09-02 10:57:35 -07:00
Jeffrey Salmond
5146c64dfc Fixes for the ImageMagick package. (#1709)
* add pango dependency

* add new package ghostscript-fonts & add to ImageMagick as dependency

also tell ImageMagick's configure where the font dir is!

* refactor to fix flake8

* add homepage to ghostscript-fonts

* use install_tree

* remove unneeded import
2016-09-02 10:41:35 -07:00
Erik Schnetter
c7bb523c8f Declare qthreads dependency on automake (#1711) 2016-09-02 10:34:07 -07:00
Todd Gamblin
e22ff0d8cd Merge pull request #1707 from eschnett/eschnett/autoconf-old-versions
Add two famous old versions of autoconf
2016-09-02 10:32:33 -07:00
Robert.French
d876d9b778 Globus Toolkit 2016-09-02 16:04:26 +00:00
Erik Schnetter
9ceb3f6b49 Add two famous old versions of autoconf
These old versions are often used because their immediate successors are incompatible in some way.
2016-09-02 11:23:33 -04:00
Erik Schnetter
0bd63ce8be Make libiconv work with C11
C11 does not provide gets() any more, so we cannot reference it
2016-09-02 10:53:59 -04:00
Todd Gamblin
417fe0ec67 Merge pull request #1698 from LLNL/bugfix/hash-collision
Fix hash collisions, add stable hashing
2016-09-02 07:29:44 -07:00
Todd Gamblin
c8b4f978e1 Clean up stable hashing so that specs don't contain !!python/object/apply
- only output basic lists, dicts, etc.
- spec and database now parse and write specs as ordered data.
2016-09-02 03:03:47 -07:00
Todd Gamblin
674434b0fc Merge branch 'UCL-RITS-hash_stability' into bugfix/hash-collision 2016-09-02 03:03:25 -07:00
Todd Gamblin
9268b7aa7c Fix hash copying in _dup.
- Spec._dup() incorrectly copied cached hashes and normal/concrete values
  even when dependency structure was not preserved.

- Now these are only copied when *all* dependencies are copied.
2016-09-02 01:26:19 -07:00
Todd Gamblin
69d45b49e9 Fix hash handling in directory layout
- Currently, build dependencies are not currently hashed; we are waiting
  to hash these until we have smarter concretization that can reuse more
  installed specs.  The layout needs to account for this when checking
  whethert things are installed.
2016-09-02 01:26:01 -07:00
Todd Gamblin
f5bc0cbb65 Merge pull request #1535 from LLNL/bugfix/faster-install-db-gh1521
[WIP] Faster database loading, faster in-memory hashing
2016-09-01 13:00:21 -07:00
Todd Gamblin
8d755c010d Merge pull request #1658 from LLNL/features/git-lfs
Add git-lfs package.
2016-09-01 11:58:18 -07:00
Todd Gamblin
0f26bb9e92 Merge pull request #1688 from LLNL/bugfix/database-issues
Fix dependency bug with `spack reindex`.
2016-09-01 11:39:21 -07:00
Todd Gamblin
69b68153a1 Fix spack reindex so that it will work if DB is corrupt (duh).
- Transaction logic had gotten complicated -- DB would not reindex when
  corrupt, rather the error would be reported (ugh).

- DB will now print the error and force a rebuild when errors are
  detected reading the old databse.
2016-09-01 11:29:32 -07:00
Todd Gamblin
bee5c05568 Update tests to reflect new in-memory hashing vs. coarser dag_hash.
- Spack currently not hashing build deps (to allow more reuse of packages
  and less frequent re-installing)

- Fast in-memory hash should still hash *all* deptypes, and installed
  specs will only reflect link and run deps.

- We'll revert this when we can concretize more liberally based on what
  is already installed.
2016-09-01 11:29:32 -07:00
Todd Gamblin
235a045d08 Add option to copy only certain deptypes to Spec.copy()
- can now pass these to Spec.copy() and Spec._dup():
  - deps=True
  - deps=False
  - deps=(list of deptypes)

- Makes it easy to filter out only part of a spec.
2016-09-01 11:29:32 -07:00
Todd Gamblin
409e7a2e64 Faster database loading.
- use a 3-pass algorithm to load the installed package DAG.

- avoid redundant hashing/comparing on load.
2016-09-01 11:29:32 -07:00
Todd Gamblin
a8aad95d41 Specs now cache result of "fast" in-memory hash.
- Hash causes major slowdown for reading/setting up large DBs

- New version caches hash for concrete specs, which includes all specs in
  the install DB
2016-09-01 11:29:32 -07:00
Todd Gamblin
c46a15b574 Fix dependency bug in database. Fixes #1265, #1320. 2016-09-01 11:25:01 -07:00
Todd Gamblin
4a87d4ab8e Make gh-pages redirect to readthedocs.io 2016-08-31 19:40:22 -07:00
Todd Gamblin
bf8413379f Merge pull request #1593 from eschnett/eschnett/depends_on
Expand/clarify description of dependency types
2016-08-31 12:07:11 -07:00
Erik Schnetter
efc570afab Expand/clarify description of dependency types 2016-08-31 14:42:32 -04:00
Todd Gamblin
e3c182a1c4 Merge pull request #1677 from eschnett/eschnett/lzo-hotfix
Switch lzo download from https to http
2016-08-31 09:43:16 -07:00
Erik Schnetter
932cd6fa19 Switch lzo download from https to http
lzo's download server does not present a valid certificate, so that downloads via https are failing. Spack's MD5 checksum still ensure a safe download.

Closes #1675.
2016-08-31 12:41:04 -04:00
Todd Gamblin
0ff048521b Fix modules.rst doc build warning. 2016-08-30 22:15:13 -07:00
Todd Gamblin
8709e1c1c3 Move docs to readthedocs.io
- Docs are now visible immediately, and we don't have to push them
  separately.
2016-08-30 21:19:31 -07:00
Todd Gamblin
9de7e25085 Merge branch 'bugfix/rtd-generation' into develop 2016-08-30 21:13:53 -07:00
Todd Gamblin
3a9388b43a Move sphinx-apidoc into conf.py, too. 2016-08-30 21:02:34 -07:00
Todd Gamblin
32834dd67d fix sys.path in conf.py 2016-08-30 20:50:14 -07:00
Todd Gamblin
05545a2528 test. 2016-08-30 20:49:56 -07:00
Todd Gamblin
41675e5ed6 sorted command index, better colification. 2016-08-30 20:49:56 -07:00
Todd Gamblin
918cb16921 Merge branch 'features/travis' into develop 2016-08-30 20:43:29 -07:00
Todd Gamblin
176a84a828 Don't test sphinx-generated conf.py for flake8 issues. 2016-08-30 20:30:43 -07:00
Todd Gamblin
c470ffe1ac Install graphviz before build. 2016-08-30 20:17:12 -07:00
Todd Gamblin
d9c5191563 Fix issue with path to Spack. 2016-08-30 19:57:33 -07:00
Todd Gamblin
fc748eb3d0 Exclude spack.__all__ from documentation.
Everything in the __all__ list in the spack module is from some other
module, so only do their documentation in their original location.  This
also avoids issues like the fact that some directive names shadow spack
core module names.
2016-08-30 16:36:50 -05:00
Adam J. Stewart
1be6267149 Undo changes to trailing triple quotes in docstring 2016-08-30 16:28:55 -05:00
Adam J. Stewart
f6d07b54f1 Always run spack unit tests 2016-08-30 16:01:00 -05:00
Adam J. Stewart
9b455e9254 Resolve new documentation issues that have cropped up 2016-08-30 15:58:22 -05:00
Adam J. Stewart
cc7df29e81 Keep dashes in command names, translate to underscores 2016-08-30 15:37:23 -05:00
Adam J. Stewart
ae2a803496 Make subcommands importable, '-' -> '_', fixes #1642 2016-08-30 15:36:33 -05:00
Adam J. Stewart
8d1a753a1b Fix spack --profile, fixes #1639 2016-08-30 15:35:58 -05:00
Adam J. Stewart
e04b76c2c3 Add spack to the PATH for doc tests 2016-08-30 15:35:58 -05:00
Adam J. Stewart
a0c8aca3a2 Remove py-mercurial, going with mercurial package instead 2016-08-30 15:35:58 -05:00
Adam J. Stewart
6795f4ca12 Use console instead of shell syntax lexer, fixes #1634 2016-08-30 15:35:58 -05:00
Adam J. Stewart
f856952728 Always run Documentation tests 2016-08-30 15:32:54 -05:00
Adam J. Stewart
f78134efa5 Fixes #1620, Missing references 2016-08-30 15:32:54 -05:00
Adam J. Stewart
867a92f083 Fixes #1618, Problems with spack package-list 2016-08-30 15:32:54 -05:00
Adam J. Stewart
69e50595bf Fix docstrings for core Spack libraries, fixes #1612 2016-08-30 15:32:54 -05:00
Adam J. Stewart
02239c094e Fix unexpected indentation in .rst files, #1612 2016-08-30 15:29:51 -05:00
Adam J. Stewart
eb56744f4d Fix package docstrings, #1612 2016-08-30 15:29:50 -05:00
Adam J. Stewart
0614bd206f Fix #1608, Include file not found 2016-08-30 15:28:09 -05:00
Adam J. Stewart
2326355497 Fix #1604 and fix #1605, title underline problems 2016-08-30 15:28:08 -05:00
Adam J. Stewart
c36f13e44d Added more missing dependencies 2016-08-30 15:21:15 -05:00
Adam J. Stewart
fda7fcd73d Fix #1594, duplicate explicit target name 2016-08-30 15:21:15 -05:00
Adam J. Stewart
a235d030ac Fix typos and bugs in Travis config file
Forgot to change one of the TEST_TYPEs to TEST_SUITE.
-eq not working, trying == instead.
Cache doesn't seem to be working, removed.
2016-08-30 15:21:15 -05:00
Adam J. Stewart
7f9d098c2f Add mercurial package, used as test dependency 2016-08-30 15:21:15 -05:00
Adam J. Stewart
1fc14fd7ed Only run unit tests when core Spack framework is modified 2016-08-30 15:21:15 -05:00
Adam J. Stewart
d2d6c91b66 Run documentation tests when documentation is modified 2016-08-30 15:21:15 -05:00
Adam J. Stewart
679f787a65 Add generic changed_files script 2016-08-30 15:21:15 -05:00
Adam J. Stewart
c6aa32bb3c Some flake8 settings weren't documented 2016-08-30 15:20:03 -05:00
Adam J. Stewart
732c1985ef Overhaul Spack's CI Infrastructure 2016-08-30 15:20:03 -05:00
Todd Gamblin
7e4c6afd91 Merge pull request #1412 from adamjstewart/features/cmake
Overhaul of CMake package and compression libraries
2016-08-30 12:18:56 -07:00
Todd Gamblin
abd1546d86 Merge pull request #1668 from ax3l/topic-pngwriter
PNGwriter: Add Spack Package
2016-08-30 10:21:27 -07:00
Todd Gamblin
fa99b76b58 Merge pull request #1667 from ax3l/topic-libsplash
libSplash: Add Spack Package
2016-08-30 10:20:57 -07:00
Axel Huebl
d2d2234def HDF5 Dependency: Rewrite to Union
@adamjstewart
```
think you'll find that if you try running something like:
spack spec libsplash ^hdf5@1.8.15
It will complain that libsplash does not depend on hdf5.
This is a bug in Spack's dependency resolution. A workaround
for this is to tell it to always depend on hdf5.
```

@davydden
```
to expand on @adamjstewart comment, spack will make a union
of dependencies,
i.e. hdf5@1.8.6: + hdf5+mpi = hdf5:1.8.6:+mpi, that's why it works.
```

thank you for the hint!
2016-08-30 17:00:09 +02:00
Axel Huebl
03c4d65af1 PNGwriter: Add Spack Package
Adds a package for
[PNGwriter](https://github.com/pngwriter/pngwriter/),
a simple high-level C++ png API used in scientific projects.

```
PNGwriter is a very easy to use open source graphics library that
uses PNG as its output format. The interface has been designed to be
as simple and intuitive as possible. It supports plotting and reading
pixels in the RGB (red, green, blue), HSV (hue, saturation,
value/brightness) and CMYK (cyan, magenta, yellow, black) colour
spaces, basic shapes, scaling, bilinear interpolation, full TrueType
antialiased and rotated text support, bezier curves, opening existing
PNG images and more.
```

PNGwriter is a dependency for [PIConGPU](http://picongpu.hzdr.de),
an open-source, many-core, fully-relativistic particle-in-cell code
and further software developed at
[Helmholz-Zentrum Dresden - Rossendorf](https://www.hzdr.de).
2016-08-30 12:45:53 +02:00
Axel Huebl
3aaa077c9f libSplash: Add Spack Package
Adds a package for
[libSplash](https://github.com/ComputationalRadiationPhysics/libSplash),
a high-level library around serial and parallel HDF5 for regular
grids and particle data sets.

```
libSplash aims at developing a HDF5-based I/O library for HPC
simulations. It is created as an easy-to-use frontend for the
standard HDF5 library with support for MPI processes in a cluster
environment. While the standard HDF5 library provides detailed
low-level control, libSplash simplifies tasks commonly found in
large-scale HPC simulations, such as iter- ative computations
and MPI distributed processes.
```

libSplash is a dependency for [PIConGPU](http://picongpu.hzdr.de),
an open-source, many-core, fully-relativistic particle-in-cell
code and further software developed at
[Helmholz-Zentrum Dresden - Rossendorf](https://www.hzdr.de).

libSplash builds in two versions, one without MPI writing
domain-decomposed posix-style HDF5 files per process and one
(default) with MPI and MPI-I/O ("parallel HDF5") support
aggregating into a single file per MPI communicator.

libSplash is used in conjunction with
[openPMD](http://openPMD.org), see also
[github.com/openPMD/](https://github.com/openPMD/).
2016-08-30 12:42:39 +02:00
Todd Gamblin
dae00fec29 Move all documentation generation into conf.py
- extra steps in Makefile are ignored by readthedocs
2016-08-30 00:47:04 -07:00
Todd Gamblin
47bf7ecb2b Merge pull request #1652 from ax3l/topic-updateAdios110
Update ADIOS Package
2016-08-29 22:59:39 -07:00
Massimiliano Culpo
3ecf4ef8c9 resources : added docs fixes #1551 (#1627) 2016-08-29 22:40:50 -07:00
Todd Gamblin
8ab47537c7 Fix exception constructors. (#1663) 2016-08-29 22:34:47 -07:00
Elizabeth Fischer
cf11c32720 libpciaccess: Changed libtool to a build dependency. (#1602) 2016-08-29 22:11:27 -07:00
Axel Huebl
0f40175524 Remove Space, Enable Parallel
- remove space before comma
- enable parallel build again (seems to work)
2016-08-30 02:02:48 +02:00
Axel Huebl
ecacce7e07 ADIOS: Use NetCDF Prefix from spec's 2016-08-30 00:51:44 +02:00
Gregory Lee
e32247e53a added qt-creator (#1659) 2016-08-29 15:45:16 -07:00
Axel Huebl
37f489886e Defaults: MPI=True, Fortran=False
- ADIOS is mainly a parallel I/O library
- a Fortran compiler is non-standard in a minimal install
2016-08-30 00:14:29 +02:00
Axel Huebl
b33777fd2f RM Outdated Comments, Versions & Code 2016-08-29 23:18:31 +02:00
Axel Huebl
88254a14a7 Always External MXML; type='build'
- always use `mxml` as an external dependency in spack
- declare `build`-only dependencies correctly
2016-08-29 23:01:20 +02:00
Axel Huebl
e1464ece55 ADIOS: disable parallel make 2016-08-29 19:06:22 +02:00
Robert D. French
a21d3d353b New URL scheme for newer (and older) PDTs (#1651) 2016-08-29 10:01:04 -07:00
Todd Gamblin
2850ca60be Change spack --profile sort key for 2.6 compatibility. (#1656) 2016-08-29 09:56:54 -07:00
Axel Huebl
f2eb1c93df ADIOS: Run Autotools First 2016-08-29 18:42:07 +02:00
Robert D. French
4095eb2196 Ole' GNU nano; Actually ran flake8 (#1649) 2016-08-29 09:21:19 -07:00
Todd Gamblin
f7ee8d001a Merge pull request #1564 from adamjstewart/features/create
Suggest setuptools when creating Python package
2016-08-29 09:11:45 -07:00
Todd Gamblin
57033a62fa Merge pull request #1563 from adamjstewart/features/sphinx
Add all Sphinx dependencies
2016-08-29 09:08:46 -07:00
Axel Huebl
4bd863761a Update ADIOS Package
This PR updates the ADIOS package.

**Changes:**

- add latest stable release `1.10.0`
- add previous versions (hashes)
- add default license header
- add build options (shamelessly taken from HDF5 package)
- add validation for excisting FC (as in HDF5) and make optional
- handle mxml dependency correctly (not required in 1.10.0+)
- add `CFLAGS=-fPIC` to build shared (python) libs in ADIOS' lib
- remove `-DMPICH_IGNORE_CXX_SEEK` since it is normally not required
- remove `MPICC/CXX?FC` since `--with-mpi` just performs well
- add transforms:
  - `zlib`: useful (optional) default
  - `szip`: optional (compile often broken)
- add transports that are not as performant as the `.bp` format:
  - `hdf5`: non-default
  - `netcdf`: non-default, close #1610
2016-08-29 17:16:15 +02:00
Todd Gamblin
31cab4bae2 Merge pull request #1619 from davydden/pkg/nwchem_macos_fix
nwchem: use basename for CC and FC
2016-08-29 06:51:14 -07:00
Denis Davydov
66ea42f8d7 nwchem: use basename for CC and FC 2016-08-29 15:15:23 +02:00
Todd Gamblin
f5c9a8c2ee Merge pull request #1650 from davydden/pkg/ape_octopus_comments
ape octopus: in-code comments
2016-08-29 06:02:19 -07:00
Denis Davydov
5333a799ea octopus: in-code comments to explain compiler flags 2016-08-29 08:45:28 +02:00
Denis Davydov
90070c317d ape: in-code comments to explain compiler flags 2016-08-29 08:45:15 +02:00
Todd Gamblin
a3f1ae8c4f Merge pull request #1041 from adamjstewart/features/matplotlib
Matplotlib Python package overhaul
2016-08-28 21:22:44 -07:00
Abhinav Bhatele
a9a29d207d add versions 2.2rc2 and 2.1 to the mvapich2 package (#1630) 2016-08-28 20:18:57 -07:00
Erik Schnetter
e119c32a9c Hot-fix for qthreads (#1632)
The download tarball for qthreads vanished. Install it from a git branch instead as temporary work-around.
2016-08-28 20:18:24 -07:00
Jeffrey Salmond
82808f944a New package: opencoarrays (#1633)
* opencoarrays: new package

* opencoarrays: remove tests from install due to (unimportant) failures in some configurations

* opencoarrays: fix flake8 errors
2016-08-28 20:17:22 -07:00
Tyler Esser
83897af710 Documentation: Fix accidental quotation. version() takes expand as a keyword. (#1640) 2016-08-28 20:16:08 -07:00
Adam J. Stewart
d39322e278 Run flake8 checks on new untracked files (#1510) 2016-08-28 19:35:09 -07:00
Todd Gamblin
ed365614f4 Add git-lfs package. 2016-08-28 19:27:59 -07:00
Robert D. French
974749aaf6 Provide mpi-less variant for nco (#1643) 2016-08-28 19:15:15 -07:00
Erik Schnetter
6acfcd82b1 Update Julia to 0.5 release branch; install some Julia package as well (#1637)
* Update Julia to 0.5 release branch; install some Julia package as well

* Add comments, correct flake8 error

* Correct flake8 error
2016-08-28 17:46:10 -07:00
Robert D. French
079d063c6d Variant for building cdo without mpi (#1638) 2016-08-28 17:43:54 -07:00
Erik Schnetter
db7c3d2de6 New package for the Mercurial (hg) version control system (#1644)
* New package "mercurial"

* Disable self-checks

The self-checks require subversion, which we don't want to require.
2016-08-28 17:31:15 -07:00
Todd Gamblin
2053db4d17 Make clang detection work on AWS Ubuntu14. 2016-08-27 17:04:46 -07:00
Todd Gamblin
7ebb17e459 Remove stale operating_system.py test per discussion in #1631
- Test has not been registered in `__init__.py` for a while and needs a
  refresh.
2016-08-25 21:20:34 -07:00
becker33
e73a1a4ec3 Merge pull request #1558 from mcfadden8/mmcfadden-features/gcc-pic-libraries
Added variant to gcc package to install PIC versions of libgfortran and libstdc++
2016-08-25 16:00:00 -07:00
Gregory Lee
77c24d4127 Merge pull request #1379 from LLNL/features/graphlib3
added stat 3.0 beta and added pygtk and dependent packages
2016-08-25 09:14:36 -07:00
Massimiliano Culpo
80754a4062 and the missing word is... (#1628) 2016-08-25 02:46:12 -07:00
Todd Gamblin
8170bcfcdd Merge pull request #1574 from ARCCA/plumed-push
Update plumed package to include optional modules
2016-08-25 02:45:33 -07:00
Andrew Williams
07e0da24c5 Reverted url to point to tarball rather than git tag 2016-08-25 10:21:56 +01:00
Todd Gamblin
22d2786940 Merge pull request #1580 from davydden/pkg/trilinos_url_fix
trilinos: switch to github url; fix missing py-numpy dependency
2016-08-25 02:10:05 -07:00
Todd Gamblin
e9bc3a9e32 Merge pull request #663 from citibeth/efischer/160327-DocumentationImprovements
[RtM] Documentation Improvements
2016-08-25 02:04:30 -07:00
Todd Gamblin
848299ba38 Merge pull request #1621 from KineticTheory/boost-intel
Boost: fix recipe for Intel compilers.
2016-08-24 15:23:29 -07:00
Kelly (KT) Thompson
2ddaabed25 + Boost: fix recipe for intel compilers.
This is the same patch provided by PR #550, but rebased against the current
develop branch. It also passes the flake8 checks.
2016-08-24 15:57:28 -06:00
Todd Gamblin
062ff13da6 Make spack info print deps in sorted order 2016-08-24 14:10:25 -07:00
Todd Gamblin
93cb2db531 Fix build dependency. 2016-08-24 14:10:12 -07:00
Todd Gamblin
a7e568b1d1 Merge branch 'eschnett/sympol' of git://github.com/eschnett/spack into eschnett-eschnett/sympol 2016-08-24 14:05:05 -07:00
Todd Gamblin
19bbe5e421 Merge pull request #1596 from eschnett/eschnett/git-update
Update git to 2.9.3
2016-08-24 14:03:04 -07:00
Todd Gamblin
86fe78f5f1 Merge pull request #1582 from eschnett/eschnett/gcc-update
Update gcc to @6.2.0
2016-08-24 14:02:54 -07:00
Adam J. Stewart
eace068788 Use self.run_tests for make check 2016-08-24 15:21:23 -05:00
Adam J. Stewart
70bb1f1707 Reduce number of variants, just use system or no-system libs 2016-08-24 14:39:05 -05:00
Elizabeth Fischer
85be3aefa7 Put url_for_version() after versions in example. 2016-08-24 15:26:19 -04:00
Todd Gamblin
24c0ece841 Merge pull request #1615 from trws/module_delim_portability
avoid specifying --delim unless required
2016-08-24 12:12:44 -07:00
Tom Scogland
2b6833cb80 appeasing flake8, also cleaning up header
The header append lines were too long, so I just converted it into a
multi-line string template so it's all one piece now instead of a bunch
of appends.
2016-08-24 11:56:33 -07:00
Tom Scogland
73620fe868 avoid specifying --delim unless required
This increases portability of generated module files to versions of
environment_modules hearkening back to just after the turn of the
millennium.
2016-08-24 11:00:16 -07:00
Todd Gamblin
e6bac6f208 Merge pull request #1613 from eschnett/eschnett/cmake-update
Update cmake to 3.6.1
2016-08-24 08:49:33 -07:00
Todd Gamblin
63859bf113 Merge pull request #1575 from davydden/pkg/nwchem
nwchem: add new package
2016-08-24 08:49:11 -07:00
Todd Gamblin
5cfa74801f Merge pull request #1565 from adamjstewart/features/fftw
Add latest version of fftw
2016-08-24 08:49:00 -07:00
Adam J. Stewart
5970b7a00a Only run tests if explicitly requested 2016-08-24 10:34:20 -05:00
Erik Schnetter
41750ce70d Update cmake to 3.6.1 2016-08-24 10:45:13 -04:00
Denis Davydov
d154f151aa py-cclib: new package 2016-08-24 16:26:35 +02:00
Denis Davydov
6d2d5806b5 nwchem: add python module 2016-08-24 13:40:02 +02:00
citibeth
8a481e7e13 Added CMake-based Development case study to docuemntation. 2016-08-23 16:39:01 -04:00
Elizabeth F
86d39255ec Explained url_for_version() 2016-08-23 16:39:01 -04:00
citibeth
2efd7a5e0b Added note on use of 'less -R' for colorized output. 2016-08-23 16:36:02 -04:00
Denis Davydov
dae219d5c3 nwchem: add another patch 2016-08-23 22:24:16 +02:00
Denis Davydov
459b6eae11 nwchem: add another patch 2016-08-23 22:15:38 +02:00
Erik Schnetter
3194f2001b Update git to 2.9.3 2016-08-23 15:35:43 -04:00
Erik Schnetter
05f5ba4bf9 Correct flake8 errors 2016-08-23 14:57:29 -04:00
Erik Schnetter
73cae8d9c4 Implement review requests
- use two empty lines before `class`
- change version numbering scheme for packages, use `url_for_version` to make things work
- specify dependency types
- add comment about temporarily moved download location
- update two packages to newer versions
2016-08-23 13:52:28 -04:00
Denis Davydov
52ae0ea055 trilinos: use version.dashed 2016-08-23 18:48:17 +02:00
Todd Gamblin
de12a34415 Merge pull request #1586 from davidbeckingsale/patch-1
Ensure RAJA builds out-of-source
2016-08-23 08:55:50 -07:00
David Beckingsale
243d516bf0 Ensure RAJA builds out-of-source 2016-08-23 08:18:26 -07:00
Denis Davydov
6500ac80e4 nwchem: fix lapack detection 2016-08-23 16:46:40 +02:00
Erik Schnetter
a2692e4ef5 sympol: Add package 2016-08-23 10:41:08 -04:00
Erik Schnetter
bdc825fc3c cddlib: Point download url to a (more reliable) Fedora server 2016-08-23 09:59:56 -04:00
Erik Schnetter
64d3f87e60 Merge branch 'develop' into eschnett/sympol 2016-08-23 09:45:46 -04:00
Denis Davydov
7eb386e55e nwchem: add patches 2016-08-23 14:52:18 +02:00
Denis Davydov
5da9116c06 nwchem: add scalapack; extra steps for 32bit blas/lapack 2016-08-23 11:55:00 +02:00
Denis Davydov
aca8576de4 trilinos: switch to github url; fix missing py-numpy dependency 2016-08-23 10:50:08 +02:00
Todd Gamblin
e81f3daa28 Merge pull request #1519 from mathstuf/fix-deptypes
Fix deptypes
2016-08-22 21:40:25 -07:00
Erik Schnetter
7b49166f9b Update gcc to @6.2.0
Also add some missing older version.
Update download location to original GNU location.
2016-08-22 20:26:54 -04:00
Denis Davydov
a44beee172 nwchem: add new package 2016-08-23 02:22:44 +02:00
Andrew Williams
65abd279cd Renamed intelmpi as suggested 2016-08-22 13:44:21 +01:00
Andrew Williams
87d15212eb Cleaned branch to only include plumed package 2016-08-22 12:30:17 +01:00
Andrew Williams
4b354cbe26 Merge pull request #1 from ARCCA/plumed
Plumed
2016-08-22 12:15:35 +01:00
Andrew Williams
226d4f04f3 Spelling tweaks and consistent quoting 2016-08-22 12:09:50 +01:00
Andrew Williams
5661afa315 Passed flake8 tests 2016-08-22 12:03:47 +01:00
Andrew Williams
0c8462723b Found upstream plumed package and modified this one to match 2016-08-22 11:24:03 +01:00
Todd Gamblin
fbe76c41fd Merge pull request #1570 from eschnett/eschnett/hdf5-blosc-2
hdf5-blosc: Correct download url
2016-08-21 12:12:09 -07:00
Erik Schnetter
78685addbb hdf5-blosc: Correct download url 2016-08-21 14:39:54 -04:00
Todd Gamblin
55b1182a4c Merge pull request #1554 from eschnett/eschnett/hdf5-blosc
hdf5-blosc: Remove commit id from version specification
2016-08-21 09:44:25 -07:00
Adam J. Stewart
d5903e4612 Flake8 2016-08-19 17:06:34 -05:00
Adam J. Stewart
f0f2c6c486 Add latest version of fftw 2016-08-19 17:05:14 -05:00
Gregory L. Lee
a177b9be8a updated stat 3.0.0b url 2016-08-19 13:11:21 -07:00
Adam J. Stewart
df623dad15 Suggest setuptools when creating Python package 2016-08-19 14:31:42 -05:00
Adam J. Stewart
835b8f246e py-sphinx requires py-setuptools during runtime 2016-08-19 14:20:31 -05:00
Adam J. Stewart
d7873b5319 Swap lowercase for uppercase in URL 2016-08-19 14:00:50 -05:00
Adam J. Stewart
c1af0d3806 Fix binary conflicts during sphinx activation 2016-08-19 13:54:22 -05:00
Adam J. Stewart
d4e3699510 Add all Sphinx dependencies 2016-08-19 13:44:00 -05:00
Erik Schnetter
466da3afcc Remove commented-out outdated commit id 2016-08-19 11:52:40 -04:00
Andrew Williams
90e5ccd98c Cleaned up commented out code in intelmpi package 2016-08-19 15:01:46 +01:00
Andrew Williams
13f636ec68 Added required arguments to get plumed to build with intelmpi 2016-08-19 15:00:21 +01:00
Adam J. Stewart
28537ae7b7 Workaround until variant forwarding works properly 2016-08-18 14:40:21 -05:00
Tom Scogland
c8dd1bb40b Merge pull request #1527 from SteVwonder/py-cffi-rpath-fix
py-cffi: set LDSHARED in env so that rpath is set
2016-08-18 11:55:40 -07:00
Stephen Herbein
3445a781eb py-cffi: set LDSHARED env so that rpath is set
py-cffi's .so was being built without the rpath being set.  distutils
looks at the LDSHARED for which compiler to use to build the final .so.
Since it was not set, distutils fell back to the system provided
compiler.  Setting it forces the shared library to be compiled with the
spack compiler (meaning that the rpath is set correctly).
2016-08-18 11:32:19 -07:00
Andrew Williams
6641f42417 Not compiling due to mpi error. Also getting this error from the command line so could be separate issue. Otherwise package definition first draft complete. 2016-08-18 13:19:36 +01:00
Erik Schnetter
296212d78d hdf5-blosc: Remove commit id from version specification
The respective commit seems to have vanished.
Now using the master branch without specifying a particular commit.
2016-08-17 16:36:33 -04:00
Adam J. Stewart
4d12c5455a Fix NetCDF/HDF5 dependency resolution problems 2016-08-17 13:03:56 -05:00
Marty McFadden
f4ec99ecb4 Added +piclibs variant for building PIC versions of libgfortran.a and libstdc++.a 2016-08-17 09:28:21 -07:00
Andrew Williams
b99e945e6d Added variants and dependencies to plumed but I'm getting an error when trying to resolve mpi to a valid virtual package 2016-08-17 15:43:59 +01:00
Elizabeth Fischer
a733e7e303 py-pathspec: New package
Related to Python unit testing.
2016-08-17 00:34:33 -04:00
becker33
7f57405eac Merge pull request #1531 from davydden/pkg/ape
ape: add new package
2016-08-16 10:52:27 -07:00
becker33
e8afbfbce7 Merge pull request #1530 from davydden/pkg/octopus
octopus: new package
2016-08-16 10:49:41 -07:00
Denis Davydov
5dcc0f7802 ape: add new package 2016-08-16 19:42:32 +02:00
Denis Davydov
9509c10064 octopus: new package 2016-08-16 19:38:38 +02:00
Gregory L. Lee
f182590aae added pkg-config to build deps of cairo and pixman 2016-08-15 15:17:53 -07:00
Gregory L. Lee
54ef9443d3 fix atk url_for_version 2016-08-15 13:51:54 -07:00
Gregory L. Lee
74dd7a36b5 allow parallel build of stat 2016-08-15 13:51:54 -07:00
Gregory L. Lee
749a4e78c7 gobject-introspection requires glib version 2.48.1 2016-08-15 13:51:54 -07:00
Gregory L. Lee
3df208efc0 stat and dependences package updates 2016-08-15 13:51:53 -07:00
Gregory L. Lee
69931996bf added dyninst patches for stat+dysect 2016-08-15 13:51:53 -07:00
Gregory L. Lee
f9cb21e886 flake 8 fixes for dyninst 2016-08-15 13:51:53 -07:00
Gregory L. Lee
0074ecd6fa dyninst package use spec.satisfies instead of @when 2016-08-15 13:51:52 -07:00
Gregory L. Lee
8b94937609 flake 8 fixes for stat and dependents
flake 8 fixes for dyninst

flake 8 fixes for dyninst

flake 8 fixes for dyninst
2016-08-15 13:50:39 -07:00
Gregory L. Lee
bd8aab00e4 updated stat and added pygtk and dependent packages 2016-08-15 13:48:58 -07:00
Todd Gamblin
ae20e53cfb Merge pull request #1524 from epfl-scitas/bugfix/urls
stripping the links to remove spaces and '\n'
2016-08-15 13:42:38 -07:00
Nicolas Richart
37faa41b6f stripping the links to remove spaces and '\n' 2016-08-15 21:13:25 +02:00
Todd Gamblin
1e673bfa42 Don't assume spack is in the path when buildign docs. 2016-08-15 10:49:09 -07:00
Andrew Williams
27793d97dc temp commit in current state 2016-08-15 16:16:00 +01:00
Ben Boeckel
9ec1c0e18e opencv: make py-numpy a nolink dependency 2016-08-15 10:47:00 -04:00
Ben Boeckel
042666eb7e go: mark git as also being a runtime dependency 2016-08-15 10:46:45 -04:00
Ben Boeckel
826732efec packages: mark builddeps as type='build'
Less sure about these.
2016-08-15 10:46:23 -04:00
Ben Boeckel
eb13cbe9bd r-datatable: fix nolink dependency 2016-08-15 10:46:05 -04:00
Ben Boeckel
0d17d90b29 packages: mark builddeps as type='build' 2016-08-15 10:45:19 -04:00
Andrew Williams
3edfa390f7 Basic package file for plumed and boilerplate for external intel mpi 2016-08-15 11:19:40 +01:00
Adam J. Stewart
bc64990bc6 Replace python('setup.py' with setup_py( 2016-08-12 12:16:48 -05:00
Todd Gamblin
483e4116c0 Merge pull request #1509 from adamjstewart/docs/md5
Update documentation for spack md5
2016-08-12 09:19:36 -07:00
Todd Gamblin
e1c2ea5123 Merge pull request #1342 from adamjstewart/features/cgns
Add CGNS package
2016-08-12 09:19:07 -07:00
Adam J. Stewart
c815aed207 Update documentation for spack md5 2016-08-12 10:51:56 -05:00
Adam J. Stewart
d4377c1293 Add Python 3.5 support, latest version of PySide 2016-08-12 09:59:38 -05:00
Adam J. Stewart
633e540a17 Use GitHub URL for ImageMagick 2016-08-11 14:13:33 -05:00
becker33
ec7f58bf96 Merge pull request #1493 from xjrc/bugfix/nonbool-variants
Bug Fix : Allow Packages to Have Variants w/ Non-Bool, Non-String Defaults
2016-08-11 11:33:54 -07:00
becker33
1be63348b5 Merge pull request #1484 from mpbelhorn/olcf/correct_cce_compiler_name
Olcf/correct cce compiler name
2016-08-11 11:30:36 -07:00
Matt Belhorn
568305ddff Corrects Cray compiler name and adds missing version flag. 2016-08-11 13:56:21 -04:00
Todd Gamblin
cd6c370303 Merge pull request #1480 from adamjstewart/features/run-flake8
Various improvements to run-flake8
2016-08-11 10:31:43 -07:00
Adam J. Stewart
f147d64527 Rebase messed up flake8 2016-08-11 11:01:57 -05:00
Adam J. Stewart
04cee45ac9 Skip webengine until webkit support is added 2016-08-11 10:33:43 -05:00
Adam J. Stewart
2b0444b6f4 Latest version of pyside still has problems, add deps 2016-08-11 10:33:43 -05:00
Adam J. Stewart
b6fad65f52 Combine patch for all versions
Patch doesn't work with @when unless you specify a patch for every
version. When running `spack patch` for a version without a patch,
spack thinks that a patch exists, tries to apply it, but it doesn't
exist. Spack gets very confused.
2016-08-11 10:33:43 -05:00
Adam J. Stewart
1363b05e93 Add test dependencies 2016-08-11 10:33:43 -05:00
Adam J. Stewart
5cc76f7d84 Fix patch for py-pyside 1.2.4 2016-08-11 10:33:43 -05:00
Adam J. Stewart
59ce0c7514 Add patch to build qt 4 with GCC 6 2016-08-11 10:33:42 -05:00
Adam J. Stewart
ddf1879bed Remove glib dependency, causes problems with PCRE and JavaScript 2016-08-11 10:33:02 -05:00
Adam J. Stewart
90dd26397c Fix qt patch 2016-08-11 10:33:02 -05:00
Adam J. Stewart
7135299a66 Add latest version of pcre 2016-08-11 10:33:02 -05:00
Adam J. Stewart
ac15d5d619 Add patch for qt gamepad compilation problems 2016-08-11 10:33:01 -05:00
Adam J. Stewart
eac9a5905f Flake8 and url_for_version changes 2016-08-11 10:33:01 -05:00
Adam J. Stewart
80742b2647 Add latest version of qt 2016-08-11 10:30:31 -05:00
Adam J. Stewart
8a0824df09 Update matplotlibrc filtering for GUI backends 2016-08-11 10:28:35 -05:00
Adam J. Stewart
a388871083 Update ImageMagick to latest version 2016-08-11 10:28:35 -05:00
Adam J. Stewart
2b83ea30e7 Re-add ipython support 2016-08-11 10:28:35 -05:00
Adam J. Stewart
f56de63972 Fix cycler dependencies, update qhull version names 2016-08-11 10:28:35 -05:00
Adam J. Stewart
0b8a3ad8ad Flake8 2016-08-11 10:28:34 -05:00
Adam J. Stewart
aa6a6df640 Undo changes to GUI framework 2016-08-11 10:28:34 -05:00
Adam J. Stewart
e905ce16c9 Flake8 2016-08-11 10:28:34 -05:00
Adam J. Stewart
11e595089d Matplotlib overhaul 2016-08-11 10:28:33 -05:00
Adam J. Stewart
b47357d73c Add patch for Intel compilers 2016-08-11 10:22:47 -05:00
Adam J. Stewart
5fc20487e4 Flake8 and formatting changes 2016-08-11 10:22:47 -05:00
Adam J. Stewart
534e1cbf1b Some tests don't pass with Intel compilers 2016-08-11 10:20:08 -05:00
Adam J. Stewart
ee5e20dae3 Add dependencies to libarchive and cmake 2016-08-11 10:17:42 -05:00
Adam J. Stewart
58d7704060 Overhaul of compression libraries 2016-08-11 10:15:13 -05:00
Mayeul d'Avezac
7769367747 dag_hash stabilised by depending on sorted dict
Spec.to_node_dict uses OrderedDict

This is to try and ensure that the dag_hash is stable across python
version and processes.
2016-08-11 16:03:50 +01:00
Adam J. Stewart
87d0a7c315 Always clean up tmp files, even if killed 2016-08-11 09:56:41 -05:00
Adam J. Stewart
09c9786fab Allow run-flake8 to be run from anywhere 2016-08-11 09:53:04 -05:00
Adam J. Stewart
1edfc82123 Run flake8 checks on changed uncommitted files 2016-08-11 09:53:04 -05:00
Todd Gamblin
e6a122417a Merge pull request #1491 from eschnett/eschnett/curl
Update curl to 7.50.1
2016-08-11 03:04:07 -07:00
alalazo
f5433477b9 qa : flake8 issues 2016-08-11 09:08:00 +02:00
alalazo
b4b9ebe7d7 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts:
	lib/spack/llnl/util/tty/log.py
	lib/spack/spack/__init__.py
	lib/spack/spack/cmd/install.py
	lib/spack/spack/cmd/setup.py
	lib/spack/spack/package.py
	var/spack/repos/builtin/packages/blitz/package.py
	var/spack/repos/builtin/packages/gmp/package.py
	var/spack/repos/builtin/packages/qhull/package.py
	var/spack/repos/builtin/packages/szip/package.py
2016-08-11 08:55:20 +02:00
becker33
f59653ac2c Merge pull request #1496 from LLNL/features/pep8-compliance
PEP8 compliance
2016-08-10 17:36:31 -07:00
Todd Gamblin
84e331c586 Remove unneeded noqa comments. 2016-08-10 16:33:39 -07:00
Todd Gamblin
db59f87e32 Update README.md for PEP8 2016-08-10 16:33:39 -07:00
Todd Gamblin
240f1fd223 Spack packages now PEP8 compliant. 2016-08-10 16:33:39 -07:00
Todd Gamblin
867121ca68 Move jsonschema files out of config.py to their own package. 2016-08-10 16:33:38 -07:00
Todd Gamblin
bf1072c902 Make Spack core PEP8 compliant. 2016-08-10 16:33:37 -07:00
Todd Gamblin
8061deb883 Merge pull request #1495 from LLNL/bugfix/module-init-deprecation-gh1494
Fix superclass constructor args.
2016-08-10 16:12:23 -07:00
Todd Gamblin
e7f4fd404d Fix superclass constructor for SpackNamespace objects. 2016-08-10 15:54:13 -07:00
Joseph Ciurej
aa860bf4df Fixed a bug that was making packages with non-bool default variants to crash. 2016-08-10 11:54:33 -07:00
Erik Schnetter
158deae625 Update curl to 7.50.1 2016-08-10 13:51:57 -04:00
becker33
cfde03e694 Merge pull request #1485 from hartzell/patch-6
Fix typo 'flexbile' -> 'flexible'
2016-08-09 15:34:51 -07:00
George Hartzell
4bca1c5440 Fix typo 'flexbile' -> 'flexible' 2016-08-09 15:13:08 -07:00
Todd Gamblin
d380d16427 Merge pull request #1482 from mpbelhorn/olcf/do_not_use_ssl_to_fetch_upstream_openssl
Openssl package should not require openssl (https) to obtain source.
2016-08-09 13:22:31 -07:00
Matt Belhorn
2be065418b Openssl package should not require openssl (https) to obtain source. 2016-08-09 15:57:07 -04:00
Todd Gamblin
a095fd517f Merge pull request #1015 from LLNL/features/faster-virtuals
Faster virtuals and concretization
2016-08-09 10:33:40 -07:00
becker33
fb9f6fe9b5 Merge pull request #1473 from epfl-scitas/packages/plumed_dependents
plumed : added dependents (gromacs, cp2k)
2016-08-09 09:14:33 -07:00
Todd Gamblin
9d4a36a62f Properly re-raise exceptions from lock context handler. 2016-08-09 02:25:09 -07:00
Todd Gamblin
0c75c13cc0 Flake8 fixes 2016-08-09 02:25:07 -07:00
alalazo
38dcd6bce9 qa : flake8 issues 2016-08-09 09:54:24 +02:00
Todd Gamblin
102ac7bcf1 Move provider cache to home directory and refactor Transactions
Major stuff:

- Created a FileCache for managing user cache files in Spack.  Currently just
  handles virtuals.

- Moved virtual cache from the repository to the home directory so that users do
  not need write access to Spack repositories to use them.

- Refactored `Transaction` class in `database.py` -- moved it to
  `LockTransaction` in `lock.py` and made it reusable by other classes.

Other additions:

- Added tests for file cache and transactions.

- Added a few more tests for database

- Fixed bug in DB where writes could happen even if exceptions were raised
  during a transaction.

- `spack uninstall` now attempts to repair the database when it discovers that a
  prefix doesn't exist but a DB record does.
2016-08-09 00:24:54 -07:00
alalazo
5362864cc9 plumed : fixed name clash on attribute 2016-08-09 09:24:36 +02:00
Massimiliano Culpo
15d9fb1879 plumed : adding dependents
* cp2k : added plumed
* gromacs : patched pme load balancing
* gromacs : added plumed
2016-08-09 09:23:53 +02:00
Todd Gamblin
2042e9a6d8 Fix bugs with sparse spec printing.
- Make namespace, arch, and dependnecies show up in spec yaml
  only if they're set.

- Lost some of this functionality with deptypes
2016-08-08 21:04:23 -07:00
Todd Gamblin
1339714eec Restore text output in verbose mode. 2016-08-08 21:04:23 -07:00
Todd Gamblin
5d690c9270 Make compiler command test last until caching is fixed.
- global compiler cache breaks tests that come after this one.
2016-08-08 21:04:23 -07:00
Todd Gamblin
e5743db9b9 Fix issues with import order in tests.
- modules weren't set properly as attributes in parent modules
2016-08-08 21:04:23 -07:00
Todd Gamblin
d195576fba WIP 2016-08-08 21:04:23 -07:00
Todd Gamblin
5e5024342f Fix iterator invalidation issues. 2016-08-08 21:04:23 -07:00
Todd Gamblin
4de45c2684 fix scoping issue. 2016-08-08 21:04:23 -07:00
Todd Gamblin
ce6ac93abe rename virtual module to provider_index 2016-08-08 21:04:23 -07:00
Todd Gamblin
1f5a21decf Fix namespace support in Repo.get_pkg_class() 2016-08-08 21:04:23 -07:00
Todd Gamblin
ab049eca41 Faster key in FlagMap._cmp_key 2016-08-08 21:04:23 -07:00
Todd Gamblin
37fc258313 Remove vestigial methods from Package. 2016-08-08 21:04:23 -07:00
Todd Gamblin
faa0a0e4c3 Add a ProviderIndex cache.
- Spack will check if the index needs updating, and will only parse
  all package files if it does.

- Spack tries to parse as few package files as necessary.
2016-08-08 21:04:23 -07:00
Todd Gamblin
cf2f902b82 Make ProviderIndexes mergeable, so we can cache them per-repo. 2016-08-08 21:04:23 -07:00
Todd Gamblin
bf028990e7 Make ProviderIndex yaml-izable.
- allow a provider index to be stored and re-read.
2016-08-08 21:04:23 -07:00
Todd Gamblin
025609c63f More compact YAML formatting for abstract specs.
- Don't add empty/absent fields to Spec YAML when they're not there.
2016-08-08 21:04:23 -07:00
Todd Gamblin
7aaad89ba9 Lazily evaluate all_package_names in repository.py
- Don't need to list all packages unless we have to.

- Only use the list of all packages for existence checks if we have
  generated it for some other purpose.
2016-08-08 21:04:23 -07:00
becker33
2b94d7cf8e Merge pull request #1472 from adamjstewart/fixes/rstrip
Only strip newline chars, not spaces
2016-08-08 13:28:56 -07:00
Adam J. Stewart
5d48c108a3 Only strip newline chars, not spaces 2016-08-08 15:02:05 -05:00
becker33
3ea1325620 Merge pull request #1345 from hartzell/feature/add-perl-dependency-to-git
Add depends_on('perl'), depends_on('pcre') to git package
2016-08-08 09:44:50 -07:00
Todd Gamblin
dd30066feb Merge pull request #1449 from hartzell/feature/add-package-for-prank
Add package for prank and supporting tools
2016-08-07 23:43:40 -07:00
Todd Gamblin
e65a8b6a9a Merge pull request #1463 from davydden/pkg/opium
opium: add new package
2016-08-07 15:56:27 -07:00
Todd Gamblin
8121ac2c27 Merge pull request #1464 from hartzell/feature/update-lmod
No need to patch Lmod after 6.4.4
2016-08-07 15:55:16 -07:00
Todd Gamblin
93f5a750cb Merge pull request #1465 from glennpj/pango_url
Add list_url to pango package
2016-08-07 15:55:04 -07:00
Todd Gamblin
281f6f18e1 Merge pull request #1466 from pramodk/develop
PDT should download full installer package
2016-08-07 15:54:50 -07:00
Denis Davydov
db87a9d3ce tar: fix 1.28 on macOS; add 1.29 (#1462) 2016-08-07 15:54:01 -07:00
Adam J. Stewart
d7329d7bc2 Fix erroneously stripped trailing whitespace in patch (#1467) 2016-08-07 15:53:25 -07:00
Pramod Kumbhar
e9edfec0ec PDT should download full installer package pdtoolkit-X.tar.gz (default pdt-X.tar.gz is only for x86 and cray) 2016-08-07 01:14:26 +02:00
Glenn Johnson
2ad21e7070 Add list_url to pango package
Added a `list_url` so the updated pango tar file can be retrieved.
2016-08-06 18:12:47 -05:00
George Hartzell
09d96bef9f No need to patch Lmod after 6.4.4
The Lmod author changed the src so that it uses the tclsh (and shared
libraries) discovered at configure time.  He did it differently that I
did in this patch, but he changes solve our problem too, so...
2016-08-06 17:39:05 -04:00
George Hartzell
9ebbde0e01 Make configure use our gettext library
The configure script needs extra encouragement to link against our
gettext/libintl library.
2016-08-06 16:28:47 -04:00
George Hartzell
1de5817b58 Clean up rebase problems
My rebase duplicated the depends_on('zlib') and dropped the --with-curl
from the configure.

This fixes those.
2016-08-06 16:28:47 -04:00
George Hartzell
f699d7c08e [Whitespace] Gather the depends_on's together. 2016-08-06 16:28:47 -04:00
George Hartzell
152fa33a55 Call configure --with-libpcre=... to use our pcre
An earlier commit claimed that this package depends_on('pcre') but I
didn't fix the call to configure that enabled it.

This fixes that.
2016-08-06 16:28:47 -04:00
George Hartzell
3cf2fd40a8 Enable depends_on('pcre') also
While I have the patient on the operating table, @adamjstewart asked
me to uncomment and test the depends_on('pcre').

Did it and it Works For Me(tm).
2016-08-06 16:28:47 -04:00
George Hartzell
653905e3a2 Add depends_on('perl') to git package
This commit changes the git package to depend_on('perl').  The system
perl is not always sufficient to install git (e.g. a CentOS7 system with
the development tools group installed has perl but not the
ExtUtils::MakeMaker package that git needs) and one can't always update
the system's perl.

This PR depends_on PR #1339, which adds a perl package to spack.
2016-08-06 16:28:47 -04:00
George Hartzell
f800708ef3 Switch to using *std_cmake_args 2016-08-06 16:27:40 -04:00
George Hartzell
6a62a6b693 Flake8 whitespace cleanup 2016-08-06 16:27:40 -04:00
George Hartzell
a07a0ef54b Add Bio++ tool suite and supporting libs
Add the Bio++ suite and its supporting libraries.
2016-08-06 16:27:40 -04:00
George Hartzell
3c81bb44ba Add package for mafft 2016-08-06 16:27:40 -04:00
George Hartzell
e0db1f0268 Add package for exonerate 2016-08-06 16:27:40 -04:00
George Hartzell
9e16902397 Fix name of bpp-suite (missing -...) 2016-08-06 16:27:40 -04:00
George Hartzell
63592096c5 Add package for prank 2016-08-06 16:27:40 -04:00
Denis Davydov
4983ebcf7c opium: add new package 2016-08-06 21:35:52 +02:00
becker33
d3f115933e Merge pull request #1451 from hartzell/feature/add-package-for-fastx_toolkit
Add package for fastx toolkit
2016-08-05 15:09:46 -07:00
becker33
18d155e713 Merge pull request #1452 from hartzell/feature/add-package-for-samtools
Add package for samtools
2016-08-05 15:09:41 -07:00
George Hartzell
a6afaeb974 Remove lingering FIXME commentary 2016-08-05 17:51:24 -04:00
George Hartzell
769408130a Samtools depends on htslib from 1.3.1 onward
Samtools used to (before 1.3.1) include it's own copy of htslib.  Going
forward, it needs to use the standalone htslib.
2016-08-05 17:47:11 -04:00
becker33
90f68d2c66 Merge pull request #1460 from glennpj/fix_list_vcs
Catch error for version in VCS
2016-08-05 13:34:37 -07:00
becker33
8e20a14945 Merge pull request #1453 from hartzell/feature/add-package-for-seqtk
Add package for seqtk
2016-08-05 10:25:19 -07:00
becker33
f403f256ca Merge pull request #1450 from hartzell/feature/add-package-for-bwa
Add package for bwa
2016-08-05 10:21:10 -07:00
Glenn Johnson
20221ee3aa Catch error for version in VCS
This PR will catch the error where the url can not be determined from a
VCS URL, such as git. It will print a message to the console and move on
because it should not be a fatal error at this point in the process.

This should fix #1459.
2016-08-05 11:16:43 -05:00
becker33
594a6710ed Merge pull request #1442 from suraia/update-scorep-2.0
Update Score-P to 2.0

Most likely this can be generalized to link against older versions of dependencies, but it looks good for now.
2016-08-05 08:57:25 -07:00
George Hartzell
d6dedee6ff Flake8 cleanup 2016-08-04 15:23:04 -04:00
Bruno Turcksin
0c02ee86a7 Add Trilinos 12.6.4 (#1447) 2016-08-04 11:29:10 -07:00
George Hartzell
e12d7aadda Add package for seqtk
Seqtk is a tool for working with fast[aq] files.
2016-08-04 14:18:03 -04:00
George Hartzell
fd11db92e1 Add package for bcftools 2016-08-04 14:18:03 -04:00
George Hartzell
ba0577dc96 Update samtools to support v1.3.1
Update the samtools package to support v1.3.1, which
- now uses configure script; and
- now depends on external htslib package.

The dependency on mpc seems to have been bogus, it's never linked in,
nor is it mentioned in the source tree.  I *do* have a version in
/usr/lib64, but ldd does not sure it being linked in either....

By depending on 'ncurses' I can do away with the need for the patch.
2016-08-04 14:18:03 -04:00
George Hartzell
ef1369c365 Add package for htslib
Htslib was pulled out of samtools and made into a standalone thing.
This commit adds a packag for it, in support of the samtools package.
2016-08-04 14:18:03 -04:00
George Hartzell
e17862c421 Add package for fastx toolkit
Tools for working with FASTA/FASTQ files.
2016-08-04 14:18:02 -04:00
George Hartzell
d5bb2955b1 Add package for libgtextutils
Gordon's Text utils Library, in support of fastx toolkit.
2016-08-04 14:18:02 -04:00
George Hartzell
d4274b32f2 Make flake8 happy (long lines) 2016-08-04 14:18:01 -04:00
Todd Gamblin
6ab78eb88e sbang filtering now works on non-writable files. (#1445)
- sbang now changes mode to writable and restores mode if a file is not
  writable.
2016-08-04 10:46:45 -07:00
Michael Kuhn
d7665a63e3 flake8 fixes 2016-08-04 19:04:48 +02:00
becker33
369b2ef01f Merge pull request #1330 from suraia/fix-ascii-graph
Fix graph command with ASCII output
2016-08-04 09:37:24 -07:00
becker33
1ac1cc3d2c Merge pull request #1437 from jgalarowicz/update-xercesc
Update the version of xerces-c, where the developers remove the old v…
2016-08-04 09:00:36 -07:00
becker33
3c6f6fc811 Merge pull request #1438 from jgalarowicz/update-libmonitor
Update libmonitor to use its new github location, it does not exist w…
2016-08-04 08:59:35 -07:00
becker33
bacfa91cfd Merge pull request #1444 from tobbez/fix_indent_spider
Fix incorrect indentation in spack.util.web._spider
2016-08-04 08:44:35 -07:00
becker33
cabcdf0ec9 Merge pull request #1443 from davydden/pkg/dealii_python
dealii: add optional python bindings
2016-08-04 08:43:36 -07:00
becker33
fcc8b1d3e4 Merge pull request #1431 from hartzell/feature/add-package-for-unison
Add package for unison (and ocaml)
2016-08-04 08:41:45 -07:00
Torbjörn Lönnemark
61b3ecb6d2 Fix flake8 issues 2016-08-04 16:28:14 +02:00
Denis Davydov
af8741c23c dealii: add optional python bindings 2016-08-04 16:11:14 +02:00
Torbjörn Lönnemark
a591e183bc Fix incorrect indentation 2016-08-04 16:09:49 +02:00
Michael Kuhn
584e5506f2 Update Score-P to 2.0 2016-08-04 14:24:25 +02:00
Michael Kuhn
2bd1a51193 flake8 fixes 2016-08-04 13:07:33 +02:00
Michael Kuhn
1578a95982 Fix tests. 2016-08-04 13:07:33 +02:00
Michael Kuhn
7affaca321 Fix graph command with ASCII output. 2016-08-04 13:07:33 +02:00
Todd Gamblin
b7fa2c4e21 Fix #1429: Remove git dep from gettext; break circular dependency.
- It's not really a circular dependency -- git is a run dependency of gettext

- We can revert this change when Spack is smart enough to make git a run
  dependency and build it.
2016-08-03 21:53:53 -07:00
Jim Galarowicz
2e1dbd0697 Fix flake8 errors for: Update libmonitor to use its new github location, it does not exist where the package file now points to. 2016-08-03 21:32:15 -05:00
Jim Galarowicz
e69423a154 Fix flake8 errors for Update the version of xerces-c, where the developers remove the old version, so there is no fallback. 2016-08-03 21:28:56 -05:00
Jim Galarowicz
e68b7d8c63 Update libmonitor to use its new github location, it does not exist where the package file now points to. 2016-08-03 21:08:48 -05:00
Jim Galarowicz
638f779841 Update the version of xerces-c, where the developers remove the old version, so there is no fallback. 2016-08-03 21:04:17 -05:00
Todd Gamblin
be1158f7a3 Merge pull request #1433 from JRWynneIII/error_message_fix
Fix typo for error message when compiler doesn't exist for arch
2016-08-03 14:29:08 -07:00
James Riley Wynne III
f0609699ba Added parens to %'s arguments. Fixes #1432 2016-08-03 17:16:04 -04:00
George Hartzell
43371c31a2 Flake8 cleanup 2016-08-03 16:51:53 -04:00
Todd Gamblin
dce105d16f Merge pull request #1382 from KineticTheory/gktplus3-deps
GTK+3: Provide updates to package dependencies.
2016-08-03 13:45:18 -07:00
George Hartzell
4acf6d76bf Add package for unison
Add package for unison (the file synchronizer).

Needs the ocaml compiler to build.
2016-08-03 16:41:31 -04:00
George Hartzell
a7bfaa3797 Add package for ocaml compiler
Installs the ocaml compiler.
2016-08-03 16:41:31 -04:00
Todd Gamblin
88bb67e279 Merge pull request #1430 from KineticTheory/cray-cc-recursion-fix
Cray: Fix a typo that could cause an infinite recursion when calling env/cc
2016-08-03 13:34:54 -07:00
Kelly (KT) Thompson
46e9d85283 Cray: Fix a typo that could cause an infinite recursion when calling /env/cc.
fixes #1428
2016-08-03 14:15:44 -06:00
Kelly (KT) Thompson
7c46a4c0e4 Provide minor updates after code review
+ Always depend on the gettext package. This simplifies the logic and I no
  longer need to 'import sys'
+ Only apply the patch for the older version of glib.
2016-08-03 13:26:02 -06:00
becker33
3e6ebd577f Merge pull request #1378 from LLNL/bugfix/gh-1324-intel-parallel-studio
Bugfix/gh 1324 intel parallel studio
2016-08-03 10:46:40 -07:00
becker33
353726f08f Merge pull request #1156 from adamjstewart/features/py-meep
Add py-meep package and dependencies

Merging to add the gettext support, will submit a separate issue for the LD_LIBRARY_PATH issue with MPI and py-meep
2016-08-03 10:07:05 -07:00
becker33
7ae163d436 Merge pull request #1361 from epfl-scitas/features/module_token_expansion_in_environment
module : token expansion in environment
2016-08-03 09:49:28 -07:00
becker33
b9195b415a Merge pull request #1420 from epfl-scitas/packages/plumed
plumed : added package
2016-08-03 08:36:31 -07:00
alalazo
2f1c000f62 qa : flake8 issues 2016-08-03 08:26:58 +02:00
Kelly (KT) Thompson
d7d12aa2dc One more formatting change to make flake8 happy. 2016-08-02 19:05:48 -06:00
becker33
48997cffa1 Merge pull request #1233 from hartzell/add-nextflow
First cut package for nextflow, has issues
2016-08-02 11:52:19 -07:00
becker33
4ff4eab476 Merge pull request #1236 from davydden/pkg/arpack-ng_blas
arpack-ng: fix blas/lapack libraries
2016-08-02 11:50:42 -07:00
Denis Davydov
f90692cf81 arpack-ng: fix blas/lapack libraries 2016-08-02 20:27:34 +02:00
becker33
13d9eed85b Merge pull request #1424 from adamjstewart/features/setup_py
spack create should use setup_py() instead of python()
2016-08-02 10:28:14 -07:00
Adam J. Stewart
941acef009 spack create should use setup_py() instead of python() 2016-08-02 12:20:28 -05:00
becker33
b5a117c923 Merge pull request #1366 from hartzell/feature/add-package-for-ack
Add package for ack
2016-08-02 10:11:11 -07:00
becker33
1534a115bd Merge pull request #1421 from hartzell/feature/add-package-for-texlive
Add package for texlive
2016-08-02 10:10:43 -07:00
becker33
a03a35565e Merge pull request #1339 from hartzell/features/add-perl
Add perl package
2016-08-02 10:10:04 -07:00
becker33
326b9838ed Merge pull request #1423 from glennpj/fix_url
Move archive_version setting to if block
2016-08-02 10:05:25 -07:00
George Hartzell
fa70a837d4 Remove accidentally committed cabal-install bits 2016-08-02 13:00:47 -04:00
becker33
91004158c6 Merge pull request #1243 from davydden/pkg/atlas_urls
atlas: fix urls and shared libs
2016-08-02 09:59:05 -07:00
Glenn Johnson
2929fb0a4d Move archive_version setting to if block
The archive_version variable should only get set if versions will be
checked and that is only if there is a list_url in the package file. For
VCS repos setting the variable triggers an error from web.py as it
parses the default_fetcher object.

This should fix #1422.
2016-08-02 11:54:09 -05:00
becker33
3f26bbc8b3 Merge pull request #864 from davydden/kdiff3
kdiff3: initial version of the package
2016-08-02 09:35:00 -07:00
becker33
a3322fab0a Merge pull request #1360 from glennpj/pysetuptoolsdep
Add py-setuptools dependencies to packages
2016-08-02 09:33:40 -07:00
becker33
21158195fb Merge pull request #1354 from paulhopkins/bugfix/preferred_variants_do_not_recognise_-variant
Bugfix/preferred variants do not recognise  -variant
2016-08-02 09:15:06 -07:00
George Hartzell
74a181febc Remove local copy of cpanm installer
This is handled as a resource in the package now.
2016-08-02 12:13:24 -04:00
becker33
9490bd2154 Merge pull request #1373 from hartzell/bug/update-several-r-packages
Update several R packages (r-shiny prereqs)
2016-08-02 09:07:31 -07:00
George Hartzell
4c8672ed1f Add previous versions back into package
Following the advice of @glennpj, added the old versions back into the
packages.

I can install the current packages and the previous packages.
2016-08-02 11:45:16 -04:00
George Hartzell
c77425bb22 Remove useless def unpack
Before I learned that I was stumbling over a real but (#1308), I thought
I needed to arrange for the fetcher to skip the unpack step.

This commit removes the useful `def unpack`.
2016-08-02 11:32:19 -04:00
George Hartzell
a6605d842b Flake8 cleanup. 2016-08-02 11:25:03 -04:00
George Hartzell
f2f5f6c279 Touch up variant comment 2016-08-02 11:18:50 -04:00
George Hartzell
c994565c62 Use "resource" machinery to manage cpanm tarball
Use the resource machinery to fetch/cache/unpack/... the App::cpanminus
tarball.

- this hardcodes the version, I can't figure out how to use a variant to
  hold/set the value and access it in the resource().
- change up the install to use the `with working_dir()` meme.
2016-08-02 11:16:46 -04:00
George Hartzell
1b9becc541 Add the std spack header to perl/package.py
Stole the example header from antlr/package.py, included it at the top
of perl/package.py.
2016-08-02 11:16:46 -04:00
George Hartzell
08ff7b65af Make running perl's tests conditional
Make running perl's tests conditional, one must now specify the
`--run-tests` flag to the `spack install` command in order to run the
tests.

On one system (8 core, 16GB Digital Ocean Droplet), installing without
tests takes 3 minutes, with tests takes 16 minutes.
2016-08-02 11:16:46 -04:00
George Hartzell
4d72e0fb9d Make the cpanm version a variant
Rather than hard-coding the verison of `cpanm` that's [optionally]
installed into the core, make it a variant with a default value of
'1.7042'.

Also discovered that `prefix + 'bin'` is the same as `prefix.bin`, so
embetter that bit of code.
2016-08-02 11:16:46 -04:00
George Hartzell
a5a4525bed Add perl package
Add perl package, based on [work by
justintoo](https://github.com/LLNL/spack/pull/105).  He had too many
things pulled into that pull request, this just adds a perl package.

Support the current releases on the past three minor branches.

Run perl's tests before installing.

Install cpanm into the core (makes building on top of this perl *much*
simpler).  Controlled by a variant.
2016-08-02 11:16:46 -04:00
George Hartzell
949621eb7f Add package for texlive 2016-08-02 11:15:42 -04:00
George Hartzell
857a03c127 Ack should depends_on('perl')
Add a depends_on('perl') and rewrite the script's `#!` line to refer to
that Perl's `perl` executable.
2016-08-02 11:11:05 -04:00
George Hartzell
114da813a3 Remove unnecessary imports.
Now that it's sporting a cleaner install method, these imports are
unnecessary.
2016-08-02 11:11:05 -04:00
George Hartzell
bf467c5df3 Remove override of unpack(self)
I cargo culted that from my *nextflow* package.  I [thought I] needed it
to work around Spack trying to use tar to unpack something that was
neither a tar ball nor unpackable.

This package works fine without it.  In retrospect, the error that I was
seeing in the *nextflow* package was probably this problem #1308.
2016-08-02 11:11:05 -04:00
George Hartzell
6c3623422f Use cleaner mech to install script
Use @adamjstewart's nicer bit of python code in the
install method.
2016-08-02 11:11:05 -04:00
George Hartzell
63121a0c49 Add package for ack
Add a package for [ack](http://beyondgrep.com/install/).  Simply install
the fatpacked script.

It uses '#!/usr/bin/env perl' and it very much not choosy about what
perl it needs.  For now just trust that there's one available, perhaps
someday we can/should uncomment the depends_on('perl').

Follows the methodolgy I used in nextflow.  Has the same
uninstall/install problem that nextflow has, there is an issue in
progress for that: https://github.com/LLNL/spack/issues/1308.

Tested on CentOS7.
2016-08-02 11:11:05 -04:00
George Hartzell
12d1263980 Update several R packages (r-shiny prereqs)
r-jsonlite 0.0.21 -> 1.0
r-mime     0.4    -> 0.5
rcpp       0.12.5 -> 0.12.6

CRAN is funny.  The older versions of these packages are still available
in package specific directories but the current version is not there, so
I don't see any way to make the older versions work.
2016-08-02 11:10:41 -04:00
George Hartzell
6f332c7e4c Fix whitespace, make flake8 happ{y,ier}. 2016-08-02 11:10:12 -04:00
George Hartzell
bfcec69630 Add standard header, use spack helpers
Added the standard header (stolen from R).

Touched up the install to use set_executable rather than doing it
myself.
2016-08-02 11:10:12 -04:00
George Hartzell
4373a2b629 First cut package for nextflow, has issues
This is my first cut at a package to support nextflow.  It's also my
first package.  It works, but has issues.  I'm going to submit a pull
request and get some coaching on how to deal with it.

One issue particular: if I install, then uninstall, then try to install
again (which uses the cached copy of the "distribution file"), it
explodes.
2016-08-02 11:10:12 -04:00
Glenn Johnson
a57d94af03 Fix flake8 issues. 2016-08-02 09:53:57 -05:00
Denis Davydov
a1703bf70d kdiff3: add license block 2016-08-02 16:37:14 +02:00
Gilles Fourestey
dea7bbb4a0 added plumed
* plumed : first version
* plumed : added dependencies and docs
2016-08-02 15:06:46 +02:00
Denis Davydov
565bd5f51e atlas: revert to lapack 3.5.0 2016-08-02 13:52:32 +02:00
Denis Davydov
bef7e2645a atlas: flake8 fixes 2016-08-02 13:52:32 +02:00
Denis Davydov
f6a4a6b00f atlas: add install_test 2016-08-02 13:52:32 +02:00
Denis Davydov
0c0b37800d atlas: set (blas|lapack)_shared_lib 2016-08-02 13:52:32 +02:00
Denis Davydov
4ecf481337 atlas: fix shared libs; set compilers 2016-08-02 13:52:32 +02:00
Denis Davydov
6f7e12d49b atlas: fix urls and use lapack 3.6.0 2016-08-02 13:52:32 +02:00
Denis Davydov
0aa513ad70 libxau: mark pkg-config as build-type dependency 2016-08-02 13:50:46 +02:00
Denis Davydov
450c750214 kdiff3: initial version of the package 2016-08-02 13:49:40 +02:00
Denis Davydov
a4e59c2758 libxau: add missing dependency 2016-08-02 13:49:40 +02:00
Kelly (KT) Thompson
9433e84776 Formatting changes for flake8. 2016-08-01 22:54:51 -06:00
Kelly (KT) Thompson
17f0eb5148 Provide correct download urls and additional dependencies. 2016-08-01 22:10:54 -06:00
ba11f19efc Merge remote-tracking branch 'upstream/develop' into gktplus3-deps 2016-08-01 20:50:28 -06:00
becker33
bb5dd49206 Merge pull request #1419 from LLNL/bugfix-compiler-error-message
Bugfix compiler error message
2016-08-01 17:30:03 -07:00
Gregory Becker
679ceabf36 fixed flake8 errors 2016-08-01 17:22:13 -07:00
Gregory Becker
31042e8ed1 further improved error message 2016-08-01 17:16:06 -07:00
Gregory Becker
2705f2c0e3 changed error raised in concretize compiler to provide better error message 2016-08-01 17:11:10 -07:00
becker33
c678a9e3da Merge pull request #1417 from LLNL/features/combined-cray-platform-cleanup
Removed vestigial cray_xc platform in favor of combined cray platform
2016-08-01 16:26:20 -07:00
Gregory Becker
0cf1f917d5 fixed architecture test 2016-08-01 16:17:31 -07:00
becker33
bc2e0cc87c Merge pull request #1418 from mamelara/bugfix/add_import
Add import statement
2016-08-01 16:09:28 -07:00
Mario Melara
0425f5d523 Add import statement
Add missing import statement for join_path
2016-08-01 15:59:30 -07:00
Gregory Becker
0ce98d4d65 Removed vestigial cray_xc platform in favor of combined cray platform 2016-08-01 15:43:11 -07:00
becker33
7f43a7d134 Merge pull request #1376 from mpbelhorn/olcf/unified_cray_platform
Olcf/unified cray platform
2016-08-01 15:40:11 -07:00
Matt Belhorn
661708b7fa Fixes Flake8 indentation errors. 2016-08-01 17:27:33 -04:00
Matt Belhorn
ae167c09fc Prefers bash over sh.
Assuming a bash interactive environment will be correctly formed on login, we
should prefer to probe the environment using a shell that reports itself as
`bash` instead of `sh` which may not source files that set the
environment modules in statements like:

```
case "$is" in
bash) test -s /etc/bash.bashrc.local && . /etc/bash.bashrc.local ;;
ksh)  test -s /etc/ksh.kshrc.local   && . /etc/ksh.kshrc.local ;;
zsh)  test -s /etc/zsh.zshrc.local   && . /etc/zsh.zshrc.local ;;
ash)  test -s /etc/ash.ashrc.local   && . /etc/ash.ashrc.local
esac
test -s /etc/sh.shrc.local && . /etc/sh.shrc.local
```
2016-08-01 17:17:24 -04:00
becker33
14d861a41c Merge pull request #1414 from adamjstewart/fixes/filter_file
Fix backup=True for filter_file
2016-08-01 14:10:59 -07:00
Matt Belhorn
e864d27641 Replaces bash-ism source for POSIX-compliant .
Change is made in order to use `/bin/sh` on systems where `/bin/sh` is not
simply an alias for `/bin/bash --norc`.
2016-08-01 17:04:09 -04:00
becker33
b892cebe8a Merge pull request #1343 from glennpj/r_unfilter
R extension dependencies with compiler wrapper
2016-08-01 13:51:13 -07:00
becker33
49e47966a8 Merge pull request #1357 from hartzell/patch-6
Fix doc for install_tree (cut/paste error)
2016-08-01 13:45:20 -07:00
becker33
e861e35acf Merge pull request #1234 from mwilliammyers/package-opencv
Update opencv package
2016-08-01 13:44:31 -07:00
becker33
1847aa035d Merge pull request #1348 from glennpj/rcurl
r-curl update and changed remote archive
2016-08-01 13:38:38 -07:00
becker33
630ff6871d Merge pull request #1346 from glennpj/url_list_fetch
Url list fetch
2016-08-01 13:37:57 -07:00
becker33
94238eebfa Merge pull request #1381 from davydden/pkg/mkl_linux
MKL linux fixes
2016-08-01 13:36:10 -07:00
Adam J. Stewart
5b79f0d04a Fix backup=True for filter_file 2016-08-01 15:35:02 -05:00
becker33
dc9fcea989 Merge pull request #1365 from hartzell/feature/add-package-for-tree
Add package for tree
2016-08-01 13:21:09 -07:00
becker33
15514792d5 Merge pull request #1374 from hartzell/bug/fix-jdk-import-of-distutils
Bug: fix jdk package's use of distutils
2016-08-01 13:20:44 -07:00
becker33
851bc506e4 Merge pull request #1367 from adamjstewart/features/pgi
Add latest version of PGI
2016-08-01 13:07:35 -07:00
becker33
932300256c Merge pull request #1413 from mdevlin1/fixes/libxsmm
Fixed libxsmm package
2016-08-01 13:06:05 -07:00
becker33
6361f5c2d4 Merge pull request #1359 from sknigh/libhio
added libhio package
2016-08-01 13:05:29 -07:00
Mitchell Devlin
2d51ea5da4 fixed libxsmm makefile filter 2016-08-01 14:38:16 -05:00
Adam J. Stewart
fed7ba1dab Add latest version of PGI 2016-08-01 13:42:00 -05:00
Glenn Johnson
19578d954f Fix flake8 line length errors 2016-08-01 13:37:42 -05:00
Adam J. Stewart
ab885a5397 Allow git to depend on gettext now that it works 2016-08-01 13:35:22 -05:00
Adam J. Stewart
4014a29d2b Use proper deptype so that spack activate works 2016-08-01 13:35:22 -05:00
Adam J. Stewart
b4cd2a85df Re-add trailing whitespace in patch 2016-08-01 13:35:22 -05:00
Adam J. Stewart
f5aed63b0b pkg-config should be a build dependency only 2016-08-01 13:35:22 -05:00
Adam J. Stewart
5cac0a528c Fix undefined symbols by building shared libraries 2016-08-01 13:35:22 -05:00
Adam J. Stewart
bdb64c2e39 Tell MEEP where to find libctl 2016-08-01 13:35:22 -05:00
Adam J. Stewart
0903ae0599 Final fixes to get libctl working 2016-08-01 13:35:22 -05:00
Adam J. Stewart
1e3a5d4e26 Final fixes to get guile to build 2016-08-01 13:35:21 -05:00
Adam J. Stewart
6db99a4fe7 Rename gc => bdw-gc, fix libunistring bug 2016-08-01 13:35:21 -05:00
Adam J. Stewart
5b1a882fc2 Update meep's url_for_version 2016-08-01 13:35:21 -05:00
Adam J. Stewart
a2578c21e4 Supply flags to bdist 2016-08-01 13:35:21 -05:00
Adam J. Stewart
8d0758fc4c Allow py-meep to link properly 2016-08-01 13:35:21 -05:00
Adam J. Stewart
880cbb2217 Better testing for MEEP 2016-08-01 13:35:21 -05:00
Adam J. Stewart
3b4820f290 Patch pkg-config and update installs for various packages 2016-08-01 13:35:21 -05:00
Adam J. Stewart
9e05fdf4a1 Bug fixes 2016-08-01 13:35:20 -05:00
Adam J. Stewart
7e53f4328f Add py-meep package and dependencies 2016-08-01 13:35:20 -05:00
becker33
e470478dc1 Merge pull request #1363 from hartzell/feature/add-package-for-cask
Add package for cask
2016-08-01 11:08:13 -07:00
George Hartzell
7d303afd64 Address flake8 issue 2016-08-01 13:42:55 -04:00
George Hartzell
1552ed943a Add package for cask
Add a package for cask, the emacs project/dependency management tool.

Based on [Homebrew's formula][brew].

[brew]: https://github.com/Homebrew/homebrew-core/blob/master/Formula/cask.rb
2016-08-01 13:41:28 -04:00
George Hartzell
31b7580b76 Fix jdk package's use of distutils
See issue #1364.  @citibeth's fix works fine.
2016-08-01 13:33:27 -04:00
becker33
cc3fc2ba4c Merge pull request #1322 from mdevlin1/feature/libxsmm
Add libxsmm package
2016-08-01 09:56:09 -07:00
becker33
0ce54c99af Merge pull request #1383 from epfl-scitas/packages/cp2k
cp2k : added package
2016-08-01 09:35:50 -07:00
Matt Belhorn
aaa5c9e8a4 Writes default module list to terminal when debugging. 2016-08-01 12:05:29 -04:00
Paul Hopkins
cca240c8f9 Add concretize_preferences tests 2016-08-01 16:18:11 +01:00
alalazo
ec09dfe5d1 cp2k : added package 2016-08-01 10:41:33 +02:00
Todd Gamblin
fbbb82259a Merge pull request #1407 from glennpj/r-ncdf4
New package - r-ncdf4
2016-07-31 22:15:52 -07:00
Todd Gamblin
ea11aab71f Merge pull request #1406 from glennpj/r-np
New package - r-np
2016-07-31 22:15:37 -07:00
Todd Gamblin
2042c94a6c Merge pull request #1405 from glennpj/r-survey
New package - r-survey
2016-07-31 22:15:09 -07:00
Todd Gamblin
64be8a80b2 Merge pull request #1404 from glennpj/r-tarifx
New package - r-tarifx
2016-07-31 22:14:56 -07:00
Todd Gamblin
7185fe2876 Merge pull request #1403 from glennpj/r-e1071
New package - r-e1071
2016-07-31 22:14:40 -07:00
Todd Gamblin
0724eba935 Merge pull request #1402 from glennpj/r-plotrix
New package - r-plotrix
2016-07-31 22:14:25 -07:00
Todd Gamblin
441bb83682 Merge pull request #1401 from glennpj/r-gdata
New package - r-gdata
2016-07-31 22:13:50 -07:00
Todd Gamblin
2cffc90284 Merge pull request #1400 from glennpj/r-roxygen2
New package - r-roxygen2
2016-07-31 22:13:16 -07:00
Todd Gamblin
68cedd2599 Merge pull request #1399 from glennpj/r-testthat
New package - r-testthat
2016-07-31 22:12:06 -07:00
Todd Gamblin
d00fd06095 Merge pull request #1398 from glennpj/r-xml
New package - r-xml
2016-07-31 22:11:38 -07:00
Todd Gamblin
3d571ad934 Merge pull request #1397 from glennpj/r-datatable
New package - r-datatable
2016-07-31 22:11:32 -07:00
Glenn Johnson
8815f0a0b5 New package - r-ncdf4
Interface to Unidata netCDF (version 4 or earlier) format data files.
2016-07-31 17:12:29 -05:00
Glenn Johnson
bfd03db12a New package - r-np
Nonparametric kernel smoothing methods for mixed data types.
2016-07-31 16:18:55 -05:00
Glenn Johnson
f14eb07dc1 New package - r-survey
Analysis of complex survey samples.
2016-07-31 15:50:19 -05:00
Glenn Johnson
a9cc6a7d08 New package - r-tarifx
A collection of various utility and convenience functions.
2016-07-31 15:39:09 -05:00
Glenn Johnson
be2f2e42db New package - r-e1071
Misc functions of the Department of Statistics, Probability Theory Group
(Formerly: E1071), TU Wien.
2016-07-31 15:26:13 -05:00
Glenn Johnson
05e5276aec New package - r-plotrix
Various plotting functions.
2016-07-31 15:15:55 -05:00
Glenn Johnson
dbf799bbf9 New package - r-gdata
Data manipulation tools.
2016-07-31 15:07:40 -05:00
Glenn Johnson
f39e570f36 New package - r-roxygen2
In-source documentation for R.
2016-07-31 14:52:16 -05:00
Glenn Johnson
58a6039c0a New package - r-testthat
A unit testing system for R.
2016-07-31 14:40:46 -05:00
Glenn Johnson
0662b953f0 New package - r-xml
Tools for parsing and generating XML within R and S-Plus.
2016-07-31 14:25:17 -05:00
Glenn Johnson
1b04b8be01 New package - r-datatable
Extension of Data.frame
2016-07-31 14:11:04 -05:00
Todd Gamblin
500218df80 Merge pull request #1384 from epfl-scitas/qa/drop_flake8_python26
qa : no flake8 on python 2.6, coveralls only on python 2.7
2016-07-30 20:25:14 -07:00
Todd Gamblin
173a16b38a Merge pull request #1396 from glennpj/r-quantmod
New package - r-quantmod
2016-07-30 20:15:53 -07:00
Todd Gamblin
68ba5377c1 Merge pull request #1395 from glennpj/r-ggmap
New package - r-ggmap and dependencies
2016-07-30 20:14:57 -07:00
Todd Gamblin
253507c0c3 Merge pull request #1394 from glennpj/r-maps
New package - r-maps
2016-07-30 20:14:27 -07:00
Todd Gamblin
7684652ce3 Merge pull request #1393 from glennpj/r-maptools
New package - r-maptools
2016-07-30 20:14:19 -07:00
Todd Gamblin
b12dc34ba7 Merge pull request #1391 from glennpj/r-caret
New package - r-caret
2016-07-30 20:14:09 -07:00
Todd Gamblin
9c31ee8a75 Merge pull request #1390 from glennpj/r-glmnet
New package - r-glmnet
2016-07-30 20:13:50 -07:00
Todd Gamblin
ae5ba2b110 Merge pull request #1389 from glennpj/r-vcd
New package - r-vcd
2016-07-30 20:13:05 -07:00
Todd Gamblin
13499f1655 Merge pull request #1388 from glennpj/r-multcomp
New package - r-multcomp
2016-07-30 20:12:51 -07:00
Todd Gamblin
49e9f365d8 Merge pull request #1387 from glennpj/r-randomforest
New package r-randomforest
2016-07-30 20:12:21 -07:00
Todd Gamblin
0fa8a491d3 Merge pull request #1386 from glennpj/r-car
New package r-car
2016-07-30 20:12:02 -07:00
Glenn Johnson
41cd861861 New package - r-quantmod
Qualitative Financial modelling framework.
2016-07-30 18:25:43 -05:00
Glenn Johnson
2913aa8d09 New package - r-ggmap and dependencies
Spatial visualization with ggplot2
2016-07-30 18:14:02 -05:00
Glenn Johnson
1bd2def41e New package - r-maps
Draw geographical maps.
2016-07-30 17:34:07 -05:00
Glenn Johnson
386f0e577a New package - r-maptools
Tools for reading and handling spatial objects.
2016-07-30 17:26:31 -05:00
Glenn Johnson
7207ce2a18 New package - r-caret
Classification and Regression Training
2016-07-30 16:53:54 -05:00
Glenn Johnson
20e52e5052 New package - r-glmnet
Lasso and Elastic-Net Regularized Generalized Linear Models
2016-07-30 16:38:00 -05:00
Glenn Johnson
e9944150a5 New package - r-vcd
Visualizing Categorical Data
2016-07-30 16:28:43 -05:00
Glenn Johnson
fc1804974c New package - r-multcomp
Simultaneous Inference in General Parametric Models.
2016-07-30 16:09:57 -05:00
Glenn Johnson
12167e8f37 New package r-randomforest
Breiman and Cutler's Random Forests for Classification and Regression.
2016-07-30 15:39:28 -05:00
Glenn Johnson
8dc26bbcd9 Have R extensions build in parallel.
Set `MAKEFLAGS` so R extensions can be built in parallel if that is set
in spack.
2016-07-30 15:20:14 -05:00
Glenn Johnson
ee7acc6b13 New package r-car
Companion to Applied Regression.
2016-07-30 15:10:25 -05:00
alalazo
f4422dc165 qa : fixes #1370 (no flake8 on python 2.6, coveralls only python 2.7) 2016-07-30 18:49:23 +02:00
Matt Belhorn
dc7e0899a0 Invokes subshell without user init scripts. 2016-07-30 11:38:34 -04:00
Matt Belhorn
5bb2d3baa0 Replaces technique for obtaining default back_end target.
New technique parses output of `module list` in clean login environment
in order to let convoluted initialization scripts to work for us rather
than against us as when trying to parse them directly.
2016-07-29 15:06:56 -04:00
Matt Belhorn
5e97eb5ec4 Obtains default modules from a clean subshell.
The list of default environment modules is obtained by calling

`module list -lt`

from a subshell with a wiped environment. This allows `/etc/profile` and other
init scripts to be fully sourced which should generally include loading the
default modules.

The list of default modules is then parsed for the first acceptable CPU target,
assumed to be the back_end target.
2016-07-29 15:02:25 -04:00
Kelly (KT) Thompson
6c80b15220 GTK+3: Provide updates to package dependencies.
WIP: I started trying to build gtkplus@3.20, but this package has many more
dependencies than v2 and it requires newer versions of existing packages. This
commit provides updates for 5 packages that are required by GTK+3. This is not
the complete set of changes required for GTK+3.

atk  - move default version from 2.14 -> 2.20.
glib - move default version from 2.42 -> 2.49
     - v2.49 requires pcre+utf as a new dependency.
pcre - if variant +utf is selected, add '--enable-unicode-properties' to the
       configure options.
libepoxy - new package to spack
         - manages OpenGL function pointers.
pango    - move default version from 1.36 -> 1.40
2016-07-29 09:05:44 -06:00
Denis Davydov
aad5a4c4b3 mkl: flake8 fixes; minor docu update 2016-07-29 14:12:07 +02:00
Paul Hopkins
5eebb2defa Use space characters to separate preferred variants from package name and each other 2016-07-29 13:02:47 +01:00
Denis Davydov
b6ce0e6f0e trilinos: make sure hdf5 is picked up from Spack 2016-07-29 13:11:12 +02:00
Denis Davydov
943896e237 trilinos: fix lapack lib dir 2016-07-29 13:09:34 +02:00
Denis Davydov
8ee4df8101 hypre: minor cleanup related to blas/lapack 2016-07-29 11:37:19 +02:00
Denis Davydov
572f1cd427 mkl: symlink libs to prefix.lib 2016-07-29 11:36:37 +02:00
Todd Gamblin
e04662f84f Merge pull request #1344 from LLNL/bugfix/py-nose-nosetests
do not ignore nosetests script in py-nose
2016-07-28 10:19:13 -07:00
becker33
5caaa2cd75 Merge pull request #1331 from adamjstewart/fixes/mvapich2
MVAPICH2 depends on libpciaccess
2016-07-28 09:52:51 -07:00
becker33
3759f62cba Merge pull request #1235 from davydden/pkg/p4est_run_tests
p4est: use run_tests instead of a variant
2016-07-27 18:36:36 -07:00
Matt Belhorn
07f2dd5498 Merge pull request #1 from robertdfrench/olcf/unified_cray_platform
PEP8 Goodness
2016-07-27 14:33:09 -04:00
robertdfrench
eab56b71be PEP8 Goodness 2016-07-27 13:11:24 -04:00
Matt Belhorn
3040381f03 Front-end unification for Cray systems.
A platform to generically cover all Cray systems is introduced to avoid having
specific platforms for each of XK (XE, XT), XC, and future systems using CrayPE
and CNL.

The platform searches for 'front_end' and 'back_end' targets, in order, from:

  * Environment variables 'SPACK_FRONT_END' and 'SPACK_BACK_END'
  * A spack configuration file 'targets.yaml'
  * Parsing `/etc/bash.bashrc.local` for first loaded CrayPE CPU target.

If a back_end target is not found through one of these methods, an exception is
raised. Otherwise, the back_end is set as the default target. The shell init
script search is based on recommendations in Crayports case #144359.

No automagic way of determining front_end targets has been found (to date) so if
a front_end is not specified through configuration, it is ignored which should
leave a spack instance in a consistant state.
2016-07-27 11:37:15 -04:00
George Hartzell
f855cf6bab Add package for tree
Add a package for [tree](http://mama.indstate.edu/users/ice/tree/).

It has a Makefile that hardcodes a prefix and some CFLAGS.  Used
filter_file to:

- set the make variable *prefix* to `prefix`; and
- comment out their CFLAGS, just use ours....

It installs, runs on CentOS7, and uninstalls cleanly.
2016-07-27 11:32:03 -04:00
Matt Belhorn
b1e6c58ff2 Adds __str__ method to CNL operating system class. 2016-07-27 11:25:23 -04:00
Matt Belhorn
4e6fdd12e2 Adds targets config file 2016-07-27 11:25:23 -04:00
Todd Gamblin
458deaae5e Merge pull request #1350 from adamjstewart/fixes/openssl
Fix OpenSSL url_for_version
2016-07-27 08:08:00 -07:00
alalazo
9c7b98dcc8 modules : handle dashes in environment variables 2016-07-26 09:03:17 +02:00
Greg Lee
e4525e57bb intel parallel studio itac fixes 2016-07-25 14:02:15 -07:00
Greg Lee
dba384108b intel parallel studio setup mkl environment 2016-07-25 14:01:49 -07:00
becker33
e4ced765f1 Merge pull request #1353 from epfl-scitas/qa/minor_cleanup
qa : minor cleanup
2016-07-25 10:34:43 -07:00
Samuel Knight
a2d4dcc636 Added libhio package 2016-07-25 17:32:03 +00:00
becker33
969e785d94 Merge pull request #1352 from glennpj/r_googlevis
New package - r-googlevis
2016-07-25 10:25:47 -07:00
becker33
5b7ec8de95 Merge pull request #1351 from glennpj/r_htmlwidgets
New packages - R htmlwidgets
2016-07-25 10:25:19 -07:00
becker33
e19872e77f Merge pull request #1347 from glennpj/rdeps
Add dependency type to r- packages
2016-07-25 10:19:32 -07:00
Glenn Johnson
eb865b0df2 Add py-setuptools as dependency
With the addition of dependency types and with `py-setuptools` set as
type='build' there are more packages that need to have `py-setuptools`
added as a dependency.

This PR adds that dependency for the following packages:
- py-h5py
- py-networkx
- py-pytables
- py-scikit-image
2016-07-25 11:23:09 -05:00
alalazo
c6a05f4a7d qa : flake8 issues fixes #1109 2016-07-25 18:22:09 +02:00
alalazo
3126ed5f21 modules : permit token expansion in configuration files 2016-07-25 18:10:27 +02:00
George Hartzell
d684b17c06 Fix doc for install_tree (cut/paste error)
It looks like the docs for copy_tree were cut/paste from copy and still referred to installing a "file".

This fixes that.
2016-07-25 08:45:44 -07:00
alalazo
5cfaa557d3 qa : flake8 issues 2016-07-25 10:19:58 +02:00
alalazo
23006d1195 spec : removed dead code 2016-07-25 09:05:50 +02:00
Glenn Johnson
81cd458c26 r-curl update and chaged remote archive
This updates to the 1.0 version of r-curl. The remote archive directory
name also changed so change that here as well.
2016-07-24 16:48:07 -05:00
Glenn Johnson
27986c9edf New packages - R htmlwidgets 2016-07-24 16:43:35 -05:00
Glenn Johnson
b7bf88c761 New package - r-googlevis 2016-07-24 16:38:36 -05:00
Adam J. Stewart
29278090eb Fix OpenSSL url_for_version 2016-07-24 15:19:27 -05:00
Glenn Johnson
b1e5ec0573 Make sure package has the url attribute.
In addition to `list_url` make sure the package has the `url` attribute
set before attempting to add urls from a list. This is to cover the case
where there may be a `list_url` specified in tandem with a
`url_for_version`.
2016-07-24 09:21:11 -05:00
Glenn Johnson
4f09e8c975 Only use list if list_url set
This commit will make urls from list_url only checked if `list_url` is
set in the package file. This makes more sense as there is no need to
check for those if the attribute is not present. If `url` is present and
`list_url` is not then it would result in the same url. If
`url_for_version` is used then that will not work anyway.
2016-07-23 22:56:08 -05:00
Glenn Johnson
a8855f48aa Add dependency type tp r- packages
This PR adds the `nolink` dependency type to r- package dependencies.
This is needed due to the new dependency types in Spack. A couple of
packages were updated with new versions as well.
2016-07-23 19:43:55 -05:00
Glenn Johnson
4181fd79cd Fix flake8 errors related to lines
Fixed the flake 8 errors that involved too many blank lines or not
enough blank lines. Basically, all of the flake8 errors except line
length errors.
2016-07-23 19:10:09 -05:00
Glenn Johnson
b51be2bb1b Have fetch use list_url
This PR allows archive file retrieval from urls derived from the
`list_url` setting in a package file. This allows for continued
retrieval of checksummed archive files even when they are moved to a new
remote location when a package is updated upstream.
2016-07-23 19:09:58 -05:00
Greg Lee
773bca159a do not ignore nosetests script in py-nose 2016-07-22 15:49:36 -07:00
Glenn Johnson
ec9959b152 R extension dependencies with compiler wrapper
This commit introduces a mechanism to insure that R package dependencies
are built with the Spack compiler wrapper. A copy of Makeconf is made
before `filter_compilers` is called. This is then pointed to by the
R_MAKEVARS_SITE environment variable set up in
`setup_dependent_environment`. With this the normal compilers are used
outside of spack and the spack wrapper compilers are used inside of
spack.

This commit also standardizes on the `join_path` call. It also sets the
commented build command to reflect what is actually used with the newer
string formatting.
2016-07-22 17:05:01 -05:00
Adam J. Stewart
1be486c90a Add CGNS package 2016-07-22 17:02:45 -05:00
becker33
7220bc1766 Merge pull request #1340 from adamjstewart/features/create
Use example deptypes in newly created packages
2016-07-22 14:25:12 -07:00
Todd Gamblin
395c616a48 Merge pull request #950 from xjrc/packages/python
Enhancement Proposal: Make Python Spack Installs Ignore User Configuration
2016-07-22 13:56:19 -07:00
Adam J. Stewart
ebbcebac62 Use example deptypes in newly created packages 2016-07-22 13:55:00 -05:00
Joseph Ciurej
fa92f58167 Adding temporary script that fixes all Python extensions w/ 'setup_py'. 2016-07-22 11:17:19 -07:00
Joseph Ciurej
ac2e0962ce Improved the build flag construction code in the python install method. 2016-07-22 11:12:02 -07:00
Joseph Ciurej
fb2d2303d6 Fixed a bug that was causing Python installs to be affected by user config. 2016-07-22 11:11:08 -07:00
Todd Gamblin
f5b4664c7c Merge pull request #1336 from glennpj/rcase
Fix alpha case of dependencies for some r-packages
2016-07-22 10:08:14 -07:00
alalazo
00d7fd8e21 test_install : removed commented code 2016-07-22 18:14:36 +02:00
Todd Gamblin
adffba5081 Merge pull request #1230 from hartzell/update-jdk
Add URL and md5 for jdk-8u92.
2016-07-21 22:06:29 -07:00
Glenn Johnson
e083c91d5e Fix alpha case of dependencies.
A while ago I was asked to convert packages to all lowercase. That was
done but some dependencies did not get converted in the specification.
This commit fixes that as well as a couple of urls that need to be made
explicit and a missing dependency on jdk.
2016-07-21 19:58:04 -05:00
Todd Gamblin
ed737cb2a2 Merge pull request #1333 from LLNL/features/no-openssl-pinging
Remove remote website pinging from OpenSSL
2016-07-21 16:46:59 -07:00
Todd Gamblin
488550c2e6 Merge pull request #1334 from hartzell/add-gcc-5.4.0
Update gcc package with info about gcc-5.4.0
2016-07-21 16:37:31 -07:00
Todd Gamblin
8523f75e6c Remove remote website pinging from OpenSSL
- OpenSSL no longer checks remote versions on the openssl site.

- Spack is used on systems that aren't connected to the internet, and
  this check is probably in the wrong place and affects too many
  commands.  We can work on figuring out a better, more configurable
  place to put a check like this.
2016-07-21 16:35:20 -07:00
Todd Gamblin
4707362ccd Merge pull request #1263 from hartzell/lmod-needs-tcl
The lmod package should depend_on('tcl')
2016-07-21 16:32:54 -07:00
becker33
dd5b1ac098 Merge pull request #1335 from LLNL/crayxc-detection
Crayxc detection
2016-07-21 15:06:42 -07:00
Gregory Becker
bcbe9c02da Added cray wrapper names directory to spack_env_paths so the spack compiler wrapper will remove them from the environment (prevents hang) 2016-07-21 14:50:23 -07:00
Gregory Becker
1544f98ee0 fixed flake8 errors 2016-07-21 14:36:10 -07:00
Gregory Becker
f0d5317913 fixed 2016-07-21 14:11:34 -07:00
Gregory Becker
2ae7429b18 Bug fix for cray_xc platform 2016-07-21 14:04:22 -07:00
George Hartzell
4efe022165 Update with info about gcc-5.4.0 2016-07-21 15:36:22 -04:00
Mitchell Devlin
796308ed85 edit 2016-07-21 13:39:27 -05:00
George Hartzell
4c105895ab Fix flake8 violations 2016-07-21 14:24:51 -04:00
George Hartzell
9523e50732 Fix shebang line in tcl scripts
Lmod's configure script goes to the trouble of finding
tclsh.  This change uses that info to rewrite the #! lines
in the tcl scripts so that they call the tclsh that the
configure script discovered.

It needs to massage the existing shebang lines into something
that the sed statement in the makefile can manipulate and
it needs to add the path_to_tclsh info into the set of sed
statements.

Checked with versions 6.4.1 and 6.3.7 (the checksum for 6.0.1 is
incorrect, a fix for another time).
2016-07-21 13:58:16 -04:00
George Hartzell
52f0249c61 tcl is actually a runtime dependency.
lmod uses tclsh at runtime, so adjust the depends_on accordingly
(thanks @davydden!).
2016-07-21 13:51:03 -04:00
George Hartzell
a27cb639d8 The lmod package should depend_on('tcl')
The lmod package needs a tclsh.  Up until now it just assumed
that one was available on the system.

This change adds a depends_on('tcl') to the lmod package.

The tcl package installs a tclsh script with an embedded version
number (e.g. tclsh8.6) but the lmod configuration looks for tclsh.
This change extends the tcl package to symlink tclshX.Y to tclsh in
the tcl package bin directory.
2016-07-21 13:51:03 -04:00
Adam J. Stewart
cf8f14780f MVAPICH2 depends on libpciaccess 2016-07-21 11:13:17 -05:00
Todd Gamblin
098af17971 Merge pull request #1208 from paulhopkins/bugfix/github1196-specify-preferred-variants
Bugfix/github1196 specify preferred variants
2016-07-21 08:36:19 -07:00
Todd Gamblin
5745ede31d Merge pull request #1328 from suraia/fix-recursive-module-load
Fix recursive module loading
2016-07-21 08:34:36 -07:00
Todd Gamblin
0b1d03abe6 Merge pull request #1327 from suraia/update-load-documentation
Update documentation for recursive module loading
2016-07-21 08:33:40 -07:00
Paul Hopkins
00280936da Flake8 fixes to ensure qa tests pass 2016-07-21 13:12:58 +01:00
Paul Hopkins
480fe9cb9a Re-add documentation for variant preferences 2016-07-21 12:32:00 +01:00
Paul Hopkins
bd91dd9d6d Allow users to supply preferred variants via packages.yaml 2016-07-21 12:32:00 +01:00
Michael Kuhn
732c24f603 Fix recursive module loading. 2016-07-21 13:15:53 +02:00
Michael Kuhn
4e1f86881a Update documentation for recursive module loading. 2016-07-21 13:15:10 +02:00
Gregory Lee
07d4c6cf0b Merge pull request #1205 from glennpj/psxe
Setup environment for Intel Parallel Studio
2016-07-20 21:14:34 -07:00
Glenn Johnson
ead1b93f75 MPI related changes
- Redid the code for setting the itac symlink for the cluster edition.
- Removed the *PATH variables for MPI to avoid a conflict with other MPI
  environment modules.
- Added missing test for `+all` when checking variants.
2016-07-20 20:03:05 -05:00
Glenn Johnson
0be4c7dfbd Changes as discussed in PR review
- removed unneeded entry for `debugger/gdb/intel64_mic`
- set `+mpi` directory name to impi
2016-07-20 20:03:05 -05:00
Glenn Johnson
5e5e36a659 Fix flake8 errors. 2016-07-20 19:54:35 -05:00
Glenn Johnson
16f67b5bb1 Setup environment for Intel Parallel Studio
Set up the environment for the Intel compilers and tools. This commit
does the following:

- Unset variables that were incorrect from the auto guess prefix
  inspections.
- Add a RemovePath environment_modifications_formats for dotkit.
- Set the module environment variables appropriate for the different
  variants.
- Change the component logic so that the '+all' variant works. It was
  getting split by letter and leaving COMPONENTS empty.
- Added a variant checking function.
- Added NONRPM_DB_DIR to the silent.cfg so that the product database
  goes to the installation directory.
- With the product database in prefix the code to remove the product
  database file from the home directory is no longer needed and was
  removed.
- Reformat the 'tools' variant description.

There are probably more variables needed for the '+tools' for the
'professional' product version but I do not have access to that.
2016-07-20 19:54:35 -05:00
mwilliammyers
b8444aa518 Merge remote-tracking branch 'upstream/develop' into package-opencv
* upstream/develop: (126 commits)
  Fix indent/flake8 error.
  openexr : Add new package
  Set environment variables
  Added gnu packages datamash, parallel, and screen
  added package as argument to setup_platform_environment
  ilmbase : Add new IlmBase package
  Documented linker default
  fixed flake errors
  removed commented-out code
  Set default link type to dynamic on cray. Includes hooks for platform-based environment changes
  fixed flake errors
  fixed flake errors
  Improved cray_xc detection bug fix
  Improved cray_xc detection
  remove FIXMEs
  Ensure that per-4.4.1 NetCDF doesn't use HDF5 1.10
  Re-ignore licenses directory
  Add "default" configuration scope.
  Draft CDO
  Make frontend OS on Cray machines a proper linux distro.
  ...
2016-07-20 18:34:53 -06:00
mwilliammyers
a09bebcaea opencv : Add section comments 2016-07-20 18:19:59 -06:00
mwilliammyers
a9541997ae opencv : Reorder depends_on statements 2016-07-20 18:19:03 -06:00
mwilliammyers
bd02892f7b opencv : Use dso_suffix for python lib 2016-07-20 18:10:10 -06:00
mwilliammyers
ea9fa81ba5 opencv : Fix python include dir for cmake 2016-07-20 18:10:09 -06:00
mwilliammyers
670157b364 opencv : Add zlib cmake support 2016-07-20 18:10:09 -06:00
mwilliammyers
e5ae48a9da opencv : Add jasper cmake support 2016-07-20 18:10:09 -06:00
mwilliammyers
47514d07b1 opencv : Use dso_suffix 2016-07-20 18:10:08 -06:00
mwilliammyers
f2e8f27c15 opencv : Add libpng cmake support 2016-07-20 18:10:08 -06:00
mwilliammyers
fc79b104f0 opencv : Add libjpeg-turbo cmake support 2016-07-20 18:10:07 -06:00
mwilliammyers
97143768c8 opencv : Add libtiff cmake support 2016-07-20 18:10:07 -06:00
mwilliammyers
d3b97227a1 opencv : Add optional jdk dependency 2016-07-20 18:10:07 -06:00
mwilliammyers
da2b695f93 opencv : Fix lib finding for python 2016-07-20 17:25:05 -06:00
mwilliammyers
10c285a774 opencv : Use string.format() 2016-07-20 17:25:01 -06:00
mwilliammyers
0654ee6a10 opencv : Fix style inconsistencies 2016-07-20 17:24:55 -06:00
mwilliammyers
8cf03c209f opencv : Make extending python optional 2016-07-20 17:24:50 -06:00
mwilliammyers
c588ce9648 opencv : Improve cmake detecting python 2016-07-20 17:24:46 -06:00
mwilliammyers
3fac2dcc41 opencv : Fix cmake not disabling gtk 2016-07-20 17:24:40 -06:00
mwilliammyers
0080ffcf9f opencv : Use in operator 2016-07-20 17:24:35 -06:00
mwilliammyers
ce902bf27a opencv : Minor style changes 2016-07-20 17:24:30 -06:00
mwilliammyers
2cde6aaabd opencv : Add GUI support 2016-07-20 17:24:26 -06:00
mwilliammyers
578ddea418 opencv : Fix pep8 style issues 2016-07-20 17:24:21 -06:00
mwilliammyers
cf0f5756f5 opencv : Fix python extensions issues 2016-07-20 17:24:13 -06:00
mwilliammyers
9e1d26e973 opencv : Add CUDA extensions 2016-07-20 17:23:46 -06:00
Todd Gamblin
e389afedaa Merge pull request #1323 from glennpj/rlib
Set environment variables for R
2016-07-20 15:43:26 -07:00
Todd Gamblin
b9c79824a2 Merge pull request #1313 from sknigh/gnu-tools
Added packages for GNU tools screen, datamash, and parallel
2016-07-20 15:38:55 -07:00
Todd Gamblin
0777d3a5ba Merge pull request #1326 from mwilliammyers/package-openexr
openexr : Add new package
2016-07-20 15:35:36 -07:00
Mitchell Devlin
2344ffd0c7 add libxsmm package 2016-07-20 16:36:31 -05:00
Glenn Johnson
0c75174ec3 Fix indent/flake8 error. 2016-07-20 15:56:20 -05:00
mwilliammyers
e973adf84b openexr : Add new package 2016-07-20 14:49:03 -06:00
Glenn Johnson
f9137f606f Set environment variables
This commit adds `setup_environment` to export the libraries and
headers.

Fixes #1314.
2016-07-20 15:37:31 -05:00
alalazo
b92deda41b spack setup : work as in documentation for openjpeg 2016-07-20 22:27:01 +02:00
Todd Gamblin
8856a226c7 Merge pull request #1277 from mathstuf/special-deptypes
deptypes: support special deptypes by string
2016-07-20 13:15:57 -07:00
Todd Gamblin
d8acd41ba1 Merge pull request #1321 from mwilliammyers/package-ilmbase
ilmbase : Add new IlmBase package
2016-07-20 13:13:21 -07:00
Todd Gamblin
8efbec3c0b Merge pull request #1292 from eschnett/eschnett/hdf5-default-1.10
Make newest HDF5 release the default version
2016-07-20 12:57:45 -07:00
Todd Gamblin
4c7c9f4ff5 Merge pull request #1303 from adamjstewart/features/armadillo
Updates to Armadillo package
2016-07-20 12:56:41 -07:00
Todd Gamblin
cd4f429f72 Merge pull request #1319 from LLNL/cray-linker
Cray linker
2016-07-20 12:56:01 -07:00
Samuel Knight
24c14ff7a8 Added gnu packages datamash, parallel, and screen 2016-07-20 19:53:14 +00:00
Gregory Becker
eda1176ba7 added package as argument to setup_platform_environment 2016-07-20 12:26:31 -07:00
mwilliammyers
c9f4e8ce5a ilmbase : Add new IlmBase package 2016-07-20 13:13:47 -06:00
Gregory Becker
6983c1d30d Documented linker default 2016-07-20 12:04:00 -07:00
alalazo
40cb314638 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts:
	lib/spack/spack/package.py
2016-07-20 21:02:19 +02:00
Gregory Becker
412618d531 fixed flake errors 2016-07-20 11:52:16 -07:00
Gregory Becker
7db4170062 removed commented-out code 2016-07-20 11:36:47 -07:00
Gregory Becker
f4fb9a0771 Set default link type to dynamic on cray. Includes hooks for platform-based environment changes 2016-07-20 11:35:13 -07:00
Todd Gamblin
79e066d53c Merge pull request #1315 from LLNL/improved-cray-detection
Improved cray detection
2016-07-20 11:11:56 -07:00
Gregory Becker
106147716a fixed flake errors 2016-07-20 11:00:56 -07:00
Gregory Becker
0d18f7249c fixed flake errors 2016-07-20 10:50:18 -07:00
Gregory Becker
26d1ddc176 Improved cray_xc detection bug fix 2016-07-20 10:28:38 -07:00
Gregory Becker
4c506b36c5 Improved cray_xc detection 2016-07-20 10:25:07 -07:00
Todd Gamblin
4434f482c0 remove FIXMEs 2016-07-20 09:48:54 -07:00
Todd Gamblin
3def8ef60e Merge branch 'cdo' of https://github.com/robertdfrench/spack into robertdfrench-cdo 2016-07-20 09:48:01 -07:00
Todd Gamblin
20584ab084 Merge pull request #1302 from robertdfrench/adios-url
Get adios from github, not NCCS
2016-07-20 09:47:23 -07:00
Todd Gamblin
7c28338d60 Merge pull request #1301 from robertdfrench/silver-searcher
Silver Searcher 0.32 is out
2016-07-20 09:47:12 -07:00
Todd Gamblin
17a63c9646 Merge pull request #1284 from eschnett/eschnett/py-h5py.2
Declare dependency of "py-h5py +mpi" on "py-mpi4py"
2016-07-20 09:45:54 -07:00
Todd Gamblin
01a361d637 Merge pull request #1288 from LLNL/features/cray_compiler_names
Let packages call use_cray_compilers() in install to get , etc set to…
2016-07-20 09:45:36 -07:00
Todd Gamblin
7f20678969 Merge pull request #1291 from eschnett/eschnett/netcdf-4.4.1
Update NetCDF to version 4.4.1
2016-07-20 09:34:14 -07:00
Erik Schnetter
69e36c9821 Ensure that per-4.4.1 NetCDF doesn't use HDF5 1.10 2016-07-20 11:25:46 -04:00
Todd Gamblin
c503b43e38 Merge pull request #1311 from adamjstewart/features/licenses
Re-ignore licenses directory
2016-07-20 07:14:47 -07:00
Adam J. Stewart
83330d2b59 Re-ignore licenses directory 2016-07-20 08:50:32 -05:00
Todd Gamblin
6501cba5a7 Merge pull request #1309 from LLNL/features/spack-defaults
Add "default" configuration scope.
2016-07-19 23:48:12 -07:00
Todd Gamblin
26480f14f9 Add "default" configuration scope.
- Default scope is versioned with spack and can be overridden by site
  or user config.

- Default scope provides sensible default concretization preferences
  for all of Spack.

- per-platform concretization scope can be added later (to force a
  particular MPI on, e.g., Cray systems)
2016-07-19 17:10:17 -07:00
Robert D. French
6b0fb476ab Draft CDO 2016-07-19 15:57:55 -07:00
Todd Gamblin
dd7bd4f320 Make frontend OS on Cray machines a proper linux distro. 2016-07-19 14:59:04 -07:00
Ben Boeckel
1315753e70 deptypes: support special deptypes by string 2016-07-19 16:26:18 -04:00
Robert D. French
1c9cf668a1 Silver Search 0.32 is out
PEP8 Love + Re-adding v0.30.0
2016-07-19 10:48:53 -07:00
Adam J. Stewart
8034536054 Fix shared object suffix for macOS 2016-07-19 12:37:34 -05:00
Adam J. Stewart
afa4cdc2d8 Updates to Armadillo package 2016-07-19 12:33:04 -05:00
Robert D. French
25e765baae Download Adios from Github
Get adios from github, not NCCS

Use correct hash, thanks Ben
2016-07-19 10:31:59 -07:00
Todd Gamblin
a64a2e72cf Merge pull request #1226 from adamjstewart/features/tkinter
Add Tkinter support for Python
2016-07-19 09:41:12 -07:00
Todd Gamblin
c4b4ce7d85 Merge pull request #1135 from epfl-scitas/features/module_refresh_reworking
spack module : reworking of the command
2016-07-19 09:27:58 -07:00
Todd Gamblin
4ad29b6c9b Merge pull request #1262 from davydden/pkg/suite_sparse_fix_blas
suite-sparse: enable TBB and fix Blas/Lapack libs
2016-07-19 09:18:42 -07:00
Todd Gamblin
7e16a4edd7 Merge pull request #1294 from eschnett/eschnett/flex
Flex requires m4
2016-07-19 09:04:04 -07:00
alalazo
acfeb5d043 Merge branch 'develop' of https://github.com/LLNL/spack into features/module_refresh
Conflicts:
	lib/spack/spack/test/__init__.py
2016-07-19 09:05:27 +02:00
Erik Schnetter
71684cb071 Flex requires m4 2016-07-18 23:04:20 -04:00
Erik Schnetter
4dec06e4f4 Make HDF5 1.10 the default version
Apply this only after NetCDF 4.4.1 is supported.
2016-07-18 20:14:44 -04:00
Erik Schnetter
94df1b801a Update NetCDF to version 4.4.1
This version supports HDF5 1.10 in a backward-compatible manner.
2016-07-18 20:11:32 -04:00
Todd Gamblin
7555c3d949 Merge pull request #1204 from goxberry/cmake-3.6.0
cmake@3.6.0
2016-07-18 16:53:17 -07:00
becker33
013cfafe57 Merge pull request #1229 from suraia/fix-preferred-providers
Fix preferred providers.
2016-07-18 16:47:08 -07:00
Gregory Becker
218fc602fa Let packages call use_cray_compilers() in install to get , etc set to cray names 2016-07-18 15:43:21 -07:00
Todd Gamblin
25a9181a1b Merge pull request #1287 from mwilliammyers/package-jasper
jasper: Add new jasper package
2016-07-18 15:43:18 -07:00
mwilliammyers
02340062b4 package - jasper - Add new jasper package 2016-07-18 16:17:07 -06:00
Todd Gamblin
4a276807b1 Merge pull request #1245 from LLNL/features/cray-detection-improvement
The /cray_home directory is more consistent than the /cray/craype dir…
2016-07-18 14:36:08 -07:00
Todd Gamblin
51834773b4 Merge pull request #851 from mathstuf/safer-bootstrap
bootstrap: fall back to the default upstream URL
2016-07-18 14:25:29 -07:00
Gregory Becker
46ee4a3a53 Using cc -craype-verbose to get cray platform type 2016-07-18 14:25:17 -07:00
Todd Gamblin
607813d5ce setuptools is a build dependency in numpy. 2016-07-18 14:13:14 -07:00
Erik Schnetter
67fade5b1e Declare dependency of "py-h5py +mpi" on "py-mpi4py" 2016-07-18 17:08:56 -04:00
Todd Gamblin
a9ed2296a1 Merge pull request #1282 from eschnett/eschnett/py-numpy
py-numpy: Add py-setuptools dependencies
2016-07-18 13:58:17 -07:00
Todd Gamblin
fa0bbb57ea Merge pull request #1270 from davydden/pkg/mumps_scalapack_fix_blas
Pkg/mumps scalapack fix blas
2016-07-18 13:57:26 -07:00
Erik Schnetter
49cd6f6269 py-numpy: Add py-setuptools dependencies
Closes #1281.
2016-07-18 16:01:48 -04:00
Todd Gamblin
653f25d676 Merge pull request #1171 from adamjstewart/features/octave
Allow spack create to automatically detect octave build system
2016-07-18 12:32:32 -07:00
Todd Gamblin
089189afaf Merge pull request #1238 from davydden/pkg/mkl_update
mkl: add provide blas/lapack
2016-07-18 11:52:30 -07:00
Todd Gamblin
0a89342508 Merge pull request #1271 from paulhopkins/bugfix/package-list
Bugfix/package list
2016-07-18 10:47:12 -07:00
Todd Gamblin
06f57a31c1 Merge pull request #1273 from mathstuf/opt-ignore
gitignore: don't require opt to be a directory
2016-07-18 10:44:16 -07:00
Michael Kuhn
19df1ea79d flake8 fix 2016-07-18 17:53:26 +02:00
Ben Boeckel
2b4d2b8748 gitignore: don't require opt to be a directory
I use a symlink to make it easy to swap out.
2016-07-18 11:39:26 -04:00
Paul Hopkins
a46138dea9 More flake8 fixes for package-list 2016-07-18 13:59:58 +01:00
Adam J. Stewart
ea425a101a Flake8 and new tk version 2016-07-18 07:51:08 -05:00
Adam J. Stewart
583232ea52 Build Python with Tkinter support 2016-07-18 07:51:08 -05:00
Adam J. Stewart
89c9bec81e Flake8 2016-07-18 07:45:28 -05:00
Adam J. Stewart
262ab40188 Update build_system_guess test with new class name 2016-07-18 07:45:28 -05:00
Adam J. Stewart
199a8af7cc Flake8 2016-07-18 07:45:28 -05:00
Adam J. Stewart
e9f42c1a94 Allow spack create to automatically detect octave build system 2016-07-18 07:45:27 -05:00
alalazo
a96eb7096d Merge branch 'develop' of https://github.com/LLNL/spack into features/module_refresh
Conflicts:
	share/spack/setup-env.sh
2016-07-18 14:12:47 +02:00
Paul Hopkins
cc027148eb Flake8 fixes in cmd/package-list.py file 2016-07-18 12:52:23 +01:00
Paul Hopkins
2b3ba850b3 Fix spack package-list to correctly handle deptypes 2016-07-18 12:51:58 +01:00
Todd Gamblin
b3789a4693 Merge pull request #1269 from davydden/pkg/hypre_trilinos_blas
Pkg/hypre trilinos blas
2016-07-18 03:06:37 -07:00
Todd Gamblin
4030f8d7c3 Merge pull request #1268 from LLNL/bugfix/spack-info-gh1256
Fix broken `spack info` command after build dep merge.
2016-07-18 03:03:05 -07:00
Todd Gamblin
cddaba8add flake8 fixes.
- package.py
- spec.py
- test/architecture.py
2016-07-18 02:34:24 -07:00
Todd Gamblin
192369dd2b Fix #1265: Errors in spack reindex
- Consolidated code to read spec.yaml and database index.yaml into
  one method (`read_yaml_dep_specs()`) in spec.py.

- Code understands old hash format, tuple format, and dicts for dep
  specs, for backward compatibility.

- Spec YAML now uses a dict with keys to represent dep specs (this is
  more future-proof).

- Dep specs no longer contain !!py-tuple entries in YAML (only lists
  properly YAML-ize)

- bump database version.
2016-07-18 01:19:07 -07:00
Todd Gamblin
73f10c9363 Fix broken spack info command after build dep merge.
- Added a method to get dependencies of particular types from Package
- Fixed info command.
2016-07-18 01:19:07 -07:00
Todd Gamblin
cdc2ebee90 Better error messages for spack reindex. 2016-07-18 01:14:47 -07:00
Denis Davydov
2e4966c854 netlib-scalapack: use dso_suffix 2016-07-18 10:11:18 +02:00
alalazo
6c00a13ed5 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts:
	var/spack/repos/builtin/packages/swiftsim/package.py
2016-07-18 08:49:24 +02:00
Todd Gamblin
c898b9db04 Merge pull request #1188 from epfl-scitas/packages/py-numpy
RPATH for blas in py numpy
2016-07-17 21:20:39 -07:00
Todd Gamblin
117743863e Merge pull request #1252 from hartzell/patch-5
Fix format of explanation of an example & question
2016-07-17 21:20:02 -07:00
Todd Gamblin
28ce08b9e2 Merge pull request #1258 from eschnett/eschnett/openmpi-2.0.0
Update to OpenMPI 2.0.0
2016-07-17 21:01:21 -07:00
Todd Gamblin
0e8bf79fa4 Merge pull request #1240 from epfl-scitas/truncated_documentation
doc : fixes #1239
2016-07-17 20:59:36 -07:00
alalazo
dc671ad037 docs : substituted None with empty cell 2016-07-17 22:17:52 +02:00
Denis Davydov
1bd3a702c9 mumps: flake8 fixes 2016-07-16 15:14:06 +02:00
Denis Davydov
561748a063 netlib-scalapack: flake8 fixes 2016-07-16 08:03:54 +02:00
Denis Davydov
9ea4f80f15 flake8 fixes 2016-07-16 07:58:51 +02:00
Denis Davydov
0752eccfa5 mumps: don't hardcode blas name; remove unused depends_on(lapack) 2016-07-16 07:38:42 +02:00
Denis Davydov
6175ce7559 netlib-scalapack: make sure Spack's Lapack is used 2016-07-16 07:37:38 +02:00
Denis Davydov
987fb137f9 trilinos: don't hardcode blas/lapack names 2016-07-16 07:31:38 +02:00
Denis Davydov
514c61b8fe hypre: don't hardcode blas/lapack/mpi; optionally run tests 2016-07-16 07:28:31 +02:00
Denis Davydov
992250ddea add to_lib_name() to get library name from a path 2016-07-16 07:24:05 +02:00
Michael Kuhn
d61190c3ff Explicitly request zmpi in module blacklist test. 2016-07-16 00:48:04 +02:00
Denis Davydov
96e9dbca08 suite-sparse: enable TBB and fix Blas/Lapack libs 2016-07-16 00:33:39 +02:00
Erik Schnetter
5a1ed51dcd Correct indentation 2016-07-15 18:10:33 -04:00
becker33
63101e9914 Merge pull request #1261 from adamjstewart/features/create-deptype
Automatically add deptype to newly created packages
2016-07-15 15:10:10 -07:00
Adam J. Stewart
8c1cc44522 Automatically add deptype to newly created packages 2016-07-15 16:43:25 -05:00
becker33
36f818b9fb Merge pull request #1246 from suraia/improve-shell-integration
Improve shell integration.
2016-07-15 14:23:51 -07:00
becker33
c0be585b67 Merge pull request #1168 from epfl-scitas/packages/gts
gts : added package
2016-07-15 14:07:59 -07:00
becker33
656b2d562f Merge pull request #1177 from epfl-scitas/packages/swiftsim_and_metis
swiftsim : fixed configuration for metis
2016-07-15 14:05:28 -07:00
becker33
f761130343 Merge pull request #1187 from paulhopkins/bugfix/python-updates
Bugfix/python updates
2016-07-15 14:04:46 -07:00
becker33
f1d85ac2e9 Merge pull request #1227 from glennpj/ggvis
New package - r-ggvis
2016-07-15 14:00:15 -07:00
becker33
1585c014d7 Merge pull request #1259 from adamjstewart/fixes/run-flake8
Updates to run-flake8 test
2016-07-15 13:55:01 -07:00
becker33
37ce4108ce Merge pull request #1254 from mdevlin1/features/hmmer
add HMMER package
2016-07-15 13:52:56 -07:00
becker33
e822257565 Merge pull request #1251 from hartzell/patch-4
Minor typo fix
2016-07-15 13:51:02 -07:00
Adam J. Stewart
a4a2f179c7 Updates to run-flake8 test 2016-07-15 12:11:41 -05:00
Erik Schnetter
4663288b49 Update to OpenMPI 2.0.0 2016-07-15 13:00:48 -04:00
George Hartzell
64b1bafd41 Make flake8 happy with .../jdk/package.py
My PR for adding a new jdk version failed its
travis run because of existing flake8 violoations.

This package cleans them up.

I'm not particularly pythonic, but most of the complaints were
obvious.  HOWEVER, I'm not particularly confident about handling
long lines by taking an flake8 exception comment onto the end.

Feedback welcome...
2016-07-15 12:39:40 -04:00
Mitchell Devlin
5f1b6f000d add HMMER package 2016-07-15 11:03:57 -05:00
Denis Davydov
b29b7595dd mkl: add info on interface and threading layers to the docstring 2016-07-15 17:35:10 +02:00
alalazo
833b0ac282 Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts:
	lib/spack/spack/__init__.py
	var/spack/repos/builtin/packages/gmp/package.py
	var/spack/repos/builtin/packages/openjpeg/package.py
2016-07-15 11:03:02 +02:00
alalazo
893a5565fe Merge branch 'develop' of https://github.com/LLNL/spack into features/install_with_phases
Conflicts:
	lib/spack/spack/__init__.py
	var/spack/repos/builtin/packages/gmp/package.py
	var/spack/repos/builtin/packages/openjpeg/package.py
2016-07-15 11:02:55 +02:00
alalazo
1f3cb2b93c Merge branch 'develop' of https://github.com/LLNL/spack into features/module_refresh
Conflicts:
	lib/spack/spack/cmd/module.py
2016-07-15 10:37:27 +02:00
Todd Gamblin
077848fc0b Merge pull request #378 from mathstuf/dep-types
dependency types
2016-07-15 00:29:16 -07:00
Todd Gamblin
f3e9588457 Fix package name bug. 2016-07-14 23:15:54 -07:00
Gregory Becker
487ec2aff1 added py-pydatalog package 2016-07-14 23:12:35 -07:00
Todd Gamblin
b8e2799700 Add GNU Prolog package. 2016-07-14 14:38:30 -07:00
Ben Boeckel
5d152edcaf spec: assign namespaces to the full dependency DAG 2016-07-14 16:33:48 -04:00
Ben Boeckel
faa3d43d9c package: mention the package that is no concrete 2016-07-14 16:33:38 -04:00
Ben Boeckel
a0584c78a8 foam-extend, sundials: add cmake as a builddep
The sundials doesn't use CMake directly, but it is referenced in the
patch step. I suspect it calls CMake somewhere else in its build system.
2016-07-14 16:21:47 -04:00
Ben Boeckel
d71a12438b cantera: use nolink for python module dependencies
Unsure about this, but this is probably true.
2016-07-14 16:21:47 -04:00
Ben Boeckel
39aef5fc00 lua: bring in run deps of build and run deps 2016-07-14 16:21:47 -04:00
Ben Boeckel
a82385cdae R: look only at run dependencies of build and run deps 2016-07-14 16:21:46 -04:00
Ben Boeckel
0ca1a481a3 python: setup the dependent environment properly
We want the run dependencies of all build and run dependencies of the
current package.
2016-07-14 16:21:46 -04:00
Ben Boeckel
ac1701ae29 msgpack-c: add missing dependency on cmake 2016-07-14 16:21:46 -04:00
Ben Boeckel
77965ce5bf py-matplotlib: require py-setuptools to build 2016-07-14 16:21:46 -04:00
Ben Boeckel
6fd45520da deptypes: mark deptypes in packages 2016-07-14 16:21:46 -04:00
Ben Boeckel
45c675fe7f spack: introduce dependency types
deptypes: allow for different queries

For things like Python modules, they are required for the build and
runtime, but rather than adding a new parameter for what to query across
the dependency DAG, just expose the recursive query parameter.
2016-07-14 16:21:46 -04:00
Ben Boeckel
bae97d17d0 test: use file:// url for git repos 2016-07-14 16:21:45 -04:00
Ben Boeckel
bdf82246f7 darwin: explicitly use the 'when=' kwarg 2016-07-14 16:21:45 -04:00
Ben Boeckel
1ae43b3405 doxygen: add missing import 2016-07-14 16:21:45 -04:00
Ben Boeckel
6d2ec9baf7 test/stage: use os.path.realpath on the test paths
When var/spack/stage is a symlink, the tests fail since realpath is used
on the resulting path, but not the original path, so the string compare
fails. Smarter path testing might be a better option.
2016-07-14 16:21:45 -04:00
Ben Boeckel
b4682c8ca3 directory_layout: fix error path when specs conflict 2016-07-14 16:21:45 -04:00
Ben Boeckel
e275b567eb typos: fix some typos 2016-07-14 16:21:45 -04:00
Michael Kuhn
64d91943ec Support --dependencies for recursively loading modules. 2016-07-14 20:14:06 +02:00
George Hartzell
3e718920d1 Remove extraneous letter 'p'
It got in there by mistake, now it's gone.
2016-07-14 09:40:47 -07:00
George Hartzell
3051c3d71d Fix format of explanation of an example & question
This list was not formatted correctly on [the ReadTheDocs site](http://software.llnl.gov/spack/basic_usage.html#specs-dependencies).

I'm not a .rst expert, but I think that it was improperly indented.

The example includes an `arch=...` string but *arch* is not listed in the valid compiler flag specifiers or architecture specifiers.  Should it be, or is it considered an "optional variant specifier?
2016-07-14 08:31:07 -07:00
George Hartzell
e052aaf44d Minor typo fix
the packages that depends on => the packages that depend on
2016-07-14 08:19:32 -07:00
alalazo
b8fccb5f61 CMakePackage : added hook for roo CmakeLists.txt, removed duplicated code from build_environment.py 2016-07-14 12:04:24 +02:00
alalazo
1ecea4c2f1 log : refactored acquire and release semantic to meet the context manager protocol 2016-07-14 09:34:01 +02:00
alalazo
00b8e0b567 package.py : joined and simplified try/except blocks in do_install 2016-07-14 09:11:44 +02:00
Denis Davydov
668b4f1b2c mkl: set MKLROOT 2016-07-13 23:36:23 +02:00
Michael Kuhn
5ffc50732b flake8 fixes 2016-07-13 23:05:08 +02:00
alalazo
9d66b85492 log : changed semantic for start / join (now it's explicit) 2016-07-13 22:51:12 +02:00
alalazo
90b131260b log : changed semantic for start / join (now it's explicit) 2016-07-13 22:50:39 +02:00
Michael Kuhn
fcfe2618d5 Improve shell integration.
Enable sh emulation for Zsh and allow loading modules recursively.
2016-07-13 20:33:14 +02:00
Todd Gamblin
d24c11f2b1 Merge pull request #1231 from adamjstewart/fixes/bzip2
Patch both bzip2 makefiles
2016-07-13 10:46:58 -07:00
Adam J. Stewart
3864da6300 Flake8 2016-07-13 11:45:16 -05:00
Adam J. Stewart
d09b0c95ec Filter both makefiles to allow intel to build bzip2 2016-07-13 11:45:16 -05:00
alalazo
7cedd620f1 package.py : added CMakePackage, changed qhull, ibmisc, openjpeg to work as examples 2016-07-13 17:36:06 +02:00
alalazo
0e2afedb7f doc : fixes #1239 2016-07-13 12:43:48 +02:00
Denis Davydov
de9cce3e80 p4est: flake8 2016-07-13 11:45:33 +02:00
Denis Davydov
52ca215e29 mkl: add provide blas/lapack 2016-07-13 11:42:40 +02:00
alalazo
ad16830f71 log : added timeout to avoid deadlocks on daemon join 2016-07-13 11:20:23 +02:00
alalazo
468a6431f9 package.py : workaround for a known bug that was not fixed in python 2.6
https://bugs.python.org/issue1515
2016-07-13 11:08:19 +02:00
Denis Davydov
b8bd02c5b2 p4est: use run_tests instead of a variant 2016-07-13 10:56:40 +02:00
alalazo
5cc59507f7 package.py : hdf5 and lzo have examples of run_tests 2016-07-13 09:27:09 +02:00
alalazo
97c2224cd6 package.py : extra arguments, fixed inheritance issue
- added attribute to hold extra arguments in PackageBase instances
- fixed registration from within packages
- examples : hdf5, lzo
2016-07-13 09:27:09 +02:00
alalazo
813cb032c4 package.py : updated logic to log.py rework
Conflicts:
	lib/spack/spack/package.py
2016-07-13 09:27:09 +02:00
alalazo
513cdd580e do_install : can stop at an arbitrary phase
Now uses a StopIteration exception as a signal
2016-07-13 09:27:09 +02:00
alalazo
9af964a6d6 log_output : moved from os.fork to multiprocessing.Process 2016-07-13 09:27:09 +02:00
alalazo
440e71ff13 build_environment : moved from os.fork to multiprocessing.Process 2016-07-13 09:27:09 +02:00
alalazo
857d7bfe0f do_install : can stop at an arbitrary phase
The mechanism would be simpler if we could leverage exceptions to raise signals. Unfortunately forking does not permit to do so.
2016-07-13 09:27:09 +02:00
alalazo
a43c63f149 package : added EditableMakefile
Modifications :
- added EditableMakefile to PackageBase subclasses
- astyle modified as an example
- preliminary hook to stop at a certain phase of install
2016-07-13 09:27:09 +02:00
alalazo
8f75d34331 package : added a stub for AutotoolsPackage, examples in szip and swiftsim 2016-07-13 09:27:09 +02:00
alalazo
8ed028e2d6 package : introduced InstallPhase, added decorators for prerequisites and sanity_checks of phases 2016-07-13 09:27:09 +02:00
alalazo
a36f3764af package : added hooks for generic phases 2016-07-13 09:27:09 +02:00
George Hartzell
a73d91a2e5 Add URL and md5 for jdk-8u92.
Installed on Centos7.2 system, `java -version` works.
2016-07-12 16:59:08 -04:00
Todd Gamblin
27aa265abd Merge pull request #1211 from hartzell/patch-3
Typo: verison -> version
2016-07-12 13:53:52 -07:00
Michael Kuhn
b7d9b58cc5 Fix preferred providers. 2016-07-12 19:57:08 +02:00
Glenn Johnson
955d02049c New package - r-ggvis
Bring in ggvis and dependencies.

GGvis is an implementaion of the 'Grammar of Graphics', combined with
shiny.
2016-07-12 12:27:54 -05:00
Todd Gamblin
069de3f008 Merge pull request #1223 from glennpj/tidyr
New package - r-tidyr
2016-07-12 00:23:09 -07:00
Todd Gamblin
04b3d8d86f Merge pull request #1222 from glennpj/libxml2
Use the site_packages_dir from the Python class
2016-07-12 00:22:45 -07:00
Glenn Johnson
502d15fd3b New package - r-tidyr
Tools for changing the layout of data sets.
2016-07-11 21:12:28 -05:00
Glenn Johnson
5e323b052a Remove import of os
The import of `os` is no longer needed.
2016-07-11 20:21:25 -05:00
Glenn Johnson
81daaddfe9 Use the site_packages_dir from the Python class
It is not necessary to set site_packages_dir in this package as it is
already provided by the Python package class.
2016-07-11 20:08:30 -05:00
Todd Gamblin
38e722f75d Merge pull request #1215 from glennpj/prefix_inspections
Add share/man to prefix inspections.
2016-07-11 16:47:22 -07:00
Todd Gamblin
15790d7018 Merge pull request #1207 from davydden/pkg/dealii_update_petsc37
dealii: update for petsc37
2016-07-11 15:32:32 -07:00
Todd Gamblin
551d9eb328 Merge pull request #1220 from glennpj/libxml2
Fix libxml2 error reported on Google Groups list
2016-07-11 15:27:15 -07:00
Glenn Johnson
1b08296392 Fix flake8 error 2016-07-11 17:22:31 -05:00
Glenn Johnson
8de84b5d8a Fix error reported on Google Groups list
Fixes the reported `TypeError: not enough arguments for format string`
error.
2016-07-11 16:56:26 -05:00
Todd Gamblin
78ac11ff88 Merge pull request #1217 from LLNL/features/git-submodule-init
Add `submodules` option for git fetching.
2016-07-11 14:17:41 -07:00
Todd Gamblin
283d621b6e Add documentation for fetching submodules. 2016-07-11 13:27:37 -07:00
Todd Gamblin
86b1b28906 Add submodules option for git fetching. 2016-07-11 13:27:35 -07:00
Todd Gamblin
efdcd199c1 Merge pull request #1218 from glennpj/dplyr
New package - r-dplyr
2016-07-11 13:19:09 -07:00
Todd Gamblin
db1516d582 Merge pull request #1219 from glennpj/lubridate
New package - r-lubridate
2016-07-11 13:18:44 -07:00
Glenn Johnson
d99fbbb68f New package - r-lubridate
Functions to work with date-times and timespans.
2016-07-11 14:59:47 -05:00
Glenn Johnson
11960e53ef New package - r-dplyr
This brings in dplyr and dependencies.
2016-07-11 14:50:33 -05:00
alalazo
5f861e075c Merged develop into branch 2016-07-11 20:57:55 +02:00
Todd Gamblin
255d05a9c1 Merge pull request #1214 from glennpj/rfilter
Filter compilers for R
2016-07-11 11:37:39 -07:00
Glenn Johnson
6d36ec3d76 Add share/man to prefix inspections.
The share/man path should be in prefix_inspections for MANPATH as
share/man is a common location for manual pages.
2016-07-11 13:35:22 -05:00
Todd Gamblin
7f6541ef02 Merge pull request #1190 from davydden/feature/version_dev
add special treatment of @develop version
2016-07-11 11:31:54 -07:00
Glenn Johnson
664bdd359f Filter compilers for R
This adds a filter_compilers function to have the Makeconf file for R
point to the actual compilers rather than the spack wrappers. Also added
version 3.3.1.
2016-07-11 13:29:43 -05:00
Denis Davydov
306e601d4e document special treatment of development version 2016-07-11 19:50:33 +02:00
George Hartzell
fbaff33f3f Typo: verison -> version 2016-07-11 09:44:20 -07:00
Todd Gamblin
a729c332c8 Merge pull request #1210 from hartzell/patch-2
Typo: verison -> version
2016-07-11 09:43:52 -07:00
George Hartzell
1682257b35 Typo: verison -> version 2016-07-11 09:42:49 -07:00
Todd Gamblin
691e628726 Merge pull request #1206 from davydden/pkg/slepc_371_fix
slepc: fix install_name for binaries on macOS for 3.7.1
2016-07-11 09:14:53 -07:00
Todd Gamblin
85947d0985 Merge pull request #1209 from paulhopkins/bugfix/octave-suitesparse-variant
Fix typo in Octave variant suitesparse
2016-07-11 08:58:37 -07:00
Paul Hopkins
0d3a52ae29 Fix typo in Octave variant suitesparse 2016-07-11 16:00:19 +01:00
Denis Davydov
1b553f2b21 dealii: fix directory structure 2016-07-11 13:21:16 +02:00
Denis Davydov
f14cd67446 dealii: flake8 fixes 2016-07-11 10:56:57 +02:00
Denis Davydov
84afaf385f dealii: run tests only when self.run_tests=true 2016-07-11 10:22:29 +02:00
Denis Davydov
1cc6e42682 dealii: add petsc/slepc 3.7 support 2016-07-11 10:20:15 +02:00
Denis Davydov
38550bbc1b slepc: fix install_name for binaries on macOS for 3.7.1 2016-07-11 10:17:09 +02:00
Geoffrey Oxberry
7551e4c14f cmake@3.6.0
Add CMake version 3.6.0.
2016-07-10 18:02:51 -07:00
Denis Davydov
b29d5e6032 add special treatment of develop version 2016-07-10 14:21:52 +02:00
Todd Gamblin
b0f4052bd8 Merge pull request #1169 from davydden/feature/install_argument_tests_petsc_fixes
--run-tests install argument and petsc fixes
2016-07-09 12:10:16 -07:00
Denis Davydov
e482994a15 petsc: add -lm when building example 2016-07-09 08:12:34 +02:00
Todd Gamblin
c086ccdab6 Merge pull request #1200 from glennpj/lowpackname
Have ``spack create`` default to lower case name for package
2016-07-08 13:29:52 -07:00
Glenn Johnson
33d0660abc Have `spack create` default to lower case name
This will create package directories with lower case names when using
`spack create`. The documentation was modified to reflect this.
2016-07-08 15:11:37 -05:00
Todd Gamblin
3338fcf014 Merge pull request #1199 from eschnett/eschnett/cereal-update
Update Cereal to 1.2.0
2016-07-08 12:21:14 -07:00
Erik Schnetter
c8137194f0 Update Cereal to 1.2.0 2016-07-08 15:20:09 -04:00
Todd Gamblin
f04258eb29 Merge pull request #1192 from SteVwonder/develop
docbook-xml: replace 'cp -t' with install_tree
2016-07-08 11:09:41 -07:00
Todd Gamblin
1fa67e458c Merge pull request #1194 from SteVwonder/lua-fix
lua: switch self.version[:2] to .up_to(2)
2016-07-08 11:09:18 -07:00
Todd Gamblin
642be5fa3d Merge pull request #1197 from SteVwonder/json-c-serial-build
json-c: fix build by running serially
2016-07-08 11:08:10 -07:00
Todd Gamblin
2759f14f23 Merge pull request #1198 from hartzell/patch-1
Fix typo
2016-07-08 11:08:00 -07:00
George Hartzell
1b9e8a0e65 Fix typo
Comamnds -> Commands
2016-07-08 11:01:08 -07:00
Stephen Herbein
bb8a8ecda3 json-c: fix build by running serially 2016-07-08 10:39:47 -07:00
Paul Hopkins
49e8e4b590 Add comments explaining UCS4 and prevent variant being used on Python 3.3 and above 2016-07-08 13:47:25 +01:00
Stephen Herbein
1a1bf31032 lua: switch self.version[:2] to .up_to(2)
Previous package would not install correctly, would throw:
return os.path.join('share', 'lua', '%d.%d' % self.version[:2])
TypeError: %d format: a number is required, not Version
2016-07-07 18:58:52 -07:00
Stephen Herbein
1b53452618 docbook-xml: replace 'cp -t' with install_tree
'-t' is not supported by the default cp on Mac OS X

replace with install/install_tree

cannot just use install_tree since shutil.copytree insists that the dst
directory not exist
2016-07-07 17:41:53 -07:00
Nicolas Richart
d339f2af29 flake8 corrections 2016-07-07 18:22:27 +02:00
Nicolas Richart
4c1b53660d fixes #719 2016-07-07 18:18:01 +02:00
Paul Hopkins
a2be05f24b Fix whitespace 2016-07-07 14:00:37 +01:00
Paul Hopkins
719b6bfffd Modify range for ucs4 2.* configure arguments 2016-07-07 13:18:40 +01:00
Paul Hopkins
8c1274bbbb Fix Python configure arguments for ucs4 variant on Python 3.0 and above 2016-07-07 13:12:43 +01:00
Paul Hopkins
fb6d850637 Add more python versions 2016-07-07 13:09:08 +01:00
Todd Gamblin
b9148b1751 Merge pull request #1125 from NERSC/docs/cray
Update documentation for use on Cray
2016-07-06 15:06:20 -07:00
Gregory Becker
403a55afb2 Minor bug fix 2016-07-06 14:54:25 -07:00
Gregory Becker
663b30b3e8 Update target autodetection for linux platform 2016-07-06 14:54:22 -07:00
Todd Gamblin
6bb31a9a4c Merge pull request #1175 from davydden/pkg/arpack-3.4.0
Pkg/arpack 3.4.0
2016-07-06 14:45:21 -07:00
Todd Gamblin
91da3d8e64 Merge pull request #1174 from LLNL/bugfix/github-1172-suite-sparse
Bugfix/GitHub 1172 suite sparse
2016-07-06 14:35:59 -07:00
Todd Gamblin
c6e89d9283 Merge pull request #1180 from davydden/pkg/oce_update_and_fix
oce: add 0.17.2; fix running tests
2016-07-06 14:27:05 -07:00
Denis Davydov
14cef6eab8 oce: flake8 fixes 2016-07-06 22:51:20 +02:00
Denis Davydov
c096bb332a petsc: fix unit tests 2016-07-06 22:45:43 +02:00
Denis Davydov
081918d71a add --run-tests argument for install() 2016-07-06 22:45:30 +02:00
Todd Gamblin
58487accdd Merge pull request #1179 from paulhopkins/features/python-ucs4
Add ucs4 unicode variant to Python package
2016-07-06 12:27:04 -07:00
Greg Lee
3df0f1902d clean up suitesparse deps 2016-07-06 12:15:20 -07:00
Greg Lee
4e27d91351 flake 8 fixes 2016-07-06 11:51:32 -07:00
Denis Davydov
57eaea2e8c oce: add 0.17.2; fix running tests 2016-07-06 20:35:59 +02:00
Paul Hopkins
61fe89bda0 Add ucs4 unicode variant to Python package 2016-07-06 18:29:54 +01:00
Denis Davydov
3d755a148b arpack-ng: fix binaries for macOS 2016-07-06 18:30:38 +02:00
Todd Gamblin
03fdb2058a Merge pull request #1176 from epfl-scitas/features/version_minor_improvements
spack.Version : like a duck!
2016-07-06 09:01:19 -07:00
alalazo
379f23be02 swiftsim : fixed configuration for metis 2016-07-06 17:51:46 +02:00
alalazo
9b926a480f qa : flake8 issues 2016-07-06 17:03:32 +02:00
alalazo
780a57367d version : modified __getitem__ to return either an item or a Version instance + unit tests 2016-07-06 17:00:48 +02:00
alalazo
32e086f44a version : modified __repr__ to return a string representation of the object + unit tests 2016-07-06 15:24:10 +02:00
Denis Davydov
c8fc56686c arpack-ng: fix corrupted parpack_cmake.patch 2016-07-06 13:42:59 +02:00
Denis Davydov
63e45c586c arpack-ng: flake8 fixes and minor update of incode comments 2016-07-06 13:27:02 +02:00
Denis Davydov
a47b3ba01b arpack-ng: use spec['mpi'].mpif77 2016-07-06 13:23:51 +02:00
Denis Davydov
f5f7abd71f arpack-ng: add 3.4.0 with cmake build 2016-07-06 12:59:42 +02:00
Todd Gamblin
2b9d02d594 Merge pull request #1173 from willkill07/bugfix/module/spec_typo
(bugfix) fixed typo of spec --> raw_spec
2016-07-05 15:45:27 -07:00
Greg Lee
4c063c6055 kludge to get suite-sparse-4.5.1 to link with -lstdc++ 2016-07-05 13:48:32 -07:00
Greg Lee
976b2b4d25 added suitesparse version 4.5.3 2016-07-05 13:45:22 -07:00
William Killian
1f64f08cb3 (bugfix) fixed typo of spec --> raw_spec 2016-07-05 13:32:37 -07:00
Todd Gamblin
cb9c4ac866 Merge pull request #1170 from eschnett/eschnett/py-h5py
Don't enforce `hdf5~mpi`
2016-07-05 09:02:43 -07:00
Erik Schnetter
79b3ef0362 Don't enforce hdf5~mpi 2016-07-05 10:58:11 -04:00
alalazo
55c4a676ad gts : added package 2016-07-05 14:30:48 +02:00
Todd Gamblin
d687e332ad Fix compile bugs for gcc on Mac OS X with macports.
- add macports to things that are cleaned out of the environment.
- linker incompatibilities cause issues with packages like OpenSSL.
- also clean up NOQA stuff in OpenSSL
2016-07-04 22:59:02 -07:00
Todd Gamblin
690937f953 Add --dirty option to spack install.
- Allow install to be run without cleaning the environment.
2016-07-04 22:58:01 -07:00
Todd Gamblin
6bac1598f6 Merge branch 'fix-archive' of https://github.com/mwilliammyers/spack into mwilliammyers-fix-archive 2016-07-04 21:35:33 -07:00
Todd Gamblin
f2a692c515 Merge pull request #1163 from epfl-scitas/fixes/reserved_name_for_system_packages
fixes : reserved name for system packages
2016-07-04 21:25:50 -07:00
Todd Gamblin
d166c04db5 Merge pull request #1166 from glennpj/rstan
New package - RStan
2016-07-04 21:23:10 -07:00
Todd Gamblin
1de675e976 Merge pull request #1165 from robertdfrench/ruby-needs-ffi-zlib
Ruby 2.2.0 needs ffi and zlib
2016-07-04 21:22:38 -07:00
Glenn Johnson
d5abcc5c88 Fix flake errors 2016-07-04 17:55:10 -05:00
Glenn Johnson
519b760222 New package - RStan
This PR creates the RStan package and its dependencies.
2016-07-04 17:30:05 -05:00
Robert D. French
53bbbfbe21 Require libffi, zlib; Make Openssl, readline optional 2016-07-04 15:21:13 -04:00
Todd Gamblin
9fb8030370 Merge pull request #1164 from epfl-scitas/revert-1023-packages/mumps
Revert "Corrected the shared libraries and tests in mumps package"
2016-07-04 10:02:33 -07:00
Nicolas
85982017b6 Revert "Corrected the shared libraries and tests in mumps package" 2016-07-04 18:19:09 +02:00
alalazo
861f174f66 qa : fixed flake8 issues 2016-07-04 10:26:32 +02:00
alalazo
3e8391458c openssl : changed tag for system reserved versions fixes #1150 2016-07-04 10:25:20 +02:00
Todd Gamblin
890df7153a Merge branch 'efischer/160311-StagedPackage' of https://github.com/citibeth/spack into citibeth-efischer/160311-StagedPackage 2016-07-04 00:27:32 -07:00
Todd Gamblin
2143c38ab8 Merge pull request #1158 from glennpj/intelfix
Use Executable to set script for Intel compiler installation
2016-07-03 23:16:32 -07:00
alalazo
6d988dde8d qa : fixed flake8 issues 2016-07-02 12:54:36 +02:00
alalazo
3100c5948a module : added unit tests 2016-07-02 12:14:30 +02:00
Glenn Johnson
729f23b432 Use Executable to set script
Use `Executable("./install.sh")` to set `install_script`. This allows it
to work when the current directory is not on the PATH.
2016-07-01 22:13:40 -05:00
Todd Gamblin
0de4ba738b Merge pull request #1157 from glennpj/envclean
Remove more variables from build environment
2016-07-01 20:13:32 -07:00
Glenn Johnson
31e9ded768 Remove more variables from build environment
Remove the LIBRARY_PATH and CPATH environment variables before building
a package.
2016-07-01 20:59:14 -05:00
alalazo
d10fceaacc spack commands : refactoring of cli arguments and common utiities. Implemented suggestions on spack module loads
- Common cli arguments now are in their own module
 - Moved utilities that can be reused by different commands into spack.cmd.__init__.py
 - Modifications to `spack module loads`
2016-07-01 23:06:07 +02:00
alalazo
0e171127b9 module : reverted typo introduced in a previous commit 2016-07-01 14:30:01 +02:00
alalazo
f0f7b23c8a module : added rm subcommand, encapsulated logic for constraints in argarse.Action subclass 2016-07-01 14:27:55 +02:00
alalazo
fe4ef286f2 module : added the command 'load-list' 2016-07-01 12:38:04 +02:00
Mario Melara
56adb5d9a5 Change arch spec and fix typo
Changed old arch specs to new arch specs. Changed intallation to
installation
2016-06-30 17:03:07 -07:00
Mario Melara
16a4c49f98 Remove Cray examples of config files
Removed examples of Cray config files and added them under Spack on
Cray. Any users of Cray can just look at the Spack on Cray section to
get an idea of what's used. If they want more information they can click
links to the sections.
2016-06-30 17:01:18 -07:00
Mario Melara
d784d561fc Add more documentation fix arch spec
Added more documentation for Spack on Cray. Also fixed the architecture
spec to be linux-debian7-x86_64 since it was reversed in the previous
commit.
2016-06-30 16:59:36 -07:00
Todd Gamblin
e837be1af9 Merge pull request #1153 from tzanio/mfem-3.2-dev
Updating MFEM package with v3.2 info.
2016-06-30 15:41:26 -07:00
Tzanio Kolev
137db14b75 Update package.py 2016-06-30 15:40:02 -07:00
Tzanio
d3b0cb56b7 Updating MFEM package with v3.2 info. 2016-06-30 15:23:30 -07:00
Massimiliano Culpo
6793a54748 --prefix : defaults to empty string 2016-06-30 23:18:32 +02:00
Massimiliano Culpo
ba1ada5424 Merge branch 'develop' of https://github.com/LLNL/spack into features/module_refresh_reworking
Conflicts:
	lib/spack/spack/cmd/module.py
2016-06-30 22:19:46 +02:00
alalazo
a770151359 module : minor improvement to output formatting 2016-06-30 16:49:24 +02:00
Elizabeth Fischer
6327877a6f PEP-8 2016-06-30 09:19:57 -04:00
Elizabeth Fischer
50ac98bc04 Merge remote-tracking branch 'upstream/develop' into efischer/160630-StagedPackage
# Conflicts:
#	lib/spack/docs/packaging_guide.rst
#	lib/spack/spack/package.py

Mostly minor/formatting issues in lib/spack/spack/package.py (the heavyweight merge was already done recently).  Only one serious issue: it looks like the feature branch had accidentally deleted the line `spack.hooks.post_install(self)`.  This got added back in from develop.
2016-06-30 09:13:24 -04:00
alalazo
ba87937fff module : added detection of file name clashes 2016-06-30 13:44:49 +02:00
alalazo
1b7eedbb7d modules.yaml : added hash_length as a new keyword
config :
- added `hash_length` under the modules section

EnvModules :
- take into consideration hash_length when constructing `file_name`
- added logic to warn and skip module file writing in case of file name clash
2016-06-30 12:56:47 +02:00
Todd Gamblin
0e422dec8c Merge pull request #1141 from adamjstewart/fixes/license_docs
Fix missing code blocks in licensed software documentation
2016-06-30 02:22:38 -07:00
Todd Gamblin
bc2fa76588 Merge pull request #1146 from scheibelp/features/doc-caching
added documentation for automatic caching of resources fetched during installs
2016-06-30 02:13:16 -07:00
Todd Gamblin
30d083c6b7 Merge branch 'efischer/160401-RecursiveModules' of https://github.com/citibeth/spack into citibeth-efischer/160401-RecursiveModules 2016-06-30 02:12:00 -07:00
Todd Gamblin
a7b8cb6901 Merge pull request #1145 from davydden/pkg/petsc_tests
petsc: run a test
2016-06-30 01:58:35 -07:00
Denis Davydov
6f4b0e9bda petsc: fix flake8 and ~mpi case in tests 2016-06-30 08:22:01 +02:00
Peter Scheibel
cfd380d514 added documentation for automatic caching of resources fetched during installs 2016-06-29 18:23:40 -07:00
Todd Gamblin
cd943ebe94 Merge pull request #1142 from adamjstewart/features/restview
Add py-restview package
2016-06-29 17:04:30 -07:00
Denis Davydov
37728afada petsc: run a test 2016-06-30 00:19:50 +02:00
Ben Boeckel
5f720f9b7c flake8: appease the style checker 2016-06-29 14:49:58 -04:00
Ben Boeckel
e3e94f0ac9 bootstrap: name the current branch the same as the remote 2016-06-29 14:49:19 -04:00
Ben Boeckel
89bf5f4045 bootstrap: allow using alternate remotes
If you want to bootstrap from a fork, the `--remote` option may be used
to select it.

Also limit the branches to 'develop' and 'master' if the remote is
'origin' since those are the actual integration branches used (other
branches on 'origin' are just PR branches).
2016-06-29 14:49:19 -04:00
Ben Boeckel
7ec191ce0b bootstrap: use the currently checked out branch
The `master` branch is not really where Spack development happens, so
default to it, but use the user's current branch if it's there.
2016-06-29 14:49:19 -04:00
Ben Boeckel
6f69c01915 bootstrap: fall back to the default upstream URL
Fixes #352.
2016-06-29 14:49:19 -04:00
Adam J. Stewart
2fcaa011ce Add py-restview package 2016-06-29 12:57:58 -05:00
Adam J. Stewart
06de8c56af Fix missing code blocks in licensed software documentation 2016-06-29 12:35:38 -05:00
Todd Gamblin
eb388306fd Merge pull request #1112 from adamjstewart/features/dependencies
Make spack create automatically add dependencies for build system
2016-06-29 07:57:33 -07:00
Todd Gamblin
c996632113 Add spack purge --cache to purge local archive cache. 2016-06-29 01:41:55 -07:00
Todd Gamblin
bc1320d83a Merge branch 'features/cache-archives' of https://github.com/scheibelp/spack into scheibelp-features/cache-archives 2016-06-29 00:57:26 -07:00
Todd Gamblin
7df89896f4 Merge pull request #1113 from davydden/octave_extensions
Octave extensions
2016-06-29 00:38:05 -07:00
alalazo
b71d430af6 module : can regenerate single module files, homogenized cli options
spack module :
- refresh accepts a constraint
- find and refresh share common cli options
- ask for confirmation before refreshing
- deleting the module file tree is now optional
2016-06-28 19:28:18 +02:00
Todd Gamblin
0fd58fb585 Merge pull request #1133 from davydden/pkg/dealii_fix_tests
dealii: run more unit tests when building @dev
2016-06-28 10:02:43 -07:00
Denis Davydov
32c801bbf6 dealii: run more unit tests when building @dev 2016-06-28 18:06:56 +02:00
Todd Gamblin
ad48ad7586 Merge pull request #1131 from epfl-scitas/fixes/swift_git_environment_variables
fix : swiftsim will set git environment variables in the appropriate hook
2016-06-28 09:05:26 -07:00
alalazo
5cdd37959a swiftsim : substituted tag with corresponding commit 2016-06-28 18:03:28 +02:00
Todd Gamblin
6810965457 Merge pull request #1130 from davydden/gmsh
Gmsh -- various fixes
2016-06-28 08:49:06 -07:00
alalazo
18612eca59 qa : fixed flake8 issues 2016-06-28 12:59:13 +02:00
alalazo
48888b0f8e swift : setting environment variables in the right place 2016-06-28 12:57:19 +02:00
Denis Davydov
c4c167c1ca octave: rename executable Octave to octave 2016-06-28 11:25:45 +02:00
Denis Davydov
51b0f53b33 gmsh: flake8 fixes 2016-06-28 10:50:35 +02:00
Denis Davydov
06e38d2ca2 gmsh: various fixes
(i) add new version
(ii) add OCE, PETSc and SLEPc as dependencies
(iii) fix Blas/Lapack configuration
(iv) disable internal Metis which does not compile
2016-06-28 10:33:25 +02:00
Todd Gamblin
793c9f5546 Merge pull request #1116 from mwilliammyers/package-lrzip
Add package lrzip & its dependency lzo
2016-06-27 22:32:57 -07:00
mwilliammyers
0384794912 Fix #1019 - cannot create mirror for git spec 2016-06-27 16:00:38 -06:00
Mario Melara
26325fe812 Add missing link to external packages
Adding missing _sec-external_packages to link with external packages
page
2016-06-27 14:35:56 -07:00
mwilliammyers
9bb918915f Add package lrzip & its dependency lzo 2016-06-27 15:19:13 -06:00
Mario Melara
7fb45e4bfd Update documentation for use on Cray
Updating how to use compilers.yaml on Cray as well as setting up
external packages. Also includes what needs to be set up for usage on
Cray and explains what needs to be done to get Spack properly working.
Also explain the architecture spec and what it does.
2016-06-27 13:52:48 -07:00
Todd Gamblin
d7c2f683d9 Merge pull request #1004 from UCL-RITS/bare-eigen
Option to install eigen without dependencies
2016-06-27 13:35:35 -07:00
Todd Gamblin
b80a03e6b6 Merge pull request #1124 from epfl-scitas/packages/fenics
Fenics: Corrections for PETSc 3.7 and detection of PETSC version to enable TAO
2016-06-27 13:32:57 -07:00
Nicolas Richart
9026fb8e8a Corrections for PETSc 3.7 and detection of PETSC version to enable TAO 2016-06-27 20:52:05 +02:00
Todd Gamblin
3ea9d1e665 Merge pull request #1122 from LLNL/bugfix/newarch-sys_type
Bugfix/newarch sys type
2016-06-27 10:07:03 -07:00
Todd Gamblin
bf4eeb48b9 Merge pull request #1099 from adamjstewart/fixes/hdf5
Fix self-check for hdf5@1.10.0-patch1
2016-06-27 09:47:17 -07:00
Todd Gamblin
76458f5bfc Merge pull request #1002 from epfl-scitas/packages/foam-extend
Package foam-extend
2016-06-27 09:40:49 -07:00
Adam J. Stewart
798dabc8f2 Forgot the unknown key/value pair 2016-06-27 09:01:53 -05:00
Denis Davydov
0faa6dd753 octave: make extendable and add a package 2016-06-27 13:44:58 +02:00
Todd Gamblin
0185226042 Merge pull request #1121 from LLNL/bugfix/module-directory-pollution
Make MockPackagesTest use a different module location.
2016-06-27 02:25:32 -07:00
Todd Gamblin
99c3ed56fa Add new sys_type method that prints out the *full* arch descriptor. 2016-06-27 02:19:26 -07:00
Todd Gamblin
305d5698df Rename spack.architecture.sys_type() to spack.architecture.platform() 2016-06-27 02:19:08 -07:00
Todd Gamblin
a15aee5d8e Make MockPackagesTest use a different module location.
- ensures anything tests create is blown away.
2016-06-27 01:22:03 -07:00
Todd Gamblin
d899059075 Merge pull request #1120 from LLNL/bugfix/mockdb-pollution
Fixes #760: spack test leaves builtin.mock packages in DB
2016-06-27 01:07:52 -07:00
Todd Gamblin
b4c36164b5 Fixes #760: spack test leaves builtin.mock packages in DB
- install_layout was redirected by the install test, but not the DB.
- redirect the DB now, as well.
2016-06-27 00:55:16 -07:00
Todd Gamblin
3bc4a38b78 Merge pull request #1118 from epfl-scitas/packages/swift_durham
swift : added new package
2016-06-27 00:39:45 -07:00
alalazo
13fcb3c083 swift : renamed swiftsim 2016-06-27 09:25:58 +02:00
alalazo
f3f309a22a Merge branch 'develop' of https://github.com/LLNL/spack into packages/swift_durham 2016-06-27 09:08:37 +02:00
Todd Gamblin
73213ac59d Merge pull request #984 from epfl-scitas/module_file_explicit_load
module files : explicit load and mnemonic suffixes
2016-06-26 23:33:48 -07:00
Todd Gamblin
a1db306a0c Merge pull request #1009 from epfl-scitas/packages/emacs
Emacs: adding dependencies to be able to build without the system libs
2016-06-26 22:46:45 -07:00
Todd Gamblin
19b69ce3a5 Merge pull request #1097 from citibeth/efischer/160622-DBErrors
Improved Spack database errors to help users fix them.
2016-06-26 22:45:44 -07:00
Todd Gamblin
ece72e5337 Merge pull request #1030 from opoplawski/external
Remove last two remaining from external imports
2016-06-26 22:41:58 -07:00
Todd Gamblin
bad32724ec Merge pull request #1092 from adamjstewart/features/netcdf-f
Add latest version of netcdf-fortran and curl
2016-06-26 22:38:00 -07:00
Todd Gamblin
8f28df1d14 Merge pull request #1094 from epfl-scitas/documentation/remove_packages_yaml_inconsistencies
packages.yaml : removed references to a never implemented feature
2016-06-26 22:37:43 -07:00
Todd Gamblin
8b35940857 Merge pull request #1103 from adamjstewart/features/mpi
Add MPI environment variables to packages
2016-06-26 22:35:39 -07:00
Todd Gamblin
30993357d7 Merge pull request #1105 from adamjstewart/fixes/filter_file
Fix backup logic in filter_file
2016-06-26 22:33:09 -07:00
Todd Gamblin
f86f6c6274 Merge pull request #1104 from mwilliammyers/py-protobuf
Add new package py-protobuf
2016-06-26 22:28:57 -07:00
Todd Gamblin
7d85902f37 Merge pull request #1093 from eschnett/eschnett/julia-update
Update Julia to 0.4.6
2016-06-26 22:28:33 -07:00
Todd Gamblin
c096aa9557 Merge pull request #997 from glennpj/glib_gcc
Get glib to compile with gcc-6.1
2016-06-26 22:28:07 -07:00
Nicolas Richart
f3accb111e correcting flake8 2016-06-27 01:23:14 +02:00
Nicolas Richart
7cf1313572 changes to use from_sourcing_file 2016-06-27 00:55:26 +02:00
Todd Gamblin
18222de7b6 Merge pull request #1119 from epfl-scitas/fixes/moved_packages
fixes : moved packages into builtin/repo
2016-06-26 13:50:00 -07:00
alalazo
9de0503188 qa : flake8 issues 2016-06-26 22:00:10 +02:00
alalazo
11863d2de3 packages : moved adios and mxml into builtin repo 2016-06-26 21:56:06 +02:00
alalazo
a2ba60f6a8 qa : flake8 issues 2016-06-26 17:38:48 +02:00
alalazo
e5b36583b5 swift : added package 2016-06-26 17:36:53 +02:00
alalazo
acd9014553 autotools : set Executable() in dependent modules 2016-06-26 17:36:33 +02:00
Adam J. Stewart
ea88d9cfe9 Make spack create automatically add dependencies for build system 2016-06-24 16:43:31 -05:00
Todd Gamblin
055f7f4ab6 Add package_dir method to package.py. 2016-06-24 12:33:53 -07:00
mwilliammyers
2c6c21a3bf Add new package py-protobuf 2016-06-23 15:54:20 -06:00
Adam J. Stewart
71a297f121 Fix backup logic in filter_file 2016-06-23 16:44:41 -05:00
Adam J. Stewart
8921bf4552 Add MPI environment variables to packages 2016-06-23 10:08:40 -05:00
Todd Gamblin
65e3ac4132 Merge pull request #1102 from LLNL/bugfix/sbang-lua-fix
Make sbang handle lua
2016-06-23 01:20:01 -07:00
Todd Gamblin
27e9bc6d02 Make sbang handle lua
- use --! instead of #! for patched lua scripts.
2016-06-23 00:03:23 -07:00
Adam J. Stewart
d566510a40 Flake8 and url_for_version fixes 2016-06-22 15:22:42 -05:00
Adam J. Stewart
3f4bf04dde Fix self-check for hdf5@1.10.0-patch1 2016-06-22 14:40:51 -05:00
Elizabeth Fischer
8f846d507d Added --prefix to module command. 2016-06-22 15:36:04 -04:00
Elizabeth Fischer
10810482bc Update database.py
PEP8
2016-06-22 14:03:32 -04:00
Elizabeth Fischer
ffe9e77e36 Improved Spack database errors to help users fix them. 2016-06-22 12:11:09 -04:00
Todd Gamblin
86893e3dc4 Merge pull request #1096 from robertdfrench/import-which
Import which from spack.util.executable; Fixes #1095
2016-06-22 09:06:01 -07:00
Robert.French
ff3e56cf9a Import which from spack.util.executable; Fixes #1095 2016-06-22 15:25:32 +00:00
Erik Schnetter
c904a42c5b Address flake errors 2016-06-22 11:09:45 -04:00
alalazo
f29b55957a documentation : removed references to never implemented features 2016-06-22 17:08:02 +02:00
Adam J. Stewart
b66f5b6231 Add latest version of cURL 2016-06-22 10:05:20 -05:00
Erik Schnetter
e398c0dc5b Update Julia to 0.4.6 2016-06-22 11:00:00 -04:00
Adam J. Stewart
060fb596f7 Add latest version of netcdf-fortran 2016-06-22 09:52:17 -05:00
Nicolas Richart
97feca0888 Merge branch 'develop' into packages/foam-extend 2016-06-22 14:51:57 +02:00
Todd Gamblin
e41d67e031 Merge pull request #1078 from adamjstewart/features/pillow
Allow py-pillow to link to Spack-built libraries
2016-06-22 01:11:25 -07:00
Todd Gamblin
8b5467e65d Merge pull request #1049 from glennpj/newR_database
New R database packages
2016-06-21 13:23:58 -07:00
Adam J. Stewart
a7ffb2c1a4 Flake8 2016-06-21 15:21:53 -05:00
Todd Gamblin
bbe2db5814 Merge pull request #1087 from LLNL/bugfix/new-harfbuzz-fix
Bugfix/new harfbuzz fix
2016-06-21 13:10:50 -07:00
Adam J. Stewart
66089c89aa Depend on pil 2016-06-21 14:55:49 -05:00
Adam J. Stewart
2efc67da60 Remove +tk variant, provide pil 2016-06-21 14:50:33 -05:00
Gregory L. Lee
e0fbf14f99 consolidated f2py regex 2016-06-21 09:23:58 -07:00
Gregory L. Lee
8f3954c1bd flake 8 fixes for cairo, freetype, and harfbuzz 2016-06-21 08:47:22 -07:00
Gregory L. Lee
4041f45b6c fixed conflicts in python package 2016-06-21 08:47:11 -07:00
Todd Gamblin
58cff1290d Make environment test less sensitive to user config files. 2016-06-21 00:19:28 -07:00
Todd Gamblin
0521b9bb32 Fix merge error. 2016-06-21 00:08:12 -07:00
Todd Gamblin
f18e1a9371 Merge branch 'features/cantera' of https://github.com/adamjstewart/spack into adamjstewart-features/cantera 2016-06-20 23:53:48 -07:00
Todd Gamblin
3f90fee614 Merge pull request #1085 from NERSC/bugfix/compiler_find
Bugfix/compiler find and gfortran fix.
2016-06-20 23:46:13 -07:00
Glenn Johnson
77cd474a2d Make all packages lowercase. 2016-06-20 20:10:44 -05:00
Todd Gamblin
70a25c4587 Change --insensitive to --sensitive in spack list 2016-06-20 17:17:25 -07:00
Todd Gamblin
cbd5a0a6e3 Merge branch 'list-ext' of https://github.com/trws/spack into trws-list-ext 2016-06-20 17:13:32 -07:00
Todd Gamblin
db81a74d66 Merge pull request #939 from davydden/docs/blas_lapack
document blas and lapack usage in packages
2016-06-20 17:11:09 -07:00
Todd Gamblin
a3431c5a73 Merge pull request #1047 from epfl-scitas/source_diffs_in_environment_modifications
feature : construct environment modifications sourcing files
2016-06-20 16:56:30 -07:00
Mario Melara
d515877d91 Add init_config args in compilers/__init__ 2016-06-20 16:20:52 -07:00
Mario Melara
4c4f3e9747 Add init_config to compiler_find method 2016-06-20 16:20:33 -07:00
Todd Gamblin
76d950b103 Merge pull request #1084 from epfl-scitas/packages/openmpi_without_fortran
OpenMPI : reverts part of #1079
2016-06-20 13:30:54 -07:00
alalazo
5aa3131385 qa : fixed flake8 issues 2016-06-20 21:11:33 +02:00
alalazo
b86e3047f3 openmpi : revert part of #1079 (OpenMPI can be built without fortran)
Building OpenMPI without fortran is possible, and was already handled.
 Raising an install error we effectively renounce at clang+OpenMPI.

 build_environment : sets 'CC', 'CXX', and similar variables only if a compiler is found
2016-06-20 20:46:11 +02:00
Tom Scogland
45482187b4 one more typo issue 2016-06-20 11:42:35 -07:00
Tom Scogland
f6aa864bc4 adding quotes to make sure the glob is interpreted correctly 2016-06-20 11:41:36 -07:00
Tom Scogland
ac728d3e60 fixing capitol->capital typos 2016-06-20 11:38:39 -07:00
Tom Scogland
6180e6c047 automatic case-insensitive like smartsearch, docs
New documentation for the new options, also case insensitive by default
unless the user includes an upper-case character in their pattern.
2016-06-20 11:33:56 -07:00
Mario Melara
6fb7b0fcf7 Merge branch 'develop' of https://github.com/LLNL/spack into bugfix/compiler_find
Forgot to pull branch changes before
2016-06-20 10:59:28 -07:00
Mario Melara
88888f5ba0 Got rid of unnecessary module arg 2016-06-20 10:58:20 -07:00
Mario Melara
1303b5a6a9 Adding more init_config as args to all_compilers,all_compilers_config, and get_compiler_config 2016-06-20 10:57:58 -07:00
Mario Melara
fe30113502 Adding init_config back. Don't initalize config rather let compiler_find do all the work. spack compiler list and spack compilers can do the work 2016-06-20 10:57:10 -07:00
Tom Scogland
0377f3580b switching argument naming 2016-06-20 10:53:19 -07:00
Todd Gamblin
f74d4b0660 Merge pull request #1052 from adamjstewart/features/psi4
Add Psi4 Package
2016-06-20 10:49:45 -07:00
Todd Gamblin
9b299cb2bb Merge pull request #1023 from epfl-scitas/packages/mumps
Corrected the shared libraries and tests in mumps package
2016-06-20 10:48:12 -07:00
Todd Gamblin
cec283f608 Merge pull request #1059 from epfl-scitas/packages/mpi_wrappers_with_rpath
MPI : have wrappers set RPATH instead of RUNPATH
2016-06-20 10:47:24 -07:00
Adam J. Stewart
aa86488fd9 Flake8 2016-06-20 12:47:17 -05:00
Todd Gamblin
c2d0870924 Merge pull request #1063 from eschnett/eschnett/openmpi-1.10.3
Update OpenMPI to 1.10.3
2016-06-20 10:45:56 -07:00
Todd Gamblin
42ff1aaa75 Merge pull request #1064 from LLNL/bugfix/github-1043-script-backup
do not create shebang.bak file
2016-06-20 10:45:42 -07:00
Todd Gamblin
31bb47356f Merge pull request #1022 from glennpj/r-devtools
new package: r-devtools
2016-06-20 10:34:23 -07:00
Todd Gamblin
b3881701c5 Merge pull request #1021 from glennpj/packrat
new package: r-packrat
2016-06-20 10:33:55 -07:00
Todd Gamblin
0fbd2fe224 Merge pull request #1000 from glennpj/new_R
Add version 3.3.0 of R and extensions
2016-06-20 10:33:43 -07:00
Todd Gamblin
c09111bbef Merge pull request #1053 from davydden/pkg/dealii_suite_update
update Petsc, Slepc, Trilinos, Superlu-dist and deal.II
2016-06-20 10:32:52 -07:00
Todd Gamblin
59318f4705 Merge pull request #1081 from mathstuf/pkg-config-path
modules.yaml: use the right envvar for pkg-config
2016-06-20 10:32:03 -07:00
Todd Gamblin
8047edfb56 Merge pull request #1029 from adamjstewart/features/armadillo
Add Armadillo and SuperLU packages
2016-06-20 10:29:29 -07:00
Todd Gamblin
265b9bcb0f Merge pull request #1076 from JRWynneIII/ferret
Added spec to build Ferret
2016-06-20 10:28:42 -07:00
Adam J. Stewart
be407f531e Move around extension logic 2016-06-20 12:24:45 -05:00
Adam J. Stewart
28b2e36230 Add ctest executable 2016-06-20 12:24:45 -05:00
Adam J. Stewart
afff40e584 Flake8 fix for R templates 2016-06-20 12:24:45 -05:00
Adam J. Stewart
c9eb5f8173 Use non-checksummed PyPi download URLs 2016-06-20 12:24:45 -05:00
Adam J. Stewart
5dfc2052bd Flake8 change 2016-06-20 12:24:45 -05:00
Adam J. Stewart
98d03c74e1 Add support for less common compression schemes 2016-06-20 12:24:45 -05:00
Adam J. Stewart
7e1ee463ca Install examples for sundials 2016-06-20 12:24:45 -05:00
Adam J. Stewart
5a55bb3f8d Modify R installation template 2016-06-20 12:24:45 -05:00
Adam J. Stewart
79fae306f6 Add extensions for Python/R and more configurable install 2016-06-20 12:24:45 -05:00
Adam J. Stewart
81ac3b62fc Filter compilers and link boost properly 2016-06-20 12:24:45 -05:00
Adam J. Stewart
9500f2718b More Flake8 2016-06-20 12:24:45 -05:00
Adam J. Stewart
a21e845ce7 Flake8 2016-06-20 12:24:45 -05:00
Adam J. Stewart
2220784eda Add scons support, .zip support, and Cantera package 2016-06-20 12:24:45 -05:00
Peter Scheibel
1dc62e8a19 Merge branch 'develop' into features/cache-archives 2016-06-20 10:16:02 -07:00
Todd Gamblin
12b9d6da10 Merge pull request #1083 from robertdfrench/tmux-2.2
Tmux 2.2
2016-06-20 09:36:55 -07:00
Todd Gamblin
8bdb6695c7 Merge pull request #1079 from davydden/pkg/blas_mpi_fortran
require fortran compilers for Openblas and Openmpi
2016-06-20 09:36:23 -07:00
Todd Gamblin
ce105e9bbe Merge branch 'bugfix/compiler_find' into develop 2016-06-20 09:34:25 -07:00
Todd Gamblin
84e21703bd Test no longer assumes compilers exist in /usr.
- makes a fake gcc instead, and tests that.
2016-06-20 09:28:39 -07:00
Robert.French
83b0c16728 Tmux 2.2 with PEP8
Tmux 2.2

Provide variant to skip utempter

Remove utempter variant; 2.2 doesn't need it

Flake8ify
2016-06-20 16:26:49 +00:00
Ben Boeckel
973caa3a07 modules.yaml: use the right envvar for pkg-config
Fixes #1072.
2016-06-20 11:10:29 -04:00
Erik Schnetter
e43eaad557 New package porta 2016-06-19 14:11:36 -04:00
Erik Schnetter
a0c0728ea8 New package polymake 2016-06-19 13:47:26 -04:00
Erik Schnetter
b4da4425ff Add header files to lrslib install 2016-06-19 13:47:02 -04:00
Erik Schnetter
fa471a4ed1 Add missing header files to Bliss install 2016-06-19 13:46:38 -04:00
Erik Schnetter
d8b9cda632 Build Bliss both with and without GMP 2016-06-19 12:48:47 -04:00
Denis Davydov
cf4a34c657 openmpi: raise an error without Fortran compiler 2016-06-19 11:59:29 +02:00
Denis Davydov
1cc04cff27 openblas: raise an error without Fortran compiler 2016-06-19 11:59:10 +02:00
Erik Schnetter
71e92774eb New package cddlib 2016-06-18 22:47:59 -04:00
Erik Schnetter
8fa8fc239f New package "nauty and Traces" 2016-06-18 22:22:58 -04:00
Erik Schnetter
e5b08544ff New package Panda 2016-06-18 22:02:36 -04:00
Erik Schnetter
2009354719 Add fourier tool to lrslib 2016-06-18 21:38:15 -04:00
Erik Schnetter
a5086f474e New package lrslib 2016-06-18 18:03:09 -04:00
Erik Schnetter
92a7c0ddd5 Update Bliss to use -O3 2016-06-18 18:02:52 -04:00
Erik Schnetter
64aaf7ba81 New package cdd 2016-06-18 16:37:08 -04:00
Erik Schnetter
83d4cdc090 Update Bliss 2016-06-18 16:36:43 -04:00
Erik Schnetter
a07056d67b Add Bliss package 2016-06-18 16:20:37 -04:00
Mario Melara
64c83638ff Adding test to list of test_names 2016-06-18 11:11:46 -07:00
Mario Melara
15e6b88a8b Adding new tests for compiler command for spack's test suite 2016-06-18 10:51:38 -07:00
Mario Melara
36275f8e6e More clean up of init_config, also no need for a different find_compilers function. 2016-06-18 10:50:55 -07:00
Mario Melara
ccb62b4620 Getting rid of no longer used init_config arg 2016-06-18 10:49:39 -07:00
Todd Gamblin
f9efb746d7 Merge pull request #1032 from eschnett/eschnett/cc-quotes
Add quotes around file name
2016-06-18 08:57:18 -07:00
alalazo
9e0c20c794 environment : filter the current environment
Previously only the environment obtained after sourcing the file was filtered.
This caused the appeareance of spurious unset commands in the list.
2016-06-18 13:39:08 +02:00
alalazo
a17d1efe7c Merge branch 'develop' of https://github.com/LLNL/spack into features/source_diffs_in_environment_modifications
Conflicts:
	lib/spack/spack/test/environment.py
2016-06-18 13:31:29 +02:00
alalazo
670669ef80 qa : fixed flake8 issues 2016-06-18 13:10:35 +02:00
alalazo
a33077b77f unit tests : fixed test_alter_environment 2016-06-18 13:07:14 +02:00
alalazo
51cf847647 Merge branch 'develop' of https://github.com/LLNL/spack into features/module_file_explicit_load
Conflicts:
	lib/spack/spack/test/modules.py
2016-06-18 13:06:37 +02:00
Mario Melara
8af1c5fc8f Merge remote-tracking branch 'upstream/develop' into develop
"Updating NERSC branch"
2016-06-18 00:52:06 -07:00
Mario Melara
c703bfb54d Got rid of init_config flag since we don't need it. Instead we update the cache config if there are any changes 2016-06-18 00:48:08 -07:00
Adam J. Stewart
652a5eb592 Allow py-pillow to link to Spack-built libraries 2016-06-17 18:09:03 -05:00
Todd Gamblin
62b2f2a7c9 Merge pull request #1065 from epfl-scitas/packages/espresso_update
espresso : update to 5.4.0
2016-06-17 14:51:45 -07:00
Todd Gamblin
4569df025e Merge pull request #1060 from mathstuf/no-break-long-words
tty: do not break long words
2016-06-17 14:51:26 -07:00
Todd Gamblin
9a8d109650 Merge pull request #1044 from adamjstewart/features/sncosmo
Add py-sncosmo package
2016-06-17 14:50:37 -07:00
Todd Gamblin
d7f48e1ff0 Merge pull request #1061 from mathstuf/reindex-preserve-explicit
reindex: preserve 'explicit' flags
2016-06-17 14:29:47 -07:00
Todd Gamblin
0bbbfc2ef7 Merge pull request #946 from LLNL/features/intel2
Intel software packages and license enhancements
2016-06-17 14:28:39 -07:00
Tom Scogland
8770f2a0ea fixing last flake8 issue 2016-06-17 13:42:27 -07:00
Tom Scogland
0743ef4d0b fixing flake8 issues 2016-06-17 13:32:28 -07:00
Tom Scogland
a4ac99877a cmd/list: adding description search and glob by default 2016-06-17 12:00:35 -07:00
Adam J. Stewart
536fa73d5f Python flake8 overhaul 2016-06-17 13:33:09 -05:00
Robert D. French
448f8c43d4 Added working Ferret spec
Fixed ferret spec. It builds now

Made ferret spec more flake8-y

Fixed homepage and info text about Ferret

Removed vim swap file

Reverted changes to netcdf-fortran spec and added netcdf~mpi dependency to ferret spec to compensate for it

Fixed flake8 issues!
2016-06-17 14:23:50 -04:00
Mario Melara
fe5eec5230 'find and 'add' are options for adding compilers via command line 2016-06-17 09:16:03 -07:00
Adam J. Stewart
80d444624b Fix activation of sites.py for sncosmo 2016-06-17 11:08:16 -05:00
Adam J. Stewart
24f65c502e Add additional Astropy dependencies 2016-06-17 10:45:10 -05:00
Adam J. Stewart
b2aa78d6ab Remove version constraints 2016-06-17 10:45:10 -05:00
Adam J. Stewart
4eeaff175c Allow packages to build 2016-06-17 10:44:28 -05:00
Adam J. Stewart
a660c60eb1 Add py-sncosmo package 2016-06-17 10:43:34 -05:00
Glenn Johnson
8970785d33 Add 'jdk' as a dependency.
Add jdk as a dependency so that R has support for java and allow
packages that need java to work.
2016-06-16 23:08:55 -05:00
Glenn Johnson
a813f03955 Add list_url for old versions. 2016-06-16 23:08:55 -05:00
Glenn Johnson
4850b9d4d1 Make install comment consistent with actual call. 2016-06-16 23:08:55 -05:00
Glenn Johnson
7da405e630 Add validator for bioconductor packages
This commit adds a validator function to make sure the versions of R and
bioconductor are in sync.
2016-06-16 23:08:55 -05:00
Glenn Johnson
7213b12324 Tweak how R packages are built.
Add bzip2 as a dependency to base R.

Switch from installing the R packages from tar files to installing from
the extracted directory. This is more in line with a standard install
and also allows installing from VCS.

Use the Bioconductor version for BiocGenerics and future Bioconductor
packages. Suffix the package with 'bioc-$version' to indicate which
Bioconductor release the package is a part of. This is actually more
important than the actual version attached to individual packages
although those are subject to change within the Bioconductor branch.
2016-06-16 23:08:55 -05:00
Glenn Johnson
0e64c25ffc Fix flake8 errors
Use Bioconductor provided Short URL for homepage in BiocGenerics.
Wrap description text for utf variant in pcre.
2016-06-16 23:08:54 -05:00
Glenn Johnson
37dc13edaf Update version of BiocGenerics
The BioConductor repositories only keep the most recent version so this
has to be bumped.
2016-06-16 23:08:54 -05:00
Glenn Johnson
8704a4ed35 Use configure_args rather than options
Replaced 'options' with 'configure_args'. That seems like a better name
and is consistent with the packaging guide.
2016-06-16 23:08:54 -05:00
Glenn Johnson
fe256870b4 Add variant for UTF support to pcre
This will build PCRE with UTF support by default. That seems to be
reasonable for most environments.
2016-06-16 23:08:54 -05:00
Glenn Johnson
cb3505769b Clean up R extensions
Run the existing R extension packages through autopep8 to clean up.
2016-06-16 23:07:13 -05:00
Glenn Johnson
6649f9edc2 Add version 3.3.0 of R
This commit adds the 3.3.0 version of R and adds dependencies on curl
and pcre.
2016-06-16 23:07:13 -05:00
Glenn Johnson
64acbbfcf0 Clean up R package files
- remove unused imports
- apply pep8
- reformat text strings
2016-06-16 23:07:13 -05:00
Mario Melara
df84fe0b58 Added init_config parameter so we don't initialize the config when user runs spack compiler add. Should ONLY add what user specifies. Find compilers takes in paths parameter. 2016-06-16 18:10:38 -07:00
Todd Gamblin
f351e011d1 Merge pull request #1068 from epfl-scitas/fixes/flake8_no_f405
Flake8: ignore F405
2016-06-16 17:13:01 -07:00
Todd Gamblin
9ee6cbfb40 Merge pull request #944 from adamjstewart/features/bertini
Add bertini package
2016-06-16 16:57:50 -07:00
Todd Gamblin
344280154a Merge pull request #962 from adamjstewart/features/hpl
Add HPL benchmark package
2016-06-16 16:57:24 -07:00
Todd Gamblin
005827ab23 Replace 2.6-incompatible skipIf with a conditional.
- skipIf doesn't work with Python 2.6.
2016-06-16 12:12:29 -07:00
Todd Gamblin
f60ae61652 remove dead code, cleanup. 2016-06-16 10:44:15 -07:00
Todd Gamblin
8867adf942 simplify instance check. 2016-06-16 10:43:36 -07:00
Todd Gamblin
c7dfa1699a rename Mac OS X to macos 2016-06-16 10:43:12 -07:00
alalazo
a5aa159d9d flake8: ignore F405 2016-06-16 19:23:16 +02:00
Mario Melara
6b03770602 Added str method to mac_osx so that whenever we try to access darwins different operating systems we can grab the name correctly. This avoids having to worry whether we have a version attached to it or not. 2016-06-16 09:44:37 -07:00
Todd Gamblin
88b73bacdb Merge branch 'features/newarch' into develop
Conflicts:
	lib/spack/spack/config.py
	var/spack/repos/builtin/packages/lua/package.py
2016-06-16 03:03:26 -07:00
Todd Gamblin
17b868381f Fixes #460: Do not show variants by default in spack find.
This does two things:

1. By default `spack find` no longer shows variants.  You have to
   supply `-v` to get that

2. This improves the `colify` implementation so that it no longer pads
   the rightmost column.  This avoids the issue where if one spec was
   too long in the output, *all* specs would have space padding added
   to that width, and it would look like the output of `spack find`
   was double spaced.  This no longer happens -- the one bad line
   wraps around and the other lines are now single-spaced when you use
   `-v` with boost.
2016-06-16 02:55:33 -07:00
alalazo
a1cbb73f8b qa : fixed flake8 issues 2016-06-16 11:24:18 +02:00
alalazo
8d9ffcf565 espresso : updated to 5.4.0, added Parallel=False 2016-06-16 11:22:26 +02:00
Todd Gamblin
88b671f8b1 Just call old os "unknown" 2016-06-16 02:06:19 -07:00
Todd Gamblin
76dfaa71a7 fix up packages for new architecture. 2016-06-16 01:47:20 -07:00
Todd Gamblin
40d25d9062 Add libxcb dependencies. Fix up packages to get py-basemap and stat to build. 2016-06-16 00:56:53 -07:00
Todd Gamblin
f3d6818d5c be more tolerant when parsing new specs. 2016-06-16 00:55:39 -07:00
Todd Gamblin
c90cc465f5 Add __contains__ to arch to satsify old packages. 2016-06-16 00:54:59 -07:00
Gregory L. Lee
d4df4375d5 removed unused import per flake8 report 2016-06-15 20:32:08 -07:00
Gregory L. Lee
1724ff5658 do not create shebang.bak file 2016-06-15 20:21:02 -07:00
Gregory Becker
3fcd54203c two minor fixes 2016-06-15 16:44:38 -07:00
Gregory Becker
2fc9ac4036 Two minor fixes 2016-06-15 16:39:39 -07:00
Erik Schnetter
a7ab064a9e Update OpenMPI to 1.10.3 2016-06-15 18:05:23 -04:00
Adam J. Stewart
ea80c8d3c3 Ignore E501 for depends_on and extends 2016-06-15 14:38:53 -05:00
Massimiliano Culpo
daa46105a7 mpich based providers : shortened filter_compilers 2016-06-15 21:37:12 +02:00
Adam J. Stewart
44e188f111 Remove MPI support, fix INCLUDE filters 2016-06-15 14:17:30 -05:00
Adam J. Stewart
7b97ea248a More template filtering 2016-06-15 14:17:29 -05:00
Adam J. Stewart
9cf1257be4 Filter compilers 2016-06-15 14:17:29 -05:00
Adam J. Stewart
deb4f919cf Psi4 tweaks 2016-06-15 14:17:29 -05:00
Adam J. Stewart
9d99042fed Add Psi4 package 2016-06-15 14:17:29 -05:00
Ben Boeckel
716f12dd58 reindex: preserve 'explicit' flags
Look up in the old database whether the spec was explicit or not and
preserve it into the new database.

Fixes #1050.
2016-06-15 12:48:40 -04:00
Denis Davydov
0e04e65ae0 trilinos: specify superlu-dist version dependency 2016-06-15 18:44:59 +02:00
Denis Davydov
5fe531050c flake8 fixes for dealii 2016-06-15 18:33:34 +02:00
Denis Davydov
e76083205f flake8 fixes for slepc 2016-06-15 18:33:08 +02:00
Denis Davydov
6390acc660 flake8 fixes for petsc 2016-06-15 18:32:42 +02:00
Denis Davydov
6d714e4425 flake8 fixes for superlu-dist 2016-06-15 18:31:39 +02:00
Denis Davydov
3d3a26cd9a flake8 fixes for filesystem.py 2016-06-15 18:31:10 +02:00
Ben Boeckel
36decbfa69 tty: do not break long words
These "words" tend to be file paths which are best left unbroken.

Fixes #1057.
2016-06-15 12:22:35 -04:00
Denis Davydov
d0d83cfe1e slepc: build by default with Arpack 2016-06-15 18:21:13 +02:00
Denis Davydov
d04dc8440f dealii: specify petsc/slepc version dependencies 2016-06-15 18:21:13 +02:00
Denis Davydov
4d40f86bd3 trilinos: add 12.6.2 and 12.6.3 2016-06-15 18:21:13 +02:00
Denis Davydov
5358ffbe5a slepc: add 3.6.3 and 3.7.1; specify petsc version dependency 2016-06-15 18:21:13 +02:00
Denis Davydov
9ceb8fea78 petsc: add 3.6.4 and 3.7.2; specify superlu-dist version dependency 2016-06-15 18:21:13 +02:00
Denis Davydov
a860a3d614 superlu-dist: avoid harcoding blas/lapack/mpi; remove preferred version 2016-06-15 18:21:13 +02:00
Todd Gamblin
c803f7ae98 Merge pull request #1045 from eschnett/eschnett/openmpi-verbs-usr
Do not pass "/usr" or "/usr/local" as path to configure
2016-06-15 09:06:12 -07:00
Todd Gamblin
4ede87a8b0 Merge pull request #1058 from eschnett/eschnett/blosc
Add packages c-blosc and hdf5-blosc
2016-06-15 09:04:48 -07:00
Todd Gamblin
9dd1f2747a Merge pull request #1028 from JRWynneIII/boost-graph-parallel-fix
Add variant for boost graph and parallel graph
2016-06-15 09:03:01 -07:00
Todd Gamblin
08badb5a35 Merge pull request #1040 from KineticTheory/pkg-trilinos
Make Boost an optional feature of Trilinos.
2016-06-15 08:57:38 -07:00
Todd Gamblin
ff3469385b Merge pull request #1037 from KineticTheory/develop
Package serf also depends on zlib.
2016-06-15 08:57:14 -07:00
Todd Gamblin
bfedeadacb Merge pull request #1031 from opoplawski/pcre
Add patch to compile pcre with Intel 16.0.3 compiler
2016-06-15 08:56:53 -07:00
Todd Gamblin
a19c8b343e Merge pull request #1051 from daboehme/develop
Use https for github in Caliper package
2016-06-15 08:56:11 -07:00
alalazo
b09bee8158 qa : fixed flake8 issues 2016-06-15 13:29:30 +02:00
alalazo
b59d4f243b openmpi, mvapich2, mpich : filtered out "--Wl,--enable-new-dtag" in wrappers, as it turns RPATH into RUNPATH
Apart from that turned `os.path.join` into `join_path` and `os.environ` into `env` in the packages
2016-06-15 13:21:39 +02:00
Erik Schnetter
05d7378da5 Install shared libraries correctly on Linux 2016-06-14 17:13:20 -04:00
Erik Schnetter
ca5180f7a2 Correct Blosc install on Darwin 2016-06-14 17:03:00 -04:00
Erik Schnetter
e6ec372926 Add packages c-blosc and hdf5-blosc
c-blosc provides the Blosc compression filter, and hdf5-blosc provides a plugin for HDF5 to use that filter.
2016-06-14 09:59:48 -04:00
Glenn Johnson
e226837d33 Fix flake8 error. 2016-06-13 23:04:26 -05:00
Glenn Johnson
8861c99333 New package - r-foreign 2016-06-13 22:50:07 -05:00
Glenn Johnson
5ba5ef6c46 Add list_url for older versions. 2016-06-13 17:50:27 -05:00
Glenn Johnson
94d0f21823 New package - r-xlsxjars 2016-06-13 17:50:06 -05:00
Glenn Johnson
4767185082 New package - r-xlsx 2016-06-13 17:48:59 -05:00
Glenn Johnson
5cd09af066 New package - r-XLConnect 2016-06-13 17:48:44 -05:00
Glenn Johnson
3c234a7d3b New package - r-XLConnectJars 2016-06-13 17:36:50 -05:00
Glenn Johnson
450b082daf Do not need to depend on jdk here because R itself does. 2016-06-13 17:35:35 -05:00
Glenn Johnson
427fa7fd0a New package - rJava 2016-06-13 17:26:01 -05:00
David Boehme
52160bff18 Use https for github 2016-06-13 11:47:28 -07:00
Glenn Johnson
d398ebe21f New package - r-RSQLite 2016-06-12 22:06:06 -05:00
Glenn Johnson
b96b32e9ec New package - r-RPostgreSQL 2016-06-12 22:05:45 -05:00
Glenn Johnson
77e8096a6f New package - r-RODBC 2016-06-12 22:05:26 -05:00
Glenn Johnson
bfb0985c38 New package - r-RMySQL 2016-06-12 22:05:10 -05:00
Glenn Johnson
a7a640bfb8 New package - rDBI 2016-06-12 22:04:37 -05:00
Glenn Johnson
b05a565648 New package - mariadb 2016-06-12 22:04:09 -05:00
Glenn Johnson
5d3965c7a6 New package - unixODBC 2016-06-12 22:03:24 -05:00
Glenn Johnson
7727f6fc7e New package - libaio 2016-06-12 22:02:46 -05:00
Glenn Johnson
4dcb15cf6d Ran through autopep8 and cleaned up. 2016-06-12 22:00:49 -05:00
Glenn Johnson
bdb9af63ed Add version 9.5.3 and add readline as a dependency. 2016-06-12 21:58:41 -05:00
Glenn Johnson
8ff7cbb9ce Run binutils/package.py through autopep8. 2016-06-12 21:57:03 -05:00
Glenn Johnson
1601cf1b14 Patch binutils
This commit adds a patch to update symbol versions from linker scripts.
This is seen with libmysqlclient.so which has to maintain compatibility
across two versions. Only one can be the default.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=544ddf9322b1b83982e5cb84a54d084ee7e718ea
2016-06-12 21:46:11 -05:00
Kelly (KT) Thompson
31d2c38687 Update formatting to meet code style requirements. 2016-06-12 19:56:29 -06:00
Kelly (KT) Thompson
b89bcdff62 Make Boost an optional feature of Trilinos.
I have been unable to build Boost with some toolset/platform combinations. The
users I support don't need the Boost features in Trilinos, so I have been
manually hacking trilinos/package.py to disable boost. I would like to propose
that these changes be added to the released version.

+ Add boost as a variant, default to true so there is no change to existing
  behavior.
+ Move the CMake configure options related to Boost into a conditional block
  that is triggered by "if '+boost' in spec".
2016-06-12 19:48:45 -06:00
Tom Scogland
1b28991e0a Merge pull request #1026 from epfl-scitas/packages/lmod
lmod : updated package and dependencies
2016-06-12 17:01:41 -07:00
Massimiliano Culpo
30c9d976f6 environment : added more logic to treat append and prepend path 2016-06-12 18:54:56 +02:00
alalazo
5300ffac7f qa : fixed flak8 checks 2016-06-12 15:11:26 +02:00
alalazo
a6681f2d7f environment modules : added function to construct them from source files 2016-06-12 15:06:17 +02:00
Glenn Johnson
59c9816dbf Make quotations in variables consistent. 2016-06-11 16:01:23 -05:00
Glenn Johnson
0e9f8bd38d Add list_url for old versions. 2016-06-11 15:53:28 -05:00
Erik Schnetter
953b65abcc Do not pass "/usr" or "/usr/local" as path to configure 2016-06-11 16:41:39 -04:00
Glenn Johnson
6c0ea77d1d Add list_url for older versions. 2016-06-11 15:36:43 -05:00
alalazo
3737169450 qa : fixed style and a bug reported by flake8
lib/spack/spack/test/versions.py:313: [F811] redefinition of unused 'test_union_with_containment' from line 306
Flake8 found errors.
2016-06-11 12:57:46 +02:00
alalazo
eb9b00b210 versions : added unit tests for the new properties 2016-06-11 12:44:21 +02:00
Gregory Becker
0fea167f97 I made a hash of that minor merge
Merge commit '4eeb' into features/newarch
2016-06-10 16:28:09 -07:00
Gregory Becker
992bcac794 changed compiler yaml format 2016-06-10 16:26:02 -07:00
Adam J. Stewart
85502e34f9 CMake knows how to create PIC 2016-06-10 14:35:19 -05:00
Todd Gamblin
bc038eb7c3 Merge pull request #1020 from LLNL/bugfix/libdwarf_versions
put older versions back + version-specific dwarfdump dir
2016-06-10 05:47:04 -07:00
Kelly (KT) Thompson
883f601bca Fix style issues. 2016-06-09 19:18:25 -06:00
Kelly (KT) Thompson
915115386a Package serf also depends on zlib.
+ Add zlib as a required dependency.
+ Point scons build system to the spack provided zlib installation.
2016-06-09 18:30:28 -06:00
Erik Schnetter
2a4d440003 Add quotes around file name
$input_log will expand to file names with special characters (e.g. "@"), thus bash requires quotes.
2016-06-08 19:14:01 -04:00
Orion Poplawski
454acf58af Add additional blank line for flake8 2016-06-08 16:49:42 -06:00
Orion Poplawski
e3ca5e6676 Add patch to compile pcre with Intel 16.0.3 compiler 2016-06-08 16:23:04 -06:00
Orion Poplawski
4952c4c7de Also remove from external from bin/spack 2016-06-08 14:22:26 -06:00
Orion Poplawski
7ce08c4216 Remove last two remaining from external imports 2016-06-08 13:51:31 -06:00
Adam J. Stewart
65896ff2ed Add Armadillo and SuperLU packages 2016-06-08 14:11:14 -05:00
James Riley Wynne III
4b9707f8ea Fixed flake8 formatting problems 2016-06-08 14:36:45 -04:00
Peter Scheibel
3b71d78f3c rename URLMirrorFetchStrategy to CacheURLFetchStrategy since it isnt used to manage all mirror URLs - just the cache (the specific behavior that a URL may refer to a stale resource doesn't necessarily apply to mirrors) 2016-06-08 09:57:56 -07:00
James Riley Wynne III
42a10d5690 Fixes issue #438 2016-06-08 12:43:05 -04:00
Nicolas Richart
2d21693b9d Missing file to patch mumps 2016-06-08 17:09:13 +02:00
alalazo
564483936f qa : fixed flake8 issues 2016-06-08 16:33:49 +02:00
alalazo
4a61efe641 lmod : fixed issues with LUA_PATH during installation 2016-06-08 16:21:09 +02:00
alalazo
f4a39457de lmod : updated package and dependencies 2016-06-08 15:35:15 +02:00
Nicolas Richart
165411f4a5 bug fix in the +mpi case 2016-06-08 15:17:12 +02:00
Nicolas Richart
498c098d11 Cleaning flake warnings in mumps package 2016-06-08 14:57:54 +02:00
Nicolas Richart
e124c86a4f Corrected the shared libraries and tests in mumps package 2016-06-08 14:17:46 +02:00
Glenn Johnson
bb19dffb26 Fix flake8 error. 2016-06-07 23:40:12 -05:00
Glenn Johnson
ad0cfa41aa Fix flake8 errors 2016-06-07 23:37:49 -05:00
Glenn Johnson
738720a000 new package: r-devtools
This PR brings in the R devtools package and it dependencies.
2016-06-07 23:20:46 -05:00
Greg Lee
bb57b82794 flake8 fixes 2016-06-07 20:15:02 -07:00
Glenn Johnson
2262bc95f1 new package: r-packrat
Manage the R packages your project depends on in an isolated, portable,
and reproducible way.
https://github.com/rstudio/packrat/
2016-06-07 22:04:11 -05:00
Greg Lee
25b2f7b1d7 put older versions back + version-specific dwarfdump dir 2016-06-07 20:02:38 -07:00
Peter Scheibel
a2754894ea (1) FsCache store now takes a fetcher vs. just a copy command (2) use [1] to conditionally cache resource: only save it if there is a feature which identifies it uniquely (for example do not cache a repository if it pulls the latest state vs. a particular tag/commit) 2016-06-07 16:26:54 -07:00
Mario Melara
5715799d4e Added to_dict back into operating system 2016-06-07 14:15:28 -07:00
Mario Melara
4925be0bc4 Load external modules 2016-06-07 13:22:47 -07:00
Peter Scheibel
de1ec4be8b change source archive caching to omit digest from name and instead calculate and compare the checksum. This achieves the original goal of discarding stale cache files without preserving multiple files for the same version. 2016-06-06 12:26:13 -07:00
Mario Melara
196737c217 Changed to passing full architecture spec to function rather than just platform_os so we can grab the operating system from the platform getters 2016-06-06 10:29:19 -07:00
Mario Melara
835982faed Changed OS name to CNL10 so that we properly find the compilers for the test platform 2016-06-06 09:08:59 -07:00
Mario Melara
864191b6ed Got rid of unnecessary global keyword 2016-06-06 09:06:58 -07:00
Mario Melara
5b023bb0a1 Passing through full arch instead of just operating sysystem so that we can use the platform to get the operating system 2016-06-06 09:05:14 -07:00
Mario Melara
c7b48f6fef Passing full arch for proper compiler spec so that we can use the platform to get the operating system 2016-06-06 09:04:24 -07:00
Mario Melara
f751d68177 Passing architecture to functions to find compiler. We can use the platform name if provided to find the operating system. Also changed error to operating system instead of target since operating system is now in charge of compiler finding. 2016-06-06 09:03:32 -07:00
Tom Scogland
30e8e77fb6 Merge pull request #869 from brettviren/feature/views
Feature/views
2016-06-05 11:31:48 -07:00
alalazo
bdd874eb7f autopep8 2016-06-04 18:09:28 +02:00
alalazo
02cadb882b unit test : suffixes 2016-06-04 18:09:06 +02:00
alalazo
669caefccb unit test : wrong naming scheme in conflict 2016-06-04 18:00:18 +02:00
alalazo
d43cfefa43 autopep8 2016-06-04 17:24:52 +02:00
alalazo
2d6db06fca unit test : prerequisites 2016-06-04 17:24:27 +02:00
alalazo
ffa6fed3a3 unit test : custom module file load 2016-06-04 17:20:06 +02:00
alalazo
422d3d4db6 unit test : write a whitelisted module 2016-06-04 16:46:15 +02:00
alalazo
09b1daa7b9 unit test : write a blacklisted module 2016-06-04 16:23:41 +02:00
alalazo
408aa10210 unit test : whitelist 2016-06-04 16:18:15 +02:00
alalazo
a3f39c2315 autopep8 : fixed style issues 2016-06-04 11:23:23 +02:00
alalazo
97e2834816 unit test : wrong tag for dependencies 2016-06-04 11:20:35 +02:00
alalazo
2207ab8f23 unit test : inspect_path 2016-06-04 10:44:37 +02:00
alalazo
0e71b5dde8 unit test : update dictionary extending lists 2016-06-04 10:07:13 +02:00
Mario Melara
30c204a0a5 Made a merge commit earlier with Todd fixing all_platforms, but changed how architecture looks in spec.yaml. Just three strings. Also made some flake8 formatting changes 2016-06-03 16:16:59 -07:00
Mario Melara
bc557cc765 Merge branch 'features/newarch' of https://github.com/NERSC/spack into features/newarch 2016-06-03 15:59:00 -07:00
Mario Melara
24d160e93e Changed how architecture looks like in spec.yaml. Now it's only three strings, platform, os, target in spec.yaml. Also did some flake8 formatting changes 2016-06-03 15:57:54 -07:00
Mayeul d'Avezac
0b5ce9e16a 💄 style points requested by flake8 2016-06-03 11:52:19 +01:00
Nicolas Richart
8b6035ab82 Making emacs dependent on internal packages 2016-06-03 00:24:00 +02:00
Todd Gamblin
9d04dccb79 Update version to correspond to master. 2016-06-02 01:20:40 -07:00
Todd Gamblin
3d2b25e45c Merge pull request #1014 from epfl-scitas/packages/mvapich2
Changes to take into account slurm in version @2.1: of mvapich2
2016-06-02 01:08:28 -07:00
Todd Gamblin
27bc49d8c8 Merge pull request #1001 from ashkan2200/develop
Dealii, fixed issue with tests
2016-06-02 01:01:29 -07:00
Todd Gamblin
b843b73bb5 Merge pull request #1005 from eschnett/eschnett/hdf5-update
Update HDF5 to version 1.10.0-patch1
2016-06-02 00:57:15 -07:00
Todd Gamblin
552cfac6ed Merge pull request #1008 from LLNL/features/cflags-fix
Fixed config format to allow default compiler flags
2016-06-02 00:56:44 -07:00
Todd Gamblin
1fb4fa02e3 Merge pull request #1010 from epfl-scitas/packages/tetgen
Adding a version to tetgen
2016-06-02 00:54:09 -07:00
Todd Gamblin
fca8034578 Merge pull request #1011 from epfl-scitas/packages/fenics
Adding package FEniCS
2016-06-02 00:53:47 -07:00
Nicolas Richart
53dcc39b72 removing useless selfs 2016-06-01 17:33:54 +02:00
Nicolas Richart
3ab8468e73 Correcting the flake8 warnings 2016-06-01 16:43:08 +02:00
Nicolas Richart
0451c8e55f Addapting the mvapich2@2.1: configure options for slurm 2016-06-01 15:58:00 +02:00
Nicolas Richart
d802144f39 Introduced a bug by correcting flake8 warnings 2016-06-01 03:31:29 +02:00
Nicolas Richart
5d4a0e4050 Corrections for flake8 2016-06-01 03:28:42 +02:00
Nicolas Richart
97bad2c1ac Corrections for flake8 2016-06-01 03:25:37 +02:00
Nicolas Richart
58052e6632 Adding package fenics 2016-06-01 03:20:56 +02:00
Nicolas Richart
cb673765c2 Adding a version to tetgen 2016-06-01 03:02:48 +02:00
Nicolas Richart
0df0677d5b Adding a variant to link against the spack libraries instead of the system ones 2016-06-01 03:00:03 +02:00
Nicolas Richart
9db8dc1895 Removing extra dependencies + minor fix according to remarks on #1002 2016-06-01 00:57:01 +02:00
Gregory Becker
817f43f927 Fixed config format to allow default compiler flags 2016-05-31 13:39:25 -07:00
Erik Schnetter
c03c689cb2 Update HDF5 to version 1.10.0-patch1 2016-05-31 12:18:17 -04:00
Adam J. Stewart
564e7f5e5b Don't build in parallel 2016-05-31 09:32:24 -05:00
Todd Gamblin
7bdf63a0fa Fix some bugs in architecture. 2016-05-31 03:01:05 -07:00
Mayeul d'Avezac
29b85fbce0 Eigen can be installed with dependencies 2016-05-31 10:10:12 +01:00
Ali Dorostkar
6f96484f83 Spacing correction
More spacing correction
2016-05-31 09:58:29 +02:00
Ali Dorostkar
e82fb5b58f Fixed spacing
Replaced tabs with spaces
2016-05-31 08:44:46 +02:00
Todd Gamblin
24ee32d7b0 More flexible reading of specs from DB, formatting. 2016-05-30 22:02:22 -07:00
Todd Gamblin
f3f0122f11 Merge branch 'develop' into features/newarch 2016-05-30 13:54:53 -07:00
Mario Melara
b14ba31250 Quick fix for mock compilers.yaml to work on linux machines. 2016-05-30 13:22:08 -07:00
Mario Melara
716991775d Added extra check on linux machines, since most linux machines don't have module system 2016-05-30 13:09:41 -07:00
Mario Melara
08a9d80ebc Changed platform to py_platform to avoid name collisions. The naming collisions resulted in an error on linux machines 2016-05-30 13:07:20 -07:00
Mario Melara
f96c979024 Added a conditional to check if package is external 2016-05-30 13:05:49 -07:00
Ali Dorostkar
c4d5bd13c7 dealii, Added comment
Added comment for why step-40 is done differently for dealii 8.4.0 and
later
2016-05-30 18:11:34 +02:00
Nicolas Richart
fd345c8ef0 Merge branch 'packages/foam-extend' of github.com:epfl-scitas/spack into packages/foam-extend 2016-05-30 17:04:21 +02:00
Nicolas Richart
9f4e599232 Ignoring the flake8 error for a line too long 2016-05-30 16:58:06 +02:00
Nicolas Richart
08c8d1d1f7 limiting package to foam-extend to start 2016-05-30 16:49:25 +02:00
Nicolas Richart
4122ecbc80 First try at OpenFOAM-extend 2016-05-30 16:49:25 +02:00
Ali Dorostkar
4f591a6fe3 Step-40 test for 8.3.0 and earlier
Integrated part of step-40 to be tested for earlier versions of dealii
2016-05-30 16:42:24 +02:00
Nicolas Richart
fe79e43459 limiting package to foam-extend to start 2016-05-30 15:46:39 +02:00
Ali Dorostkar
d7e84fe07c dealii, test for specific version
Specified that test case “step-40” is only to be run when using dealii
version 8.4.0 or later
2016-05-30 14:03:27 +02:00
Ali Dorostkar
04061ece4f Merge remote-tracking branch 'LLNL/develop' into develop 2016-05-30 14:03:02 +02:00
Glenn Johnson
66aaaa1751 Add a comment regarding the reason for the patch. 2016-05-29 15:30:09 -05:00
Todd Gamblin
1eed2ee985 Merge pull request #999 from ashkan2200/develop
Dealii, Versions added
2016-05-29 10:56:00 -05:00
Ali Dorostkar
c2ac47235f additional versions for Dealii
Included additional versions for Deal.II package.
2016-05-29 13:22:19 +02:00
Todd Gamblin
e8b4d5fb6f Performance boost: reduce instantiations of re.Scanner
- Lexer is the same for every Spec parser in spack, so don't build it
  every time.

- This improves time to import package.py files a lot, as a Lexer
  doesn't have to be constructed for every spc in the packages.

- To concretize dealii:
  - Before: ~20 sec
  - After:  ~6 sec
2016-05-28 23:05:23 -07:00
Glenn Johnson
c16d7c481c Get glib to compile with gcc-6.1
This commit adds a patch to fix the case where gcc-6.1 emits an error
for string format literal that was a warning in previous versions of
gcc. The patch reference is
https://bugzilla.gnome.org/show_bug.cgi?id=761550

Also ran the package file through autopep8.
2016-05-28 23:30:56 -05:00
Mario Melara
22ca72e7b9 Added conditional skipIf to test_external_modules, darwin machines don't have tcl modules so skip this test and let user know why 2016-05-28 12:40:29 -07:00
Mario Melara
69585cb6e3 Added elcap compilers 2016-05-28 12:39:43 -07:00
Mario Melara
33e1dcc476 Adding mock package file for external module 2016-05-28 10:14:40 -07:00
Mario Melara
f0a9c45207 Adding external to mock config 2016-05-28 10:13:57 -07:00
Mario Melara
98a4a9f2cc Adding test for external modules 2016-05-28 10:13:22 -07:00
Mario Melara
becec8ac7e Added external module check in normalize to avoid infinite loop 2016-05-28 10:12:53 -07:00
Gregory Becker
9dad7c2ace re-merged mainline develop 2016-05-27 13:13:19 -07:00
Greg Lee
6dcdb50a3e Merge branch 'develop' of https://github.com/llnl/spack into develop 2016-05-27 12:44:57 -07:00
Greg Lee
0ae1298d25 updated libdwarf version and dwarfdump build 2016-05-27 12:43:13 -07:00
Gregory Becker
f49644cdea Fixed typo in linux platform 2016-05-27 12:37:58 -07:00
Gregory Becker
023504ed64 Fixed the external modules bug 2016-05-27 12:26:59 -07:00
Adam J. Stewart
dd5a6914f1 Undo changes to flex 2016-05-27 12:56:43 -05:00
Todd Gamblin
f6a0cd1bf8 Merge pull request #973 from eschnett/eschnett/openmpi-verbs
Auto-detect verbs location
2016-05-27 11:01:44 -05:00
Todd Gamblin
285646bbfa Merge pull request #981 from epfl-scitas/tests/unit_test_for_968
find : add unit tests
2016-05-27 11:00:45 -05:00
Todd Gamblin
2f18a34458 Merge pull request #989 from LLNL/features/cflags-documentation
updated documentation for cflags PR
2016-05-27 10:59:40 -05:00
Todd Gamblin
7b063e3e6c Merge pull request #975 from adamjstewart/features/stream
Add STREAM benchmark package
2016-05-27 10:59:13 -05:00
Gregory Becker
a2f90453f4 Fixed backwards compatibility for compilers.yaml config file 2016-05-26 20:30:05 -07:00
Todd Gamblin
dc4ca26441 Merge pull request #992 from davydden/update/dealii
Update/dealii
2016-05-26 17:39:37 -05:00
Todd Gamblin
96f65479e7 Merge pull request #993 from xjrc/packages/metis
Update Package : METIS/ParMETIS
2016-05-26 17:37:33 -05:00
Joseph Ciurej
e95eedb165 Added a style checking exemption for lambda expressions. 2016-05-26 14:27:15 -07:00
Denis Davydov
040c122719 dealii: formatting 2016-05-26 23:00:22 +02:00
Mario Melara
9c1da4fa4c Corrected parantheses wrapping 2016-05-26 13:58:17 -07:00
Gregory Becker
189e8b3f34 fixed compiler config init logic 2016-05-26 13:17:01 -07:00
Gregory Becker
88bec814eb Allow 'arch=' syntax for specs to allow copying from output 2016-05-26 12:10:41 -07:00
Gregory Becker
c0661744cc fixed compatibility work 2016-05-26 11:38:40 -07:00
Gregory Becker
b968603a57 made yaml format backwards compatible 2016-05-26 11:14:05 -07:00
Mario Melara
3b675d8b70 Changed comparison operator so that we don't get caught in an infinite loop 2016-05-26 11:09:14 -07:00
Denis Davydov
0036483ded dealii: don't hardcode blas and mpi; minor fixes to dependencies 2016-05-26 18:07:27 +02:00
Gregory Becker
c30fe932d9 fixed mock config to use truncated versions of linux distro versions 2016-05-25 16:34:45 -07:00
Gregory Becker
8f99334f11 Fixed test config to work on yosemite 2016-05-25 16:06:14 -07:00
Todd Gamblin
76d42b5200 Merge pull request #982 from trws/rust
Rust
2016-05-25 15:15:51 -05:00
Gregory Becker
0f40174723 added test platform 2016-05-25 12:28:59 -07:00
Joseph Ciurej
734fb459a4 Fixing a small bug with metis@4+shared installs on the Mac platform. 2016-05-25 12:27:52 -07:00
Gregory Becker
3a68dd2011 (hopefully) final fixes of the merge 2016-05-25 12:22:16 -07:00
Gregory Becker
74dc7ffe4d updated documentation for cflags PR 2016-05-25 10:56:12 -07:00
Peter Scheibel
dd26c0bbcc merge from develop 2016-05-24 18:56:44 -07:00
Joseph Ciurej
483ec0d762 Added preliminary improved testing code for METIS@:4. 2016-05-24 16:13:52 -07:00
Joseph Ciurej
c9ba73d931 Added staging support and improved error handling for METIS@:4 installs. 2016-05-24 16:05:29 -07:00
Joseph Ciurej
b5d0a38860 Fixed a few linking/testing bugs in the METIS@:4 install method. 2016-05-24 15:03:21 -07:00
Greg Lee
1bca69f272 updated launchmon url and version 2016-05-24 14:54:09 -07:00
Joseph Ciurej
064d3584c0 Updating 'metis' and 'parmetis' to conform to PEP8 standards. 2016-05-24 12:28:05 -07:00
Joseph Ciurej
0ef6843d85 Improved MPI path specification for ParMETIS using PR #893 features. 2016-05-24 12:28:05 -07:00
Joseph Ciurej
9c95ec0b29 Updated and added new versions to the METIS/ParMETIS packages.
- Added a 'url_for_version' function to the METIS/ParMETIS packages.
- Added installation support for METIS@5.0.2 and ParMETIS@4.0.2.
- Changed the 'double' variant to 'real64' to make it more consistent
  with the 'idx64' variant naming.
- Removed an unnecessary dependency on gdb.
2016-05-24 12:28:05 -07:00
alalazo
561a4fbeea Merge branch 'develop' of https://github.com/LLNL/spack into features/module_file_explicit_load 2016-05-24 15:48:02 +02:00
alalazo
84707ed926 modules : it's possible to add suffixes to module files based on constraint 2016-05-24 15:23:52 +02:00
Todd Gamblin
6fba102d7d Merge pull request #985 from davydden/update/octave
octave: add missing dependencies and update to 4.0.2
2016-05-24 01:24:31 -05:00
Gregory Becker
513aae5ef8 fixed bug where earlier test was blowing away environment, causing an error on which('modulecmd') 2016-05-23 17:39:06 -07:00
Gregory Becker
1da6bbd146 Fixed a couple more bugs 2016-05-23 17:25:54 -07:00
Gregory Becker
d438ea0880 'Ugly merge because I mishandled git
Merge branch 'save' into features/newarch
2016-05-23 16:57:54 -07:00
Gregory Becker
d7612e7aaa Fixed errors caught by spec and concretize tests 2016-05-23 16:54:41 -07:00
Mario Melara
6c352132d0 Started writing documentation for architecture. Might need a couple more drafts 2016-05-23 14:28:00 -07:00
Denis Davydov
c78349a3a4 octave: fix formatting 2016-05-23 15:08:10 +02:00
Denis Davydov
ce3146e91a octave: add missing dependencies and update to 4.0.2 2016-05-23 14:50:06 +02:00
alalazo
0890ac4507 modules : explicit module file load from configuration files 2016-05-23 10:54:48 +02:00
Todd Gamblin
3ab56a188e Fixes #980: really slow spack spec performance
- `spack spec dealii` now takse seconds rather than 18 minutes.

- Slow hash (`dag_hash`) was accidentally inserted into the fast hash
  (`__hash__`).

- Do not put the slow hash in the fast hash.
2016-05-22 18:33:13 -07:00
Tom Scogland
00de72272d rust compiler/builder package, new llvm variants 2016-05-22 11:16:00 -07:00
Tom Scogland
9bd4bc02d6 fixing warning for package fetch 2016-05-22 11:16:00 -07:00
Tom Scogland
425beb4d97 updates for rust-bindgen 2016-05-22 11:16:00 -07:00
Tom Scogland
404b7c7c4f initial rust support 2016-05-22 11:16:00 -07:00
Nicolas Richart
4c87ef915f First try at OpenFOAM-extend 2016-05-22 18:55:29 +02:00
Todd Gamblin
d087086581 update documentation. 2016-05-21 14:33:05 -07:00
Mario Melara
c3767d593d compiler list is sorted in descending order, in order to get most up to date version we check from the beginning of the list 2016-05-20 15:48:13 -07:00
Erik Schnetter
09eed08b9c Auto-detect verbs location 2016-05-20 16:24:48 -04:00
alalazo
7303c387e8 autopep8 : fixed style 2016-05-20 10:34:11 +02:00
alalazo
b485ca8198 find : added unit tests, exits with 1 if -E and -e are given 2016-05-20 10:32:46 +02:00
Todd Gamblin
d94972503a Merge pull request #964 from davydden/update/tbb
tbb: add 4.4.4; raise InstallError when building 4.4.3 with GCC6.1
2016-05-19 22:44:03 -07:00
Todd Gamblin
0514dd5ebd Merge pull request #979 from epfl-scitas/packages/scotch+metis
Adding `+metis` variant to scotch + changes for esmumps
2016-05-19 20:06:47 -07:00
Mario Melara
175a042fd3 Changed rpaths method so that it only grabs rpaths using the compiler module name instead of PrgEnv-x module name 2016-05-19 16:42:13 -07:00
Nicolas Richart
2e77cc635e missing @ in version definition 2016-05-20 00:51:58 +02:00
Nicolas Richart
a233ed2de7 changes scotch package to make he coverage test pass 2016-05-20 00:42:34 +02:00
Nicolas Richart
a51566ec6e changes to simplify the esmumps variant for version < 6.0.0 + typos corrections, according to the remarks on PR #979 2016-05-20 00:31:12 +02:00
Mario Melara
36450b9bc9 Adding link_paths to craype compilers 2016-05-19 14:25:50 -07:00
Gregory Becker
19c8a52fe1 fixed spec syntax test 2016-05-19 09:53:49 -07:00
Nicolas Richart
1bf306bbbd Adding +metis variant to scotch + minor changes 2016-05-19 17:26:44 +02:00
Brett Viren
126fc10b9d Remove view print for now. 2016-05-19 08:36:18 -06:00
Gregory Becker
63459ab0c7 Fixed some of the bugs 2016-05-18 18:21:52 -07:00
Gregory Becker
01d5ffcd87 Fixed the first set of merge bugs 2016-05-18 17:42:11 -07:00
Mario Melara
16431f7a4c Merge branch 'features/newarch' of https://github.com/NERSC/spack into features/newarch 2016-05-18 17:26:30 -07:00
Mario Melara
b25da51638 Changed unsatisfiable architecture test 2016-05-18 17:26:06 -07:00
Mario Melara
6926f4d0da Changed arch tests to new spec target= os= 2016-05-18 17:23:10 -07:00
Gregory Becker
5417f1cdc6 more merge work 2016-05-18 17:21:03 -07:00
Gregory Becker
b1e5eafb80 more merge work 2016-05-18 17:18:26 -07:00
Gregory Becker
deb5011d08 more merge work 2016-05-18 17:14:16 -07:00
Mario Melara
b4b7942230 Moved searching of flags into get compilers in compilers_for_spec 2016-05-18 17:07:23 -07:00
Mario Melara
9f8ff32bcc Got rid of ifdefs, changed parameters for Compiler: added kwargs 2016-05-18 17:05:11 -07:00
Mario Melara
faa0f2a13c got rid of ifdef 2016-05-18 17:01:59 -07:00
Gregory Becker
80310a3b7c Finished merge on these files 2016-05-18 16:50:50 -07:00
Todd Gamblin
c53b1be8b4 Merge pull request #977 from trws/explicit-docs
initial docs for find and flake8 cleanup
2016-05-18 15:20:23 -07:00
Gregory Becker
9f59c128be Partial merge of mainline develop 2016-05-18 15:13:40 -07:00
Tom Scogland
a1f8cc2817 peren-nesting fix in spec 2016-05-18 14:24:16 -07:00
Tom Scogland
29635b7bbd initial docs for find and flake8 cleanup 2016-05-18 14:04:39 -07:00
Adam J. Stewart
434ff28af4 Add STREAM benchmark package 2016-05-18 15:14:21 -05:00
Todd Gamblin
d391670755 Merge pull request #966 from verolero86/develop
Add option to disable VT support in openmpi package
2016-05-18 08:36:23 -07:00
Todd Gamblin
78c46aab35 Merge pull request #969 from Rombur/boost
Add boost 1.61.0
2016-05-18 08:35:51 -07:00
Todd Gamblin
637da63506 Merge pull request #948 from davydden/bugfix/astyle
astyle: fix filter command which failed on OSX with python 2.7.10
2016-05-18 08:35:01 -07:00
Todd Gamblin
af7785727b Merge pull request #968 from epfl-scitas/find_always_zero_pkgs
Fix : spack find
2016-05-18 08:25:04 -07:00
Bruno Turcksin
bbbffe7423 Add boost 1.61.0 2016-05-18 08:51:22 -04:00
alalazo
23c7089789 fixes #967, flake8 approved 2016-05-18 11:52:27 +02:00
alalazo
fcc30cbf30 fixes #967 2016-05-18 11:48:03 +02:00
Denis Davydov
267666cd97 formatting 2016-05-18 08:35:47 +02:00
Greg Lee
582d01784a added newdtags variant, default to false (i.e., remove --enable-new-dtags) 2016-05-17 21:18:34 -07:00
Todd Gamblin
d592a1655f Merge pull request #961 from xjrc/features/flake8-improvements
Enhancement Proposal: Exempt '@when' Functions from Style Redefinition Errors
2016-05-17 17:00:49 -07:00
Todd Gamblin
502420ceff Merge branch 'features/cflags' into develop
Conflicts:
	lib/spack/spack/cmd/find.py
	var/spack/repos/builtin/packages/ghostscript/package.py
2016-05-17 16:44:54 -07:00
Denis Davydov
1a187e73ae tbb: add 4.4.4; raise InstallError when building 4.4.3 with GCC6.1 2016-05-17 22:57:32 +02:00
Veronica G. Vergara Larrea
6c95a5d496 the right flag here is +, the default behavior is controlled in the variant 2016-05-17 14:37:36 -04:00
Adam J. Stewart
f16228d811 Add more install directories 2016-05-17 13:36:38 -05:00
Adam J. Stewart
631cbdbda8 Flake8 2016-05-17 13:22:00 -05:00
Adam J. Stewart
7b9b18f03c Add HPL benchmark package 2016-05-17 13:14:59 -05:00
Veronica G. Vergara Larrea
471950434e add a flag to openmpi to allow users to disable vt support 2016-05-17 13:40:01 -04:00
Joseph Ciurej
761c5c8450 Added line limit exemptions for 'variant' and 'version' directives.
Updated the 'scotch' package to use oneline 'variant' directives.
2016-05-16 12:14:57 -07:00
Joseph Ciurej
52c8bedb9c Updated style checking to ignore refinition errors for '@when' fxns.
Updated the Scotch package to conform to PEP8 standards and to test style checking improvements.
2016-05-16 11:09:44 -07:00
Gregory Becker
0fd9cdb861 Fixed config tests for new compiler config format 2016-05-16 09:56:07 -07:00
Gregory Becker
7705603f73 Added more compilers to mock packages tests 2016-05-16 09:43:46 -07:00
Brett Viren
1bbe6409e1 Merge remote-tracking branch 'upstream/develop' into view-fix-merge 2016-05-16 10:09:31 -04:00
Brett Viren
77a34ebdf9 flake8-clean. 2016-05-16 10:08:59 -04:00
Greg Lee
c2ca5f44b4 flake8 fixes 2016-05-15 08:19:55 -07:00
Elizabeth Fischer
efa506b235 Preparing spack setup command for merge. Try this out for a while... 2016-05-14 17:09:11 -04:00
Brett Viren
b3ede099e2 Document command. 2016-05-14 13:15:25 -04:00
Brett Viren
c98afe2205 Pick a better name for the 'spec' parameters. 2016-05-14 13:14:51 -04:00
Brett Viren
8078845273 Remove problematic tests, deal with this issue outside of PR #869. 2016-05-14 09:11:41 -04:00
Brett Viren
8ddc1f8977 Move from str.format() to string.Template. 2016-05-14 09:11:04 -04:00
Gregory L. Lee
e3cd0a67d0 address flake8 issues 2016-05-13 16:12:48 -07:00
Gregory L. Lee
e9b71872a8 addressed PR#946 comments from @adamjstewart 2016-05-13 15:16:07 -07:00
Mario Melara
fce6ecb05c Changed _proper_compiler_spec to return filtered list. Apparently filter returns a list rather than filtering the original list. Lead to compiler finding problems if user specified frontend compilers 2016-05-13 15:04:06 -07:00
Gregory Becker
f43cab0951 fixed pkgconfig issue 2016-05-13 14:39:20 -07:00
Denis Davydov
67999d1b1c astyle: fix filter command which failed on OSX with python 2.7.10 2016-05-13 17:13:45 +02:00
Gregory L. Lee
b8a91db089 Intel software packages and license enhancements 2016-05-12 20:04:45 -07:00
Gregory Becker
4c9dd028d2 Fixed error causing hang in env/cc 2016-05-12 17:20:48 -07:00
Adam J. Stewart
088dce709e Make flake8 happy 2016-05-12 16:33:37 -05:00
Adam J. Stewart
ab41fd6692 Add bertini package
Also add missing dependency. Flex would not build for me without bison.
It complained about not being able to find `yacc`.
2016-05-12 16:21:06 -05:00
Denis Davydov
68c681bb78 document blas and lapack usage in packages 2016-05-12 08:59:17 +02:00
Gregory Becker
45bf93405a Changed spec syntax for new parts from modules feature 2016-05-11 16:23:13 -07:00
Gregory Becker
2e1810e3a7 re-merging develop 2016-05-11 15:26:09 -07:00
Gregory Becker
566fec4015 Fixed variants in new format and removed print statements from debugging 2016-05-11 14:56:41 -07:00
Gregory Becker
0b5836cfce Fixed flipped conditional in satisfies 2016-05-11 10:51:52 -07:00
Gregory Becker
c6ac709d70 WIP fixing all the things that broke when I changed the anonymous spec names 2016-05-09 17:06:21 -07:00
Gregory Becker
a7026da45c cleanup 2016-05-09 16:24:26 -07:00
Gregory Becker
222c84d9be Changed anonymous specs to have name=None instead of empty string 2016-05-09 16:22:17 -07:00
Todd Gamblin
73107d6b0f cleanup 2016-05-09 03:40:34 -07:00
Todd Gamblin
0c853ac3ea Make _hash private to discourage access; fix dag_hash length handling. 2016-05-09 03:39:08 -07:00
Todd Gamblin
7151fd8836 Restore cc from mainline; clean up some cflags stuff. 2016-05-09 03:37:27 -07:00
Brett Viren
f1900f6a7b Add a 'print' view allowing genreation of arbitrary strings based on format using package/spec parameters. 2016-05-08 10:25:21 -04:00
Brett Viren
2d1430da13 Address all coments in @trws's latest comment in PR #869.
I addressed them by factoring the code better to follow the visitor
pattern.  This will allow actions to be easily added in the future.
These may not even be file sytsem views.  One could add actions to
generate shell init scripts, JSON DAG-dumpers, GraphViz DOT file
generators, etc (yes, some of these are alread in there - just to give
the idea).

Also added is a top-level test

 $ source share/spack/setup-env.sh
 $ ./share/spack/examples/test_view.sh

Read the top of that script first.
2016-05-07 18:24:24 -04:00
Gregory Becker
d392056457 Cleaning up print statements for debugging 2016-05-06 18:05:30 -07:00
Gregory Becker
1523ebe9f7 Working properly to display but not reuse old specs from yaml 2016-05-06 18:03:43 -07:00
Gregory Becker
06b9433351 Fixed previous commit 2016-05-06 12:35:43 -07:00
Gregory Becker
bc087cfefb Fixed database to account for hashes when reading install records 2016-05-06 12:28:46 -07:00
Gregory Becker
9f37e4c907 Made spec hashes immutable once concrete -- improved 2016-05-06 12:05:51 -07:00
Gregory Becker
addcde4f35 Made spec hashes immutable once concrete 2016-05-06 12:05:27 -07:00
Gregory Becker
2f821b9e9b temp 2016-05-05 18:13:56 -07:00
Gregory Becker
9a39ccea8f Every old spec has empty compiler flags 2016-05-05 17:49:30 -07:00
Gregory Becker
1bb7bfaf7f Versioning the database -- automatic reindex 2016-05-05 17:38:51 -07:00
Gregory Becker
3fc1344865 temp 2016-05-05 17:11:09 -07:00
Gregory Becker
11b62114bb versioning the database 2016-05-05 16:58:00 -07:00
Gregory Becker
44f089508b Changed other packages to fit new syntax 2016-05-05 15:40:22 -07:00
Gregory Becker
d45b2c7947 Fixed openssl to work with new syntax 2016-05-05 15:36:48 -07:00
Elizabeth Fischer
6a48385111 Keep users environment in the spack setup script (spconfig.py). This is important to avoid breaking things that require module loads to work; for example, non-activate Python packages. 2016-05-05 17:48:24 -04:00
Todd Gamblin
9fb1a9537d Merge branch 'develop' into features/cflags 2016-05-05 10:49:15 -07:00
Gregory Becker
90b7b7ba5c Reworked compiler finding/storing/format to allow for multiple compilers with the same spec for different operating systems. TODO: fix config tests. All others up to date 2016-05-04 21:42:59 -07:00
Elizabeth F
2243de9e2f Make quiet mode default for spack spconfig 2016-05-04 23:39:27 -04:00
Brett Viren
26c5bc9d97 A few minimal test packages, fodder for testing 'spack view' command. 2016-05-01 17:13:44 -04:00
Brett Viren
346f102234 Bug fixes, tty tweaks. 2016-05-01 17:13:44 -04:00
Brett Viren
8c140f4725 Change the action from parameter to subcommand to fit Spack convention. 2016-05-01 17:13:43 -04:00
Brett Viren
a2b9a000dc Add add removal and status actions in addition to link and add various ways to filter what is done. 2016-04-29 15:12:09 -04:00
Gregory Becker
4ba73dac34 Unit tests for cflags PR 2016-04-28 14:01:38 -07:00
Todd Gamblin
8cd13d4b35 Make arch command print out the platform. 2016-04-28 12:49:21 -07:00
Brett Viren
49956faab9 First try to make file system views of specs. 2016-04-28 14:54:14 -04:00
Gregory Becker
3b84345b77 Changed yaml format for node_dicts to mitigate future incompatibilities 2016-04-28 11:05:59 -07:00
Gregory Becker
ae5198e5e7 Merged in current develop to cflags 042716 2016-04-27 19:38:51 -07:00
Elizabeth F
4d466fe879 spack setup: Fix broken module convenience settings. 2016-04-27 20:57:04 -04:00
Mario Melara
3a281b2399 Commented out the add_x_from_string methods since we don't need to worry about it. Also, changed the way architecture is set. Todd wanted to have users be able to input just frontend and/or backend in the architecture spec. This will be able to parse those inputs. 2016-04-08 12:46:44 -07:00
Mario Melara
01a36ab333 Changed the logic of concretize. We don't have to worry about whether the part of the spec is a string since any string parsed is made into an object via the Arch constructor. Any dependencies will take the root arch spec as well 2016-04-08 12:44:27 -07:00
Mario Melara
5bcd1e7ccd If we already have the name and the platform, then we should probably go ahead and concretize it in the constructor. Else leave it as None and concretize it later. 2016-04-08 12:43:08 -07:00
Mario Melara
618b3f5f2d Changed default to default_target so the tests can pass 2016-04-08 11:18:30 -07:00
Mario Melara
277efc1dfb Added test that works on every type of combination the user could possibly enter for arch spec 2016-04-08 11:17:56 -07:00
Mario Melara
0d1a1b7526 Changed _set_architecture so if user inputs only the target, then os is None. This prevents the os being referenced before assignment error 2016-04-08 10:29:37 -07:00
Mario Melara
6ff6c805af Assigned self.front_os, and back_os to self.default. Helps with testing. If we're on a darwin or linux machine, chances are there is no back end or front end operating system, but rather than have those as None, I just assign them the default which is detected via python platform. 2016-04-08 10:28:30 -07:00
Mario Melara
7b777568ed Added new concretization of architecture tests, test each combination of user input to make sure the correct os and target are chosen 2016-04-07 14:38:43 -07:00
Mario Melara
0ad317213c Changed architecture parser so that if user just enters in frontend or backend, then both the os and target will take those names. In the concretize method the frontend target/os and backend target/os will be picked to match each other 2016-04-07 14:38:04 -07:00
Mario Melara
07df403203 Cleaned up the concretize_architecture method by removing commented out code 2016-04-07 14:37:00 -07:00
Mario Melara
143a4d7f76 Changed default to default_target, also added frontend and backend to operating system 2016-04-07 14:36:26 -07:00
Mario Melara
99117cbc90 pulled from current repo the build_environment.py. Added module loading methods from our cray port 2016-04-06 14:07:22 -07:00
Mario Melara
918ad28a93 Changed all target values to architecture. Also added a sort_key method so that older architecture specs can be sorted with the newer ones 2016-04-06 13:58:29 -07:00
Mario Melara
749508af01 Found loops calling all_compilers that were always reading in the config file which lead to a slowdown, the fix is to cache the config file so we don't waste time re-reading the config file in again. 2016-04-06 12:05:29 -07:00
Mario Melara
3bf75fab3f Cleaned up architecture. Changed operating_system from dictionary method 2016-04-06 12:03:26 -07:00
Mario Melara
9bfc83ac5c Changed so that py_platform.dist() grabs the major version number. 2016-04-04 15:36:10 -07:00
Mario Melara
6d73c86209 Gives error on cori that [PrgEnv-xx, gcc/x.x.x] is not part of the schema. Changed it to oneOf : type : array to get rid of the error. 2016-04-04 13:45:15 -07:00
Mario Melara
9c071ea40d Changed modulecmd parameters. return_oe is not one of the parameters in the mainline spack repo. Changed the args to the appropriate ones in the new spack 2016-04-04 13:44:24 -07:00
citibeth
281835887a Added documentation for recursive modules 2016-04-01 22:54:49 -04:00
Elizabeth F
c6d8208150 Added recursive module loading 2016-04-01 22:54:42 -04:00
Peter Scheibel
9eb314fcaa merge from develop 2016-03-31 12:56:34 -07:00
Peter Scheibel
a0c42a3fd1 removed stale TODO 2016-03-29 18:58:18 -07:00
Peter Scheibel
c40559433b added docstring 2016-03-29 18:54:24 -07:00
Peter Scheibel
03d907e1e5 in the case of multiple digests, avoid creating different mirror filenames from run to run (as long as the available digests do not change) 2016-03-29 18:48:25 -07:00
Peter Scheibel
ce4de6227e (1) access package via spec property (2) use any digest to form archive filename 2016-03-29 18:45:58 -07:00
Peter Scheibel
bee224c567 mirror archive filename now includes the digest type as well as the digest 2016-03-29 18:25:22 -07:00
Gregory Becker
7e9baf9e25 Made architecture test robust for more architectures 2016-03-29 11:23:36 -07:00
citibeth
4a6b5d5247 Update to documentation formatting. 2016-03-27 00:14:10 -04:00
citibeth
a1c965d70d Fixed imports to make `git spconfig` work after recent merge from develop. 2016-03-26 20:40:22 -04:00
Peter Scheibel
06c98320a8 handle case where file contents change but resource name does not (e.g. if resource maintainer uses same name for each new version of a package) 2016-03-25 18:38:26 -07:00
Gregory Becker
57ced37229 Fixed a bug in the testing 2016-03-25 17:03:49 -07:00
Gregory Becker
618a9b2d7b Fixed bug in platform names that I introduced yesterday 2016-03-25 15:41:22 -07:00
Elizabeth F
9889b1a5fe Added documentation for StagedPackage, etc. 2016-03-25 17:15:15 -04:00
Elizabeth F
8f675b0ee8 Made StagedPackage user-visible. 2016-03-25 17:15:06 -04:00
citibeth
358b387283 Merge remote-tracking branch 'upstream/develop' into efischer/160311-StagedPackage 2016-03-25 17:14:35 -04:00
citibeth
8019748396 Merge remote-tracking branch 'upstream/develop' into efischer/160311-StagedPackage
# Conflicts:
#	lib/spack/spack/package.py
2016-03-25 15:36:54 -04:00
Peter Scheibel
bd5abb2922 spacing issue 2016-03-24 19:48:15 -07:00
Peter Scheibel
6423eab917 implemented cache_local method for DIY stage (as a noop) 2016-03-24 19:45:10 -07:00
Peter Scheibel
142d1f5cbc stage creates cache fetcher with cache object (so it can be mocked for tests) 2016-03-24 19:28:21 -07:00
Gregory Becker
315623d361 Fixed things from merge. 2016-03-24 16:55:46 -07:00
Peter Scheibel
fe71ba992d remove unused import 2016-03-24 12:16:50 -07:00
Peter Scheibel
13bf7d4ff1 (1) move definition of MockCache to test command (no definitions or extra work is required in MockPackagesTest) (2) removing outdated logic (which originated in this branch) and minor cleanup 2016-03-24 12:02:39 -07:00
Peter Scheibel
dbfa6c925e replace references to cache directory with references to new cache object. tests may assign a mock cache but by default it is None (this will avoid any implicit caching behavior confusing unit tests) 2016-03-23 20:18:58 -07:00
Peter Scheibel
ed0f6f75a7 clear test cache before and after each MockPackagesTest (I think Ive got a better way to avoid test fragility but Ill add this for now) 2016-03-23 19:49:28 -07:00
Gregory Becker
688eca23ff cleanup 2016-03-23 09:54:57 -07:00
Peter Scheibel
cb9fba98d8 (1) relocate cache for tests (2) initial approach for restoring unit tests (just for git tests although the same concept applies to the other unit tests which are failing - namely those for svn and hg) 2016-03-22 19:37:47 -07:00
Gregory Becker
7c729d4c3c Merged newarch into merge 2016-03-22 15:22:51 -07:00
Peter Scheibel
75460d8586 URLFetchStrategy.archive does a copy vs. a move now 2016-03-22 10:43:43 -07:00
Peter Scheibel
41a97c8f80 temporarily wrap archiving with conditional to avoid moving (this still causes a failure on the initial download) 2016-03-21 20:55:23 -07:00
Peter Scheibel
b255f02762 undoing whitespace-only diff 2016-03-21 20:50:26 -07:00
Peter Scheibel
ee5e507ff6 pursuing a strategy using fetch.archive and treating var/spack/cache as a mirror. this should support both URLFetchStrategy as well as VCSFetchStrategy (the previous strategy supported only the former). this won't work until URLFetchStrategy.archive is updated 2016-03-21 20:48:12 -07:00
Peter Scheibel
d632266a40 move cache to var/spack/cache 2016-03-18 17:15:45 -07:00
Peter Scheibel
fd067dd8b8 since only archives with checksums can be retrieved from the cache, make sure that an archive without a checksum isnt placed there (this wouldn't cause an error but does waste space and might be confusing) 2016-03-18 17:00:13 -07:00
Peter Scheibel
ac7323118e rename for clarity 2016-03-18 16:34:45 -07:00
Peter Scheibel
16fa40b893 (1) add a var/cache directory under spack. (2) downloads from URLFetchStrategy check the cache and skip the download if the source is available there. 2016-03-18 15:50:24 -07:00
Elizabeth F
6f26c45143 Fixed typo bug. Made error comment more explicit 2016-03-13 19:41:09 -04:00
Elizabeth F
0426796d9f Fixed typo 2016-03-13 18:14:38 -04:00
Elizabeth F
030e8dd1ac Removed Python 2.7-style string formatting 2016-03-13 18:04:23 -04:00
Elizabeth F
4c9a52044a Fixed CMakePackage import 2016-03-13 15:18:24 -04:00
citibeth
857f791286 Add missing import. 2016-03-13 00:40:50 -05:00
citibeth
9885f1a19e Fix for Python 2.6 2016-03-13 00:34:46 -05:00
citibeth
003957a689 Reverted bad change 2016-03-13 00:33:13 -05:00
Elizabeth F
c1a8574d8f Fixed for Python 2.6 2016-03-13 00:29:40 -05:00
citibeth
4236157823 (1) Added "spack spconfig" command.
(2) Neatened up the spconfig.py auto-generated file.
2016-03-13 00:13:00 -05:00
Elizabeth F
90bb855ffa A new subclass StagedPackage(Package) is introduced. This PR should
not change the behavior for existing packages that subclass from
spack.Package.

If a package subclasses spack.StagedPackage instead of spack.Package,
the install() phase (run inside a forked process) is now separated
into sub-stages:

    a) spconfig: Generate a script spconfig.py that will configure the
       package (eg by running CMake or ./configure) This is for use if
       the user wishes to build externally from Spack.  Therefore, the
       Spack compiler wrappers are NOT used here.  Currently, that
       means that RPATH support is up to the user.

    b) configure: Configure the project (eg: runs configure, CMake,
       etc).  This will configure it for use within Spack, using the
       Spack wrapper.

    c) build: eg: "make"

    d) install: eg: "install"

If one chooses to use StagedPackage instead of Package, then one must
implement each of the install sub-stages as a separate method.
StagedPackage.install() then calls each of the sub-stages as
appropriate.

StagedPackage can be configured to only run certain sub-stages.  This
is done by setting the optional kwarg install_phases when calling
do_install().  Setting install_phases() ONLY has an effect on
StagedPackage, not on any existing packages.  By default,
install_phases is set to make StagedPackage run the same stages that
are normally run for any package: configure, build, install (and NOT
spconfig).

The ability for Spack to run stages selectively for StagedPackage
instances will enable new functionality.  For example, explicit
CMake/Autotools helpers that allow Spack to help configure a user's
project without fetching, building or installing it.

-------------

One implementation of StagedPackage is provided, CMakePackage.  This
has the following advantage for CMake-based projects over using the
standard Package class:

  a) By separating out the phases, it enables future new functionality
     for packages that use it.

  b) It provides an implementation of intall_spconfig(), which will
     help users configure their CMake-based projects.

CMakePackage expects users to implement configure_args() and
configure_env().  These methods provide the package-specific arguments
and environment needed to properly configure the package.  They are
placed in separated functions because they are used in both the
spconfig and configure stages.

TODO:

1. Generate spconfig.py scripts that are more readable.  This allows
   the users to understand how their project is configured.

2. Provide a practical way for the user to ACCESS the spconfig stage
   without building the project through Spack.

3. The CMAKE_TRANSITIVE_INCLUDE_PATH stuff needs to be reworked; it
   should be considered provisional for now.

4. User of Autotools might wish to make a similar ConfigurePackage
   subclass of StagedPackage.

---------------

One package using CMakePackage is introduced.  See ibmisc/package.py.
2016-03-11 23:30:38 -05:00
Gregory Becker
4f9a309de8 made spack more conservative in compiler strategies attempted 2016-03-02 16:35:02 -08:00
Gregory Becker
487b2495a1 made spack more conservative in compiler strategies attempted 2016-03-02 16:33:10 -08:00
Mario Melara
2b48728741 Changed os subclasses CNL to change attribute to MODULES 2016-03-02 16:15:34 -08:00
Mario Melara
58efe1550d Default PATH arg 2016-03-02 16:14:42 -08:00
Gregory Becker
16d8c25b23 fixed floating 'target' 2016-03-02 16:12:32 -08:00
Gregory Becker
65d4169f00 fixed type/bug 2016-03-02 16:03:11 -08:00
Gregory Becker
ffb9574312 fixed type/bug 2016-03-02 15:59:23 -08:00
Gregory Becker
6e7b00a0f6 Made module handling much saner and safer 2016-03-02 15:54:23 -08:00
Mario Melara
b4298979fe Merge branch 'features/newarch' of https://github.com/NERSC/spack into features/newarch 2016-03-02 14:18:19 -08:00
Gregory Becker
676591ffc0 fixed a bug and a test bug 2016-03-02 14:17:46 -08:00
Mario Melara
975cba295b Added 'better' tests 2016-03-02 14:16:57 -08:00
Mario Melara
e46bac19fa Changed architecture to dict 2016-03-02 12:09:02 -08:00
Mario Melara
90e90f61c1 Got rid of the compiler strategy from target 2016-03-02 12:08:43 -08:00
Mario Melara
47c8e1366f Changed to_dictionary and from_dictionary methods 2016-03-02 12:08:17 -08:00
Gregory Becker
25f20b1967 bug hunting 2016-03-02 11:40:21 -08:00
Mario Melara
340ecf6e9a Merge branch 'features/newarch' of https://github.com/NERSC/spack into features/newarch 2016-03-02 11:07:52 -08:00
Gregory Becker
86e90bba87 another partial, narrowing in on proper arch 2016-03-02 11:05:05 -08:00
Mario Melara
81e236b2de Changed Arch to class instead of namedtuple. Now platform is automatically set upon creation of class 2016-03-02 11:04:55 -08:00
Gregory Becker
45887dec8e partial work on bug hunting 2016-03-02 10:56:46 -08:00
Mario Melara
f27f2f8e49 Fixed some indentation errors 2016-03-02 10:27:12 -08:00
Mario Melara
4d74784209 Changed add_architecture_from_string and split the work done into two methods add_target_from_string and add_operating_system_from_string 2016-03-02 10:27:00 -08:00
Mario Melara
527bb7abfe Changed _cmp_key 2016-03-02 10:26:09 -08:00
Gregory Becker
615ea969f8 made arch instantiate as a tuple 2016-03-02 10:14:50 -08:00
Gregory Becker
4601c36f57 cleaned up concretize architecture 2016-03-02 09:55:44 -08:00
Mario Melara
b591d2b501 Changed operating_system path 2016-02-25 18:49:52 -08:00
Mario Melara
ccd4a79b39 changed architecture.target to architecture.platform_os, so that compiler_for_spec uses operating system strategy 2016-02-25 18:49:27 -08:00
Mario Melara
eb96f38298 Got rid of debug comment 2016-02-25 18:48:25 -08:00
Mario Melara
f0149faf88 Added doc strings to functions in architecture.py 2016-02-25 18:48:00 -08:00
Mario Melara
ac55ce989d Changed compiler finding strategy to come from operating system instead of target 2016-02-25 18:47:41 -08:00
Mario Melara
5989e3f65d Changed from_dict to arch_from_dict method 2016-02-25 11:53:02 -08:00
Mario Melara
5e4d3e7b82 Changed naming convention of operating_system, makes it easier to create instance from dictionary just using name without the version attached. Object will stil display as name+version 2016-02-25 11:48:43 -08:00
Mario Melara
550df4cdd6 Some cleaning up. Finally got arch_from_dict working successfully. 2016-02-25 11:47:27 -08:00
Mario Melara
9ac2556285 Deleted old operating_system (without the s) file 2016-02-25 10:41:28 -08:00
Mario Melara
b43a5498a1 Changed import path to operating_systems 2016-02-25 10:36:47 -08:00
Mario Melara
f161609929 Renamed operating_system to operating_systems 2016-02-25 10:36:12 -08:00
Mario Melara
34be473b7c Deleted files 2016-02-25 10:35:58 -08:00
Mario Melara
863a5bc4fa Fix for 'Parent module spack.operating_systems not found while handling absolute import' 2016-02-25 10:34:55 -08:00
Mario Melara
8d1c06d141 Changed to dict method. Didn't realize this was being assigned to a dictionary already so got rid of d['architecture'] 2016-02-24 15:38:33 -08:00
Mario Melara
bd7c189c12 Added more comments 2016-02-24 15:37:50 -08:00
Mario Melara
5c3c6e7f06 Got rid of print statements 2016-02-24 15:34:32 -08:00
Mario Melara
234681306c Changed to appropriate class names for operating system 2016-02-24 15:32:23 -08:00
Mario Melara
2de81cfc62 Changed name to appropriate camelcase 2016-02-24 15:31:21 -08:00
Mario Melara
9e844d974c Added comments. Need to figure out how to make arch_tuple from_dict 2016-02-24 15:30:20 -08:00
Mario Melara
7779974143 arch_from_dict worked on 2016-02-24 15:02:40 -08:00
Mario Melara
339f4bfd23 Added unit testing for to_dict method 2016-02-24 12:16:09 -08:00
Mario Melara
5d5d3c5858 Added to dictionary method 2016-02-24 12:15:52 -08:00
Mario Melara
cfa7c4feb8 Added CNL10 as back_os and default_os 2016-02-22 16:18:25 -08:00
Mario Melara
083b7b46d9 Added more tests 2016-02-22 16:17:54 -08:00
Mario Melara
3c87d137a3 Added compiler strategy entry and also added new operating system subclass called CNL for compute node linux (name will probably change because I can't find docs on the EXACT name) 2016-02-22 16:17:33 -08:00
Mario Melara
ebc5e26c2d Added compiler strategy field to Operating System class 2016-02-22 16:16:20 -08:00
Mario Melara
a385dae1ae Unit tests to test operating system subclass creation and whether compiler strategy is set correctly 2016-02-22 14:54:30 -08:00
Mario Melara
1367ccab93 New folder that will hold operating system subclasses 2016-02-22 14:53:55 -08:00
Mario Melara
22bf4bc080 import linux distro subclass. Added method to add operating system to platform dictionary 2016-02-22 14:53:16 -08:00
Mario Melara
1a7d6ed49a import MacOSX subclass and added add_operating_system method to use subclass 2016-02-22 14:52:52 -08:00
Mario Melara
725d6d5fce import linux distro operating system subclass, set front-end os to LinuxDistro() 2016-02-22 14:52:09 -08:00
Mario Melara
a8de45ce28 Got rid of methods used to detect mac osx and linux osx. Now those methods are used my operating system subclasses 2016-02-22 14:50:51 -08:00
Mario Melara
18ddbae60e Added new module path to operating system file 2016-02-22 14:49:53 -08:00
Mario Melara
28218755a5 Changed spec.target to spec.architecture 2016-02-18 13:06:55 -08:00
Mario Melara
3558404c03 Check difference by using arch tuple rather than .target 2016-02-17 14:54:39 -08:00
Mario Melara
0a6b54a8c4 Added module compilers so that no CompilerSpecError is thrown 2016-02-17 14:53:56 -08:00
Mario Melara
93a92a00ee Changed abstract.target to abstract.architecture.target and abstract.architecture.target.concrete 2016-02-17 14:53:09 -08:00
Mario Melara
d9e8bf1807 Added ARCHITECTURE field when showing specs 2016-02-17 14:51:14 -08:00
Mario Melara
54042e399b Changed target to architecture.target 2016-02-17 14:50:10 -08:00
Mario Melara
1d484dbe5f Changed so that modules use correct file path with spec.architecture instead of spec.target 2016-02-17 14:49:36 -08:00
Mario Melara
ab4006ee2c Changed so that directory layout uses the platform-os-target string version of the arch tuple 2016-02-17 14:48:53 -08:00
Mario Melara
524e9b372e From now on all targets are now architecture. Architecture is a named tuple so any time we need access to target we do architecture.target. 2016-02-17 14:47:29 -08:00
Mario Melara
2c20fc2ebf Changed module loading to use arch tuple instead of regular target.module 2016-02-17 14:45:53 -08:00
Mario Melara
2a79537ba1 Fixed silly typo that gave errors in tests 2016-02-17 14:44:38 -08:00
Mario Melara
a3039c4c67 Changed add_architecture_from_string, it now loops through the string and checks whether each piece of string is a valid platform, operating system and target. If the operating system or target are none it will use the defaults. Updated the documentation for that method. One thing that bothers me is how to account for the multitude of operating systems when cross compiling. If someone wants to compile with another operating system not found on current platform. How can spack check to see if it is valid? 2016-02-16 15:26:07 -08:00
Mario Melara
62b0293963 Cleaned up the file. Got rid of commented out sections of code since they weren't going to be used anyway 2016-02-16 15:23:38 -08:00
Mario Melara
31ab238306 Beginning attemps to fix concretization method to account for the new tuple architecture 2016-02-16 15:22:23 -08:00
Mario Melara
19dca4bcc9 Added some _cmp_key methods to OperatingSystem class, and also changed the way Platforms are compared. Created a mini inherited class named Arch that inherits from namedtuple. The reason for this is to override the namedtuple __str__ method to make arch tuples look prettier when printed out. Rather than Arch(platform= ... ) it prints to platform-os-target which makes directory paths to packages look cleaner. 2016-02-16 15:21:36 -08:00
Mario Melara
35a602baaf Changed target checking to architecture checking for abi compatible 2016-02-16 15:17:57 -08:00
Mario Melara
c799301011 Changed the method in which architecture is converted from string to namedtuple. Also added some TODO comments to later consider changing how architecture is handled 2016-02-13 14:37:07 -08:00
Mario Melara
7732f375d2 Changed operating system getter so that linux and darwin autodetected operating systems are set as class default_os 2016-02-13 14:36:01 -08:00
Mario Melara
8e8c63bd67 Using pylint, fixed some of the indentation and spacing errors 2016-02-11 11:47:39 -08:00
Mario Melara
3e1be63b0f Changed some variables to account for the fact that target is now a tuple 2016-02-11 11:15:50 -08:00
Mario Melara
b9d09202c9 changed some variables to account for the fact that target is now a tuple 2016-02-11 11:15:19 -08:00
Mario Melara
77e93e1b79 Added add_os method to platform subclasses 2016-02-10 16:16:58 -08:00
Mario Melara
cb8d5ab183 Added new add_os method 2016-02-10 16:16:35 -08:00
Mario Melara
fb234205c2 Added method to concretize target and os pair 2016-02-10 16:16:11 -08:00
Mario Melara
d0ae6dd401 Changed add_target_from_string to include methods to concretize operating_system 2016-02-10 16:15:25 -08:00
Mario Melara
2650c60374 Added operating system class prototype and some autodetect features for operating system 2016-02-10 16:14:50 -08:00
Mario Melara
21a5a34041 Revert "new branch and also pushing some architecture changes where os is detected by linux and darwin and manually set by cray and bgq"
This reverts commit 70088be24b.
2016-02-10 10:59:16 -08:00
Mario Melara
0358522533 new branch and also pushing some architecture changes where os is detected by linux and darwin and manually set by cray and bgq 2016-02-06 15:41:22 -08:00
Mario Melara
840b41c450 Removed unneccessary $. Still learning regexp 2016-01-20 10:36:15 -08:00
Mario Melara
15713219e5 Better regular expression searching. Tested on edison was finding test compilers and then spack was giving multiple compiler match errors 2016-01-20 10:32:56 -08:00
Gregory Becker
8e54babf10 minor parsing bug fix 2016-01-15 17:21:32 -08:00
Gregory Becker
e1a0af8745 cleanup 2016-01-15 16:51:41 -08:00
Gregory Becker
16e9d658d5 Fixed the way flags on deps are attached so that they aren't moved onto the root before normalize/concretize 2016-01-15 16:18:40 -08:00
Gregory Becker
342f4bc2e0 Fixed virtual/cflag combination bug 2016-01-15 14:27:50 -08:00
Gregory Becker
848728858c Removed extra plus signs from command line syntax. Did not yet remove them from printed format 2016-01-12 18:34:26 -08:00
Gregory Becker
5e3c883f2c Cleanup and proper flag satisfaction for partial specs 2016-01-12 16:25:54 -08:00
Gregory Becker
528f9cd583 Implemented flags as lists for subsetting 2016-01-12 15:22:15 -08:00
Gregory Becker
2ac5ea42af Fixed concretization 2016-01-11 13:55:11 -08:00
Mario Melara
aab1a67d05 Adding needed import modules. Changed platform_name to platform to prevent syntax errors 2016-01-09 09:42:36 -08:00
Gregory Becker
9615efd940 cleanup: Removing an unnecessary line in an otherwise unchanged file 2016-01-08 18:53:19 -08:00
Gregory Becker
41046499c6 minor bug chasing 2016-01-08 18:51:38 -08:00
Gregory Becker
6e5238d037 Fixing the fix and removing debug printing 2016-01-08 17:44:16 -08:00
Gregory Becker
2b2d4bae4e Fixing multimethod test for new platforms 2016-01-08 17:38:37 -08:00
Gregory Becker
2b4dd8b9af Fixed target satisfaction and updated tests accordingly 2016-01-08 16:30:27 -08:00
Gregory Becker
aa28e4e81f Improved error messages for compiler_for_spec when either zero or multiple compilers returned. 2016-01-08 15:13:48 -08:00
Gregory Becker
6da1a105cb Revert "adding python_recipe_parser as a submodule under the folder utils"
This reverts commit 1501786fd9.
2016-01-08 15:03:34 -08:00
Gregory Becker
6ca1e5c4b0 Revert "added a bunch of packages and added submodule"
This reverts commit 79808da760.
2016-01-08 15:02:29 -08:00
Gregory Becker
86230b9ac8 Revert "make sure submodule is added in the correct location"
This reverts commit e9f7d033ff.
2016-01-08 15:01:46 -08:00
Gregory Becker
d3d37ad0ce removed the submodule as part of reversion of extraneous commits 2016-01-08 14:29:42 -08:00
Gregory Becker
a9e9f9afb0 Revert "removed package for python packages with problematic / duplicate names"
This reverts commit f3254ff02d.
2016-01-08 14:14:26 -08:00
Gregory Becker
1b0d064743 Revert "clean up package.py file and remove duplicate file"
This reverts commit c809cc9273.
2016-01-08 14:13:33 -08:00
Gregory Becker
d2da41b0bd More file permissions chasing 2016-01-08 12:12:03 -08:00
Gregory Becker
49908386ef changing problematic package.py file permissions back to 0644 2016-01-08 11:48:59 -08:00
Gregory Becker
ba63111f45 brought the architecture test up to date with new changes 2016-01-07 13:05:58 -08:00
Gregory Becker
53d4f82ce1 Improved cray architecture class 2016-01-07 13:01:05 -08:00
Gregory Becker
83917c4c30 Improved target specification 2016-01-07 12:43:39 -08:00
Gregory Becker
6ccd9d6fa4 Cleaned up naming conventions for architecture, split into platform and target 2016-01-07 11:49:01 -08:00
Gregory Becker
b4a0004f44 Improved target cmp_key and to/from yaml functions 2016-01-06 14:50:31 -08:00
Gregory Becker
51bd91edc0 made the compiler strategy more easily controllable 2016-01-06 13:00:22 -08:00
Gregory Becker
61b03b72b0 improved concretize efficiency for determining whether compilers come from the proper strategy 2016-01-05 19:03:25 -08:00
Gregory Becker
93c9c45580 minor tweak of compiler priority while waiting for customizable compiler priorities 2016-01-05 17:19:04 -08:00
Gregory Becker
29e0ff61d7 fixed compiler finding so as not to identify non-existent versions of the intel compiler based on the version numbers of the PrgEnv-intel module 2016-01-05 17:14:35 -08:00
Gregory Becker
c649610473 fixed concretization to only consider compilers found by the proper strategy 2016-01-05 17:00:28 -08:00
Gregory Becker
d6768cf921 minor bug fix 2016-01-05 16:23:32 -08:00
Gregory Becker
48b9023de4 removed debug printing 2016-01-05 14:51:18 -08:00
Gregory Becker
751503c434 fixed haswell targeting bug 2016-01-05 14:47:14 -08:00
Gregory Becker
1edbaa4e62 removed debug printing 2016-01-05 14:13:09 -08:00
Gregory Becker
9848ad32fd fixed errors caused by crayport on linux and added a darwin architecture 2016-01-05 13:39:53 -08:00
Gregory Becker
d2c2c46541 bug hunting 2016-01-05 11:12:14 -08:00
Gregory Becker
751208cedf pick last compiler instead of first, will be overwritten by more advanced preferences as mentioned in the email group 2016-01-04 16:35:06 -08:00
Gregory Becker
53808f254e Support for cray external dependencies implemented in modules 2016-01-04 12:36:48 -08:00
Gregory Becker
ff82e41404 Merge branch 'externals' into crayport 2016-01-04 10:46:25 -08:00
Gregory Becker
217a2d9ea5 fixed yaml error 2015-12-17 15:26:27 -08:00
Mario Melara
b5216f6ec8 Commented out cxxflag. Not 100% sure it's needed 2015-12-11 12:07:32 -08:00
Mario Melara
31df2dd9dd Fixed targets ti be x86_64, important note: have not tested this on linux machine 2015-12-11 12:04:47 -08:00
Mario Melara
fee88d289d Rewrote docstrings for sys_type() and got rid of unused functions 2015-12-11 12:03:13 -08:00
Mario Melara
028cca16e6 Got rid of the unusued default strategy=None 2015-12-02 10:15:33 -08:00
Mario Melara
0544b164fc Updated script of mini-xml for adios package 2015-12-01 11:59:49 -08:00
Mario Melara
4e0d47f1dd building with GCC needs special variables added. Intel compilers build just fine 2015-12-01 11:59:19 -08:00
Mario Melara
d7fdb8e015 Got rid of hard coded strings for adding default 2015-12-01 11:57:54 -08:00
Mario Melara
58f2b39bc8 Changed default to CPU_TARGET env var. Helps deal with target differences between cori and edison 2015-12-01 11:57:17 -08:00
Mario Melara
89fbe4fdfa Changed add_target to include variables rather than hard-coded strings 2015-12-01 11:55:38 -08:00
Mario Melara
8f56f5cfcc Added path to netcdf and hdf5 using the env vars NETCDF_DIR and HDF5_DIR. 2015-11-23 14:02:59 -08:00
Mario Melara
fceb5a75b0 Adding new files to compilers 2015-11-13 11:53:38 -08:00
Mario Melara
bfd05d3d27 Changed name of file and class to craype to avoid spack freaking out about versions 2015-11-13 11:48:49 -08:00
Mario Melara
72fa3c0492 Added craype support 2015-11-13 11:48:15 -08:00
Mario Melara
9458f7c7d0 Got rid of my old method of finding in LOADEDMODULES 2015-11-13 11:47:36 -08:00
Mario Melara
a5ba69d68d Added a _cmp_key for the architecture class 2015-11-13 11:46:13 -08:00
Mario Melara
9dc05a57ec Merge branch 'features/spackathon' of https://github.com/NERSC/spack into features/spackathon 2015-11-12 15:15:07 -08:00
Gregory Becker
7c89f9d18c Added the basic ouline of a cray compiler class in lib/spack/spack/compilers/cray.py 2015-11-12 14:31:41 -08:00
Mario Melara
8c259859ab Merge branch 'features/spackathon' of https://github.com/NERSC/spack into features/spackathon 2015-11-12 13:34:56 -08:00
Mario Melara
297cebd833 Got rid of print statement 2015-11-12 13:34:40 -08:00
Gregory Becker
e78b8c16be used key_comparator decorator from util.lang to compare targets. Fixes find bug 2015-11-12 13:27:10 -08:00
Gregory Becker
eb2c083159 Fixed the to_dict from_dict for targets on cray. First version to build/find properly on Cray 2015-11-11 17:29:47 -08:00
Gregory Becker
185f40eb8b fixed my git problems 2015-11-11 16:33:22 -08:00
Gregory Becker
3067705c10 made a to_dict for targets. Also a from_dict for sanity 2015-11-11 16:16:47 -08:00
Gregory Becker
8a13d344a8 bug fix in spec.py 2015-11-11 15:07:57 -08:00
Gregory Becker
271a839957 First possibly working version of the crayport. Not sufficiently tested at all. 2015-11-11 14:22:07 -08:00
Gregory Becker
95a34628a3 Add modules to compilers. Changed compiler to take paths as a list. Changed compiler_for_spec to be aware of different compiler stratigies 2015-11-11 11:32:18 -08:00
Gregory Becker
7e6fc79eb2 Merge branch 'features/spackathon' of github.com:NERSC/spack into crayport
Conflicts:
	lib/spack/spack/compiler.py
2015-11-11 10:35:59 -08:00
Gregory Becker
5347f460b4 adding module find to find command 2015-11-11 10:31:37 -08:00
Gregory Becker
cd69681ae5 merged in work from other computer and starting to track down bugs 2015-11-11 10:09:03 -08:00
Todd Gamblin
5417a514e9 Eliminated two bugs found by spack test and rewrote the parser to be more sane 2015-11-10 18:44:01 -08:00
Gregory Becker
5e75a5c81c Fixed bug that spack.db.exists() returned True for anonymous specs 2015-11-10 15:45:22 -08:00
Gregory Becker
6f339939c4 Removed "any-pkg-name" and replaced it with empty string. Also changed cflag concretizer to concretize each flag individually, allowing us to have unconcretized FlagMap objects for find and uninstall. Now empty flags in find match any, whereas specifying +cflags=\'\' matches only those with empty strings for flags 2015-11-10 15:45:22 -08:00
Gregory Becker
6fa0bb991a Removed cflags from default format string and made them an option within the compiler string. Added -f option to find command; with -f, find prints flags 2015-11-10 15:45:22 -08:00
Gregory Becker
5a9394c65f added default compilers into spec and fixed constrain/concretize bug 2015-11-10 15:45:22 -08:00
Gregory Becker
cb5bc242db Changed flag default to "". Updated printing and other logic to match. Seems to have solved error in normalize. 2015-11-10 15:45:22 -08:00
Gregory Becker
2d77173dfa partial commit of cflags for debugging 2015-11-10 15:45:22 -08:00
Gregory Becker
42b5b7d2dd Commit of compiler flags addition:
Flags are passed from the command line all the way through
build environments to environment variables.
      Flags are specified using +name=value and values are quoted
using escaped quotes when necessary.

Future work includes using the flags in the compiler wrapper script
and hopefully updating the parser for a gentler user experience of
the spec language.
2015-11-10 15:45:22 -08:00
Gregory Becker
db1b21b9aa reclaimed the = sign. Architectures now specified by +arch= instead. Decided to prepend flag names with + for clarity in spec names and ease of parsing. Also generalized variants, although there is not yet a way to specify a generalized (name=value) variant. 2015-11-10 15:45:22 -08:00
Gregory Becker
7989a7f903 Headless specs and /hash spec specification 2015-11-10 15:42:10 -08:00
Gregory Becker
f9c8c4d216 partial commit to merge database 2015-11-10 15:40:00 -08:00
Gregory Becker
4ed22ad932 partial commit of cflags work 2015-11-10 15:39:27 -08:00
Mario Melara
e0498ce54a mxml is adios's package dependency 2015-11-05 13:43:11 -08:00
Mario Melara
0fcb368f47 Adding adios package to spack's package list 2015-11-05 13:42:50 -08:00
Gregory Becker
08729315c6 Added bgq architecture subclass: may require additional functionality to support 2015-11-05 09:21:56 -08:00
Mario Melara
b61d554dc8 Fixed architecture.py file so it doesn't have the weird merge changes i.e <<<HEAD etc. Also added target method of recognizing it's own architecture 2015-11-04 13:28:12 -08:00
Mario Melara
2bc73b4a27 Merge branch 'features/spackathon' of https://github.com/NERSC/spack into features/spackathon 2015-11-04 13:21:33 -08:00
Gregory Becker
3a73ae1683 Fixed the previous commit 2015-11-04 13:12:11 -08:00
Mario Melara
9bf8e8573c generic linux architecture subclass 2015-11-04 13:08:48 -08:00
Mario Melara
e3a02ea5c7 Merge branch 'features/spackathon' of https://github.com/NERSC/spack into features/spackathon
Conflicts:
	lib/spack/spack/architecture.py
2015-11-04 13:06:56 -08:00
Gregory Becker
35532d6b0a Changed cray architecture subclass to add proper targets for front at back end nodes 2015-11-04 13:00:35 -08:00
Mario Melara
37260962e5 changed some potential syntax errors and added a way for target to recognize class 2015-11-04 12:57:29 -08:00
Gregory Becker
5ac974c9b2 Enforced that the architecture subclass cannot add a target that shares a name with a target alias 2015-11-04 12:50:22 -08:00
Mario Melara
058e72d29c Added default target and also front end and back end targets 2015-11-02 11:08:55 -08:00
Mario Melara
eb2cf1698f Fixed some issues with naming 2015-11-02 11:08:08 -08:00
Mario Melara
9a91da9ccd Added arch_path to list of modules path 2015-10-30 15:59:28 -07:00
Mario Melara
e39586c81d Reverted back all architecture way of finding modules 2015-10-30 15:58:49 -07:00
Mario Melara
2d87bb92ed Changed front-end and back-end to front_end and back_end to avoid error 2015-10-30 15:58:20 -07:00
Mario Melara
db0695e46a architectures folder where the Architecture subclasses reside 2015-10-30 15:57:00 -07:00
Gregory Becker
6e56070386 improved aliasing in target method in architecture.py 2015-10-30 15:15:36 -07:00
Gregory Becker
d177184777 added target method to architecture.py and minor cleanup 2015-10-30 15:12:29 -07:00
Mario Melara
0a004e0fce Merge branch 'features/spackathon' of https://github.com/NERSC/spack into features/spackathon
Merge Gregory Becker's commits with my own architecture commits
2015-10-30 14:53:49 -07:00
Mario Melara
7ab921ff02 Changed architecture class and added class Target 2015-10-30 14:46:26 -07:00
Gregory Becker
382d8478bf prototype of new architecture concretization saved as new_concretize_architecture in concretize.py 2015-10-30 10:23:33 -07:00
Gregory Becker
09597fe8dc updated the executible to return stderr when specified. Added load_module to build_environment.py, loads target 2015-10-30 09:44:28 -07:00
Mario Melara
38508c5a3f Created a control flow logic that will loop through the strategies and find compilers using that. TODO: Need to find a way to locate their executables 2015-10-22 12:02:26 -07:00
Mario Melara
a89abb435f Changed structure of class, add compiler strategy is a method and can create a dict 2015-10-21 11:32:59 -07:00
Mario Melara
9b387e7682 Added strategy method in init 2015-10-21 11:09:05 -07:00
Gregory Becker
51b69ef00b initial fetch on crayport 2015-10-21 09:27:57 -07:00
Mario Melara
c31da9bc8f Made sure architecture works with yaml file 2015-10-20 14:10:54 -07:00
Mario Melara
ca3cc5b23e Refactored architecture class. Now it will automagically create a dict upon instantiation. 2015-10-20 13:37:06 -07:00
Mario Melara
3ba2842b53 Got Architecture class working the way i wanted to. Next to write tests 2015-10-20 13:33:21 -07:00
Mario Melara
fec197ccac Fixed the output of sys_type(), might need to add back the error handling part 2015-10-15 15:25:13 -07:00
Mario Melara
ccdf105759 Commented out a long list of tests to just include my arch test 2015-10-15 12:48:12 -07:00
Mario Melara
d328f4c3b6 Test suite for architecture class and functions 2015-10-15 12:47:26 -07:00
Mario Melara
29e03ac851 Added __eq__ testing method. Created tests for it in test/ folder 2015-10-15 12:46:44 -07:00
Mario Melara
4f21344e87 Started created the Architecture class for Spack to use 2015-10-14 19:41:07 -07:00
Mario Melara
b6d2a12ceb Started changing the find in modules method written by Todd 2015-10-07 15:57:29 -07:00
Mario Melara
06fe879745 Merge branch 'features/crayproto' of https://github.com/scalability-llnl/spack into develop 2015-10-07 14:55:05 -07:00
karenyyng
f4e72f33c8 added dependencies for py-h5py 2015-10-05 08:24:33 -07:00
Todd Gamblin
d00314c621 Protptype cray compiler detection and support 2015-10-05 01:30:25 -07:00
karenyyng
c809cc9273 clean up package.py file and remove duplicate file 2015-10-03 19:24:15 -07:00
karenyyng
f3254ff02d removed package for python packages with problematic / duplicate names 2015-10-03 19:22:53 -07:00
karenyyng
e9f7d033ff make sure submodule is added in the correct location 2015-10-03 19:13:08 -07:00
karenyyng
79808da760 added a bunch of packages and added submodule 2015-10-03 18:47:36 -07:00
karenyyng
1501786fd9 adding python_recipe_parser as a submodule under the folder utils 2015-10-03 13:04:37 -07:00
Mario Melara
c6cd8ae243 Use more recent version of libffi. 3.1 has a known bug that is fixed in current version 2015-10-01 21:35:25 -07:00
1655 changed files with 106020 additions and 28567 deletions

View File

@@ -1,6 +1,8 @@
# -*- conf -*-
# .coveragerc to control coverage.py
[run]
parallel = True
concurrency = multiprocessing
branch = True
source = lib
omit =

14
.flake8
View File

@@ -5,16 +5,22 @@
# rationale is.
#
# Let people line things up nicely:
# - E129: visually indented line with same indent as next logical line
# - E221: multiple spaces before operator
# - E241: multiple spaces after ,
# - E241: multiple spaces after ','
# - E272: multiple spaces before keyword
#
# Let people use terse Python features:
# - E731 : lambda expressions
#
# 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.
# - F405: `name` may be undefined, or undefined from star imports: `module`
# - F821: undefined name `name` (needed for cmake, configure, etc.)
# - F999: syntax error in doctest
#
[flake8]
ignore = E221,E241,F403,F821,F999
ignore = E129,E221,E241,E272,E731,F403,F405,F821,F999
max-line-length = 79

15
.gitignore vendored
View File

@@ -1,13 +1,24 @@
/db
/var/spack/stage
/var/spack/cache
/var/spack/repos/*/index.yaml
/var/spack/repos/*/lock
*.pyc
/opt/
/opt
*~
.DS_Store
.idea
/etc/spack/*
/etc/spack/licenses
/etc/spack/*.yaml
/etc/spackconfig
/share/spack/dotkit
/share/spack/modules
/share/spack/lmod
/TAGS
*.swp
/htmlcov
.coverage
#*
.#*
/.cache
/bin/spackc

View File

@@ -1,20 +1,56 @@
Todd Gamblin <tgamblin@llnl.gov> George Todd Gamblin <gamblin2@llnl.gov>
Todd Gamblin <tgamblin@llnl.gov> Todd Gamblin <gamblin2@llnl.gov>
Adam Moody <moody20@llnl.gov> Adam T. Moody <moody20@llnl.gov>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Gimenez <alfredo.gimenez@gmail.com>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra324.llnl.gov>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra648.llnl.gov>
Kevin Brandstatter <kjbrandstatter@gmail.com> Kevin Brandstatter <kbrandst@hawk.iit.edu>
Luc Jaulmes <luc.jaulmes@bsc.es> Luc Jaulmes <jaulmes1@llnl.gov>
Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@surface86.llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com>
Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@surface86.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab687.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab690.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@catalyst159.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory Lee <lee218@llnl.gov>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> Massimiliano Culpo <massimiliano.culpo@googlemail.com>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> alalazo <massimiliano.culpo@googlemail.com>
Mark Miller <miller86@llnl.gov> miller86 <miller86@llnl.gov>
Abhinav Bhatele <bhatele@llnl.gov> Abhinav Bhatele <bhatele@gmail.com>
Adam Moody <moody20@llnl.gov> Adam T. Moody <moody20@llnl.gov>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Gimenez <alfredo.gimenez@gmail.com>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Adolfo Gimenez <alfredo.gimenez@gmail.com>
Andrew Williams <williamsa89@cardiff.ac.uk> Andrew Williams <andrew@alshain.org.uk>
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@gmail.com>
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@users.noreply.github.com>
Benedikt Hegner <hegner@cern.ch> Benedikt Hegner <benedikt.hegner@cern.ch>
Brett Viren <bv@bnl.gov> Brett Viren <brett.viren@gmail.com>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra324.llnl.gov>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra648.llnl.gov>
David Poliakoff <poliakoff1@llnl.gov> David Poliakoff <david.poliakoff@gmail.com>
Dhanannjay Deo <dhanannjay.deo@kitware.com> Dhanannjay 'Djay' Deo <dhanannjay.deo@kitware.com>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <elizabeth.fischer@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <rpf2116@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth Fischer <rpf2116@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> citibeth <rpf2116@columbia.edu>
Geoffrey Oxberry <oxberry1@llnl.gov> Geoffrey Oxberry <goxberry@gmail.com>
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <gjohnson@argon-ohpc.hpc.uiowa.edu>
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <glennpj@gmail.com>
Gregory Becker <becker33@llnl.gov> Gregory Becker <becker33.llnl.gov>
Gregory Becker <becker33@llnl.gov> becker33 <becker33.llnl.gov>
Gregory Becker <becker33@llnl.gov> becker33 <becker33@llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Greg Lee <lee218@llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab687.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab690.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@catalyst159.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@surface86.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory Lee <lee218@llnl.gov>
Ian Lee <lee1001@llnl.gov> Ian Lee <IanLee1521@gmail.com>
James Wynne III <wynnejr@ornl.gov> James Riley Wynne III <wynnejr@ornl.gov>
James Wynne III <wynnejr@ornl.gov> James Wynne III <wynnejr@gpujake.com>
Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de>
Kelly (KT) Thompson <kgt@lanl.gov> <kellyt@MENE.localdomain>
Kelly (KT) Thompson <kgt@lanl.gov> Kelly Thompson <KineticTheory@users.noreply.github.com>
Kevin Brandstatter <kjbrandstatter@gmail.com> Kevin Brandstatter <kbrandst@hawk.iit.edu>
Luc Jaulmes <luc.jaulmes@bsc.es> Luc Jaulmes <jaulmes1@llnl.gov>
Mario Melara <maamelara@gmail.com> Mario Melara <mamelara@genepool1.nersc.gov>
Mark Miller <miller86@llnl.gov> miller86 <miller86@llnl.gov>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> Massimiliano Culpo <massimiliano.culpo@googlemail.com>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> alalazo <massimiliano.culpo@googlemail.com>
Mayeul d'Avezac <m.davezac@ucl.ac.uk> Mayeul d'Avezac <mdavezac@gmail.com>
Mitchell Devlin <mitchell.r.devlin@gmail.com> Mitchell Devlin <devlin@blogin4.lcrc.anl.gov>
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas <nrichart@users.noreply.github.com>
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas Richart <nrichart@users.noreply.github.com>
Peter Scheibel <scheibel1@llnl.gov> scheibelp <scheibel1@llnl.gov>
Robert D. French <frenchrd@ornl.gov> Robert D. French <robert@robertdfrench.me>
Robert D. French <frenchrd@ornl.gov> Robert.French <frenchrd@ornl.gov>
Robert D. French <frenchrd@ornl.gov> robertdfrench <frenchrd@ornl.gov>
Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@surface86.llnl.gov>
Stephen Herbein <sherbein@udel.edu> Stephen Herbein <stephen272@gmail.com>
Todd Gamblin <tgamblin@llnl.gov> George Todd Gamblin <gamblin2@llnl.gov>
Todd Gamblin <tgamblin@llnl.gov> Todd Gamblin <gamblin2@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com>
Tzanio Kolev <tzanio@llnl.gov> Tzanio <tzanio@llnl.gov>

View File

@@ -1,17 +1,71 @@
#=============================================================================
# Project settings
#=============================================================================
language: python
python:
- "2.6"
- "2.7"
# Only build master and develop on push; do not build every branch.
branches:
only:
- master
- develop
#=============================================================================
# Build matrix
#=============================================================================
python:
- 2.6
- 2.7
env:
- TEST_SUITE=unit
- TEST_SUITE=flake8
- TEST_SUITE=doc
matrix:
# Flake8 and Sphinx no longer support Python 2.6, and one run is enough.
exclude:
- python: 2.6
env: TEST_SUITE=flake8
- python: 2.6
env: TEST_SUITE=doc
# Explicitly include an OS X build with homebrew's python.
# Works around Python issues on Travis for OSX, described here:
# http://blog.fizyk.net.pl/blog/running-python-tests-on-traviss-osx-workers.html
include:
- os: osx
language: generic
env: TEST_SUITE=unit
#=============================================================================
# Environment
#=============================================================================
# Use new Travis infrastructure (Docker can't sudo yet)
sudo: false
# Install coveralls to obtain code coverage
install:
- "pip install coveralls"
- "pip install flake8"
# Docs need graphviz to build
addons:
apt:
packages:
- gfortran
- graphviz
- libyaml-dev
# Work around Travis's lack of support for Python on OSX
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions python > /dev/null || brew install python; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions gcc > /dev/null || brew install gcc; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then virtualenv venv; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source venv/bin/activate; fi
# Install various dependencies
install:
- pip install --upgrade coveralls
- pip install --upgrade flake8
- pip install --upgrade sphinx
- pip install --upgrade mercurial
before_script:
# Need this for the git tests to succeed.
- git config --global user.email "spack@example.com"
- git config --global user.name "Test User"
@@ -19,25 +73,19 @@ before_install:
# Need this to be able to compute the list of changed files
- git fetch origin develop:develop
script:
# Regular spack setup and tests
- . share/spack/setup-env.sh
- spack compilers
- spack config get compilers
- 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
#=============================================================================
# Building
#=============================================================================
script: share/spack/qa/run-$TEST_SUITE-tests
after_success:
- coveralls
- if [[ $TEST_SUITE == unit && $TRAVIS_PYTHON_VERSION == 2.7 && $TRAVIS_OS_NAME == "linux" ]]; then coveralls; fi
#=============================================================================
# Notifications
#=============================================================================
notifications:
email:
recipients:
- tgamblin@llnl.gov
recipients: tgamblin@llnl.gov
on_success: change
on_failure: always

View File

@@ -20,7 +20,7 @@ written in pure Python, and specs allow package authors to write a
single build script for many different builds of the same package.
See the
[Feature Overview](http://software.llnl.gov/spack/features.html)
[Feature Overview](http://spack.readthedocs.io/en/latest/features.html)
for examples and highlights.
To install spack and install your first package:
@@ -32,9 +32,12 @@ To install spack and install your first package:
Documentation
----------------
[**Full documentation**](http://software.llnl.gov/spack) for Spack is
[**Full documentation**](http://spack.readthedocs.io/) for Spack is
the first place to look.
We've also got a [**Spack 101 Tutorial**](http://spack.readthedocs.io/en/latest/tutorial_sc16.html),
so you can learn Spack yourself, or teach users at your own site.
See also:
* [Technical paper](http://www.computer.org/csdl/proceedings/sc/2015/3723/00/2807623.pdf) and
[slides](https://tgamblin.github.io/files/Gamblin-Spack-SC15-Talk.pdf) on Spack's design and implementation.
@@ -58,17 +61,18 @@ can join it here:
### Contributions
At the moment, contributing to Spack is relatively simple. Just send us
a [pull request](https://help.github.com/articles/using-pull-requests/).
Contributing to Spack is relatively easy. Just send us a
[pull request](https://help.github.com/articles/using-pull-requests/).
When you send your request, make ``develop`` the destination branch on the
[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.
Your PR must pass Spack's unit tests and documentation tests, and must be
[PEP 8](https://www.python.org/dev/peps/pep-0008/) compliant.
We enforce these guidelines with [Travis CI](https://travis-ci.org/LLNL/spack).
To run these tests locally, and for helpful tips on git, see our
[Contribution Guide](http://spack.readthedocs.io/en/latest/contribution_guide.html).
Spack is using a rough approximation of the [Git
Spack uses a rough approximation of the [Git
Flow](http://nvie.com/posts/a-successful-git-branching-model/)
branching model. The ``develop`` branch contains the latest
contributions, and ``master`` is always tagged and points to the

View File

@@ -79,6 +79,15 @@
# Obviously, for this to work, `sbang` needs to have a short enough
# path that *it* will run without hitting OS limits.
#
# For Lua, scripts the second line can't start with #!, as # is not
# the comment character in lua (even though lua ignores #! on the
# *first* line of a script). So, instrument a lua script like this,
# using -- instead of # on the second line:
#
# 1 #!/bin/bash /path/to/sbang
# 2 --!/long/path/to/lua with arguments
# 3
# 4 print "success!"
#
# How it works
# -----------------------------
@@ -95,13 +104,19 @@ lines=0
while read line && ((lines < 2)) ; do
if [[ "$line" = '#!'* ]]; then
interpreter="${line#\#!}"
elif [[ "$line" = '--!'*lua* ]]; then
interpreter="${line#--!}"
fi
lines=$((lines+1))
done < "$script"
# Invoke any interpreter found, or raise an error if none was found.
if [ -n "$interpreter" ]; then
exec $interpreter "$@"
if [[ -n "$interpreter" ]]; then
if [[ "${interpreter##*/}" = "perl" ]]; then
exec $interpreter -x "$@"
else
exec $interpreter "$@"
fi
else
echo "error: sbang found no interpreter in $script"
exit 1

108
bin/spack
View File

@@ -1,4 +1,5 @@
#!/usr/bin/env python
# flake8: noqa
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
@@ -24,11 +25,13 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import sys
if not sys.version_info[:2] >= (2,6):
if (sys.version_info[0] > 2) or (sys.version_info[:2] < (2, 6)):
v_info = sys.version_info[:3]
sys.exit("Spack requires Python 2.6 or higher. This is Python %d.%d.%d." % v_info)
sys.exit("Spack requires Python 2.6 or 2.7. "
"This is Python %d.%d.%d." % v_info)
import os
import inspect
# Find spack's location and its prefix.
SPACK_FILE = os.path.realpath(os.path.expanduser(__file__))
@@ -38,31 +41,34 @@ SPACK_PREFIX = os.path.dirname(os.path.dirname(SPACK_FILE))
# Allow spack libs to be imported in our scripts
SPACK_LIB_PATH = os.path.join(SPACK_PREFIX, "lib", "spack")
sys.path.insert(0, SPACK_LIB_PATH)
# Add external libs
SPACK_EXTERNAL_LIBS = os.path.join(SPACK_LIB_PATH, "external")
sys.path.insert(0, SPACK_EXTERNAL_LIBS)
import warnings
# Avoid warnings when nose is installed with the python exe being used to run
# spack. Note this must be done after Spack's external libs directory is added
# to sys.path.
with warnings.catch_warnings():
warnings.filterwarnings("ignore", ".*nose was already imported")
import nose
# Quick and dirty check to clean orphaned .pyc files left over from
# previous revisions. These files were present in earlier versions of
# Spack, were removed, but shadow system modules that Spack still
# imports. If we leave them, Spack will fail in mysterious ways.
# TODO: more elegant solution for orphaned pyc files.
orphaned_pyc_files = [os.path.join(SPACK_EXTERNAL_LIBS, n)
for n in ('functools.pyc', 'ordereddict.pyc')]
orphaned_pyc_files = [
os.path.join(SPACK_EXTERNAL_LIBS, 'functools.pyc'),
os.path.join(SPACK_EXTERNAL_LIBS, 'ordereddict.pyc'),
os.path.join(SPACK_LIB_PATH, 'spack', 'platforms', 'cray_xc.pyc'),
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'package-list.pyc'),
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'test-install.pyc'),
os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'url-parse.pyc'),
os.path.join(SPACK_LIB_PATH, 'spack', 'test', 'yaml.pyc')
]
for pyc_file in orphaned_pyc_files:
if not os.path.exists(pyc_file):
continue
try:
os.remove(pyc_file)
except OSError as e:
print "WARNING: Spack may fail mysteriously. Couldn't remove orphaned .pyc file: %s" % pyc_file
print ("WARNING: Spack may fail mysteriously. "
"Couldn't remove orphaned .pyc file: %s" % pyc_file)
# If there is no working directory, use the spack prefix.
try:
@@ -77,7 +83,7 @@ import llnl.util.tty as tty
from llnl.util.tty.color import *
import spack
from spack.error import SpackError
from external import argparse
import argparse
# Command parsing
parser = argparse.ArgumentParser(
@@ -107,6 +113,8 @@ parser.add_argument('-p', '--profile', action='store_true',
help="Profile execution using cProfile.")
parser.add_argument('-v', '--verbose', action='store_true',
help="Print additional output during builds")
parser.add_argument('-s', '--stacktrace', action='store_true',
help="Add stacktrace information to all printed statements")
parser.add_argument('-V', '--version', action='version',
version="%s" % spack.spack_version)
@@ -114,30 +122,29 @@ parser.add_argument('-V', '--version', action='version',
# subparser for setup.
subparsers = parser.add_subparsers(metavar='SUBCOMMAND', dest="command")
import spack.cmd
for cmd in spack.cmd.commands:
module = spack.cmd.get_module(cmd)
subparser = subparsers.add_parser(cmd, help=module.description)
cmd_name = cmd.replace('_', '-')
subparser = subparsers.add_parser(cmd_name, help=module.description)
module.setup_parser(subparser)
# Just print help and exit if run with no arguments at all
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
# actually parse the args.
args = parser.parse_args()
def main():
def _main(args, unknown_args):
# Set up environment based on args.
tty.set_verbose(args.verbose)
tty.set_debug(args.debug)
tty.set_stacktrace(args.stacktrace)
spack.debug = args.debug
if spack.debug:
import spack.util.debug as debug
debug.register_interrupt_handler()
# Run any available pre-run hooks
spack.hooks.pre_run()
spack.spack_working_dir = working_dir
if args.mock:
from spack.repository import RepoPath
@@ -145,13 +152,26 @@ def main():
# If the user asked for it, don't check ssl certs.
if args.insecure:
tty.warn("You asked for --insecure, which does not check SSL certificates.")
spack.curl.add_default_arg('-k')
tty.warn("You asked for --insecure. Will NOT check SSL certificates.")
spack.insecure = True
# Try to load the particular command asked for and run it
command = spack.cmd.get_command(args.command)
command = spack.cmd.get_command(args.command.replace('-', '_'))
# Allow commands to inject an optional argument and get unknown args
# if they want to handle them.
info = dict(inspect.getmembers(command))
varnames = info['__code__'].co_varnames
argcount = info['__code__'].co_argcount
# Actually execute the command
try:
return_val = command(parser, args)
if argcount == 3 and varnames[2] == 'unknown_args':
return_val = command(parser, args, unknown_args)
else:
if unknown_args:
tty.die('unrecognized arguments: %s' % ' '.join(unknown_args))
return_val = command(parser, args)
except SpackError as e:
e.die()
except KeyboardInterrupt:
@@ -164,13 +184,29 @@ def main():
elif isinstance(return_val, int):
sys.exit(return_val)
else:
tty.die("Bad return value from command %s: %s" % (args.command, return_val))
tty.die("Bad return value from command %s: %s"
% (args.command, return_val))
if args.profile:
import cProfile
cProfile.run('main()', sort='tottime')
elif args.pdb:
import pdb
pdb.run('main()')
else:
main()
def main(args):
# Just print help and exit if run with no arguments at all
if len(args) == 1:
parser.print_help()
sys.exit(1)
# actually parse the args.
args, unknown = parser.parse_known_args()
if args.profile:
import cProfile
cProfile.runctx('_main(args, unknown)', globals(), locals(),
sort='time')
elif args.pdb:
import pdb
pdb.runctx('_main(args, unknown)', globals(), locals())
else:
_main(args, unknown)
if __name__ == '__main__':
main(sys.argv)

View File

@@ -0,0 +1,68 @@
# -------------------------------------------------------------------------
# This is the default spack configuration file.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
# $SPACK_ROOT/etc/spack/config.yaml
#
# Per-user settings (overrides default and site settings):
# ~/.spack/config.yaml
# -------------------------------------------------------------------------
config:
# This is the path to the root of the Spack install tree.
# You can use $spack here to refer to the root of the spack instance.
install_tree: $spack/opt/spack
# Locations where different types of modules should be installed.
module_roots:
tcl: $spack/share/spack/modules
lmod: $spack/share/spack/lmod
dotkit: $spack/share/spack/dotkit
# Temporary locations Spack can try to use for builds.
#
# Spack will use the first one it finds that exists and is writable.
# You can use $tempdir to refer to the system default temp directory
# (as returned by tempfile.gettempdir()).
#
# A value of $spack/var/spack/stage indicates that Spack should run
# builds directly inside its install directory without staging them in
# temporary space.
#
# The build stage can be purged with `spack purge --stage`.
build_stage:
- $tempdir
- /nfs/tmp2/$user
- $spack/var/spack/stage
# Cache directory already downloaded source tarballs and archived
# repositories. This can be purged with `spack purge --downloads`.
source_cache: $spack/var/spack/cache
# Cache directory for miscellaneous files, like the package index.
# This can be purged with `spack purge --misc-cache`
misc_cache: ~/.spack/cache
# If this is false, tools like curl that use SSL will not verify
# certifiates. (e.g., curl will use use the -k option)
verify_ssl: true
# If set to true, Spack will always check checksums after downloading
# archives. If false, Spack skips the checksum step.
checksum: true
# If set to true, `spack install` and friends will NOT clean
# potentially harmful variables from the build environment. Use wisely.
dirty: false

View File

@@ -0,0 +1,18 @@
# -------------------------------------------------------------------------
# This file controls default concretization preferences for Spack.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
# $SPACK_ROOT/etc/spack/packages.yaml
#
# Per-user settings (overrides default and site settings):
# ~/.spack/packages.yaml
# -------------------------------------------------------------------------
packages:
all:
compiler: [clang, gcc, intel]

View File

@@ -0,0 +1,42 @@
# -------------------------------------------------------------------------
# This is the default configuration for Spack's module file generation.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
# $SPACK_ROOT/etc/spack/modules.yaml
#
# Per-user settings (overrides default and site settings):
# ~/.spack/modules.yaml
# -------------------------------------------------------------------------
modules:
enable:
- tcl
- dotkit
prefix_inspections:
bin:
- PATH
man:
- MANPATH
share/man:
- MANPATH
share/aclocal:
- ACLOCAL_PATH
lib:
- LIBRARY_PATH
- LD_LIBRARY_PATH
lib64:
- LIBRARY_PATH
- LD_LIBRARY_PATH
include:
- CPATH
lib/pkgconfig:
- PKG_CONFIG_PATH
lib64/pkgconfig:
- PKG_CONFIG_PATH
'':
- CMAKE_PREFIX_PATH

View File

@@ -0,0 +1,23 @@
# -------------------------------------------------------------------------
# This file controls default concretization preferences for Spack.
#
# Settings here are versioned with Spack and are intended to provide
# sensible defaults out of the box. Spack maintainers should edit this
# file to keep it current.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
# $SPACK_ROOT/etc/spack/packages.yaml
#
# Per-user settings (overrides default and site settings):
# ~/.spack/packages.yaml
# -------------------------------------------------------------------------
packages:
all:
compiler: [gcc, intel, pgi, clang, xl, nag]
providers:
mpi: [openmpi, mpich]
blas: [openblas]
lapack: [openblas]
pil: [py-pillow]

View File

@@ -0,0 +1,14 @@
# -------------------------------------------------------------------------
# This is the default spack repository configuration. It includes the
# builtin spack package repository.
#
# Users can override these settings by editing the following files.
#
# Per-spack-instance settings (overrides defaults):
# $SPACK_ROOT/etc/spack/repos.yaml
#
# Per-user settings (overrides default and site settings):
# ~/.spack/repos.yaml
# -------------------------------------------------------------------------
repos:
- $spack/var/spack/repos/builtin

View File

@@ -1,29 +0,0 @@
# -------------------------------------------------------------------------
# This is the default spack module files generation configuration.
#
# Changes to this file will affect all users of this spack install,
# although users can override these settings in their ~/.spack/modules.yaml.
# -------------------------------------------------------------------------
modules:
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

View File

@@ -1,8 +0,0 @@
# -------------------------------------------------------------------------
# This is the default spack repository configuration.
#
# Changes to this file will affect all users of this spack install,
# although users can override these settings in their ~/.spack/repos.yaml.
# -------------------------------------------------------------------------
repos:
- $spack/var/spack/repos/builtin

View File

@@ -1,4 +1,5 @@
package_list.rst
command_index.rst
spack*.rst
modules.rst
_build

View File

@@ -2,12 +2,13 @@
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXOPTS = -E
JOBS ?= $(shell python -c 'import multiprocessing; print multiprocessing.cpu_count()')
SPHINXBUILD = sphinx-build -j $(JOBS)
PAPER =
BUILDDIR = _build
export PYTHONPATH = ../../spack
export PYTHONPATH := ../../spack:$(PYTHONPATH)
APIDOC_FILES = spack*.rst
# Internal variables.
@@ -21,24 +22,6 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
all: html
#
# This autogenerates a package list.
#
package_list:
spack package-list > package_list.rst
#
# Generate a command index
#
command_index:
cp command_index.in command_index.rst
echo >> command_index.rst
grep -ho '.. _spack-.*:' *rst \
| perl -pe 's/.. _([^:]*):/ * :ref:`\1`/' \
| sort >> command_index.rst
custom_targets: package_list command_index
#
# This creates a git repository and commits generated html docs.
# It them pushes the new branch into THIS repository as gh-pages.
@@ -58,9 +41,20 @@ gh-pages: _build/html
git push -f $$root master:gh-pages && \
rm -rf .git
# This version makes gh-pages into a single page that redirects
# to spack.readthedocs.io
gh-pages-redirect:
root="$$(git rev-parse --show-toplevel)" && \
cd _gh_pages_redirect && \
rm -rf .git && \
git init && \
git add . && \
git commit -m "Spack Documentation" && \
git push -f $$root master:gh-pages && \
rm -rf .git
upload:
rsync -avz --rsh=ssh --delete _build/html/ cab:/usr/global/web-pages/lc/www/adept/docs/spack
git push -f origin gh-pages
git push -f github gh-pages
apidoc:
@@ -89,10 +83,10 @@ help:
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
-rm -f package_list.rst command_index.rst
-rm -f package_list.rst command_index.rst modules.rst
-rm -rf $(BUILDDIR)/* $(APIDOC_FILES)
html: apidoc custom_targets
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

View File

@@ -0,0 +1,10 @@
<html>
<head>
<meta http-equiv="refresh" content="0; url=http://spack.readthedocs.io/" />
</head>
<body>
<p>
This page has moved to <a href="http://spack.readthedocs.io/">http://spack.readthedocs.io/</a>
</p>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,168 @@
.. _build-settings:
======================================
Build customization
======================================
Spack allows you to customize how your software is built through the
``packages.yaml`` file. Using it, you can make Spack prefer particular
implementations of virtual dependencies (e.g., compilers, MPI, or BLAS),
or you can make it prefer to build with particular compilers. You can
also tell Spack to use *external* installations of certain software.
At a high level, the ``packages.yaml`` file is structured like this:
.. code-block:: yaml
packages:
package1:
# settings for package1
package2:
# settings for package2
# ...
all:
# settings that apply to all packages.
So you can either set build preferences *specifically* for one package,
or you can specify that certain settings should apply to all packages.
The types of settings you can customize are described in detail below.
Spack's build defaults are in the default
``etc/spack/defaults/packages.yaml`` file. You can override them in
``~/.spack/packages.yaml`` or ``etc/spack/packages.yaml``. For more
details on how this works, see :ref:`configuration-scopes`
.. _sec-external-packages:
-----------------
External Packages
-----------------
Spack can be configured to use externally-installed
packages rather than building its own packages. This may be desirable
if machines ship with system packages, such as a customized MPI
that should be used instead of Spack building its own MPI.
External packages are configured through the ``packages.yaml`` file found
in a Spack installation's ``etc/spack/`` or a user's ``~/.spack/``
directory. Here's an example of an external configuration:
.. code-block:: yaml
packages:
openmpi:
paths:
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
This example lists three installations of OpenMPI, one built with gcc,
one built with gcc and debug information, and another built with Intel.
If Spack is asked to build a package that uses one of these MPIs as a
dependency, it will use the the pre-installed OpenMPI in
the given directory. Packages.yaml can also be used to specify modules
Each ``packages.yaml`` begins with a ``packages:`` token, followed
by a list of package names. To specify externals, add a ``paths`` or ``modules``
token under the package name, which lists externals in a
``spec: /path`` or ``spec: module-name`` format. Each spec should be as
well-defined as reasonably possible. If a
package lacks a spec component, such as missing a compiler or
package version, then Spack will guess the missing component based
on its most-favored packages, and it may guess incorrectly.
Each package version and compilers listed in an external should
have entries in Spack's packages and compiler configuration, even
though the package and compiler may not every be built.
The packages configuration can tell Spack to use an external location
for certain package versions, but it does not restrict Spack to using
external packages. In the above example, if an OpenMPI 1.8.4 became
available Spack may choose to start building and linking with that version
rather than continue using the pre-installed OpenMPI versions.
To prevent this, the ``packages.yaml`` configuration also allows packages
to be flagged as non-buildable. The previous example could be modified to
be:
.. code-block:: yaml
packages:
openmpi:
paths:
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
buildable: False
The addition of the ``buildable`` flag tells Spack that it should never build
its own version of OpenMPI, and it will instead always rely on a pre-built
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
a package name.
If an external module is specified as not buildable, then Spack will load the
external module into the build environment which can be used for linking.
The ``buildable`` does not need to be paired with external packages.
It could also be used alone to forbid packages that may be
buggy or otherwise undesirable.
.. _concretization-preferences:
--------------------------
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:: yaml
packages:
opencv:
compiler: [gcc@4.9]
variants: +debug
gperftools:
version: [2.2, 2.4, 2.3]
all:
compiler: [gcc@4.4.7, gcc@4.6:, intel, clang, pgi]
providers:
mpi: [mvapich, mpich, openmpi]
At a high level, this example is specifying how packages should be
concretized. The opencv package should prefer using gcc 4.9 and
be built with debug options. The gperftools package should prefer version
2.2 over 2.4. Every package on the system should prefer mvapich for
its MPI and gcc 4.4.7 (except for opencv, which overrides this by preferring gcc 4.9).
These options are used to fill in implicit defaults. Any of them can be overwritten
on the command line if explicitly requested.
Each packages.yaml file begins with the string ``packages:`` and
package names are specified on the next level. The special string ``all``
applies settings to each package. Underneath each package name is
one or more components: ``compiler``, ``variants``, ``version``,
or ``providers``. Each component has an ordered list of spec
``constraints``, with earlier entries in the list being preferred over
later entries.
Sometimes a package installation may have constraints that forbid
the first concretization rule, in which case Spack will use the first
legal concretization rule. Going back to the example, if a user
requests gperftools 2.3 or later, then Spack will install version 2.4
as the 2.4 version of gperftools is preferred over 2.3.
An explicit concretization rule in the preferred section will always
take preference over unlisted concretizations. In the above example,
xlc isn't listed in the compiler list. Every listed compiler from
gcc to pgi will thus be preferred over the xlc compiler.
The syntax for the ``provider`` section differs slightly from other
concretization rules. A provider lists a value that packages may
``depend_on`` (e.g, mpi) and a list of rules for fulfilling that
dependency.

View File

@@ -1,7 +1,6 @@
.. _command_index:
Command index
=================
=============
Command Index
=============
This is an alphabetical list of commands with links to the places they
appear in the documentation.

View File

@@ -1,26 +1,27 @@
# flake8: noqa
##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# 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 General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
# 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 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
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# 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
##############################################################################
# -*- coding: utf-8 -*-
#
@@ -37,25 +38,85 @@
import sys
import os
import re
import shutil
import subprocess
from glob import glob
from sphinx.apidoc import main as sphinx_apidoc
# -- Spack customizations -----------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('exts'))
sys.path.insert(0, os.path.abspath('../external'))
sys.path.append(os.path.abspath('..'))
# Add the Spack bin directory to the path so that we can use its output in docs.
spack_root = '../../..'
os.environ['SPACK_ROOT'] = spack_root
os.environ['PATH'] += os.pathsep + '$SPACK_ROOT/bin'
os.environ['PATH'] += '%s%s/bin' % (os.pathsep, spack_root)
# Get the spack version for use in the docs
spack_version = subprocess.Popen(
['spack', '-V'], stderr=subprocess.PIPE).communicate()[1].strip().split('.')
[spack_root + '/bin/spack', '-V'],
stderr=subprocess.PIPE).communicate()[1].strip().split('.')
# Set an environment variable so that colify will print output like it would to
# a terminal.
os.environ['COLIFY_SIZE'] = '25x80'
os.environ['COLIFY_SIZE'] = '25x120'
#
# Generate package list using spack command
#
with open('package_list.rst', 'w') as plist_file:
subprocess.Popen(
[spack_root + '/bin/spack', 'list', '--format=rst'], stdout=plist_file)
#
# Find all the `cmd-spack-*` references and add them to a command index
#
command_names = []
for filename in glob('*rst'):
with open(filename) as f:
for line in f:
match = re.match('.. _(cmd-spack-.*):', line)
if match:
command_names.append(match.group(1).strip())
shutil.copy('command_index.in', 'command_index.rst')
with open('command_index.rst', 'a') as index:
index.write('\n')
for cmd in sorted(command_names):
index.write(' * :ref:`%s`\n' % cmd)
# Run sphinx-apidoc
sphinx_apidoc(['-T', '-o', '.', '../spack'])
os.remove('modules.rst')
#
# Exclude everything in spack.__all__ from indexing. All of these
# symbols are imported from elsewhere in spack; their inclusion in
# __all__ simply allows package authors to use `from spack import *`.
# Excluding them ensures they're only documented in their "real" module.
#
# This also avoids issues where some of these symbols shadow core spack
# modules. Sphinx will complain about duplicate docs when this happens.
#
import fileinput, spack
handling_spack = False
for line in fileinput.input('spack.rst', inplace=1):
if handling_spack:
if not line.startswith(' :noindex:'):
print ' :noindex: %s' % ' '.join(spack.__all__)
handling_spack = False
if line.startswith('.. automodule::'):
handling_spack = (line == '.. automodule:: spack\n')
print line,
# Enable todo items
todo_include_todos = True

View File

@@ -0,0 +1,149 @@
.. _config-yaml:
====================================
Basic settings in ``config.yaml``
====================================
Spack's basic configuration options are set in ``config.yaml``. You can
see the default settings by looking at
``etc/spack/defaults/config.yaml``:
.. literalinclude:: ../../../etc/spack/defaults/config.yaml
:language: yaml
These settings can be overridden in ``etc/spack/config.yaml`` or
``~/.spack/config.yaml``. See :ref:`configuration-scopes` for details.
.. _config-file-variables:
------------------------------
Config file variables
------------------------------
You may notice some variables prefixed with ``$`` in the settings above.
Spack understands several variables that can be used in values of
configuration parameters. They are:
* ``$spack``: path to the prefix of this spack installation
* ``$tempdir``: default system temporary directory (as specified in
Python's `tempfile.tempdir
<https://docs.python.org/2/library/tempfile.html#tempfile.tempdir>`_
variable.
* ``$user``: name of the current user
Note that, as with shell variables, you can write these as ``$varname``
or with braces to distinguish the variable from surrounding characters:
``${varname}``.
--------------------
``install_tree``
--------------------
The location where Spack will install packages and their dependencies.
Default is ``$spack/opt/spack``.
--------------------
``module_roots``
--------------------
Controls where Spack installs generated module files. You can customize
the location for each type of module. e.g.:
.. code-block:: yaml
module_roots:
tcl: $spack/share/spack/modules
lmod: $spack/share/spack/lmod
dotkit: $spack/share/spack/dotkit
See :ref:`modules` for details.
--------------------
``build_stage``
--------------------
Spack is designed to run out of a user home directories, and on many
systems the home directory a (slow) network filesystem. On most systems,
building in a temporary filesystem results in faster builds than building
in the home directory. Usually, there is also more space available in
the temporary location than in the home directory. So, Spack tries to
create build stages in temporary space.
By default, Spack's ``build_stage`` is configured like this:
.. code-block:: yaml
build_stage:
- $tempdir
- /nfs/tmp2/$user
- $spack/var/spack/stage
This is an ordered list of paths that Spack should search when trying to
find a temporary directory for the build stage. The list is searched in
order, and Spack will use the first directory to which it has write access.
See :ref:`config-file-variables` for more on ``$tempdir`` and ``$spack``.
When Spack builds a package, it creates a temporary directory within the
``build_stage``, and it creates a symbolic link to that directory in
``$spack/var/spack/stage``. This is used totrack the stage.
After a package is successfully installed, Spack deletes the temporary
directory it used to build. Unsuccessful builds are not deleted, but you
can manually purge them with :ref:`spack purge --stage
<cmd-spack-purge>`.
.. note::
The last item in the list is ``$spack/var/spack/stage``. If this is the
only writable directory in the ``build_stage`` list, Spack will build
*directly* in ``$spack/var/spack/stage`` and will not link to temporary
space.
--------------------
``source_cache``
--------------------
Location to cache downloaded tarballs and repositories. By default these
are stored in ``$spack/var/spack/cache``. These are stored indefinitely
by default. Can be purged with :ref:`spack purge --downloads
<cmd-spack-purge>`.
--------------------
``misc_cache``
--------------------
Temporary directory to store long-lived cache files, such as indices of
packages available in repositories. Defaults to ``~/.spack/cache``. Can
be purged with :ref:`spack purge --misc-cache <cmd-spack-purge>`.
--------------------
``verify_ssl``
--------------------
When set to ``true`` (default) Spack will verify certificates of remote
hosts when making ``ssl`` connections. Set to ``false`` to disable, and
tools like ``curl`` will use their ``--insecure`` options. Disabling
this can expose you to attacks. Use at your own risk.
--------------------
``checksum``
--------------------
When set to ``true``, Spack verifies downloaded source code using a
checksum, and will refuse to build packages that it cannot verify. Set
to ``false`` to disable these checks. Disabling this can expose you to
attacks. Use at your own risk.
--------------------
``dirty``
--------------------
By default, Spack unsets variables in your environment that can change
the way packages build. This includes ``LD_LIBRARY_PATH``, ``CPATH``,
``LIBRARY_PATH``, ``DYLD_LIBRARY_PATH``, and others.
By default, builds are ``clean``, but on some machines, compilers and
other tools may need custom ``LD_LIBRARY_PATH`` setings to run. You can
set ``dirty`` to ``true`` to skip the cleaning step and make all builds
"dirty" by default. Be aware that this will reduce the reproducibility
of builds.

View File

@@ -0,0 +1,253 @@
.. _configuration:
==============================
Configuration Files in Spack
==============================
Spack has many configuration files. Here is a quick list of them, in
case you want to skip directly to specific docs:
* :ref:`compilers.yaml <compiler-config>`
* :ref:`config.yaml <config-yaml>`
* :ref:`mirrors.yaml <mirrors>`
* :ref:`modules.yaml <modules>`
* :ref:`packages.yaml <build-settings>`
* :ref:`repos.yaml <repositories>`
-------------------------
YAML Format
-------------------------
Spack configuration files are written in YAML. We chose YAML because
it's human readable, but also versatile in that it supports dictionaries,
lists, and nested sections. For more details on the format, see `yaml.org
<http://yaml.org>`_ and `libyaml <http://pyyaml.org/wiki/LibYAML>`_.
Here is an example ``config.yaml`` file:
.. code-block:: yaml
config:
install_tree: $spack/opt/spack
module_roots:
lmod: $spack/share/spack/lmod
build_stage:
- $tempdir
- /nfs/tmp2/$user
Each spack configuration files is nested under a top-level section
corresponding to its name. So, ``config.yaml`` starts with ``config:``,
and ``mirrors.yaml`` starts with ``mirrors:``, etc.
.. _configuration-scopes:
-------------------------
Configuration Scopes
-------------------------
Spack pulls configuration data from files in several directories. There
are three configuration scopes. From lowest to highest:
1. **defaults**: Stored in ``$(prefix)/etc/spack/defaults/``. These are
the "factory" settings. Users should generally not modify the settings
here, but should override them in other configuration scopes. The
defaults here will change from version to version of Spack.
2. **site**: Stored in ``$(prefix)/etc/spack/``. Settings here affect
only *this instance* of Spack, and they override defaults. The site
scope can can be used for per-project settings (one spack instance per
project) or for site-wide settings on a multi-user machine (e.g., for
a common spack instance).
3. **user**: Stored in the home directory: ``~/.spack/``. These settings
affect all instances of Spack and take the highest precedence.
Each configuration directory may contain several configuration files,
such as ``config.yaml``, ``compilers.yaml``, or ``mirrors.yaml``. When
configurations conflict, settings from higher-precedence scopes override
lower-precedence settings.
Commands that modify scopes (e.g., ``spack compilers``, ``spack repo``,
etc.) take a ``--scope=<name>`` parameter that you can use to control
which scope is modified. By default they modify the highest-precedence
scope.
.. _platform-scopes:
-------------------------
Platform-specific scopes
-------------------------
For each scope above, there can *also* be platform-specific settings.
For example, on Blue Gene/Q machines, Spack needs to know the location of
cross-compilers for the compute nodes. This configuration is in
``etc/spack/defaults/bgq/compilers.yaml``. It will take precedence over
settings in the ``defaults`` scope, but can still be overridden by
settings in ``site``, ``site/bgq``, ``user``, or ``user/bgq``. So, the
full scope precedence is:
1. ``defaults``
2. ``defaults/<platform>``
3. ``site``
4. ``site/<platform>``
5. ``user``
6. ``user/<platform>``
You can get the name to use for ``<platform>`` by running ``spack arch
--platform``.
-------------------------
Scope precedence
-------------------------
When spack queries for configuration parameters, it searches in
higher-precedence scopes first. So, settings in a higher-precedence file
can override those with the same key in a lower-precedence one. For
list-valued settings, Spack *prepends* higher-precedence settings to
lower-precedence settings. Completely ignoring higher-level configuration
options is supported with the ``::`` notation for keys (see
:ref:`config-overrides` below).
^^^^^^^^^^^^^^^^^^^^^^^^
Simple keys
^^^^^^^^^^^^^^^^^^^^^^^^
Let's look at an example of overriding a single key in a Spack file. If
your configurations look like this:
**defaults** scope:
.. code-block:: yaml
config:
install_tree: $spack/opt/spack
module_roots:
lmod: $spack/share/spack/lmod
build_stage:
- $tempdir
- /nfs/tmp2/$user
**site** scope:
.. code-block:: yaml
config:
install_tree: /some/other/directory
Spack will only override ``install_tree`` in the ``config`` section, and
will take the site preferences for other settings. You can see the
final, combined configuration with the ``spack config get <configtype>``
command:
.. code-block:: console
:emphasize-lines: 3
$ spack config get config
config:
install_tree: /some/other/directory
module_roots:
lmod: $spack/share/spack/lmod
build_stage:
- $tempdir
- /nfs/tmp2/$user
$ _
.. _config-overrides:
^^^^^^^^^^^^^^^^^^^^^^^^^^
Overriding entire sections
^^^^^^^^^^^^^^^^^^^^^^^^^^
Above, the site ``config.yaml`` only overrides specific settings in the
default ``config.yaml``. Sometimes, it is useful to *completely*
override lower-precedence settings. To do this, you can use *two* colons
at the end of a key in a configuration file. For example, if the
**site** ``config.yaml`` above looks like this:
.. code-block:: yaml
:emphasize-lines: 1
config::
install_tree: /some/other/directory
Spack will ignore all lower-precedence configuration under the
``config::`` section:
.. code-block:: console
$ spack config get config
config:
install_tree: /some/other/directory
^^^^^^^^^^^^^^^^^^^^^^
List-valued settings
^^^^^^^^^^^^^^^^^^^^^^
Let's revisit the ``config.yaml`` example one more time. The
``build_stage`` setting's value is an ordered list of directories:
**defaults**
.. code-block:: yaml
build_stage:
- $tempdir
- /nfs/tmp2/$user
Suppose the user configuration adds its *own* list of ``build_stage``
paths:
**user**
.. code-block:: yaml
build_stage:
- /lustre-scratch/$user
- ~/mystage
Spack will first look at the paths in the site ``config.yaml``, then the
paths in the user's ``~/.spack/config.yaml``. The list in the
higher-precedence scope is *prepended* to the defaults. ``spack config
get config`` shows the result:
.. code-block:: console
:emphasize-lines: 7-10
$ spack config get config
config:
install_tree: /some/other/directory
module_roots:
lmod: $spack/share/spack/lmod
build_stage:
- /lustre-scratch/$user
- ~/mystage
- $tempdir
- /nfs/tmp2/$user
$ _
As in :ref:`config-overrides`, the higher-precedence scope can
*completely* override the lower-precedence scope using `::`. So if the
user config looked like this:
**user**
.. code-block:: yaml
:emphasize-lines: 1
build_stage::
- /lustre-scratch/$user
- ~/mystage
The merged configuration would look like this:
.. code-block:: console
:emphasize-lines: 7-8
$ spack config get config
config:
install_tree: /some/other/directory
module_roots:
lmod: $spack/share/spack/lmod
build_stage:
- /lustre-scratch/$user
- ~/mystage
$ _

View File

@@ -0,0 +1,522 @@
.. _contribution-guide:
==================
Contribution Guide
==================
This guide is intended for developers or administrators who want to
contribute a new package, feature, or bugfix to Spack.
It assumes that you have at least some familiarity with Git VCS and Github.
The guide will show a few examples of contributing workflows and discuss
the granularity of pull-requests (PRs). It will also discuss the tests your
PR must pass in order to be accepted into Spack.
First, what is a PR? Quoting `Bitbucket's tutorials <https://www.atlassian.com/git/tutorials/making-a-pull-request/>`_:
Pull requests are a mechanism for a developer to notify team members that
they have **completed a feature**. The pull request is more than just a
notification—its a dedicated forum for discussing the proposed feature.
Important is **completed feature**. The changes one proposes in a PR should
correspond to one feature/bugfix/extension/etc. One can create PRs with
changes relevant to different ideas, however reviewing such PRs becomes tedious
and error prone. If possible, try to follow the **one-PR-one-package/feature** rule.
Spack uses a rough approximation of the `Git Flow <http://nvie.com/posts/a-successful-git-branching-model/>`_
branching model. The develop branch contains the latest contributions, and
master is always tagged and points to the latest stable release. Therefore, when
you send your request, make ``develop`` the destination branch on the
`Spack repository <https://github.com/LLNL/spack>`_.
----------------------
Continuous Integration
----------------------
Spack uses `Travis CI <https://travis-ci.org/LLNL/spack>`_ for Continuous Integration
testing. This means that every time you submit a pull request, a series of tests will
be run to make sure you didn't accidentally introduce any bugs into Spack. Your PR
will not be accepted until it passes all of these tests. While you can certainly wait
for the results of these tests after submitting a PR, we recommend that you run them
locally to speed up the review process.
If you take a look in ``$SPACK_ROOT/.travis.yml``, you'll notice that we test
against Python 2.6 and 2.7. We currently perform 3 types of tests:
^^^^^^^^^^
Unit Tests
^^^^^^^^^^
Unit tests ensure that core Spack features like fetching or spec resolution are
working as expected. If your PR only adds new packages or modifies existing ones,
there's very little chance that your changes could cause the unit tests to fail.
However, if you make changes to Spack's core libraries, you should run the unit
tests to make sure you didn't break anything.
Since they test things like fetching from VCS repos, the unit tests require
`git <https://git-scm.com/>`_, `mercurial <https://www.mercurial-scm.org/>`_,
and `subversion <https://subversion.apache.org/>`_ to run. Make sure these are
installed on your system and can be found in your ``PATH``. All of these can be
installed with Spack or with your system package manager.
To run *all* of the unit tests, use:
.. code-block:: console
$ spack test
These tests may take several minutes to complete. If you know you are only
modifying a single Spack feature, you can run a single unit test at a time:
.. code-block:: console
$ spack test architecture
This allows you to develop iteratively: make a change, test that change, make
another change, test that change, etc. To get a list of all available unit
tests, run:
.. command-output:: spack test --collect-only
Unit tests are crucial to making sure bugs aren't introduced into Spack. If you
are modifying core Spack libraries or adding new functionality, please consider
adding new unit tests or strengthening existing tests.
.. note::
There is also a ``run-unit-tests`` script in ``share/spack/qa`` that
runs the unit tests. Afterwards, it reports back to Coverage with the
percentage of Spack that is covered by unit tests. This script is
designed for Travis CI. If you want to run the unit tests yourself, we
suggest you use ``spack test``.
^^^^^^^^^^^^
Flake8 Tests
^^^^^^^^^^^^
Spack uses `Flake8 <http://flake8.pycqa.org/en/latest/>`_ to test for
`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_ conformance. PEP 8 is
a series of style guides for Python that provide suggestions for everything
from variable naming to indentation. In order to limit the number of PRs that
were mostly style changes, we decided to enforce PEP 8 conformance. Your PR
needs to comply with PEP 8 in order to be accepted.
Testing for PEP 8 compliance is easy. Simply run the ``spack flake8``
command:
.. code-block:: console
$ spack flake8
``spack flake8`` has a couple advantages over running ``flake8`` by hand:
#. It only tests files that you have modified since branching off of
``develop``.
#. It works regardless of what directory you are in.
#. It automatically adds approved exemptions from the ``flake8``
checks. For example, URLs are often longer than 80 characters, so we
exempt them from line length checks. We also exempt lines that start
with "homepage", "url", "version", "variant", "depends_on", and
"extends" in ``package.py`` files.
More approved flake8 exemptions can be found
`here <https://github.com/LLNL/spack/blob/develop/.flake8>`_.
If all is well, you'll see something like this:
.. code-block:: console
$ run-flake8-tests
Dependencies found.
=======================================================
flake8: running flake8 code checks on spack.
Modified files:
var/spack/repos/builtin/packages/hdf5/package.py
var/spack/repos/builtin/packages/hdf/package.py
var/spack/repos/builtin/packages/netcdf/package.py
=======================================================
Flake8 checks were clean.
However, if you aren't compliant with PEP 8, flake8 will complain:
.. code-block:: console
var/spack/repos/builtin/packages/netcdf/package.py:26: [F401] 'os' imported but unused
var/spack/repos/builtin/packages/netcdf/package.py:61: [E303] too many blank lines (2)
var/spack/repos/builtin/packages/netcdf/package.py:106: [E501] line too long (92 > 79 characters)
Flake8 found errors.
Most of the error messages are straightforward, but if you don't understand what
they mean, just ask questions about them when you submit your PR. The line numbers
will change if you add or delete lines, so simply run ``run-flake8-tests`` again
to update them.
.. tip::
Try fixing flake8 errors in reverse order. This eliminates the need for
multiple runs of ``flake8`` just to re-compute line numbers and makes it
much easier to fix errors directly off of the Travis output.
.. warning::
Flake8 requires setuptools in order to run. If you installed ``py-flake8``
with Spack, make sure to add ``py-setuptools`` to your ``PYTHONPATH``.
Otherwise, you will get an error message like:
.. code-block:: console
Traceback (most recent call last):
File: "/usr/bin/flake8", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
^^^^^^^^^^^^^^^^^^^
Documentation Tests
^^^^^^^^^^^^^^^^^^^
Spack uses `Sphinx <http://www.sphinx-doc.org/en/stable/>`_ to build its
documentation. In order to prevent things like broken links and missing imports,
we added documentation tests that build the documentation and fail if there
are any warning or error messages.
Building the documentation requires several dependencies, all of which can be
installed with Spack:
* sphinx
* graphviz
* git
* mercurial
* subversion
.. warning::
Sphinx has `several required dependencies <https://github.com/LLNL/spack/blob/develop/var/spack/repos/builtin/packages/py-sphinx/package.py>`_.
If you installed ``py-sphinx`` with Spack, make sure to add all of these
dependencies to your ``PYTHONPATH``. The easiest way to do this is to run
``spack activate py-sphinx`` so that all of the dependencies are symlinked
to a central location. If you see an error message like:
.. code-block:: console
Traceback (most recent call last):
File: "/usr/bin/flake8", line 5, in <module>
from pkg_resources import load_entry_point
ImportError: No module named pkg_resources
that means Sphinx couldn't find setuptools in your ``PYTHONPATH``.
Once all of the dependencies are installed, you can try building the documentation:
.. code-block:: console
$ cd "$SPACK_ROOT/lib/spack/docs"
$ make clean
$ make
If you see any warning or error messages, you will have to correct those before
your PR is accepted.
.. note::
There is also a ``run-doc-tests`` script in the Quality Assurance directory.
The only difference between running this script and running ``make`` by hand
is that the script will exit immediately if it encounters an error or warning.
This is necessary for Travis CI. If you made a lot of documentation tests, it
is much quicker to run ``make`` by hand so that you can see all of the warnings
at once.
If you are editing the documentation, you should obviously be running the
documentation tests. But even if you are simply adding a new package, your
changes could cause the documentation tests to fail:
.. code-block:: console
package_list.rst:8745: WARNING: Block quote ends without a blank line; unexpected unindent.
At first, this error message will mean nothing to you, since you didn't edit
that file. Until you look at line 8745 of the file in question:
.. code-block:: rst
Description:
NetCDF is a set of software libraries and self-describing, machine-
independent data formats that support the creation, access, and sharing
of array-oriented scientific data.
Our documentation includes :ref:`a list of all Spack packages <package-list>`.
If you add a new package, its docstring is added to this page. The problem in
this case was that the docstring looked like:
.. code-block:: python
class Netcdf(Package):
"""
NetCDF is a set of software libraries and self-describing,
machine-independent data formats that support the creation,
access, and sharing of array-oriented scientific data.
"""
Docstrings cannot start with a newline character, or else Sphinx will complain.
Instead, they should look like:
.. code-block:: python
class Netcdf(Package):
"""NetCDF is a set of software libraries and self-describing,
machine-independent data formats that support the creation,
access, and sharing of array-oriented scientific data."""
Documentation changes can result in much more obfuscated warning messages.
If you don't understand what they mean, feel free to ask when you submit
your PR.
-------------
Git Workflows
-------------
Spack is still in the beta stages of development. Most of our users run off of
the develop branch, and fixes and new features are constantly being merged. So
how do you keep up-to-date with upstream while maintaining your own local
differences and contributing PRs to Spack?
^^^^^^^^^
Branching
^^^^^^^^^
The easiest way to contribute a pull request is to make all of your changes on
new branches. Make sure your ``develop`` is up-to-date and create a new branch
off of it:
.. code-block:: console
$ git checkout develop
$ git pull upstream develop
$ git branch <descriptive_branch_name>
$ git checkout <descriptive_branch_name>
Here we assume that the local ``develop`` branch tracks the upstream develop
branch of Spack. This is not a requirement and you could also do the same with
remote branches. But for some it is more convenient to have a local branch that
tracks upstream.
Normally we prefer that commits pertaining to a package ``<package-name>`` have
a message ``<package-name>: descriptive message``. It is important to add
descriptive message so that others, who might be looking at your changes later
(in a year or maybe two), would understand the rationale behind them.
Now, you can make your changes while keeping the ``develop`` branch pure.
Edit a few files and commit them by running:
.. code-block:: console
$ git add <files_to_be_part_of_the_commit>
$ git commit --message <descriptive_message_of_this_particular_commit>
Next, push it to your remote fork and create a PR:
.. code-block:: console
$ git push origin <descriptive_branch_name> --set-upstream
GitHub provides a `tutorial <https://help.github.com/articles/about-pull-requests/>`_
on how to file a pull request. When you send the request, make ``develop`` the
destination branch.
If you need this change immediately and don't have time to wait for your PR to
be merged, you can always work on this branch. But if you have multiple PRs,
another option is to maintain a Frankenstein branch that combines all of your
other branches:
.. code-block:: console
$ git co develop
$ git branch <your_modified_develop_branch>
$ git checkout <your_modified_develop_branch>
$ git merge <descriptive_branch_name>
This can be done with each new PR you submit. Just make sure to keep this local
branch up-to-date with upstream ``develop`` too.
^^^^^^^^^^^^^^
Cherry-Picking
^^^^^^^^^^^^^^
What if you made some changes to your local modified develop branch and already
committed them, but later decided to contribute them to Spack? You can use
cherry-picking to create a new branch with only these commits.
First, check out your local modified develop branch:
.. code-block:: console
$ git checkout <your_modified_develop_branch>
Now, get the hashes of the commits you want from the output of:
.. code-block:: console
$ git log
Next, create a new branch off of upstream ``develop`` and copy the commits
that you want in your PR:
.. code-block:: console
$ git checkout develop
$ git pull upstream develop
$ git branch <descriptive_branch_name>
$ git checkout <descriptive_branch_name>
$ git cherry-pick <hash>
$ git push origin <descriptive_branch_name> --set-upstream
Now you can create a PR from the web-interface of GitHub. The net result is as
follows:
#. You patched your local version of Spack and can use it further.
#. You "cherry-picked" these changes in a stand-alone branch and submitted it
as a PR upstream.
Should you have several commits to contribute, you could follow the same
procedure by getting hashes of all of them and cherry-picking to the PR branch.
.. note::
It is important that whenever you change something that might be of
importance upstream, create a pull request as soon as possible. Do not wait
for weeks/months to do this, because:
#. you might forget why you modified certain files
#. it could get difficult to isolate this change into a stand-alone clean PR.
^^^^^^^^
Rebasing
^^^^^^^^
Other developers are constantly making contributions to Spack, possibly on the
same files that your PR changed. If their PR is merged before yours, it can
create a merge conflict. This means that your PR can no longer be automatically
merged without a chance of breaking your changes. In this case, you will be
asked to rebase on top of the latest upstream ``develop``.
First, make sure your develop branch is up-to-date:
.. code-block:: console
$ git checkout develop
$ git pull upstream develop
Now, we need to switch to the branch you submitted for your PR and rebase it
on top of develop:
.. code-block:: console
$ git checkout <descriptive_branch_name>
$ git rebase develop
Git will likely ask you to resolve conflicts. Edit the file that it says can't
be merged automatically and resolve the conflict. Then, run:
.. code-block:: console
$ git add <file_that_could_not_be_merged>
$ git rebase --continue
You may have to repeat this process multiple times until all conflicts are resolved.
Once this is done, simply force push your rebased branch to your remote fork:
.. code-block:: console
$ git push --force origin <descriptive_branch_name>
^^^^^^^^^^^^^^^^^^^^^^^^^
Rebasing with cherry-pick
^^^^^^^^^^^^^^^^^^^^^^^^^
You can also perform a rebase using ``cherry-pick``. First, create a temporary
backup branch:
.. code-block:: console
$ git checkout <descriptive_branch_name>
$ git branch tmp
If anything goes wrong, you can always go back to your ``tmp`` branch.
Now, look at the logs and save the hashes of any commits you would like to keep:
.. code-block:: console
$ git log
Next, go back to the original branch and reset it to ``develop``.
Before doing so, make sure that you local ``develop`` branch is up-to-date
with upstream:
.. code-block:: console
$ git checkout develop
$ git pull upstream develop
$ git checkout <descriptive_branch_name>
$ git reset --hard develop
Now you can cherry-pick relevant commits:
.. code-block:: console
$ git cherry-pick <hash1>
$ git cherry-pick <hash2>
Push the modified branch to your fork:
.. code-block:: console
$ git push --force origin <descriptive_branch_name>
If everything looks good, delete the backup branch:
.. code-block:: console
$ git branch --delete --force tmp
^^^^^^^^^^^^^^^^^^
Re-writing History
^^^^^^^^^^^^^^^^^^
Sometimes you may end up on a branch that has diverged so much from develop
that it cannot easily be rebased. If the current commits history is more of
an experimental nature and only the net result is important, you may rewrite
the history.
First, merge upstream ``develop`` and reset you branch to it. On the branch
in question, run:
.. code-block:: console
$ git merge develop
$ git reset develop
At this point your branch will point to the same commit as develop and
thereby the two are indistinguishable. However, all the files that were
previously modified will stay as such. In other words, you do not lose the
changes you made. Changes can be reviewed by looking at diffs:
.. code-block:: console
$ git status
$ git diff
The next step is to rewrite the history by adding files and creating commits:
.. code-block:: console
$ git add <files_to_be_part_of_commit>
$ git commit --message <descriptive_message>
After all changed files are committed, you can push the branch to your fork
and create a PR:
.. code-block:: console
$ git push origin --set-upstream

View File

@@ -1,7 +1,8 @@
.. _developer_guide:
===============
Developer Guide
=====================
===============
This guide is intended for people who want to work on Spack itself.
If you just want to develop packages, see the :ref:`packaging-guide`.
@@ -11,17 +12,18 @@ It is assumed that you've read the :ref:`basic-usage` and
concepts discussed there. If you're not, we recommend reading those
first.
--------
Overview
-----------------------
--------
Spack is designed with three separate roles in mind:
#. **Users**, who need to install software *without* knowing all the
details about how it is built.
#. **Packagers** who know how a particular software package is
built and encode this information in package files.
#. **Developers** who work on Spack, add new features, and try to
make the jobs of packagers and users easier.
#. **Users**, who need to install software *without* knowing all the
details about how it is built.
#. **Packagers** who know how a particular software package is
built and encode this information in package files.
#. **Developers** who work on Spack, add new features, and try to
make the jobs of packagers and users easier.
Users could be end users installing software in their home directory,
or administrators installing software to a shared directory on a
@@ -41,9 +43,9 @@ specification.
This gets us to the two key concepts in Spack's software design:
#. **Specs**: expressions for describing builds of software, and
#. **Packages**: Python modules that build software according to a
spec.
#. **Specs**: expressions for describing builds of software, and
#. **Packages**: Python modules that build software according to a
spec.
A package is a template for building particular software, and a spec
as a descriptor for one or more instances of that template. Users
@@ -63,74 +65,75 @@ building the software off to the package object. The rest of this
document describes all the pieces that come together to make that
happen.
-------------------
Directory Structure
-------------------------
-------------------
So that you can familiarize yourself with the project, we'll start
with a high level view of Spack's directory structure::
with a high level view of Spack's directory structure:
spack/ <- installation root
bin/
spack <- main spack executable
.. code-block:: none
etc/
spack/ <- Spack config files.
Can be overridden by files in ~/.spack.
spack/ <- installation root
bin/
spack <- main spack executable
var/
spack/ <- build & stage directories
repos/ <- contains package repositories
builtin/ <- pkg repository that comes with Spack
repo.yaml <- descriptor for the builtin repository
packages/ <- directories under here contain packages
etc/
spack/ <- Spack config files.
Can be overridden by files in ~/.spack.
opt/
spack/ <- packages are installed here
var/
spack/ <- build & stage directories
repos/ <- contains package repositories
builtin/ <- pkg repository that comes with Spack
repo.yaml <- descriptor for the builtin repository
packages/ <- directories under here contain packages
cache/ <- saves resources downloaded during installs
lib/
spack/
docs/ <- source for this documentation
env/ <- compiler wrappers for build environment
opt/
spack/ <- packages are installed here
external/ <- external libs included in Spack distro
llnl/ <- some general-use libraries
lib/
spack/
docs/ <- source for this documentation
env/ <- compiler wrappers for build environment
spack/ <- spack module; contains Python code
cmd/ <- each file in here is a spack subcommand
compilers/ <- compiler description files
test/ <- unit test modules
util/ <- common code
external/ <- external libs included in Spack distro
llnl/ <- some general-use libraries
spack/ <- spack module; contains Python code
cmd/ <- each file in here is a spack subcommand
compilers/ <- compiler description files
test/ <- unit test modules
util/ <- common code
Spack is designed so that it could live within a `standard UNIX
directory hierarchy <http://linux.die.net/man/7/hier>`_, so ``lib``,
``var``, and ``opt`` all contain a ``spack`` subdirectory in case
Spack is installed alongside other software. Most of the interesting
parts of Spack live in ``lib/spack``. Files under ``var`` are created
as needed, so there is no ``var`` directory when you initially clone
Spack from the repository.
parts of Spack live in ``lib/spack``.
Spack has *one* directory layout and there is no install process.
version and the source code. Most Python programs don't look like
this (they use distutils, ``setup.py``, etc.) but we wanted to make
Spack *very* easy to use. The simple layout spares users from the
need to install Spack into a Python environment. Many users don't
have write access to a Python installation, and installing an entire
new instance of Python to bootstrap Spack would be very complicated.
Most Python programs don't look like this (they use distutils, ``setup.py``,
etc.) but we wanted to make Spack *very* easy to use. The simple layout
spares users from the need to install Spack into a Python environment.
Many users don't have write access to a Python installation, and installing
an entire new instance of Python to bootstrap Spack would be very complicated.
Users should not have to install install a big, complicated package to
use the thing that's supposed to spare them from the details of big,
complicated packages. The end result is that Spack works out of the
box: clone it and add ``bin`` to your PATH and you're ready to go.
--------------
Code Structure
-------------------------
--------------
This section gives an overview of the various Python modules in Spack,
grouped by functionality.
^^^^^^^^^^^^^^^^^^^^^^^
Package-related modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^^^^^
:mod:`spack.package`
Contains the :class:`Package <spack.package.Package>` class, which
@@ -157,9 +160,9 @@ Package-related modules
decorator, which allows :ref:`multimethods <multimethods>` in
packages.
^^^^^^^^^^^^^^^^^^^^
Spec-related modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^^
:mod:`spack.spec`
Contains :class:`Spec <spack.spec.Spec>` and :class:`SpecParser
@@ -207,9 +210,9 @@ Spec-related modules
Not yet implemented. Should eventually have architecture
descriptions for cross-compiling.
^^^^^^^^^^^^^^^^^
Build environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^
:mod:`spack.stage`
Handles creating temporary directories for builds.
@@ -223,15 +226,17 @@ Build environment
Create more implementations of this to change the hierarchy and
naming scheme in ``$spack_prefix/opt``
^^^^^^^^^^^^^^^^^
Spack Subcommands
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^
:mod:`spack.cmd`
Each module in this package implements a Spack subcommand. See
:ref:`writing commands <writing-commands>` for details.
^^^^^^^^^^
Unit tests
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^
:mod:`spack.test`
Implements Spack's test suite. Add a module and put its name in
@@ -241,78 +246,100 @@ Unit tests
This is a fake package hierarchy used to mock up packages for
Spack's test suite.
^^^^^^^^^^^^^
Other Modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:mod:`spack.globals`
Includes global settings for Spack. the default policy classes for
things like :ref:`temporary space <temp-space>` and
:ref:`concretization <concretization-policies>`.
:mod:`spack.tty`
Basic output functions for all of the messages Spack writes to the
terminal.
:mod:`spack.color`
Implements a color formatting syntax used by ``spack.tty``.
^^^^^^^^^^^^^
:mod:`spack.url`
URL parsing, for deducing names and versions of packages from
tarball URLs.
:mod:`spack.util`
In this package are a number of utility modules for the rest of
Spack.
:mod:`spack.error`
:class:`SpackError <spack.error.SpackError>`, the base class for
Spack's exception hierarchy.
:mod:`llnl.util.tty`
Basic output functions for all of the messages Spack writes to the
terminal.
:mod:`llnl.util.tty.color`
Implements a color formatting syntax used by ``spack.tty``.
:mod:`llnl.util`
In this package are a number of utility modules for the rest of
Spack.
------------
Spec objects
-------------------------
------------
---------------
Package objects
-------------------------
Most spack commands
look something like this:
#. Parse an abstract spec (or specs) from the command line,
#. *Normalize* the spec based on information in package files,
#. *Concretize* the spec according to some customizable policies,
#. Instantiate a package based on the spec, and
#. Call methods (e.g., ``install()``) on the package object.
---------------
Most spack commands look something like this:
#. Parse an abstract spec (or specs) from the command line,
#. *Normalize* the spec based on information in package files,
#. *Concretize* the spec according to some customizable policies,
#. Instantiate a package based on the spec, and
#. Call methods (e.g., ``install()``) on the package object.
The information in Package files is used at all stages in this
process.
Conceptually, packages are overloaded. They contain:
Conceptually, packages are overloaded. They contain
-------------
Stage objects
-------------------------
-------------
.. _writing-commands:
----------------
Writing commands
-------------------------
----------------
----------
Unit tests
-------------------------
----------
------------
Unit testing
-------------------------
------------
------------------
Developer commands
-------------------------
------------------
^^^^^^^^^^^^^
``spack doc``
~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^
^^^^^^^^^^^^^^
``spack test``
~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^
---------
Profiling
---------
Spack has some limited built-in support for profiling, and can report
statistics using standard Python timing tools. To use this feature,
supply ``--profile`` to Spack on the command line, before any subcommands.
.. _spack-p:
^^^^^^^^^^^^^^^^^^^
``spack --profile``
^^^^^^^^^^^^^^^^^^^
``spack --profile`` output looks like this:
.. command-output:: spack --profile graph dyninst
:ellipsis: 25
The bottom of the output shows the top most time consuming functions,
slowest on top. The profiling support is from Python's built-in tool,
`cProfile
<https://docs.python.org/2/library/profile.html#module-cProfile>`_.

View File

@@ -1,27 +1,3 @@
##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
# -*- coding: utf-8 -*-
"""
sphinxcontrib

View File

@@ -1,27 +1,3 @@
##############################################################################
# Copyright (c) 2013, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
# -*- coding: utf-8 -*-
# Copyright (c) 2010, 2011, 2012, Sebastian Wiesner <lunaryorn@gmail.com>
# All rights reserved.

View File

@@ -1,29 +1,32 @@
Feature overview
==================
================
Feature Overview
================
This is a high-level overview of features that make Spack different
from other `package managers
<http://en.wikipedia.org/wiki/Package_management_system>`_ and `port
systems <http://en.wikipedia.org/wiki/Ports_collection>`_.
---------------------------
Simple package installation
----------------------------
---------------------------
Installing the default version of a package is simple. This will install
the latest version of the ``mpileaks`` package and all of its dependencies:
.. code-block:: sh
.. code-block:: console
$ spack install mpileaks
--------------------------------
Custom versions & configurations
-------------------------------------------
--------------------------------
Spack allows installation to be customized. Users can specify the
version, build compiler, compile-time options, and cross-compile
platform, all on the command line.
.. code-block:: sh
.. code-block:: console
# Install a particular version by appending @
$ spack install mpileaks@1.1.2
@@ -31,46 +34,55 @@ platform, all on the command line.
# Specify a compiler (and its version), with %
$ spack install mpileaks@1.1.2 %gcc@4.7.3
# Add special compile-time options with +
# Add special compile-time options by name
$ spack install mpileaks@1.1.2 %gcc@4.7.3 debug=True
# Add special boolean compile-time options with +
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug
# Cross-compile for a different architecture with =
$ spack install mpileaks@1.1.2 =bgqos_0
# Add compiler flags using the conventional names
$ spack install mpileaks@1.1.2 %gcc@4.7.3 cppflags="-O3 -floop-block"
Users can specify as many or few options as they care about. Spack
will fill in the unspecified values with sensible defaults.
# Cross-compile for a different architecture with arch=
$ spack install mpileaks@1.1.2 arch=bgqos_0
Users can specify as many or few options as they care about. Spack
will fill in the unspecified values with sensible defaults. The two listed
syntaxes for variants are identical when the value is boolean.
----------------------
Customize dependencies
-------------------------------------
----------------------
Spack allows *dependencies* of a particular installation to be
customized extensively. Suppose that ``mpileaks`` depends indirectly
on ``libelf`` and ``libdwarf``. Using ``^``, users can add custom
configurations for the dependencies:
.. code-block:: sh
.. code-block:: console
# Install mpileaks and link it with specific versions of libelf and libdwarf
$ spack install mpileaks@1.1.2 %gcc@4.7.3 +debug ^libelf@0.8.12 ^libdwarf@20130729+debug
------------------------
Non-destructive installs
-------------------------------------
------------------------
Spack installs every unique package/dependency configuration into its
own prefix, so new installs will not break existing ones.
-------------------------------
Packages can peacefully coexist
-------------------------------------
-------------------------------
Spack avoids library misconfiguration by using ``RPATH`` to link
dependencies. When a user links a library or runs a program, it is
tied to the dependencies it was built with, so there is no need to
manipulate ``LD_LIBRARY_PATH`` at runtime.
-------------------------
Creating packages is easy
-------------------------------------
-------------------------
To create a new packages, all Spack needs is a URL for the source
archive. The ``spack create`` command will create a boilerplate
@@ -79,7 +91,7 @@ in pure Python.
For example, this command:
.. code-block:: sh
.. code-block:: console
$ spack create http://www.mr511.de/software/libelf-0.8.13.tar.gz
@@ -89,16 +101,26 @@ creates a simple python file:
from spack import *
class Libelf(Package):
homepage = "http://www.example.com/"
"""FIXME: Put a proper description of your package here."""
# FIXME: Add a proper url for your package's homepage here.
homepage = "http://www.example.com"
url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
def install(self, prefix):
configure("--prefix=%s" % prefix)
# FIXME: Add dependencies if required.
# depends_on('foo')
def install(self, spec, prefix):
# FIXME: Modify the configure line to suit your build system here.
configure('--prefix={0}'.format(prefix))
# FIXME: Add logic to build and install here.
make()
make("install")
make('install')
It doesn't take much python coding to get from there to a working
package:

File diff suppressed because it is too large Load Diff

View File

@@ -3,8 +3,9 @@
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
===================
Spack Documentation
=================================
===================
Spack is a package management tool designed to support multiple
versions and configurations of software on a wide variety of platforms
@@ -27,7 +28,7 @@ Get spack from the `github repository
<https://github.com/llnl/spack>`_ and install your first
package:
.. code-block:: sh
.. code-block:: console
$ git clone https://github.com/llnl/spack.git
$ cd spack/bin
@@ -36,23 +37,40 @@ package:
If you're new to spack and want to start using it, see :doc:`getting_started`,
or refer to the full manual below.
Table of Contents
---------------------
.. toctree::
:maxdepth: 2
:caption: Basics
features
getting_started
basic_usage
packaging_guide
workflows
tutorial_sc16
.. toctree::
:maxdepth: 2
:caption: Reference
configuration
config_yaml
build_settings
mirrors
site_configuration
developer_guide
module_file_support
repositories
command_index
package_list
.. toctree::
:maxdepth: 2
:caption: Contributing
contribution_guide
packaging_guide
developer_guide
API Docs <spack>
==================
Indices and tables
==================

View File

@@ -1,7 +1,8 @@
.. _mirrors:
=======
Mirrors
============================
=======
Some sites may not have access to the internet for fetching packages.
These sites will need a local repository of tarballs from which they
@@ -10,27 +11,29 @@ mirror is a URL that points to a directory, either on the local
filesystem or on some server, containing tarballs for all of Spack's
packages.
Here's an example of a mirror's directory structure::
Here's an example of a mirror's directory structure:
mirror/
cmake/
cmake-2.8.10.2.tar.gz
dyninst/
dyninst-8.1.1.tgz
dyninst-8.1.2.tgz
libdwarf/
libdwarf-20130126.tar.gz
libdwarf-20130207.tar.gz
libdwarf-20130729.tar.gz
libelf/
libelf-0.8.12.tar.gz
libelf-0.8.13.tar.gz
libunwind/
libunwind-1.1.tar.gz
mpich/
mpich-3.0.4.tar.gz
mvapich2/
mvapich2-1.9.tgz
.. code-block:: none
mirror/
cmake/
cmake-2.8.10.2.tar.gz
dyninst/
dyninst-8.1.1.tgz
dyninst-8.1.2.tgz
libdwarf/
libdwarf-20130126.tar.gz
libdwarf-20130207.tar.gz
libdwarf-20130729.tar.gz
libelf/
libelf-0.8.12.tar.gz
libelf-0.8.13.tar.gz
libunwind/
libunwind-1.1.tar.gz
mpich/
mpich-3.0.4.tar.gz
mvapich2/
mvapich2-1.9.tgz
The structure is very simple. There is a top-level directory. The
second level directories are named after packages, and the third level
@@ -49,27 +52,16 @@ contains tarballs for each package, named after each package.
not standardize on a particular compression algorithm, because this
would potentially require expanding and re-compressing each archive.
.. _spack-mirror:
.. _cmd-spack-mirror:
----------------
``spack mirror``
----------------------------
----------------
Mirrors are managed with the ``spack mirror`` command. The help for
``spack mirror`` looks like this::
``spack mirror`` looks like this:
$ spack mirror -h
usage: spack mirror [-h] SUBCOMMAND ...
positional arguments:
SUBCOMMAND
create Create a directory to be used as a spack mirror, and fill
it with package archives.
add Add a mirror to Spack.
remove Remove a mirror by name.
list Print out available mirrors to the console.
optional arguments:
-h, --help show this help message and exit
.. command-output:: spack help mirror
The ``create`` command actually builds a mirror by fetching all of its
packages from the internet and checksumming them.
@@ -79,8 +71,9 @@ control the URL(s) from which Spack downloads its packages.
.. _spack-mirror-create:
-----------------------
``spack mirror create``
----------------------------
-----------------------
You can create a mirror using the ``spack mirror create`` command, assuming
you're on a machine where you can access the internet.
@@ -89,8 +82,7 @@ The command will iterate through all of Spack's packages and download
the safe ones into a directory structure like the one above. Here is
what it looks like:
.. code-block:: bash
.. code-block:: console
$ spack mirror create libelf libdwarf
==> Created new mirror in spack-mirror-2014-06-24
@@ -124,25 +116,31 @@ what it looks like:
Once this is done, you can tar up the ``spack-mirror-2014-06-24`` directory and
copy it over to the machine you want it hosted on.
^^^^^^^^^^^^^^^^^^^
Custom package sets
~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^^^^^^^^
Normally, ``spack mirror create`` downloads all the archives it has
checksums for. If you want to only create a mirror for a subset of
packages, you can do that by supplying a list of package specs on the
command line after ``spack mirror create``. For example, this
command::
command:
$ spack mirror create libelf@0.8.12: boost@1.44:
.. code-block:: console
$ spack mirror create libelf@0.8.12: boost@1.44:
Will create a mirror for libelf versions greater than or equal to
0.8.12 and boost versions greater than or equal to 1.44.
^^^^^^^^^^^^
Mirror files
~~~~~~~~~~~~~~~~~~~~~~~
^^^^^^^^^^^^
If you have a *very* large number of packages you want to mirror, you
can supply a file with specs in it, one per line::
can supply a file with specs in it, one per line:
.. code-block:: console
$ cat specs.txt
libdwarf
@@ -150,7 +148,7 @@ can supply a file with specs in it, one per line::
boost@1.44:
boost@1.39.0
...
$ spack mirror create -f specs.txt
$ spack mirror create --file specs.txt
...
This is useful if there is a specific suite of software managed by
@@ -158,59 +156,90 @@ your site.
.. _spack-mirror-add:
--------------------
``spack mirror add``
----------------------------
--------------------
Once you have a mirror, you need to let spack know about it. This is
relatively simple. First, figure out the URL for the mirror. If it's
a file, you can use a file URL like this one::
a file, you can use a file URL like this one:
file:///Users/gamblin2/spack-mirror-2014-06-24
.. code-block:: none
file://~/spack-mirror-2014-06-24
That points to the directory on the local filesystem. If it were on a
web server, you could use a URL like this one:
https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
Spack will use the URL as the root for all of the packages it fetches.
You can tell your Spack installation to use that mirror like this:
.. code-block:: bash
.. code-block:: console
$ spack mirror add local_filesystem file:///Users/gamblin2/spack-mirror-2014-06-24
$ spack mirror add local_filesystem file://~/spack-mirror-2014-06-24
Each mirror has a name so that you can refer to it again later.
.. _spack-mirror-list:
---------------------
``spack mirror list``
----------------------------
---------------------
To see all the mirrors Spack knows about, run ``spack mirror list``::
To see all the mirrors Spack knows about, run ``spack mirror list``:
.. code-block:: console
$ spack mirror list
local_filesystem file:///Users/gamblin2/spack-mirror-2014-06-24
local_filesystem file://~/spack-mirror-2014-06-24
.. _spack-mirror-remove:
-----------------------
``spack mirror remove``
----------------------------
-----------------------
To remove a mirror by name::
To remove a mirror by name, run:
.. code-block:: console
$ spack mirror remove local_filesystem
$ spack mirror list
==> No mirrors configured.
-----------------
Mirror precedence
----------------------------
-----------------
Adding a mirror really adds a line in ``~/.spack/mirrors.yaml``::
Adding a mirror really adds a line in ``~/.spack/mirrors.yaml``:
.. code-block:: yaml
mirrors:
local_filesystem: file:///Users/gamblin2/spack-mirror-2014-06-24
local_filesystem: file://~/spack-mirror-2014-06-24
remote_server: https://example.com/some/web-hosted/directory/spack-mirror-2014-06-24
If you want to change the order in which mirrors are searched for
packages, you can edit this file and reorder the sections. Spack will
search the topmost mirror first and the bottom-most mirror last.
.. _caching:
-------------------
Local Default Cache
-------------------
Spack caches resources that are downloaded as part of installs. The cache is
a valid spack mirror: it uses the same directory structure and naming scheme
as other Spack mirrors (so it can be copied anywhere and referenced with a URL
like other mirrors). The mirror is maintained locally (within the Spack
installation directory) at :file:`var/spack/cache/`. It is always enabled (and
is always searched first when attempting to retrieve files for an installation)
but can be cleared with :ref:`purge <cmd-spack-purge>`; the cache directory can also
be deleted manually without issue.
Caching includes retrieved tarball archives and source control repositories, but
only resources with an associated digest or commit ID (e.g. a revision number
for SVN) will be cached.

View File

@@ -0,0 +1,682 @@
.. _modules:
=======
Modules
=======
The use of module systems to manage user environment in a controlled way
is a common practice at HPC centers that is often embraced also by individual
programmers on their development machines. To support this common practice
Spack provides integration with `Environment Modules
<http://modules.sourceforge.net/>`_ , `LMod
<http://lmod.readthedocs.io/en/latest/>`_ and `Dotkit <https://computing.llnl.gov/?set=jobs&page=dotkit>`_ by:
* generating module files after a successful installation
* providing commands that can leverage the spec syntax to manipulate modules
In the following you will see how to activate shell support for commands in Spack
that requires it, and discover what benefits this may bring with respect to deal
directly with automatically generated module files.
.. note::
If your machine does not already have a module system installed,
we advise you to use either Environment Modules or LMod. See :ref:`InstallEnvironmentModules`
for more details.
.. _shell-support:
-------------
Shell support
-------------
You can enable shell support by sourcing the appropriate setup file
in the ``$SPACK_ROOT/share/spack`` directory.
For ``bash`` or ``ksh`` users:
.. code-block:: console
$ . ${SPACK_ROOT}/share/spack/setup-env.sh
For ``csh`` and ``tcsh`` instead:
.. code-block:: console
$ source $SPACK_ROOT/share/spack/setup-env.csh
.. note::
You can put the source line in your ``.bashrc`` or ``.cshrc`` to
have Spack's shell support available on the command line at any login.
----------------------------
Using module files via Spack
----------------------------
If you have shell support enabled you should be able to run either
``module avail`` or ``use -l spack`` to see what module/dotkit files have
been installed. Here is sample output of those programs, showing lots
of installed packages.
.. code-block:: console
$ module avail
------- ~/spack/share/spack/modules/linux-debian7-x86_64 --------
adept-utils@1.0%gcc@4.4.7-5adef8da libelf@0.8.13%gcc@4.4.7
automaded@1.0%gcc@4.4.7-d9691bb0 libelf@0.8.13%intel@15.0.0
boost@1.55.0%gcc@4.4.7 mpc@1.0.2%gcc@4.4.7-559607f5
callpath@1.0.1%gcc@4.4.7-5dce4318 mpfr@3.1.2%gcc@4.4.7
dyninst@8.1.2%gcc@4.4.7-b040c20e mpich@3.0.4%gcc@4.4.7
gcc@4.9.1%gcc@4.4.7-93ab98c5 mpich@3.0.4%gcc@4.9.0
gmp@6.0.0a%gcc@4.4.7 mrnet@4.1.0%gcc@4.4.7-72b7881d
graphlib@2.0.0%gcc@4.4.7 netgauge@2.4.6%gcc@4.9.0-27912b7b
launchmon@1.0.1%gcc@4.4.7 stat@2.1.0%gcc@4.4.7-51101207
libNBC@1.1.1%gcc@4.9.0-27912b7b sundials@2.5.0%gcc@4.9.0-27912b7b
libdwarf@20130729%gcc@4.4.7-b52fac98
.. code-block:: console
$ use -l spack
spack ----------
adept-utils@1.0%gcc@4.4.7-5adef8da - adept-utils @1.0
automaded@1.0%gcc@4.4.7-d9691bb0 - automaded @1.0
boost@1.55.0%gcc@4.4.7 - boost @1.55.0
callpath@1.0.1%gcc@4.4.7-5dce4318 - callpath @1.0.1
dyninst@8.1.2%gcc@4.4.7-b040c20e - dyninst @8.1.2
gmp@6.0.0a%gcc@4.4.7 - gmp @6.0.0a
libNBC@1.1.1%gcc@4.9.0-27912b7b - libNBC @1.1.1
libdwarf@20130729%gcc@4.4.7-b52fac98 - libdwarf @20130729
libelf@0.8.13%gcc@4.4.7 - libelf @0.8.13
libelf@0.8.13%intel@15.0.0 - libelf @0.8.13
mpc@1.0.2%gcc@4.4.7-559607f5 - mpc @1.0.2
mpfr@3.1.2%gcc@4.4.7 - mpfr @3.1.2
mpich@3.0.4%gcc@4.4.7 - mpich @3.0.4
mpich@3.0.4%gcc@4.9.0 - mpich @3.0.4
netgauge@2.4.6%gcc@4.9.0-27912b7b - netgauge @2.4.6
sundials@2.5.0%gcc@4.9.0-27912b7b - sundials @2.5.0
The names here should look familiar, they're the same ones from
``spack find``. You *can* use the names here directly. For example,
you could type either of these commands to load the callpath module:
.. code-block:: console
$ use callpath@1.0.1%gcc@4.4.7-5dce4318
.. code-block:: console
$ module load callpath@1.0.1%gcc@4.4.7-5dce4318
.. _cmd-spack-load:
^^^^^^^^^^^^^^^^^^^^^^^
``spack load / unload``
^^^^^^^^^^^^^^^^^^^^^^^
Neither of these is particularly pretty, easy to remember, or
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:
========================= ==========================
Environment Modules Dotkit
========================= ==========================
``spack load <spec>`` ``spack use <spec>``
``spack unload <spec>`` ``spack unuse <spec>``
========================= ==========================
And you can use the same shortened names you use everywhere else in
Spack. For example, this will add the ``mpich`` package built with
``gcc`` to your path:
.. code-block:: console
$ spack install mpich %gcc@4.4.7
# ... wait for install ...
$ spack use mpich %gcc@4.4.7
Prepending: mpich@3.0.4%gcc@4.4.7 (ok)
$ which mpicc
~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4/bin/mpicc
Or, similarly with modules, you could type:
.. code-block:: console
$ spack load mpich %gcc@4.4.7
These commands will add appropriate directories to your ``PATH``,
``MANPATH``, ``CPATH``, and ``LD_LIBRARY_PATH``. When you no longer
want to use a package, you can type unload or unuse similarly:
.. code-block:: console
$ spack unload mpich %gcc@4.4.7 # modules
$ spack unuse mpich %gcc@4.4.7 # dotkit
.. note::
These ``use``, ``unuse``, ``load``, and ``unload`` subcommands are
only available if you have enabled Spack's shell support *and* you
have dotkit or modules installed on your machine.
^^^^^^^^^^^^^^^^^^^^^^
Ambiguous module names
^^^^^^^^^^^^^^^^^^^^^^
If a spec used with load/unload or use/unuse is ambiguous (i.e. more
than one installed package matches it), then Spack will warn you:
.. code-block:: console
$ spack load libelf
==> Error: Multiple matches for spec libelf. Choose one:
libelf@0.8.13%gcc@4.4.7 arch=linux-debian7-x86_64
libelf@0.8.13%intel@15.0.0 arch=linux-debian7-x86_64
You can either type the ``spack load`` command again with a fully
qualified argument, or you can add just enough extra constraints to
identify one package. For example, above, the key differentiator is
that one ``libelf`` is built with the Intel compiler, while the other
used ``gcc``. You could therefore just type:
.. code-block:: console
$ spack load libelf %intel
To identify just the one built with the Intel compiler.
.. _extensions:
.. _cmd-spack-module-loads:
^^^^^^^^^^^^^^^^^^^^^^
``spack module loads``
^^^^^^^^^^^^^^^^^^^^^^
In some cases, it is desirable to load not just a module, but also all
the modules it depends on. This is not required for most modules
because Spack builds binaries with RPATH support. However, not all
packages use RPATH to find their dependencies: this can be true in
particular for Python extensions, which are currently *not* built with
RPATH.
Scripts to load modules recursively may be made with the command:
.. code-block:: console
$ spack module loads --dependencies <spec>
An equivalent alternative is:
.. code-block :: console
$ source <( spack module loads --dependencies <spec> )
.. warning::
The ``spack load`` command does not currently accept the
``--dependencies`` flag. Use ``spack module loads`` instead, for
now.
.. See #1662
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Module Commands for Shell Scripts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Although Spack is flexible, the ``module`` command is much faster.
This could become an issue when emitting a series of ``spack load``
commands inside a shell script. By adding the ``--shell`` flag,
``spack module find`` may also be used to generate code that can be
cut-and-pasted into a shell script. For example:
.. code-block:: console
$ spack module loads --dependencies py-numpy git
# bzip2@1.0.6%gcc@4.9.3=linux-x86_64
module load bzip2-1.0.6-gcc-4.9.3-ktnrhkrmbbtlvnagfatrarzjojmkvzsx
# ncurses@6.0%gcc@4.9.3=linux-x86_64
module load ncurses-6.0-gcc-4.9.3-kaazyneh3bjkfnalunchyqtygoe2mncv
# zlib@1.2.8%gcc@4.9.3=linux-x86_64
module load zlib-1.2.8-gcc-4.9.3-v3ufwaahjnviyvgjcelo36nywx2ufj7z
# sqlite@3.8.5%gcc@4.9.3=linux-x86_64
module load sqlite-3.8.5-gcc-4.9.3-a3eediswgd5f3rmto7g3szoew5nhehbr
# readline@6.3%gcc@4.9.3=linux-x86_64
module load readline-6.3-gcc-4.9.3-se6r3lsycrwxyhreg4lqirp6xixxejh3
# python@3.5.1%gcc@4.9.3=linux-x86_64
module load python-3.5.1-gcc-4.9.3-5q5rsrtjld4u6jiicuvtnx52m7tfhegi
# py-setuptools@20.5%gcc@4.9.3=linux-x86_64
module load py-setuptools-20.5-gcc-4.9.3-4qr2suj6p6glepnedmwhl4f62x64wxw2
# py-nose@1.3.7%gcc@4.9.3=linux-x86_64
module load py-nose-1.3.7-gcc-4.9.3-pwhtjw2dvdvfzjwuuztkzr7b4l6zepli
# openblas@0.2.17%gcc@4.9.3+shared=linux-x86_64
module load openblas-0.2.17-gcc-4.9.3-pw6rmlom7apfsnjtzfttyayzc7nx5e7y
# py-numpy@1.11.0%gcc@4.9.3+blas+lapack=linux-x86_64
module load py-numpy-1.11.0-gcc-4.9.3-mulodttw5pcyjufva4htsktwty4qd52r
# curl@7.47.1%gcc@4.9.3=linux-x86_64
module load curl-7.47.1-gcc-4.9.3-ohz3fwsepm3b462p5lnaquv7op7naqbi
# autoconf@2.69%gcc@4.9.3=linux-x86_64
module load autoconf-2.69-gcc-4.9.3-bkibjqhgqm5e3o423ogfv2y3o6h2uoq4
# cmake@3.5.0%gcc@4.9.3~doc+ncurses+openssl~qt=linux-x86_64
module load cmake-3.5.0-gcc-4.9.3-x7xnsklmgwla3ubfgzppamtbqk5rwn7t
# expat@2.1.0%gcc@4.9.3=linux-x86_64
module load expat-2.1.0-gcc-4.9.3-6pkz2ucnk2e62imwakejjvbv6egncppd
# git@2.8.0-rc2%gcc@4.9.3+curl+expat=linux-x86_64
module load git-2.8.0-rc2-gcc-4.9.3-3bib4hqtnv5xjjoq5ugt3inblt4xrgkd
The script may be further edited by removing unnecessary modules.
^^^^^^^^^^^^^^^
Module Prefixes
^^^^^^^^^^^^^^^
On some systems, modules are automatically prefixed with a certain
string; ``spack module loads`` needs to know about that prefix when it
issues ``module load`` commands. Add the ``--prefix`` option to your
``spack module loads`` commands if this is necessary.
For example, consider the following on one system:
.. code-block:: console
$ module avail
linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
$ spack module loads antlr # WRONG!
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load antlr-2.7.7-gcc-5.3.0-bdpl46y
$ spack module loads --prefix linux-SuSE11-x86_64/ antlr
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
----------------------------
Auto-generating Module Files
----------------------------
Module files are generated by post-install hooks after the successful
installation of a package. The following table summarizes the essential
information associated with the different file formats
that can be generated by Spack:
+-----------------------------+--------------------+-------------------------------+----------------------+
| | **Hook name** | **Default root directory** | **Compatible tools** |
+=============================+====================+===============================+======================+
| **Dotkit** | ``dotkit`` | share/spack/dotkit | DotKit |
+-----------------------------+--------------------+-------------------------------+----------------------+
| **TCL - Non-Hierarchical** | ``tcl`` | share/spack/modules | Env. Modules/LMod |
+-----------------------------+--------------------+-------------------------------+----------------------+
| **Lua - Hierarchical** | ``lmod`` | share/spack/lmod | LMod |
+-----------------------------+--------------------+-------------------------------+----------------------+
Though Spack ships with sensible defaults for the generation of module files,
one can customize many aspects of it to accommodate package or site specific needs.
These customizations are enabled by either:
1. overriding certain callback APIs in the Python packages
2. writing specific rules in the ``modules.yaml`` configuration file
The former method fits best cases that are site independent, e.g. injecting variables
from language interpreters into their extensions. The latter instead permits to
fine tune the content, naming and creation of module files to meet site specific conventions.
^^^^^^^^^^^^^^^^^^^^
``Package`` file API
^^^^^^^^^^^^^^^^^^^^
There are two methods that can be overridden in any ``package.py`` to affect the
content of generated module files. The first one is:
.. code-block:: python
def setup_environment(self, spack_env, run_env):
"""Set up the compile and runtime environments for a package."""
pass
and can alter the content of *the same package where it is overridden*
by adding actions to ``run_env``. The second method is:
.. 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
and has similar effects on module file of dependees. Even in this case
``run_env`` must be filled with the desired list of environment modifications.
.. note::
The ``r`` package and callback APIs
A typical example in which overriding both methods prove to be useful
is given by the ``r`` package. This package installs libraries and headers
in non-standard locations and it is possible to prepend the appropriate directory
to the corresponding environment variables:
================== =================================
LIBRARY_PATH ``self.prefix/rlib/R/lib``
LD_LIBRARY_PATH ``self.prefix/rlib/R/lib``
CPATH ``self.prefix/rlib/R/include``
================== =================================
with the following snippet:
.. literalinclude:: ../../../var/spack/repos/builtin/packages/r/package.py
:pyobject: R.setup_environment
The ``r`` package also knows which environment variable should be modified
to make language extensions provided by other packages available, and modifies
it appropriately in the override of the second method:
.. literalinclude:: ../../../var/spack/repos/builtin/packages/r/package.py
:lines: 128-129,146-151
.. _modules-yaml:
---------------------------------
Configuration in ``modules.yaml``
---------------------------------
The name of the configuration file that controls module generation behavior
is ``modules.yaml``. The default configuration:
.. literalinclude:: ../../../etc/spack/defaults/modules.yaml
:language: yaml
activates generation for ``tcl`` and ``dotkit`` module files and inspects
the installation folder of each package for the presence of a set of subdirectories
(``bin``, ``man``, ``share/man``, etc.). If any is found its full path is prepended
to the environment variables listed below the folder name.
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Activation of other systems
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Any other module file generator shipped with Spack can be activated adding it to the
list under the ``enable`` key in the module file. Currently the only generator that
is not activated by default is ``lmod``, which produces hierarchical lua module files.
For each module system that can be enabled a finer configuration is possible.
Directives that are aimed at driving the generation of a particular type of module files
should be listed under a top level key that corresponds to the generator being
customized:
.. code-block:: yaml
modules:
enable:
- tcl
- dotkit
- lmod
tcl:
# contains environment modules specific customizations
dotkit:
# contains dotkit specific customizations
lmod:
# contains lmod specific customizations
All these module sections allow for both:
1. global directives that usually affect the whole layout of modules or the naming scheme
2. directives that affect only a set of packages and modify their content
For the latter point in particular it is possible to use anonymous specs
to select an appropriate set of packages on which the modifications should be applied.
.. _anonymous_specs:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Selection by anonymous specs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The procedure to select packages using anonymous specs is a natural
extension of using them to install packages, the only difference being
that specs in this case **are not required to have a root package**.
Consider for instance this snippet:
.. code-block:: yaml
modules:
tcl:
# The keyword `all` selects every package
all:
environment:
set:
BAR: 'bar'
# This anonymous spec selects any package that
# depends on openmpi. The double colon at the
# end clears the set of rules that matched so far.
^openmpi::
environment:
set:
BAR: 'baz'
# Selects any zlib package
zlib:
environment:
prepend_path:
LD_LIBRARY_PATH: 'foo'
# Selects zlib compiled with gcc@4.8
zlib%gcc@4.8:
environment:
unset:
- FOOBAR
During module file generation, the configuration above will instruct
Spack to set the environment variable ``BAR=bar`` for every module,
unless the associated spec satisfies ``^openmpi`` in which case ``BAR=baz``.
In addition in any spec that satisfies ``zlib`` the value ``foo`` will be
prepended to ``LD_LIBRARY_PATH`` and in any spec that satisfies ``zlib%gcc@4.8``
the variable ``FOOBAR`` will be unset.
.. 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.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Blacklist or whitelist the generation of specific module files
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Anonymous specs are also used to prevent module files from being written or
to force them to be written. A common case for that at HPC centers is to hide
from users all of the software that needs to be built with system compilers.
Suppose for instance to have ``gcc@4.4.7`` provided by your system. Then
with a configuration file like this one:
.. 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
you will skip the generation of module files for any package that
is compiled with ``gcc@4.4.7``, with the exception of any ``gcc``
or any ``llvm`` installation.
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Customize the naming scheme
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The names of environment modules generated by spack are not always easy to
fully comprehend due to the long hash in the name. There are two module
configuration options to help with that. The first is a global setting to
adjust the hash length. It can be set anywhere from 0 to 32 and has a default
length of 7. This is the representation of the hash in the module file name and
does not affect the size of the package hash. Be aware that the smaller the
hash length the more likely naming conflicts will occur. The following snippet
shows how to set hash length in the module file names:
.. code-block:: yaml
modules:
tcl:
hash_length: 7
To help make module names more readable, and to help alleviate name conflicts
with a short hash, one can use the ``suffixes`` option in the modules
configuration file. This option will add strings to modules that match a spec.
For instance, the following config options,
.. code-block:: yaml
modules:
tcl:
all:
suffixes:
^python@2.7.12: 'python-2.7.12'
^openblas: 'openblas'
will add a ``python-2.7.12`` version string to any packages compiled with
python matching the spec, ``python@2.7.12``. This is useful to know which
version of python a set of python extensions is associated with. Likewise, the
``openblas`` string is attached to any program that has openblas in the spec,
most likely via the ``+blas`` variant specification.
.. note::
TCL module files
A modification that is specific to ``tcl`` module files is the possibility
to change the naming scheme of modules.
.. code-block:: yaml
modules:
tcl:
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
all:
conflict: ['${PACKAGE}', 'intel/14.0.1']
will create module files that will conflict with ``intel/14.0.1`` and with the
base directory of the same module, effectively preventing the possibility to
load two or more versions of the same software at the same time. The tokens
that are available for use in this directive are the same understood by
the ``Spec.format`` method.
.. note::
LMod hierarchical module files
When ``lmod`` is activated Spack will generate a set of hierarchical lua module
files that are understood by LMod. The generated hierarchy always contains the
three layers ``Core`` / ``Compiler`` / ``MPI`` but can be further extended to
any other virtual dependency present in Spack. A case that could be useful in
practice is for instance:
.. code-block:: yaml
modules:
enable:
- lmod
lmod:
core_compilers: ['gcc@4.8']
hierarchical_scheme: ['lapack']
that will generate a hierarchy in which the ``lapack`` layer is treated as the ``mpi``
one. This allows a site to build the same libraries or applications against different
implementations of ``mpi`` and ``lapack``, and let LMod switch safely from one to the
other.
.. warning::
Deep hierarchies and ``lmod spider``
For hierarchies that are deeper than three layers ``lmod spider`` may have some issues.
See `this discussion on the LMod project <https://github.com/TACC/Lmod/issues/114>`_.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Filter out environment modifications
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Modifications to certain environment variables in module files are generated by
default, for instance by prefix inspections in the default configuration file.
There are cases though where some of these modifications are unwanted.
Suppose you need to avoid having ``CPATH`` and ``LIBRARY_PATH``
modified by your ``dotkit`` modules:
.. code-block:: yaml
modules:
dotkit:
all:
filter:
# Exclude changes to any of these variables
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
The configuration above will generate dotkit module files that will not contain
modifications to either ``CPATH`` or ``LIBRARY_PATH`` and environment module
files that instead will contain these modifications.
^^^^^^^^^^^^^^^^^^^^^
Autoload dependencies
^^^^^^^^^^^^^^^^^^^^^
In some cases it can be useful to have module files directly autoload
their dependencies. This may be the case for Python extensions, if not
activated using ``spack activate``:
.. code-block:: yaml
modules:
tcl:
^python:
autoload: 'direct'
The configuration file above will produce module files that will
automatically load their direct dependencies. The allowed values for the
``autoload`` statement are either ``none``, ``direct`` or ``all``.
.. note::
TCL prerequisites
In the ``tcl`` section of the configuration file it is possible to use
the ``prerequisites`` directive that accepts the same values as
``autoload``. It will produce module files that have a ``prereq``
statement instead of automatically loading other modules.
------------------------
Maintaining Module Files
------------------------
Spack not only provides great flexibility in the generation of module files
and in the customization of both their layout and content, but also ships with
a tool to ease the burden of their maintenance in production environments.
This tool is the ``spack module`` command:
.. command-output:: spack module --help
.. _cmd-spack-module-refresh:
^^^^^^^^^^^^^^^^^^^^^^^^
``spack module refresh``
^^^^^^^^^^^^^^^^^^^^^^^^
The command that regenerates module files to update their content or
their layout is ``module refresh``:
.. command-output:: spack module refresh --help
A set of packages can be selected using anonymous specs for the optional
``constraint`` positional argument. The argument ``--module-type`` identifies
the type of module files to refresh. Optionally the entire tree can be deleted
before regeneration if the change in layout is radical.
.. _cmd-spack-module-rm:
^^^^^^^^^^^^^^^^^^^
``spack module rm``
^^^^^^^^^^^^^^^^^^^
If instead what you need is just to delete a few module files, then the right
command is ``module rm``:
.. command-output:: spack module rm --help
.. note::
We care about your module files!
Every modification done on modules
that are already existing will ask for a confirmation by default. If
the command is used in a script it is possible though to pass the
``-y`` argument, that will skip this safety measure.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,456 @@
.. _repositories:
=============================
Package Repositories
=============================
Spack comes with over 1,000 built-in package recipes in
``var/spack/repos/builtin/``. This is a **package repository** -- a
directory that Spack searches when it needs to find a package by name.
You may need to maintain packages for restricted, proprietary or
experimental software separately from the built-in repository. Spack
allows you to configure local repositories using either the
``repos.yaml`` or the ``spack repo`` command.
A package repository a directory structured like this::
repo/
repo.yaml
packages/
hdf5/
package.py
mpich/
package.py
mpich-1.9-bugfix.patch
trilinos/
package.py
...
The top-level ``repo.yaml`` file contains configuration metadata for the
repository, and the ``packages`` directory contains subdirectories for
each package in the repository. Each package directory contains a
``package.py`` file and any patches or other files needed to build the
package.
Package repositories allow you to:
1. Maintain your own packages separately from Spack;
2. Share your packages (e.g. by hosting them in a shared file system),
without committing them to the built-in Spack package repository; and
3. Override built-in Spack packages with your own implementation.
Packages in a separate repository can also *depend on* built-in Spack
packages. So, you can leverage existing recipes without re-implementing
them in your own repository.
---------------------
``repos.yaml``
---------------------
Spack uses the ``repos.yaml`` file in ``~/.spack`` (and :ref:`elsewhere
<configuration>`) to find repositories. Note that the ``repos.yaml``
configuration file is distinct from the ``repo.yaml`` file in each
repository. For more on the YAML format, and on how configuration file
precedence works in Spack, see :ref:`configuration <configuration>`.
The default ``etc/spack/defaults/repos.yaml`` file looks like this:
.. code-block:: yaml
repos:
- $spack/var/spack/repos/builtin
The file starts with ``repos:`` and contains a single ordered list of
paths to repositories. Each path is on a separate line starting with
``-``. You can add a repository by inserting another path into the list:
.. code-block:: yaml
repos:
- /opt/local-repo
- $spack/var/spack/repos/builtin
When Spack interprets a spec, e.g. ``mpich`` in ``spack install mpich``,
it searches these repositories in order (first to last) to resolve each
package name. In this example, Spack will look for the following
packages and use the first valid file:
1. ``/opt/local-repo/packages/mpich/package.py``
2. ``$spack/var/spack/repos/builtin/packages/mpich/package.py``
.. note::
Currently, Spack can only use repositories in the file system. We plan
to eventually support URLs in ``repos.yaml``, so that you can easily
point to remote package repositories, but that is not yet implemented.
---------------------
Namespaces
---------------------
Every repository in Spack has an associated **namespace** defined in its
top-level ``repo.yaml`` file. If you look at
``var/spack/repos/builtin/repo.yaml`` in the built-in repository, you'll
see that its namespace is ``builtin``:
.. code-block:: console
$ cat var/spack/repos/builtin/repo.yaml
repo:
namespace: builtin
Spack records the repository namespace of each installed package. For
example, if you install the ``mpich`` package from the ``builtin`` repo,
Spack records its fully qualified name as ``builtin.mpich``. This
accomplishes two things:
1. You can have packages with the same name from different namespaces
installed at once.
1. You can easily determine which repository a package came from after it
is installed (more :ref:`below <namespace-example>`).
.. note::
It may seem redundant for a repository to have both a namespace and a
path, but repository *paths* may change over time, or, as mentioned
above, a locally hosted repository path may eventually be hosted at
some remote URL.
Namespaces are designed to allow *package authors* to associate a
unique identifier with their packages, so that the package can be
identified even if the repository moves. This is why the namespace is
determined by the ``repo.yaml`` file in the repository rather than the
local ``repos.yaml`` configuration: the *repository maintainer* sets
the name.
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Uniqueness
^^^^^^^^^^^^^^^^^^^^^^^^^^^
You should choose a namespace that uniquely identifies your package
repository. For example, if you make a repository for packages written
by your organization, you could use your organization's name. You can
also nest namespaces using periods, so you could identify a repository by
a sub-organization. For example, LLNL might use a namespace for its
internal repositories like ``llnl``. Packages from the Physical & Life
Sciences directorate (PLS) might use the ``llnl.pls`` namespace, and
packages created by the Computation directorate might use ``llnl.comp``.
Spack cannot ensure that every repository is named uniquely, but it will
prevent you from registering two repositories with the same namespace at
the same time. If you try to add a repository that has the same name as
an existing one, e.g. ``builtin``, Spack will print a warning message.
.. _namespace-example:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Namespace example
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Suppose that LLNL maintains its own version of ``mpich``, separate from
Spack's built-in ``mpich`` package, and suppose you've installed both
LLNL's and Spack's ``mpich`` packages. If you just use ``spack find``,
you won't see a difference between these two packages:
.. code-block:: console
$ spack find
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
mpich@3.2 mpich@3.2
However, if you use ``spack find -N``, Spack will display the packages
with their namespaces:
.. code-block:: console
$ spack find -N
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
builtin.mpich@3.2 llnl.comp.mpich@3.2
Now you know which one is LLNL's special version, and which one is the
built-in Spack package. As you might guess, packages that are identical
except for their namespace will still have different hashes:
.. code-block:: console
$ spack find -lN
==> 2 installed packages.
-- linux-rhel6-x86_64 / gcc@4.4.7 -------------
c35p3gc builtin.mpich@3.2 itoqmox llnl.comp.mpich@3.2
All Spack commands that take a package :ref:`spec <sec-specs>` can also
accept a fully qualified spec with a namespace. This means you can use
the namespace to be more specific when designating, e.g., which package
you want to uninstall:
.. code-block:: console
spack uninstall llnl.comp.mpich
----------------------------
Overriding built-in packages
----------------------------
Spack's search semantics mean that you can make your own implementation
of a built-in Spack package (like ``mpich``), put it in a repository, and
use it to override the built-in package. As long as the repository
containing your ``mpich`` is earlier any other in ``repos.yaml``, any
built-in package that depends on ``mpich`` will be use the one in your
repository.
Suppose you have three repositories: the builtin Spack repo
(``builtin``), a shared repo for your institution (e.g., ``llnl``), and a
repo containing your own prototype packages (``proto``). Suppose they
contain packages as follows:
+--------------+------------------------------------+-----------------------------+
| Namespace | Path to repo | Packages |
+==============+====================================+=============================+
| ``proto`` | ``~/proto`` | ``mpich`` |
+--------------+------------------------------------+-----------------------------+
| ``llnl`` | ``/usr/local/llnl`` | ``hdf5`` |
+--------------+------------------------------------+-----------------------------+
| ``builtin`` | ``$spack/var/spack/repos/builtin`` | ``mpich``, ``hdf5``, others |
+--------------+------------------------------------+-----------------------------+
Suppose that ``hdf5`` depends on ``mpich``. You can override the
built-in ``hdf5`` by adding the ``llnl`` repo to ``repos.yaml``:
.. code-block:: yaml
repos:
- /usr/local/llnl
- $spack/var/spack/repos/builtin
``spack install hdf5`` will install ``llnl.hdf5 ^builtin.mpich``.
If, instead, ``repos.yaml`` looks like this:
.. code-block:: yaml
repos:
- ~/proto
- /usr/local/llnl
- $spack/var/spack/repos/builtin
``spack install hdf5`` will install ``llnl.hdf5 ^proto.mpich``.
Any unqualified package name will be resolved by searching ``repos.yaml``
from the first entry to the last. You can force a particular
repository's package by using a fully qualified name. For example, if
your ``repos.yaml`` is as above, and you want ``builtin.mpich`` instead
of ``proto.mpich``, you can write::
spack install hdf5 ^builtin.mpich
which will install ``llnl.hdf5 ^builtin.mpich``.
Similarly, you can force the ``builtin.hdf5`` like this::
spack install builtin.hdf5 ^builtin.mpich
This will not search ``repos.yaml`` at all, as the ``builtin`` repo is
specified in both cases. It will install ``builtin.hdf5
^builtin.mpich``.
If you want to see which repositories will be used in a build *before*
you install it, you can use ``spack spec -N``:
.. code-block:: console
$ spack spec -N hdf5
Input spec
--------------------------------
hdf5
Normalized
--------------------------------
hdf5
^zlib@1.1.2:
Concretized
--------------------------------
builtin.hdf5@1.10.0-patch1%clang@7.0.2-apple+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=darwin-elcapitan-x86_64
^builtin.openmpi@2.0.1%clang@7.0.2-apple~mxm~pmi~psm~psm2~slurm~sqlite3~thread_multiple~tm~verbs+vt arch=darwin-elcapitan-x86_64
^builtin.hwloc@1.11.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
^builtin.libpciaccess@0.13.4%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
^builtin.libtool@2.4.6%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
^builtin.m4@1.4.17%clang@7.0.2-apple+sigsegv arch=darwin-elcapitan-x86_64
^builtin.libsigsegv@2.10%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
^builtin.pkg-config@0.29.1%clang@7.0.2-apple+internal_glib arch=darwin-elcapitan-x86_64
^builtin.util-macros@1.19.0%clang@7.0.2-apple arch=darwin-elcapitan-x86_64
^builtin.zlib@1.2.8%clang@7.0.2-apple+pic arch=darwin-elcapitan-x86_64
.. warning::
You *can* use a fully qualified package name in a ``depends_on``
directive in a ``package.py`` file, like so::
depends_on('proto.hdf5')
This is *not* recommended, as it makes it very difficult for
multiple repos to be composed and shared. A ``package.py`` like this
will fail if the ``proto`` repository is not registered in
``repos.yaml``.
.. _cmd-spack-repo:
--------------------------
``spack repo``
--------------------------
Spack's :ref:`configuration system <configuration>` allows repository
settings to come from ``repos.yaml`` files in many locations. If you
want to see the repositories registered as a result of all configuration
files, use ``spack repo list``.
^^^^^^^^^^^^^^^^^^^
``spack repo list``
^^^^^^^^^^^^^^^^^^^
.. code-block:: console
$ spack repo list
==> 2 package repositories.
myrepo ~/myrepo
builtin ~/spack/var/spack/repos/builtin
Each repository is listed with its associated namespace. To get the raw,
merged YAML from all configuration files, use ``spack config get repos``:
.. code-block:: console
$ spack config get repos
repos:srepos:
- ~/myrepo
- $spack/var/spack/repos/builtin
mNote that, unlike ``spack repo list``, this does not include the
namespace, which is read from each repo's ``repo.yaml``.
^^^^^^^^^^^^^^^^^^^^^
``spack repo create``
^^^^^^^^^^^^^^^^^^^^^
To make your own repository, you don't need to construct a directory
yourself; you can use the ``spack repo create`` command.
.. code-block:: console
$ spack repo create myrepo
==> Created repo with namespace 'myrepo'.
==> To register it with spack, run this command:
spack repo add ~/myrepo
$ ls myrepo
packages/ repo.yaml
$ cat myrepo/repo.yaml
repo:
namespace: 'myrepo'
By default, the namespace of a new repo matches its directory's name.
You can supply a custom namespace with a second argument, e.g.:
.. code-block:: console
$ spack repo create myrepo llnl.comp
==> Created repo with namespace 'llnl.comp'.
==> To register it with spack, run this command:
spack repo add ~/myrepo
$ cat myrepo/repo.yaml
repo:
namespace: 'llnl.comp'
^^^^^^^^^^^^^^^^^^
``spack repo add``
^^^^^^^^^^^^^^^^^^
Once your repository is created, you can register it with Spack with
``spack repo add``:
.. code-block:: console
$ spack repo add ./myrepo
==> Added repo with namespace 'llnl.comp'.
$ spack repo list
==> 2 package repositories.
llnl.comp ~/myrepo
builtin ~/spack/var/spack/repos/builtin
This simply adds the repo to your ``repos.yaml`` file.
Once a repository is registered like this, you should be able to see its
packages' names in the output of ``spack list``, and you should be able
to build them using ``spack install <name>`` as you would with any
built-in package.
^^^^^^^^^^^^^^^^^^^^^
``spack repo remove``
^^^^^^^^^^^^^^^^^^^^^
You can remove an already-registered repository with ``spack repo rm``.
This will work whether you pass the repository's namespace *or* its
path.
By namespace:
.. code-block:: console
$ spack repo rm llnl.comp
==> Removed repository ~/myrepo with namespace 'llnl.comp'.
$ spack repo list
==> 1 package repository.
builtin ~/spack/var/spack/repos/builtin
By path:
.. code-block:: console
$ spack repo rm ~/myrepo
==> Removed repository ~/myrepo
$ spack repo list
==> 1 package repository.
builtin ~/spack/var/spack/repos/builtin
--------------------------------
Repo namespaces and Python
--------------------------------
You may have noticed that namespace notation for repositories is similar
to the notation for namespaces in Python. As it turns out, you *can*
treat Spack repositories like Python packages; this is how they are
implemented.
You could, for example, extend a ``builtin`` package in your own
repository:
.. code-block:: python
from spack.pkg.builtin.mpich import Mpich
class MyPackage(Mpich):
...
Spack repo namespaces are actually Python namespaces tacked on under
``spack.pkg``. The search semantics of ``repos.yaml`` are actually
implemented using Python's built-in `sys.path
<https://docs.python.org/2/library/sys.html#sys.path>`_ search. The
:py:mod:`spack.repository` module implements a custom `Python importer
<https://docs.python.org/2/library/imp.html>`_.
.. warning::
The mechanism for extending packages is not yet extensively tested,
and extending packages across repositories imposes inter-repo
dependencies, which may be hard to manage. Use this feature at your
own risk, but let us know if you have a use case for it.

View File

@@ -1,173 +0,0 @@
.. _site-configuration:
Site configuration
===================================
.. _temp-space:
Temporary space
----------------------------
.. warning:: Temporary space configuration will eventually be moved to
configuration files, but currently these settings are in
``lib/spack/spack/__init__.py``
By default, Spack will try to do all of its building in temporary
space. There are two main reasons for this. First, Spack is designed
to run out of a user's home directory, and on may systems the home
directory is network mounted and potentially not a very fast
filesystem. We create build stages in a temporary directory to avoid
this. Second, many systems impose quotas on home directories, and
``/tmp`` or similar directories often have more available space. This
helps conserve space for installations in users' home directories.
You can customize temporary directories by editing
``lib/spack/spack/__init__.py``. Specifically, find this part of the file:
.. code-block:: python
# Whether to build in tmp space or directly in the stage_path.
# If this is true, then spack will make stage directories in
# a tmp filesystem, and it will symlink them into stage_path.
use_tmp_stage = True
# Locations to use for staging and building, in order of preference
# Use a %u to add a username to the stage paths here, in case this
# is a shared filesystem. Spack will use the first of these paths
# that it can create.
tmp_dirs = ['/nfs/tmp2/%u/spack-stage',
'/var/tmp/%u/spack-stage',
'/tmp/%u/spack-stage']
The ``use_tmp_stage`` variable controls whether Spack builds
**directly** inside the ``var/spack/`` directory. Normally, Spack
will try to find a temporary directory for a build, then it *symlinks*
that temporary directory into ``var/spack/`` so that you can keep
track of what temporary directories Spack is using.
The ``tmp_dirs`` variable is a list of paths Spack should search when
trying to find a temporary directory. They can optionally contain a
``%u``, which will substitute the current user's name into the path.
The list is searched in order, and Spack will create a temporary stage
in the first directory it finds to which it has write access. Add
more elements to the list to indicate where your own site's temporary
directory is.
External Packages
~~~~~~~~~~~~~~~~~~~~~
Spack can be configured to use externally-installed
packages rather than building its own packages. This may be desirable
if machines ship with system packages, such as a customized MPI
that should be used instead of Spack building its own MPI.
External packages are configured through the ``packages.yaml`` file found
in a Spack installation's ``etc/spack/`` or a user's ``~/.spack/``
directory. Here's an example of an external configuration:
.. code-block:: yaml
packages:
openmpi:
paths:
openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib: /opt/openmpi-1.4.3
openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib+debug: /opt/openmpi-1.4.3-debug
openmpi@1.6.5%intel@10.1=chaos_5_x86_64_ib: /opt/openmpi-1.6.5-intel
This example lists three installations of OpenMPI, one built with gcc,
one built with gcc and debug information, and another built with Intel.
If Spack is asked to build a package that uses one of these MPIs as a
dependency, it will use the the pre-installed OpenMPI in
the given directory.
Each ``packages.yaml`` begins with a ``packages:`` token, followed
by a list of package names. To specify externals, add a ``paths``
token under the package name, which lists externals in a
``spec : /path`` format. Each spec should be as
well-defined as reasonably possible. If a
package lacks a spec component, such as missing a compiler or
package version, then Spack will guess the missing component based
on its most-favored packages, and it may guess incorrectly.
Each package version and compilers listed in an external should
have entries in Spack's packages and compiler configuration, even
though the package and compiler may not every be built.
The packages configuration can tell Spack to use an external location
for certain package versions, but it does not restrict Spack to using
external packages. In the above example, if an OpenMPI 1.8.4 became
available Spack may choose to start building and linking with that version
rather than continue using the pre-installed OpenMPI versions.
To prevent this, the ``packages.yaml`` configuration also allows packages
to be flagged as non-buildable. The previous example could be modified to
be:
.. code-block:: yaml
packages:
openmpi:
paths:
openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib: /opt/openmpi-1.4.3
openmpi@1.4.3%gcc@4.4.7=chaos_5_x86_64_ib+debug: /opt/openmpi-1.4.3-debug
openmpi@1.6.5%intel@10.1=chaos_5_x86_64_ib: /opt/openmpi-1.6.5-intel
buildable: False
The addition of the ``buildable`` flag tells Spack that it should never build
its own version of OpenMPI, and it will instead always rely on a pre-built
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
a package name.
The ``buildable`` does not need to be paired with external packages.
It could also be used alone to forbid packages that may be
buggy or otherwise undesirable.
Profiling
~~~~~~~~~~~~~~~~~~~~~
Spack has some limited built-in support for profiling, and can report
statistics using standard Python timing tools. To use this feature,
supply ``-p`` to Spack on the command line, before any subcommands.
.. _spack-p:
``spack -p``
^^^^^^^^^^^^^^^^^^
``spack -p`` output looks like this:
.. code-block:: sh
$ spack -p graph dyninst
o dyninst
|\
| |\
| o | libdwarf
|/ /
o | libelf
/
o boost
307670 function calls (305943 primitive calls) in 0.127 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
853 0.021 0.000 0.066 0.000 inspect.py:472(getmodule)
51197 0.011 0.000 0.018 0.000 inspect.py:51(ismodule)
73961 0.010 0.000 0.010 0.000 {isinstance}
1762 0.006 0.000 0.053 0.000 inspect.py:440(getsourcefile)
32075 0.006 0.000 0.006 0.000 {hasattr}
1760 0.004 0.000 0.004 0.000 {posix.stat}
2240 0.004 0.000 0.004 0.000 {posix.lstat}
2602 0.004 0.000 0.011 0.000 inspect.py:398(getfile)
771 0.004 0.000 0.077 0.000 inspect.py:518(findsource)
2656 0.004 0.000 0.004 0.000 {method 'match' of '_sre.SRE_Pattern' objects}
30772 0.003 0.000 0.003 0.000 {method 'get' of 'dict' objects}
...
The bottom of the output shows the top most time consuming functions,
slowest on top. The profiling support is from Python's built-in tool,
`cProfile
<https://docs.python.org/2/library/profile.html#module-cProfile>`_.

View File

@@ -0,0 +1,63 @@
##############################################################################
# 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 is a template package file for Spack. We've put "FIXME"
# next to all the things you'll want to change. Once you've handled
# them, you can save this file and test your package like this:
#
# spack install mpileaks
#
# You can edit this file again by typing:
#
# spack edit mpileaks
#
# See the Spack documentation for more information on packaging.
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *
class Mpileaks(AutotoolsPackage):
"""FIXME: Put a proper description of your package here."""
# FIXME: Add a proper url for your package's homepage here.
homepage = "http://www.example.com"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
version('1.0', '8838c574b39202a57d7c2d68692718aa')
# FIXME: Add dependencies if required.
# depends_on('m4', type='build')
# depends_on('autoconf', type='build')
# depends_on('automake', type='build')
# depends_on('libtool', type='build')
# depends_on('foo')
def configure_args(self):
# FIXME: Add arguments other than --prefix
# FIXME: If not needed delete the function
args = []
return args

View File

@@ -0,0 +1,48 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class Mpileaks(AutotoolsPackage):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
homepage = "https://github.com/hpc/mpileaks"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
version('1.0', '8838c574b39202a57d7c2d68692718aa')
# FIXME: Add dependencies if required.
# depends_on('m4', type='build')
# depends_on('autoconf', type='build')
# depends_on('automake', type='build')
# depends_on('libtool', type='build')
# depends_on('foo')
def configure_args(self):
# FIXME: Add arguments other than --prefix
# FIXME: If not needed delete the function
args = []
return args

View File

@@ -0,0 +1,45 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class Mpileaks(AutotoolsPackage):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
homepage = "https://github.com/hpc/mpileaks"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
version('1.0', '8838c574b39202a57d7c2d68692718aa')
depends_on('mpi')
depends_on('adept-utils')
depends_on('callpath')
def configure_args(self):
# FIXME: Add arguments other than --prefix
# FIXME: If not needed delete the function
args = []
return args

View File

@@ -0,0 +1,43 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class Mpileaks(AutotoolsPackage):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
homepage = "https://github.com/hpc/mpileaks"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
version('1.0', '8838c574b39202a57d7c2d68692718aa')
depends_on('mpi')
depends_on('adept-utils')
depends_on('callpath')
def configure_args(self):
args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
'--with-callpath=%s' % self.spec['callpath'].prefix]
return args

View File

@@ -0,0 +1,50 @@
##############################################################################
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
#
# This file is part of Spack.
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
# LLNL-CODE-647188
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License (as
# published by the Free Software Foundation) version 2.1, February 1999.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
# conditions of the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
class Mpileaks(AutotoolsPackage):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
homepage = "https://github.com/hpc/mpileaks"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
version('1.0', '8838c574b39202a57d7c2d68692718aa')
variant('stackstart', default=0, description='Specify the number of stack frames to truncate.')
depends_on('mpi')
depends_on('adept-utils')
depends_on('callpath')
def configure_args(self):
args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
'--with-callpath=%s' % self.spec['callpath'].prefix]
stackstart = int(self.spec.variants['stackstart'].value)
if stackstart:
args.extend(['--with-stack-start-c=%s' % stackstart,
'--with-stack-start-fortran=%s' % stackstart])
return args

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -0,0 +1,48 @@
.. _spack-101:
=============================
Tutorial: Spack 101
=============================
This is a 3-hour introduction to Spack with lectures and live demos. It
was presented as a tutorial at `Supercomputing 2016
<http://sc16.supercomputing.org>`_. You can use these materials to teach
a course on Spack at your own site, or you can just skip ahead and read
the live demo scripts to see how Spack is used in practice.
.. _sc16-slides:
.. rubric:: Slides
.. figure:: tutorial/sc16-tutorial-slide-preview.png
:target: http://llnl.github.io/spack/files/Spack-SC16-Tutorial.pdf
:height: 72px
:align: left
:alt: Slide Preview
`Download Slides <http://llnl.github.io/spack/files/Spack-SC16-Tutorial.pdf>`_.
**Full citation:** Todd Gamblin, Massimiliano Culpo, Gregory Becker, Matt
Legendre, Greg Lee, Elizabeth Fischer, and Benedikt Hegner.
`Managing HPC Software Complexity with Spack
<http://sc16.supercomputing.org/presentation/?id=tut166&sess=sess209>`_.
Tutorial presented at Supercomputing 2016. November 13, 2016, Salt Lake
City, UT, USA.
.. _sc16-live-demos:
.. rubric:: Live Demos
These scripts will take you step-by-step through basic Spack tasks. They
correspond to sections in the slides above.
1. :ref:`basics-tutorial`
2. :ref:`packaging-tutorial`
3. :ref:`modules-tutorial`
Full contents:
.. toctree::
tutorial_sc16_spack_basics
tutorial_sc16_packaging
tutorial_sc16_modules

View File

@@ -0,0 +1,982 @@
.. _modules-tutorial:
=============================
Module Configuration Tutorial
=============================
This tutorial will guide you through the customization of both
content and naming of module files generated by Spack.
Starting from the default Spack settings you will add an increasing
number of directives to the ``modules.yaml`` configuration file to
satisfy a number of constraints that mimic those that you may encounter
in a typical production environment at HPC sites.
Even though the focus will be for the most part on customizing
TCL non-hierarchical module files, everything
you'll see applies also to other kinds of module files generated by Spack.
The generation of Lua hierarchical
module files will be addressed at the end of the tutorial,
and you'll see that with minor modifications
to an existing ``modules.yaml`` written for TCL
non-hierarchical modules you'll get almost
for free the possibility to try a hierarchical layout.
Let's start!
.. _module_file_tutorial_prerequisites:
-------------
Prerequisites
-------------
Before proceeding further ensure:
- you have LMod or Environment Modules available
- have :ref:`shell support <shell-support>` activated in Spack
If you need to install Lmod or Environment module you can refer
to the documentation :ref:`here <InstallEnvironmentModules>`.
^^^^^^^^^^^^^^^^^^
Add a new compiler
^^^^^^^^^^^^^^^^^^
Spack automatically scans the environment to search for available
compilers on first use. On a Ubuntu 14.04 a fresh clone will show
something like this:
.. code-block:: console
$ uname -a
Linux nuvolari 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ spack compilers
==> Available compilers
-- gcc ----------------------------------------------------------
gcc@4.8
For the purpose of building a limited set of packages with some features
that will help showcasing the capabilities of
module customization the first thing we need is to build a new compiler:
.. code-block:: console
$ spack install gcc@6.2.0
# ...
# Wait a long time
# ...
Then we can use shell support for modules to add it to the list of known compilers:
.. code-block:: console
# The name of the generated module may vary
$ module load gcc-6.2.0-gcc-4.8-twd5nqg
$ spack compiler add
==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
gcc@6.2.0
$ spack compilers
==> Available compilers
-- gcc ----------------------------------------------------------
gcc@6.2.0 gcc@4.8
Note that the final 7 digits hash at the end of the generated module may vary depending
on architecture or package version.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Build software that will be used in the tutorial
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Next you should install a few modules that will be used in the tutorial:
.. code-block:: console
$ spack install netlib-scalapack ^openmpi ^openblas
# ...
The packages you need to install are:
- ``netlib-scalapack ^openmpi ^openblas``
- ``netlib-scalapack ^mpich ^openblas``
- ``netlib-scalapack ^openmpi ^netlib-lapack``
- ``netlib-scalapack ^mpich ^netlib-lapack``
- ``py-scipy ^openblas``
In the end your environment should look something like:
.. code-block:: console
$ module avail
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
binutils-2.27-gcc-4.8-dz3xevw libpciaccess-0.13.4-gcc-6.2.0-eo2siet lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw python-2.7.12-gcc-6.2.0-qu7rc5p
bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-4.8-avb6azw m4-1.4.17-gcc-4.8-iggewke netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq sqlite-3.8.5-gcc-6.2.0-td3zfe7
cmake-3.5.2-gcc-6.2.0-6poypqg libsigsegv-2.10-gcc-6.2.0-g3qpmbi m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh tcl-8.6.5-gcc-4.8-atddxu7
curl-7.50.3-gcc-6.2.0-2ffacqm libtool-2.4.6-gcc-6.2.0-kiepac6 mpc-1.0.3-gcc-4.8-lylv7lk openblas-0.2.19-gcc-6.2.0-js33umc util-macros-1.19.0-gcc-6.2.0-uoukuqk
expat-2.2.0-gcc-6.2.0-bxqnjar libxml2-2.9.4-gcc-6.2.0-3k4ykbe mpfr-3.1.4-gcc-4.8-bldfx3w openmpi-2.0.1-gcc-6.2.0-s3qbtby xz-5.2.2-gcc-6.2.0-t5lk6in
gcc-6.2.0-gcc-4.8-twd5nqg lmod-6.4.5-gcc-4.8-7v7bh7b mpich-3.2-gcc-6.2.0-5n5xoep openssl-1.0.2j-gcc-6.2.0-hibnfda zlib-1.2.8-gcc-4.8-bds4ies
gmp-6.1.1-gcc-4.8-uq52e2n lua-5.3.2-gcc-4.8-xozf2hx ncurses-6.0-gcc-4.8-u62fit4 pkg-config-0.29.1-gcc-6.2.0-rslsgcs zlib-1.2.8-gcc-6.2.0-asydrba
gmp-6.1.1-gcc-6.2.0-3cfh3hi lua-luafilesystem-1_6_3-gcc-4.8-sbzejlz ncurses-6.0-gcc-6.2.0-7tb426s py-nose-1.3.7-gcc-6.2.0-4gl5c42
hwloc-1.11.4-gcc-6.2.0-3ostwel lua-luaposix-33.4.0-gcc-4.8-xf7y2p5 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
isl-0.14-gcc-4.8-cq73t5m lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy py-scipy-0.18.1-gcc-6.2.0-e6uljfi
libarchive-3.2.1-gcc-6.2.0-2b54aos lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
------------------------------------------------
Filter unwanted modifications to the environment
------------------------------------------------
The non-hierarchical TCL module files that have been generated so far
follow the default rules for module generation, which are given
:ref:`here <modules-yaml>` in the reference part of the manual. Taking a
look at the ``gcc`` module you'll see something like:
.. code-block:: console
$ module show gcc-6.2.0-gcc-4.8-twd5nqg
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("gcc @6.2.0 ")
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
prepend_path("LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
prepend_path("CPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/include")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, and Java.
]])
As expected, a few environment variables representing paths will be modified
by the modules according to the default prefix inspection rules.
Consider now the case that your site has decided that e.g. ``CPATH`` and
``LIBRARY_PATH`` modifications should not be present in module files. What you can
do to abide by the rules is to create a configuration file ``~/.spack/modules.yaml``
with the following content:
.. code-block:: yaml
modules:
tcl:
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
Next you should regenerate all the module files:
.. code-block:: console
$ spack module refresh --module-type tcl
==> You are about to regenerate tcl module files for:
-- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
...
==> Do you want to proceed ? [y/n]
y
==> Regenerating tcl module files
If you take a look now at the module for ``gcc`` you'll see that the unwanted
paths have disappeared:
.. code-block:: console
$ module show gcc-6.2.0-gcc-4.8-twd5nqg
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("gcc @6.2.0 ")
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, and Java.
]])
----------------------------------------------
Prevent some module files from being generated
----------------------------------------------
Another common request at many sites is to avoid exposing software that
is only needed as an intermediate step when building a newer stack.
Let's try to prevent the generation of
module files for anything that is compiled with ``gcc@4.8`` (the OS provided compiler).
To do this you should add a ``blacklist`` keyword to the configuration file:
.. code-block:: yaml
:emphasize-lines: 3,4
modules:
tcl:
blacklist:
- '%gcc@4.8'
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
and regenerate the module files:
.. code-block:: console
$ spack module refresh --module-type tcl --delete-tree
==> You are about to regenerate tcl module files for:
-- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
-- linux-Ubuntu14-x86_64 / gcc@6.2.0 ----------------------------
csoc2mq bzip2@1.0.6 2b54aos libarchive@3.2.1 sfmeynw lzma@4.32.7 wnimqhw netlib-scalapack@2.0.2 s3qbtby openmpi@2.0.1 hkqauaa py-setuptools@25.2.0
6poypqg cmake@3.5.2 eo2siet libpciaccess@0.13.4 jcngz72 lzo@2.09 6bqlxqy netlib-scalapack@2.0.2 hibnfda openssl@1.0.2j qu7rc5p python@2.7.12
2ffacqm curl@7.50.3 g3qpmbi libsigsegv@2.10 lhgqa6s m4@1.4.17 wojunhq netlib-scalapack@2.0.2 rslsgcs pkg-config@0.29.1 td3zfe7 sqlite@3.8.5
bxqnjar expat@2.2.0 kiepac6 libtool@2.4.6 5n5xoep mpich@3.2 hpqb3dp netlib-scalapack@2.0.2 4gl5c42 py-nose@1.3.7 uoukuqk util-macros@1.19.0
3cfh3hi gmp@6.1.1 3k4ykbe libxml2@2.9.4 7tb426s ncurses@6.0 djdthlh nettle@3.2 i3rpk4e py-numpy@1.11.1 t5lk6in xz@5.2.2
3ostwel hwloc@1.11.4 cagoem4 lz4@131 mirer2l netlib-lapack@3.6.1 js33umc openblas@0.2.19 e6uljfi py-scipy@0.18.1 asydrba zlib@1.2.8
==> Do you want to proceed ? [y/n]
y
$ module avail
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-6.2.0-g3qpmbi ncurses-6.0-gcc-6.2.0-7tb426s openmpi-2.0.1-gcc-6.2.0-s3qbtby sqlite-3.8.5-gcc-6.2.0-td3zfe7
cmake-3.5.2-gcc-6.2.0-6poypqg libtool-2.4.6-gcc-6.2.0-kiepac6 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l openssl-1.0.2j-gcc-6.2.0-hibnfda util-macros-1.19.0-gcc-6.2.0-uoukuqk
curl-7.50.3-gcc-6.2.0-2ffacqm libxml2-2.9.4-gcc-6.2.0-3k4ykbe netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy pkg-config-0.29.1-gcc-6.2.0-rslsgcs xz-5.2.2-gcc-6.2.0-t5lk6in
expat-2.2.0-gcc-6.2.0-bxqnjar lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-nose-1.3.7-gcc-6.2.0-4gl5c42 zlib-1.2.8-gcc-6.2.0-asydrba
gmp-6.1.1-gcc-6.2.0-3cfh3hi lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
hwloc-1.11.4-gcc-6.2.0-3ostwel lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq py-scipy-0.18.1-gcc-6.2.0-e6uljfi
libarchive-3.2.1-gcc-6.2.0-2b54aos m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
libpciaccess-0.13.4-gcc-6.2.0-eo2siet mpich-3.2-gcc-6.2.0-5n5xoep openblas-0.2.19-gcc-6.2.0-js33umc python-2.7.12-gcc-6.2.0-qu7rc5p
This time it is convenient to pass the option ``--delete-tree`` to the command that
regenerates the module files to instruct it to delete the existing tree and regenerate
a new one instead of overwriting the files in the existing directory.
If you pay careful attention you'll see though that we went too far in blacklisting modules:
the module for ``gcc@6.2.0`` disappeared as it was bootstrapped with ``gcc@4.8``. To specify
exceptions to the blacklist rules you can use ``whitelist``:
.. code-block:: yaml
:emphasize-lines: 3,4
modules:
tcl:
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
``whitelist`` rules always have precedence over ``blacklist`` rules. If you regenerate the modules again:
.. code-block:: console
$ spack module refresh --module-type tcl -y
you'll see that now the module for ``gcc@6.2.0`` has reappeared:
.. code-block:: console
$ module avail gcc-6.2.0-gcc-4.8-twd5nqg
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
gcc-6.2.0-gcc-4.8-twd5nqg
-------------------------
Change module file naming
-------------------------
The next step in making module files more user-friendly is to
improve their naming scheme.
To reduce the length of the hash or remove it altogether you can
use the ``hash_length`` keyword in the configuration file:
.. TODO: give reasons to remove hashes if they are not evident enough?
.. code-block:: yaml
:emphasize-lines: 3
modules:
tcl:
hash_length: 0
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
If you try to regenerate the module files now you will get an error:
.. code-block:: console
$ spack module refresh --module-type tcl --delete-tree -y
==> Error: Name clashes detected in module files:
file : ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/netlib-scalapack-2.0.2-gcc-6.2.0
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
==> Error: Operation aborted
.. note::
We try to check for errors upfront!
In Spack we check for errors upfront whenever possible, so don't worry about your module files:
as a name clash was detected nothing has been changed on disk.
The problem here is that without
the hashes the four different flavors of ``netlib-scalapack`` map to the same module file
name. We have the possibility to add suffixes to differentiate them:
.. code-block:: yaml
:emphasize-lines: 9-11,14-17
modules:
tcl:
hash_length: 0
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
netlib-scalapack:
suffixes:
'^openmpi': openmpi
'^mpich': mpich
As you can see it is possible to specify rules that applies only to a
restricted set of packages using :ref:`anonymous specs <anonymous_specs>`.
Regenerating module files now we obtain:
.. code-block:: console
$ spack module refresh --module-type tcl --delete-tree -y
==> Regenerating tcl module files
$ module avail
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
bzip2-1.0.6-gcc-6.2.0 libpciaccess-0.13.4-gcc-6.2.0 mpich-3.2-gcc-6.2.0 openblas-0.2.19-gcc-6.2.0 python-2.7.12-gcc-6.2.0
cmake-3.5.2-gcc-6.2.0 libsigsegv-2.10-gcc-6.2.0 ncurses-6.0-gcc-6.2.0 openmpi-2.0.1-gcc-6.2.0 sqlite-3.8.5-gcc-6.2.0
curl-7.50.3-gcc-6.2.0 libtool-2.4.6-gcc-6.2.0 netlib-lapack-3.6.1-gcc-6.2.0 openssl-1.0.2j-gcc-6.2.0 util-macros-1.19.0-gcc-6.2.0
expat-2.2.0-gcc-6.2.0 libxml2-2.9.4-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-mpich pkg-config-0.29.1-gcc-6.2.0 xz-5.2.2-gcc-6.2.0
gcc-6.2.0-gcc-4.8 lz4-131-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-openmpi py-nose-1.3.7-gcc-6.2.0 zlib-1.2.8-gcc-6.2.0
gmp-6.1.1-gcc-6.2.0 lzma-4.32.7-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-mpich py-numpy-1.11.1-gcc-6.2.0-openblas
hwloc-1.11.4-gcc-6.2.0 lzo-2.09-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-openmpi py-scipy-0.18.1-gcc-6.2.0-openblas
libarchive-3.2.1-gcc-6.2.0 m4-1.4.17-gcc-6.2.0 nettle-3.2-gcc-6.2.0 py-setuptools-25.2.0-gcc-6.2.0
Finally we can set a ``naming_scheme`` to prevent users from loading
modules that refer to different flavors of the same library/application:
.. code-block:: yaml
:emphasize-lines: 4,10,11
modules:
tcl:
hash_length: 0
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
conflict:
- '${PACKAGE}'
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
netlib-scalapack:
suffixes:
'^openmpi': openmpi
'^mpich': mpich
The final result should look like:
.. code-block:: console
$ module avail
------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
bzip2/1.0.6-gcc-6.2.0 libpciaccess/0.13.4-gcc-6.2.0 mpich/3.2-gcc-6.2.0 openblas/0.2.19-gcc-6.2.0 python/2.7.12-gcc-6.2.0
cmake/3.5.2-gcc-6.2.0 libsigsegv/2.10-gcc-6.2.0 ncurses/6.0-gcc-6.2.0 openmpi/2.0.1-gcc-6.2.0 sqlite/3.8.5-gcc-6.2.0
curl/7.50.3-gcc-6.2.0 libtool/2.4.6-gcc-6.2.0 netlib-lapack/3.6.1-gcc-6.2.0 openssl/1.0.2j-gcc-6.2.0 util-macros/1.19.0-gcc-6.2.0
expat/2.2.0-gcc-6.2.0 libxml2/2.9.4-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-mpich pkg-config/0.29.1-gcc-6.2.0 xz/5.2.2-gcc-6.2.0
gcc/6.2.0-gcc-4.8 lz4/131-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-openmpi py-nose/1.3.7-gcc-6.2.0 zlib/1.2.8-gcc-6.2.0
gmp/6.1.1-gcc-6.2.0 lzma/4.32.7-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-mpich py-numpy/1.11.1-gcc-6.2.0-openblas
hwloc/1.11.4-gcc-6.2.0 lzo/2.09-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-openmpi (D) py-scipy/0.18.1-gcc-6.2.0-openblas
libarchive/3.2.1-gcc-6.2.0 m4/1.4.17-gcc-6.2.0 nettle/3.2-gcc-6.2.0 py-setuptools/25.2.0-gcc-6.2.0
.. note::
TCL specific directive
The directives ``naming_scheme`` and ``conflict`` are TCL specific and do not apply
to the ``dotkit`` or ``lmod`` sections in the configuration file.
------------------------------------
Add custom environment modifications
------------------------------------
At many sites it is customary to set an environment variable in a
package's module file that points to the folder in which the package
is installed. You can achieve this with Spack by adding an
``environment`` directive to the configuration file:
.. code-block:: yaml
:emphasize-lines: 17-19
modules:
tcl:
hash_length: 0
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
conflict:
- '${PACKAGE}'
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
environment:
set:
'${PACKAGE}_ROOT': '${PREFIX}'
netlib-scalapack:
suffixes:
'^openmpi': openmpi
'^mpich': mpich
There are many variable tokens available to use in the ``environment``
and ``naming_scheme`` directives, such as ``${PACKAGE}``,
``${VERSION}``, etc. (see the :meth:`~spack.spec.Spec.format` API
documentation for the complete list).
Regenerating the module files should result in something like:
.. code-block:: console
:emphasize-lines: 14
$ spack module refresh -y --module-type tcl
==> Regenerating tcl module files
$ module show gcc
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("gcc @6.2.0 ")
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
conflict("gcc")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, and Java.
]])
As you see the ``gcc`` module has the environment variable ``GCC_ROOT`` set.
Sometimes it's also useful to apply environment modifications selectively and target
only certain packages. You can, for instance set the common variables ``CC``, ``CXX``,
etc. in the ``gcc`` module file and apply other custom modifications to the
``openmpi`` modules as follows:
.. code-block:: yaml
:emphasize-lines: 20-32
modules:
tcl:
hash_length: 0
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
conflict:
- '${PACKAGE}'
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
environment:
set:
'${PACKAGE}_ROOT': '${PREFIX}'
gcc:
environment:
set:
CC: gcc
CXX: g++
FC: gfortran
F90: gfortran
F77: gfortran
openmpi:
environment:
set:
SLURM_MPI_TYPE: pmi2
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
netlib-scalapack:
suffixes:
'^openmpi': openmpi
'^mpich': mpich
This time we will be more selective and regenerate only the ``gcc`` and
``openmpi`` module files:
.. code-block:: console
$ spack module refresh -y --module-type tcl gcc
==> Regenerating tcl module files
$ spack module refresh -y --module-type tcl openmpi
==> Regenerating tcl module files
$ module show gcc
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("gcc @6.2.0 ")
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
setenv("CC","gcc")
setenv("CXX","g++")
setenv("F90","gfortran")
setenv("FC","gfortran")
setenv("F77","gfortran")
conflict("gcc")
help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
Fortran, and Java.
]])
$ module show openmpi
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
~/spack/share/spack/modules/linux-Ubuntu14-x86_64/openmpi/2.0.1-gcc-6.2.0:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
whatis("openmpi @2.0.1 ")
prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/bin")
prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/")
prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib")
prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib/pkgconfig")
prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/share/man")
setenv("SLURM_MPI_TYPE","pmi2")
setenv("OMPI_MCA_BTL_OPENIB_WARN_DEFAULT_GID_PREFIX","0")
setenv("OPENMPI_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w")
conflict("openmpi")
help([[The Open MPI Project is an open source Message Passing Interface
implementation that is developed and maintained by a consortium of
academic, research, and industry partners. Open MPI is therefore able to
combine the expertise, technologies, and resources from all across the
High Performance Computing community in order to build the best MPI
library available. Open MPI offers advantages for system and software
vendors, application developers and computer science researchers.
]])
---------------------
Autoload dependencies
---------------------
Spack can also generate module files that contain code to load the
dependencies automatically. You can, for instance generate python
modules that load their dependencies by adding the ``autoload``
directive and assigning it the value ``direct``:
.. code-block:: yaml
:emphasize-lines: 37,38
modules:
tcl:
hash_length: 0
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
conflict:
- '${PACKAGE}'
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
environment:
set:
'${PACKAGE}_ROOT': '${PREFIX}'
gcc:
environment:
set:
CC: gcc
CXX: g++
FC: gfortran
F90: gfortran
F77: gfortran
openmpi:
environment:
set:
SLURM_MPI_TYPE: pmi2
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
netlib-scalapack:
suffixes:
'^openmpi': openmpi
'^mpich': mpich
^python:
autoload: 'direct'
and regenerating the module files for every package that depends on ``python``:
.. code-block:: console
$ spack module refresh -y --module-type tcl ^python
==> Regenerating tcl module files
Now the ``py-scipy`` module will be:
.. code-block:: tcl
#%Module1.0
## Module file created by spack (https://github.com/LLNL/spack) on 2016-11-02 20:53:21.283547
##
## py-scipy@0.18.1%gcc@6.2.0 arch=linux-Ubuntu14-x86_64-e6uljfi
##
module-whatis "py-scipy @0.18.1"
proc ModulesHelp { } {
puts stderr "SciPy (pronounced "Sigh Pie") is a Scientific Library for Python. It"
puts stderr "provides many user-friendly and efficient numerical routines such as"
puts stderr "routines for numerical integration and optimization."
}
if ![ is-loaded python/2.7.12-gcc-6.2.0 ] {
puts stderr "Autoloading python/2.7.12-gcc-6.2.0"
module load python/2.7.12-gcc-6.2.0
}
if ![ is-loaded openblas/0.2.19-gcc-6.2.0 ] {
puts stderr "Autoloading openblas/0.2.19-gcc-6.2.0"
module load openblas/0.2.19-gcc-6.2.0
}
if ![ is-loaded py-numpy/1.11.1-gcc-6.2.0-openblas ] {
puts stderr "Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas"
module load py-numpy/1.11.1-gcc-6.2.0-openblas
}
prepend-path CMAKE_PREFIX_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/"
prepend-path LD_LIBRARY_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib"
prepend-path PYTHONPATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib/python2.7/site-packages"
setenv PY_SCIPY_ROOT "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh"
conflict py-scipy
and will contain code to autoload all the dependencies:
.. code-block:: console
$ module load py-scipy
Autoloading python/2.7.12-gcc-6.2.0
Autoloading openblas/0.2.19-gcc-6.2.0
Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas
-----------------------------
Lua hierarchical module files
-----------------------------
In the final part of this tutorial you will modify ``modules.yaml`` to generate
Lua hierarchical module files. You will see that most of the directives used before
are also valid in the ``lmod`` context.
^^^^^^^^^^^^^^^^^
Core/Compiler/MPI
^^^^^^^^^^^^^^^^^
.. warning::
Only LMod supports Lua hierarchical module files
For this part of the tutorial you need to be using LMod to
manage your environment.
The most common hierarchy is the so called ``Core/Compiler/MPI``. To have an idea
how a hierarchy is organized you may refer to the
`Lmod guide <https://www.tacc.utexas.edu/research-development/tacc-projects/lmod/user-guide/module-hierarchy>`_.
Since ``lmod`` is not enabled by default, you need to add it to the list of
enabled module file generators. The other things you need to do are:
- change the ``tcl`` tag to ``lmod``
- remove ``tcl`` specific directives (``naming_scheme`` and ``conflict``)
- set which compilers are considered ``core``
- remove the ``mpi`` related suffixes (as they will be substituted by hierarchies)
After modifications the configuration file will be:
.. code-block:: yaml
:emphasize-lines: 2-6
modules:
enable::
- lmod
lmod:
core_compilers:
- 'gcc@4.8'
hash_length: 0
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
all:
suffixes:
'^openblas': openblas
'^netlib-lapack': netlib
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
environment:
set:
'${PACKAGE}_ROOT': '${PREFIX}'
gcc:
environment:
set:
CC: gcc
CXX: g++
FC: gfortran
F90: gfortran
F77: gfortran
openmpi:
environment:
set:
SLURM_MPI_TYPE: pmi2
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
.. note::
The double colon
The double colon after ``enable`` is intentional and it serves the
purpose of overriding the default list of enabled generators so
that only ``lmod`` will be active (see :ref:`the reference
manual <config-overrides>` for a more detailed explanation of
config scopes).
The directive ``core_compilers`` accepts a list of compilers : everything built
using these compilers will create a module in the ``Core`` part of the hierarchy. It is
common practice to put the OS provided compilers in the list and only build common utilities
and other compilers in ``Core``.
If you regenerate the module files
.. code-block:: console
$ spack module refresh --module-type lmod --delete-tree -y
and update ``MODULEPATH`` to point to the ``Core`` folder, and
list the available modules, you'll see:
.. code-block:: console
$ module unuse ~/spack/share/spack/modules/linux-Ubuntu14-x86_64
$ module use ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core
$ module avail
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
gcc/6.2.0
The only module visible now is ``gcc``. Loading that you will make
visible the ``Compiler`` part of the software stack that was built with ``gcc/6.2.0``:
.. code-block:: console
$ module load gcc
$ module avail
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
gcc/6.2.0 (L)
The same holds true for the ``MPI`` part of the stack, that you can enable by loading
either ``mpich`` or ``openmpi``. The nice features of LMod will become evident
once you'll try switching among different stacks:
.. code-block:: console
$ module load mpich
$ module avail
----------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/mpich/3.2-5n5xoep/gcc/6.2.0 ------------------------------------------------------------
netlib-scalapack/2.0.2-netlib netlib-scalapack/2.0.2-openblas (D)
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 (L) openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
gcc/6.2.0 (L)
$ module load openblas netlib-scalapack/2.0.2-openblas
$ module list
Currently Loaded Modules:
1) gcc/6.2.0 2) mpich/3.2 3) openblas/0.2.19 4) netlib-scalapack/2.0.2-openblas
$ module load openmpi
Lmod is automatically replacing "mpich/3.2" with "openmpi/2.0.1"
Due to MODULEPATH changes the following have been reloaded:
1) netlib-scalapack/2.0.2-openblas
This layout is already a great improvement over the usual non-hierarchical layout,
but it still has an asymmetry: ``LAPACK`` providers are semantically the same as ``MPI``
providers, but they are still not part of the hierarchy. We'll see a possible solution
next.
.. Activate lmod and turn the previous modifications into lmod:
Add core compilers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Extend the hierarchy to other virtual providers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. warning::
This is an experimental feature
Having a hierarchy deeper than ``Core``/``Compiler``/``MPI`` is an experimental
feature, still not fully supported by ``module spider``,
see `here <https://github.com/TACC/Lmod/issues/114>`_. Furthermore its use
with hierarchies more complex than ``Core``/``Compiler``/``MPI``/``LAPACK``
has not been thoroughly tested in production environments.
Spack permits you to generate Lua hierarchical module files where users
can add an arbitrary list of virtual providers to the triplet
``Core``/``Compiler``/``MPI``. A configuration file like:
.. code-block:: yaml
:emphasize-lines: 7,8
modules:
enable::
- lmod
lmod:
core_compilers:
- 'gcc@4.8'
hierarchical_scheme:
- lapack
hash_length: 0
whitelist:
- gcc
blacklist:
- '%gcc@4.8'
- readline
all:
filter:
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
environment:
set:
'${PACKAGE}_ROOT': '${PREFIX}'
gcc:
environment:
set:
CC: gcc
CXX: g++
FC: gfortran
F90: gfortran
F77: gfortran
openmpi:
environment:
set:
SLURM_MPI_TYPE: pmi2
OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
will add ``lapack`` providers to the mix. After the usual regeneration of module files:
.. code-block:: console
$ module purge
$ spack module refresh --module-type lmod --delete-tree -y
==> Regenerating lmod module files
you will have something like:
.. code-block:: console
$ module load gcc
$ module load openblas
$ module load openmpi
$ module avail
--------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/openmpi/2.0.1-s3qbtby/gcc/6.2.0 ----------------------------------------------
netlib-scalapack/2.0.2
-------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/gcc/6.2.0 ---------------------------------------------------------
py-numpy/1.11.1 py-scipy/0.18.1
-------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j python/2.7.12 zlib/1.2.8
bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 sqlite/3.8.5
bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 (L) py-nose/1.3.7 util-macros/1.19.0
cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 (L) py-setuptools/25.2.0 xz/5.2.2
----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
gcc/6.2.0 (L)
Now both the ``MPI`` and the ``LAPACK`` providers are handled by LMod as hierarchies:
.. code-block:: console
$ module load py-numpy netlib-scalapack
$ module load mpich
Lmod is automatically replacing "openmpi/2.0.1" with "mpich/3.2"
Due to MODULEPATH changes the following have been reloaded:
1) netlib-scalapack/2.0.2
$ module load netlib-lapack
Lmod is automatically replacing "openblas/0.2.19" with "netlib-lapack/3.6.1"
Inactive Modules:
1) py-numpy
Due to MODULEPATH changes the following have been reloaded:
1) netlib-scalapack/2.0.2
making the use of tags to differentiate them unnecessary.
Note that because we only compiled ``py-numpy`` with ``openblas`` the module
is made inactive when we switch the ``LAPACK`` provider. The user
environment will now be consistent by design!

View File

@@ -0,0 +1,462 @@
.. _packaging-tutorial:
=========================
Package Creation Tutorial
=========================
This tutorial will walk you through the steps behind building a simple
package installation script. We'll focus building an mpileaks package,
which is a MPI debugging tool. By creating a package file we're
essentially giving Spack a recipe for how to build a particular piece of
software. We're describing some of the software's dependencies, where to
find the package, what commands and options are used to build the package
from source, and more. Once we've specified a package's recipe, we can
ask Spack to build that package in many different ways.
This tutorial assumes you have a basic familiarity with some of the Spack
commands, and that you have a working version of Spack installed. If
not, we suggest looking at Spack's *Getting Started* guide. This
tutorial also assumes you have at least a beginner's-level familiarity
with Python.
Also note that this document is a tutorial. It can help you get started
with packaging, but is not intended to be complete. See Spack's
:ref:`packaging-guide` for more complete documentation on this topic.
---------------
Getting Started
---------------
A few things before we get started:
- We'll refer to the Spack installation location via the environment
variable ``SPACK_ROOT``. You should point ``SPACK_ROOT`` at wherever
you have Spack installed.
- Add ``$SPACK_ROOT/bin`` to your ``PATH`` before you start.
- Make sure your ``EDITOR`` environment variable is set to some text
editor you like.
- We'll be writing Python code as part of this tutorial. You can find
successive versions of the Python code in
``$SPACK_ROOT/lib/spack/docs/tutorial/examples``.
-------------------------
Creating the Package File
-------------------------
Spack comes with a handy command to create a new package: ``spack create``
This command is given the location of a package's source code, downloads
the code, and sets up some basic packaging infrastructure for you. The
mpileaks source code can be found on GitHub, and here's what happens when
we run ``spack create`` on it:
.. code-block:: console
$ spack create -f https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
==> This looks like a URL for mpileaks version 1.0
==> Creating template for package mpileaks
==> Downloading...
==> Fetching https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
###################################################################################### 100.0%
And Spack should spawn a text editor with this file:
.. literalinclude:: tutorial/examples/0.package.py
:language: python
Spack has created this file in
``$SPACK_ROOT/var/spack/repos/builtin/packages/mpileaks/package.py``. Take a
moment to look over the file. There's a few placeholders that Spack has
created, which we'll fill in as part of this tutorial:
- We'll document some information about this package in the comments.
- We'll fill in the dependency list for this package.
- We'll fill in some of the configuration arguments needed to build this
package.
For the moment, exit your editor and let's see what happens when we try
to build this package:
.. code-block:: console
$ spack install mpileaks
==> Installing mpileaks
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35/mpileaks-1.0.tar.gz
==> Created stage in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35
==> Ran patch() for mpileaks
==> Building mpileaks [AutotoolsPackage]
==> Executing phase : 'autoreconf'
==> Executing phase : 'configure'
==> Error: ProcessError: Command exited with status 1:
'./configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-hufwhwpq5benv3sslie6ryflk5s6nm35'
/usr/workspace/wsa/legendre/spack/lib/spack/spack/build_systems/autotools.py:150, in configure:
145 def configure(self, spec, prefix):
146 """Runs configure with the arguments specified in `configure_args`
147 and an appropriately set prefix
148 """
149 options = ['--prefix={0}'.format(prefix)] + self.configure_args()
>> 150 inspect.getmodule(self).configure(*options)
See build log for details:
/tmp/legendre/spack-stage/spack-stage-8HVzqu/mpileaks-1.0/spack-build.out
This obviously didn't work; we need to fill in the package-specific
information. Specifically, Spack didn't try to build any of mpileaks'
dependencies, nor did it use the proper configure arguments. Let's start
fixing things
---------------------
Package Documentation
---------------------
We can bring the ``package.py`` file back into our ``EDITOR`` with the
``spack edit`` command:
.. code-block:: console
$ spack edit mpileaks
Let's remove some of the ``FIXME`` comments, and add links to the mpileaks
homepage and document what mpileaks does. I'm also going to cut out the
Copyright clause at this point to keep this tutorial document shorter,
but you shouldn't do that normally. The results of these changes can be
found in ``$SPACK_ROOT/lib/spack/docs/tutorial/examples/1.package.py``
and are below. Make these changes to your ``package.py``:
.. literalinclude:: tutorial/examples/1.package.py
:lines: 25-
:language: python
We've filled in the comment that describes what this package does and
added a link to the web site. That won't help us build yet, but it will
allow Spack to provide some documentation on this package to other users:
.. code-block:: console
$ spack info mpileaks
AutotoolsPackage: mpileaks
Homepage: https://github.com/hpc/mpileaks
Safe versions:
1.0 https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
Variants:
None
Installation Phases:
autoreconf configure build install
Build Dependencies:
None
Link Dependencies:
None
Run Dependencies:
None
Virtual Packages:
None
Description:
Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes
As we fill in more information about this package the ``spack info`` command
will become more informative. Now let's start making this package build.
------------
Dependencies
------------
The mpileaks packages depends on three other package: ``MPI``,
``adept-utils``, and ``callpath``. Let's add those via the
``depends_on`` command in our ``package.py`` (this version is in
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/2.package.py``):
.. literalinclude:: tutorial/examples/2.package.py
:lines: 25-
:language: python
Now when we go to build mpileaks, Spack will fetch and build these
dependencies before building mpileaks. Note that the mpi dependency is a
different kind of beast than the adept-utils and callpath dependencies;
there is no mpi package available in Spack. Instead mpi is a virtual
dependency. Spack may satisfy that dependency by installing packages
such as ``openmpi`` or ``mvapich``. See the :ref:`packaging-guide` for more
information on virtual dependencies.
Now when we try to install this package a lot more happens:
.. code-block:: console
$ spack install mpileaks
==> Installing mpileaks
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
==> Already patched mpileaks
==> Building mpileaks [AutotoolsPackage]
==> Executing phase : 'autoreconf'
==> Executing phase : 'configure'
==> Error: ProcessError: Command exited with status 1:
'./configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
/usr/workspace/wsa/legendre/spack/lib/spack/spack/build_systems/autotools.py:150, in configure:
145 def configure(self, spec, prefix):
146 """Runs configure with the arguments specified in `configure_args`
147 and an appropriately set prefix
148 """
149 options = ['--prefix={0}'.format(prefix)] + self.configure_args()
>> 150 inspect.getmodule(self).configure(*options)
See build log for details:
/tmp/legendre/spack-stage/spack-stage-7V5yyk/mpileaks-1.0/spack-build.out
Note that this command may take a while to run and produce more output if
you don't have an MPI already installed or configured in Spack.
Now Spack has identified and made sure all of our dependencies have been
built. It found the ``openmpi`` package that will satisfy our ``mpi``
dependency, and the ``callpath`` and ``adept-utils`` package to satisfy our
concrete dependencies.
------------------------
Debugging Package Builds
------------------------
Our ``mpileaks`` package is still not building. It may be obvious to
many of you that we're still missing the configure options. But let's
pretend we're not all intelligent developers and use this opportunity
spend some time debugging. We a few options that can tell us about
what's going wrong:
As per the error message, Spack has given us a ``spack-build.out`` debug log:
.. code-block:: console
==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate ``adept-utils`` installation
This gives us the output from the build, and it's fairly obvious that
mpileaks isn't finding its ``adept-utils`` package. Spack has
automatically added the include and library directories of
``adept-utils`` to the compiler's search path, but some packages like
mpileaks can sometimes be picky and still want things spelled out on
their command line. But let's continue to pretend we're not brilliant
developers, and explore some other debugging paths:
We can also enter the build area and try to manually run the build:
.. code-block:: console
$ spack env mpileaks bash
$ spack cd mpileaks
The ``spack env`` command spawned a new shell that contains the same
environment that Spack used to build the mpileaks package (you can
substitute bash for your favorite shell). The ``spack cd`` command
changed our working dirctory to the last attempted build for mpileaks.
From here we can manually re-run the build:
.. code-block:: console
$ ./configure
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa /legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation
We're seeing the same error, but now we're in a shell where we can run
the command ourselves and debug as needed. We could, for example, run
``./configure --help`` to see what options we can use to specify
dependencies.
We can use the ``exit`` command to leave the shell spawned by ``spack
env``.
------------------------------
Specifying Configure Arguments
------------------------------
Let's add the configure arguments to the mpileaks' ``package.py``. This
version can be found in
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/3.package.py``:
.. literalinclude:: tutorial/examples/3.package.py
:lines: 25-
:language: python
This is all we need for working mpileaks! If we install now we'll see:
.. code-block:: console
$ spack install mpileaks
spack install mpileaks
==> Installing mpileaks
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
==> Already patched mpileaks
==> Building mpileaks [AutotoolsPackage]
==> Executing phase : 'autoreconf'
==> Executing phase : 'configure'
==> Executing phase : 'build'
==> Executing phase : 'install'
==> Successfully installed mpileaks
Fetch: 0.00s. Build: 14.08s. Total: 14.08s.
[+] /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
We took a few shortcuts for this package that are worth highlighting.
Spack automatically detected that mpileaks was an Autotools-based package
when we ran ``spack create``. If this had been a CMake-based package we
would have been filling in a ``cmake_args`` function instead of
``configure_args``. If Spack hadn't been able to detect the build
system, we'd be filling in a generic install method that would manually
be calling build commands, such as is found in the ``zlib`` package:
.. code-block:: python
def install(self, spec, prefix):
configure('--prefix={0}'.format(prefix))
make()
make('install')
--------
Variants
--------
We have a successful mpileaks build, but let's take some time to improve
it. ``mpileaks`` has a build-time option to truncate parts of the stack
that it walks. Let's add a variant to allow users to set this when they
build in Spack.
To do this, we'll add a variant to our package, as per the following (see
``$SPACK_ROOT/lib/spack/docs/tutorial/examples/4.package.py``):
.. literalinclude:: tutorial/examples/4.package.py
:lines: 25-
:language: python
We've added the variant ``stackstart``, and given it a default value of
``0``. If we install now we can see the stackstart variant added to the
configure line (output truncated for length):
.. code-block:: console
$ spack install --verbose mpileaks stackstart=4
==> Installing mpileaks
==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
==> Staging archive: /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7/mpileaks-1.0.tar.gz
==> Created stage in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7
==> Ran patch() for mpileaks
==> Building mpileaks [AutotoolsPackage]
==> Executing phase : 'autoreconf'
==> Executing phase : 'configure'
==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7' '--with-adept-utils=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz' '--with-callpath=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube' '--with-stack-start-c=4' '--with-stack-start-fortran=4'
---------------
The Spec Object
---------------
This tutorial has glossed over a few important features, which weren't
too relevant for mpileaks but may be useful for other packages. There
were several places we references the ``self.spec`` object. This is a
powerful class for querying information about what we're building. For
example, you could use the spec to query information about how a
package's dependencies were built, or what compiler was being used, or
what version of a package is being installed. Full documentation can be
found in the :ref:`packaging-guide`, but here's some quick snippets with
common queries:
- Am I building ``mpileaks`` version ``1.1`` or greater?
.. code-block:: python
if self.spec.satisfies('@1.1:'):
# Do things needed for 1.1+
- Is ``openmpi`` the MPI I'm building with?
.. code-block:: python
if self.spec['mpi'].name == 'openmpi':
# Do openmpi things
- Am I building with ``gcc`` version less than ``5.0.0``:
.. code-block:: python
if self.spec.satisfies('%gcc@:5.0.0'):
# Add arguments specific to gcc's earlier than 5.0.0
- Am I built with the ``debug`` variant:
.. code-block:: python
if self.spec.satisfies('+debug'):
# Add -g option to configure flags
- Is my ``dyninst`` dependency greater than version ``8.0``?
.. code-block:: python
if self.spec['dyninst'].satisfies('@8.0:'):
# Use newest dyninst options
More examples can be found in the thousands of packages already added to
Spack in ``$SPACK_ROOT/var/spack/repos/builtin/packages``.
Good Luck!

File diff suppressed because it is too large Load Diff

1198
lib/spack/docs/workflows.rst Normal file

File diff suppressed because it is too large Load Diff

228
lib/spack/env/cc vendored
View File

@@ -55,7 +55,10 @@ parameters=(
# The compiler input variables are checked for sanity later:
# 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
# Test command is used to unit test the compiler script.
# SPACK_TEST_COMMAND
@@ -99,21 +102,25 @@ case "$command" in
command="$SPACK_CC"
language="C"
comp="CC"
lang_flags=C
;;
c++|CC|g++|clang++|icpc|pgc++|xlc++)
command="$SPACK_CXX"
language="C++"
comp="CXX"
lang_flags=CXX
;;
f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
ftn|f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
command="$SPACK_FC"
language="Fortran 90"
comp="FC"
lang_flags=F
;;
f77|gfortran|ifort|pgfortran|xlf|nagfor)
f77|gfortran|ifort|pgfortran|xlf|nagfor|ftn)
command="$SPACK_F77"
language="Fortran 77"
comp="F77"
lang_flags=F
;;
ld)
mode=ld
@@ -131,7 +138,7 @@ if [[ -z $mode ]]; then
if [[ $arg == -v || $arg == -V || $arg == --version || $arg == -dumpversion ]]; then
mode=vcheck
break
fi
fi
done
fi
@@ -167,76 +174,18 @@ if [[ -z $command ]]; then
die "ERROR: Compiler '$SPACK_COMPILER_SPEC' does not support compiling $language programs."
fi
if [[ $mode == vcheck ]]; then
exec ${command} "$@"
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
input_command="$@"
args=("$@")
# Read spack dependencies from the path environment variable
IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
for dep in "${deps[@]}"; do
# Prepend include directories
if [[ -d $dep/include ]]; then
if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then
args=("-I$dep/include" "${args[@]}")
fi
fi
# Prepend lib and RPATH directories
if [[ -d $dep/lib ]]; then
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$dep/lib" "${args[@]}")
args=("-L$dep/lib" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
args=("-L$dep/lib" "${args[@]}")
fi
fi
# Prepend lib64 and RPATH directories
if [[ -d $dep/lib64 ]]; then
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$dep/lib64" "${args[@]}")
args=("-L$dep/lib64" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
args=("-L$dep/lib64" "${args[@]}")
fi
fi
#
# Set paths as defined in the 'environment' section of the compiler config
# names are stored in SPACK_ENV_TO_SET
# values are stored in SPACK_ENV_SET_<varname>
#
IFS=':' read -ra env_set_varnames <<< "$SPACK_ENV_TO_SET"
for varname in "${env_set_varnames[@]}"; do
spack_varname="SPACK_ENV_SET_$varname"
export $varname=${!spack_varname}
unset $spack_varname
done
# Include all -L's and prefix/whatever dirs in rpath
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib64" "${args[@]}")
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "${args[@]}")
fi
#
# Unset pesky environment variables that could affect build sanity.
#
unset LD_LIBRARY_PATH
unset LD_RUN_PATH
unset DYLD_LIBRARY_PATH
#
# Filter '.' and Spack environment directories out of PATH so that
# this script doesn't just call itself
@@ -259,6 +208,137 @@ for dir in "${env_path[@]}"; do
done
export PATH
if [[ $mode == vcheck ]]; then
exec ${command} "$@"
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 || $mode == ccld) && "$SPACK_SHORT_SPEC" =~ "darwin" ]]; then
for arg in "$@"; do
if [[ ($arg == -r && $mode == ld) || ($arg == -Wl,-r && $mode == ccld) ]]; then
add_rpaths=false
break
fi
done
fi
# Save original command for debug logging
input_command="$@"
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
IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES"
for dep in "${deps[@]}"; do
# Prepend include directories
if [[ -d $dep/include ]]; then
if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then
args=("-I$dep/include" "${args[@]}")
fi
fi
# Prepend lib and RPATH directories
if [[ -d $dep/lib ]]; then
if [[ $mode == ccld ]]; then
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
$add_rpaths && args=("$rpath$dep/lib" "${args[@]}")
fi
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
args=("-L$dep/lib" "${args[@]}")
fi
elif [[ $mode == ld ]]; then
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
$add_rpaths && args=("-rpath" "$dep/lib" "${args[@]}")
fi
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
args=("-L$dep/lib" "${args[@]}")
fi
fi
fi
# Prepend lib64 and RPATH directories
if [[ -d $dep/lib64 ]]; then
if [[ $mode == ccld ]]; then
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
$add_rpaths && args=("$rpath$dep/lib64" "${args[@]}")
fi
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
args=("-L$dep/lib64" "${args[@]}")
fi
elif [[ $mode == ld ]]; then
if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then
$add_rpaths && args=("-rpath" "$dep/lib64" "${args[@]}")
fi
if [[ $SPACK_LINK_DEPS == *$dep* ]]; then
args=("-L$dep/lib64" "${args[@]}")
fi
fi
fi
done
# Include all -L's and prefix/whatever dirs in rpath
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib64" "${args[@]}")
$add_rpaths && args=("$rpath$SPACK_PREFIX/lib" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib64" "${args[@]}")
$add_rpaths && args=("-rpath" "$SPACK_PREFIX/lib" "${args[@]}")
fi
# Set extra RPATHs
IFS=':' read -ra extra_rpaths <<< "$SPACK_COMPILER_EXTRA_RPATHS"
for extra_rpath in "${extra_rpaths[@]}"; do
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$extra_rpath" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$extra_rpath" "${args[@]}")
fi
done
# Add SPACK_LDLIBS to args
case "$mode" in
ld|ccld)
args=("${args[@]}" ${SPACK_LDLIBS[@]}) ;;
esac
full_command=("$command" "${args[@]}")
# In test command mode, write out full command for Spack tests.
@@ -275,8 +355,8 @@ fi
if [[ $SPACK_DEBUG == TRUE ]]; then
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"
echo "[$mode] $command $input_command" >> $input_log
echo "[$mode] ${full_command[@]}" >> $output_log
echo "[$mode] $command $input_command" >> "$input_log"
echo "[$mode] ${full_command[@]}" >> "$output_log"
fi
exec "${full_command[@]}"

1
lib/spack/env/clang/gfortran vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/cray/CC vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/cray/cc vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/cray/ftn vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/craype/CC vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/craype/cc vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

1
lib/spack/env/craype/ftn vendored Symbolic link
View File

@@ -0,0 +1 @@
../cc

View File

@@ -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.
#
# 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
#
# For details, see https://github.com/llnl/spack
# Please also see the LICENSE file for our notice and the LGPL.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License (as published by
# the Free Software Foundation) version 2.1 dated February 1999.
# 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 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
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# 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 external, potentially separately licensed,
@@ -29,10 +29,21 @@
So far:
argparse: We include our own version to be Python 2.6 compatible.
pyqver2: External script to query required python version of
python source code. Used for ensuring 2.6 compatibility.
distro: Provides a more stable linux distribution detection.
functools: Used for implementation of total_ordering.
jsonschema: An implementation of JSON Schema for Python.
ordereddict: We include our own version to be Python 2.6 compatible.
py: Needed by pytest. Library with cross-python path,
ini-parsing, io, code, and log facilities.
pyqver2: External script to query required python version of
python source code. Used for ensuring 2.6 compatibility.
pytest: Testing framework used by Spack.
yaml: Used for config files.
"""

141
lib/spack/external/_pytest/AUTHORS vendored Normal file
View File

@@ -0,0 +1,141 @@
Holger Krekel, holger at merlinux eu
merlinux GmbH, Germany, office at merlinux eu
Contributors include::
Abdeali JK
Abhijeet Kasurde
Ahn Ki-Wook
Alexei Kozlenok
Anatoly Bubenkoff
Andreas Zeidler
Andrzej Ostrowski
Andy Freeland
Anthon van der Neut
Antony Lee
Armin Rigo
Aron Curzon
Aviv Palivoda
Ben Webb
Benjamin Peterson
Bernard Pratz
Bob Ippolito
Brian Dorsey
Brian Okken
Brianna Laugher
Bruno Oliveira
Cal Leeming
Carl Friedrich Bolz
Charles Cloud
Charnjit SiNGH (CCSJ)
Chris Lamb
Christian Boelsen
Christian Theunert
Christian Tismer
Christopher Gilling
Daniel Grana
Daniel Hahler
Daniel Nuri
Daniel Wandschneider
Danielle Jenkins
Dave Hunt
David Díaz-Barquero
David Mohr
David Vierra
Diego Russo
Dmitry Dygalo
Duncan Betts
Edison Gustavo Muenz
Edoardo Batini
Eduardo Schettino
Elizaveta Shashkova
Endre Galaczi
Eric Hunsberger
Eric Siegerman
Erik M. Bray
Feng Ma
Florian Bruhin
Floris Bruynooghe
Gabriel Reis
Georgy Dyuldin
Graham Horler
Greg Price
Grig Gheorghiu
Grigorii Eremeev (budulianin)
Guido Wesdorp
Harald Armin Massa
Ian Bicking
Jaap Broekhuizen
Jan Balster
Janne Vanhala
Jason R. Coombs
Javier Domingo Cansino
Javier Romero
John Towler
Jon Sonesen
Jordan Guymon
Joshua Bronson
Jurko Gospodnetić
Justyna Janczyszyn
Kale Kundert
Katarzyna Jachim
Kevin Cox
Lee Kamentsky
Lev Maximov
Lukas Bednar
Luke Murphy
Maciek Fijalkowski
Maho
Marc Schlaich
Marcin Bachry
Mark Abramowitz
Markus Unterwaditzer
Martijn Faassen
Martin K. Scherer
Martin Prusse
Mathieu Clabaut
Matt Bachmann
Matt Williams
Matthias Hafner
mbyt
Michael Aquilina
Michael Birtwell
Michael Droettboom
Michael Seifert
Mike Lundy
Ned Batchelder
Neven Mundar
Nicolas Delaby
Oleg Pidsadnyi
Oliver Bestwalter
Omar Kohl
Pieter Mulder
Piotr Banaszkiewicz
Punyashloka Biswal
Quentin Pradet
Ralf Schmitt
Raphael Pierzina
Raquel Alegre
Roberto Polli
Romain Dorgueil
Roman Bolshakov
Ronny Pfannschmidt
Ross Lawley
Russel Winder
Ryan Wooden
Samuele Pedroni
Simon Gomizelj
Stefan Farmbauer
Stefan Zimmermann
Stefano Taschini
Steffen Allner
Stephan Obermann
Tareq Alayan
Ted Xiao
Thomas Grainger
Tom Viner
Trevor Bekolay
Tyler Goodlet
Vasily Kuznetsov
Wouter van Ackooy
Xuecong Liao

21
lib/spack/external/_pytest/LICENSE vendored Normal file
View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2004-2016 Holger Krekel and others
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

102
lib/spack/external/_pytest/README.rst vendored Normal file
View File

@@ -0,0 +1,102 @@
.. image:: http://docs.pytest.org/en/latest/_static/pytest1.png
:target: http://docs.pytest.org
:align: center
:alt: pytest
------
.. image:: https://img.shields.io/pypi/v/pytest.svg
:target: https://pypi.python.org/pypi/pytest
.. image:: https://img.shields.io/pypi/pyversions/pytest.svg
:target: https://pypi.python.org/pypi/pytest
.. image:: https://img.shields.io/coveralls/pytest-dev/pytest/master.svg
:target: https://coveralls.io/r/pytest-dev/pytest
.. image:: https://travis-ci.org/pytest-dev/pytest.svg?branch=master
:target: https://travis-ci.org/pytest-dev/pytest
.. image:: https://ci.appveyor.com/api/projects/status/mrgbjaua7t33pg6b?svg=true
:target: https://ci.appveyor.com/project/pytestbot/pytest
The ``pytest`` framework makes it easy to write small tests, yet
scales to support complex functional testing for applications and libraries.
An example of a simple test:
.. code-block:: python
# content of test_sample.py
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
To execute it::
$ pytest
============================= test session starts =============================
collected 1 items
test_sample.py F
================================== FAILURES ===================================
_________________________________ test_answer _________________________________
def test_answer():
> assert inc(3) == 5
E assert 4 == 5
E + where 4 = inc(3)
test_sample.py:5: AssertionError
========================== 1 failed in 0.04 seconds ===========================
Due to ``pytest``'s detailed assertion introspection, only plain ``assert`` statements are used. See `getting-started <http://docs.pytest.org/en/latest/getting-started.html#our-first-test-run>`_ for more examples.
Features
--------
- Detailed info on failing `assert statements <http://docs.pytest.org/en/latest/assert.html>`_ (no need to remember ``self.assert*`` names);
- `Auto-discovery
<http://docs.pytest.org/en/latest/goodpractices.html#python-test-discovery>`_
of test modules and functions;
- `Modular fixtures <http://docs.pytest.org/en/latest/fixture.html>`_ for
managing small or parametrized long-lived test resources;
- Can run `unittest <http://docs.pytest.org/en/latest/unittest.html>`_ (or trial),
`nose <http://docs.pytest.org/en/latest/nose.html>`_ test suites out of the box;
- Python2.6+, Python3.3+, PyPy-2.3, Jython-2.5 (untested);
- Rich plugin architecture, with over 150+ `external plugins <http://docs.pytest.org/en/latest/plugins.html#installing-external-plugins-searching>`_ and thriving community;
Documentation
-------------
For full documentation, including installation, tutorials and PDF documents, please see http://docs.pytest.org.
Bugs/Requests
-------------
Please use the `GitHub issue tracker <https://github.com/pytest-dev/pytest/issues>`_ to submit bugs or request features.
Changelog
---------
Consult the `Changelog <http://docs.pytest.org/en/latest/changelog.html>`__ page for fixes and enhancements of each version.
License
-------
Copyright Holger Krekel and others, 2004-2016.
Distributed under the terms of the `MIT`_ license, pytest is free and open source software.
.. _`MIT`: https://github.com/pytest-dev/pytest/blob/master/LICENSE

View File

@@ -0,0 +1,2 @@
#
__version__ = '3.0.5'

View File

@@ -0,0 +1,102 @@
"""allow bash-completion for argparse with argcomplete if installed
needs argcomplete>=0.5.6 for python 3.2/3.3 (older versions fail
to find the magic string, so _ARGCOMPLETE env. var is never set, and
this does not need special code.
argcomplete does not support python 2.5 (although the changes for that
are minor).
Function try_argcomplete(parser) should be called directly before
the call to ArgumentParser.parse_args().
The filescompleter is what you normally would use on the positional
arguments specification, in order to get "dirname/" after "dirn<TAB>"
instead of the default "dirname ":
optparser.add_argument(Config._file_or_dir, nargs='*'
).completer=filescompleter
Other, application specific, completers should go in the file
doing the add_argument calls as they need to be specified as .completer
attributes as well. (If argcomplete is not installed, the function the
attribute points to will not be used).
SPEEDUP
=======
The generic argcomplete script for bash-completion
(/etc/bash_completion.d/python-argcomplete.sh )
uses a python program to determine startup script generated by pip.
You can speed up completion somewhat by changing this script to include
# PYTHON_ARGCOMPLETE_OK
so the the python-argcomplete-check-easy-install-script does not
need to be called to find the entry point of the code and see if that is
marked with PYTHON_ARGCOMPLETE_OK
INSTALL/DEBUGGING
=================
To include this support in another application that has setup.py generated
scripts:
- add the line:
# PYTHON_ARGCOMPLETE_OK
near the top of the main python entry point
- include in the file calling parse_args():
from _argcomplete import try_argcomplete, filescompleter
, call try_argcomplete just before parse_args(), and optionally add
filescompleter to the positional arguments' add_argument()
If things do not work right away:
- switch on argcomplete debugging with (also helpful when doing custom
completers):
export _ARC_DEBUG=1
- run:
python-argcomplete-check-easy-install-script $(which appname)
echo $?
will echo 0 if the magic line has been found, 1 if not
- sometimes it helps to find early on errors using:
_ARGCOMPLETE=1 _ARC_DEBUG=1 appname
which should throw a KeyError: 'COMPLINE' (which is properly set by the
global argcomplete script).
"""
import sys
import os
from glob import glob
class FastFilesCompleter:
'Fast file completer class'
def __init__(self, directories=True):
self.directories = directories
def __call__(self, prefix, **kwargs):
"""only called on non option completions"""
if os.path.sep in prefix[1:]: #
prefix_dir = len(os.path.dirname(prefix) + os.path.sep)
else:
prefix_dir = 0
completion = []
globbed = []
if '*' not in prefix and '?' not in prefix:
if prefix[-1] == os.path.sep: # we are on unix, otherwise no bash
globbed.extend(glob(prefix + '.*'))
prefix += '*'
globbed.extend(glob(prefix))
for x in sorted(globbed):
if os.path.isdir(x):
x += '/'
# append stripping the prefix (like bash, not like compgen)
completion.append(x[prefix_dir:])
return completion
if os.environ.get('_ARGCOMPLETE'):
try:
import argcomplete.completers
except ImportError:
sys.exit(-1)
filescompleter = FastFilesCompleter()
def try_argcomplete(parser):
argcomplete.autocomplete(parser)
else:
def try_argcomplete(parser): pass
filescompleter = None

View File

@@ -0,0 +1,9 @@
""" python inspection/code generation API """
from .code import Code # noqa
from .code import ExceptionInfo # noqa
from .code import Frame # noqa
from .code import Traceback # noqa
from .code import getrawcode # noqa
from .source import Source # noqa
from .source import compile_ as compile # noqa
from .source import getfslineno # noqa

View File

@@ -0,0 +1,81 @@
# copied from python-2.7.3's traceback.py
# CHANGES:
# - some_str is replaced, trying to create unicode strings
#
import types
def format_exception_only(etype, value):
"""Format the exception part of a traceback.
The arguments are the exception type and value such as given by
sys.last_type and sys.last_value. The return value is a list of
strings, each ending in a newline.
Normally, the list contains a single string; however, for
SyntaxError exceptions, it contains several lines that (when
printed) display detailed information about where the syntax
error occurred.
The message indicating which exception occurred is always the last
string in the list.
"""
# An instance should not have a meaningful value parameter, but
# sometimes does, particularly for string exceptions, such as
# >>> raise string1, string2 # deprecated
#
# Clear these out first because issubtype(string1, SyntaxError)
# would throw another exception and mask the original problem.
if (isinstance(etype, BaseException) or
isinstance(etype, types.InstanceType) or
etype is None or type(etype) is str):
return [_format_final_exc_line(etype, value)]
stype = etype.__name__
if not issubclass(etype, SyntaxError):
return [_format_final_exc_line(stype, value)]
# It was a syntax error; show exactly where the problem was found.
lines = []
try:
msg, (filename, lineno, offset, badline) = value.args
except Exception:
pass
else:
filename = filename or "<string>"
lines.append(' File "%s", line %d\n' % (filename, lineno))
if badline is not None:
if isinstance(badline, bytes): # python 2 only
badline = badline.decode('utf-8', 'replace')
lines.append(u' %s\n' % badline.strip())
if offset is not None:
caretspace = badline.rstrip('\n')[:offset].lstrip()
# non-space whitespace (likes tabs) must be kept for alignment
caretspace = ((c.isspace() and c or ' ') for c in caretspace)
# only three spaces to account for offset1 == pos 0
lines.append(' %s^\n' % ''.join(caretspace))
value = msg
lines.append(_format_final_exc_line(stype, value))
return lines
def _format_final_exc_line(etype, value):
"""Return a list of a single line -- normal case for format_exception_only"""
valuestr = _some_str(value)
if value is None or not valuestr:
line = "%s\n" % etype
else:
line = "%s: %s\n" % (etype, valuestr)
return line
def _some_str(value):
try:
return unicode(value)
except Exception:
try:
return str(value)
except Exception:
pass
return '<unprintable %s object>' % type(value).__name__

861
lib/spack/external/_pytest/_code/code.py vendored Normal file
View File

@@ -0,0 +1,861 @@
import sys
from inspect import CO_VARARGS, CO_VARKEYWORDS
import re
from weakref import ref
import py
builtin_repr = repr
reprlib = py.builtin._tryimport('repr', 'reprlib')
if sys.version_info[0] >= 3:
from traceback import format_exception_only
else:
from ._py2traceback import format_exception_only
class Code(object):
""" wrapper around Python code objects """
def __init__(self, rawcode):
if not hasattr(rawcode, "co_filename"):
rawcode = getrawcode(rawcode)
try:
self.filename = rawcode.co_filename
self.firstlineno = rawcode.co_firstlineno - 1
self.name = rawcode.co_name
except AttributeError:
raise TypeError("not a code object: %r" %(rawcode,))
self.raw = rawcode
def __eq__(self, other):
return self.raw == other.raw
__hash__ = None
def __ne__(self, other):
return not self == other
@property
def path(self):
""" return a path object pointing to source code (note that it
might not point to an actually existing file). """
try:
p = py.path.local(self.raw.co_filename)
# maybe don't try this checking
if not p.check():
raise OSError("py.path check failed.")
except OSError:
# XXX maybe try harder like the weird logic
# in the standard lib [linecache.updatecache] does?
p = self.raw.co_filename
return p
@property
def fullsource(self):
""" return a _pytest._code.Source object for the full source file of the code
"""
from _pytest._code import source
full, _ = source.findsource(self.raw)
return full
def source(self):
""" return a _pytest._code.Source object for the code object's source only
"""
# return source only for that part of code
import _pytest._code
return _pytest._code.Source(self.raw)
def getargs(self, var=False):
""" return a tuple with the argument names for the code object
if 'var' is set True also return the names of the variable and
keyword arguments when present
"""
# handfull shortcut for getting args
raw = self.raw
argcount = raw.co_argcount
if var:
argcount += raw.co_flags & CO_VARARGS
argcount += raw.co_flags & CO_VARKEYWORDS
return raw.co_varnames[:argcount]
class Frame(object):
"""Wrapper around a Python frame holding f_locals and f_globals
in which expressions can be evaluated."""
def __init__(self, frame):
self.lineno = frame.f_lineno - 1
self.f_globals = frame.f_globals
self.f_locals = frame.f_locals
self.raw = frame
self.code = Code(frame.f_code)
@property
def statement(self):
""" statement this frame is at """
import _pytest._code
if self.code.fullsource is None:
return _pytest._code.Source("")
return self.code.fullsource.getstatement(self.lineno)
def eval(self, code, **vars):
""" evaluate 'code' in the frame
'vars' are optional additional local variables
returns the result of the evaluation
"""
f_locals = self.f_locals.copy()
f_locals.update(vars)
return eval(code, self.f_globals, f_locals)
def exec_(self, code, **vars):
""" exec 'code' in the frame
'vars' are optiona; additional local variables
"""
f_locals = self.f_locals.copy()
f_locals.update(vars)
py.builtin.exec_(code, self.f_globals, f_locals )
def repr(self, object):
""" return a 'safe' (non-recursive, one-line) string repr for 'object'
"""
return py.io.saferepr(object)
def is_true(self, object):
return object
def getargs(self, var=False):
""" return a list of tuples (name, value) for all arguments
if 'var' is set True also include the variable and keyword
arguments when present
"""
retval = []
for arg in self.code.getargs(var):
try:
retval.append((arg, self.f_locals[arg]))
except KeyError:
pass # this can occur when using Psyco
return retval
class TracebackEntry(object):
""" a single entry in a traceback """
_repr_style = None
exprinfo = None
def __init__(self, rawentry, excinfo=None):
self._excinfo = excinfo
self._rawentry = rawentry
self.lineno = rawentry.tb_lineno - 1
def set_repr_style(self, mode):
assert mode in ("short", "long")
self._repr_style = mode
@property
def frame(self):
import _pytest._code
return _pytest._code.Frame(self._rawentry.tb_frame)
@property
def relline(self):
return self.lineno - self.frame.code.firstlineno
def __repr__(self):
return "<TracebackEntry %s:%d>" %(self.frame.code.path, self.lineno+1)
@property
def statement(self):
""" _pytest._code.Source object for the current statement """
source = self.frame.code.fullsource
return source.getstatement(self.lineno)
@property
def path(self):
""" path to the source code """
return self.frame.code.path
def getlocals(self):
return self.frame.f_locals
locals = property(getlocals, None, None, "locals of underlaying frame")
def getfirstlinesource(self):
# on Jython this firstlineno can be -1 apparently
return max(self.frame.code.firstlineno, 0)
def getsource(self, astcache=None):
""" return failing source code. """
# we use the passed in astcache to not reparse asttrees
# within exception info printing
from _pytest._code.source import getstatementrange_ast
source = self.frame.code.fullsource
if source is None:
return None
key = astnode = None
if astcache is not None:
key = self.frame.code.path
if key is not None:
astnode = astcache.get(key, None)
start = self.getfirstlinesource()
try:
astnode, _, end = getstatementrange_ast(self.lineno, source,
astnode=astnode)
except SyntaxError:
end = self.lineno + 1
else:
if key is not None:
astcache[key] = astnode
return source[start:end]
source = property(getsource)
def ishidden(self):
""" return True if the current frame has a var __tracebackhide__
resolving to True
If __tracebackhide__ is a callable, it gets called with the
ExceptionInfo instance and can decide whether to hide the traceback.
mostly for internal use
"""
try:
tbh = self.frame.f_locals['__tracebackhide__']
except KeyError:
try:
tbh = self.frame.f_globals['__tracebackhide__']
except KeyError:
return False
if py.builtin.callable(tbh):
return tbh(None if self._excinfo is None else self._excinfo())
else:
return tbh
def __str__(self):
try:
fn = str(self.path)
except py.error.Error:
fn = '???'
name = self.frame.code.name
try:
line = str(self.statement).lstrip()
except KeyboardInterrupt:
raise
except:
line = "???"
return " File %r:%d in %s\n %s\n" %(fn, self.lineno+1, name, line)
def name(self):
return self.frame.code.raw.co_name
name = property(name, None, None, "co_name of underlaying code")
class Traceback(list):
""" Traceback objects encapsulate and offer higher level
access to Traceback entries.
"""
Entry = TracebackEntry
def __init__(self, tb, excinfo=None):
""" initialize from given python traceback object and ExceptionInfo """
self._excinfo = excinfo
if hasattr(tb, 'tb_next'):
def f(cur):
while cur is not None:
yield self.Entry(cur, excinfo=excinfo)
cur = cur.tb_next
list.__init__(self, f(tb))
else:
list.__init__(self, tb)
def cut(self, path=None, lineno=None, firstlineno=None, excludepath=None):
""" return a Traceback instance wrapping part of this Traceback
by provding any combination of path, lineno and firstlineno, the
first frame to start the to-be-returned traceback is determined
this allows cutting the first part of a Traceback instance e.g.
for formatting reasons (removing some uninteresting bits that deal
with handling of the exception/traceback)
"""
for x in self:
code = x.frame.code
codepath = code.path
if ((path is None or codepath == path) and
(excludepath is None or not hasattr(codepath, 'relto') or
not codepath.relto(excludepath)) and
(lineno is None or x.lineno == lineno) and
(firstlineno is None or x.frame.code.firstlineno == firstlineno)):
return Traceback(x._rawentry, self._excinfo)
return self
def __getitem__(self, key):
val = super(Traceback, self).__getitem__(key)
if isinstance(key, type(slice(0))):
val = self.__class__(val)
return val
def filter(self, fn=lambda x: not x.ishidden()):
""" return a Traceback instance with certain items removed
fn is a function that gets a single argument, a TracebackEntry
instance, and should return True when the item should be added
to the Traceback, False when not
by default this removes all the TracebackEntries which are hidden
(see ishidden() above)
"""
return Traceback(filter(fn, self), self._excinfo)
def getcrashentry(self):
""" return last non-hidden traceback entry that lead
to the exception of a traceback.
"""
for i in range(-1, -len(self)-1, -1):
entry = self[i]
if not entry.ishidden():
return entry
return self[-1]
def recursionindex(self):
""" return the index of the frame/TracebackEntry where recursion
originates if appropriate, None if no recursion occurred
"""
cache = {}
for i, entry in enumerate(self):
# id for the code.raw is needed to work around
# the strange metaprogramming in the decorator lib from pypi
# which generates code objects that have hash/value equality
#XXX needs a test
key = entry.frame.code.path, id(entry.frame.code.raw), entry.lineno
#print "checking for recursion at", key
l = cache.setdefault(key, [])
if l:
f = entry.frame
loc = f.f_locals
for otherloc in l:
if f.is_true(f.eval(co_equal,
__recursioncache_locals_1=loc,
__recursioncache_locals_2=otherloc)):
return i
l.append(entry.frame.f_locals)
return None
co_equal = compile('__recursioncache_locals_1 == __recursioncache_locals_2',
'?', 'eval')
class ExceptionInfo(object):
""" wraps sys.exc_info() objects and offers
help for navigating the traceback.
"""
_striptext = ''
def __init__(self, tup=None, exprinfo=None):
import _pytest._code
if tup is None:
tup = sys.exc_info()
if exprinfo is None and isinstance(tup[1], AssertionError):
exprinfo = getattr(tup[1], 'msg', None)
if exprinfo is None:
exprinfo = py._builtin._totext(tup[1])
if exprinfo and exprinfo.startswith('assert '):
self._striptext = 'AssertionError: '
self._excinfo = tup
#: the exception class
self.type = tup[0]
#: the exception instance
self.value = tup[1]
#: the exception raw traceback
self.tb = tup[2]
#: the exception type name
self.typename = self.type.__name__
#: the exception traceback (_pytest._code.Traceback instance)
self.traceback = _pytest._code.Traceback(self.tb, excinfo=ref(self))
def __repr__(self):
return "<ExceptionInfo %s tblen=%d>" % (self.typename, len(self.traceback))
def exconly(self, tryshort=False):
""" return the exception as a string
when 'tryshort' resolves to True, and the exception is a
_pytest._code._AssertionError, only the actual exception part of
the exception representation is returned (so 'AssertionError: ' is
removed from the beginning)
"""
lines = format_exception_only(self.type, self.value)
text = ''.join(lines)
text = text.rstrip()
if tryshort:
if text.startswith(self._striptext):
text = text[len(self._striptext):]
return text
def errisinstance(self, exc):
""" return True if the exception is an instance of exc """
return isinstance(self.value, exc)
def _getreprcrash(self):
exconly = self.exconly(tryshort=True)
entry = self.traceback.getcrashentry()
path, lineno = entry.frame.code.raw.co_filename, entry.lineno
return ReprFileLocation(path, lineno+1, exconly)
def getrepr(self, showlocals=False, style="long",
abspath=False, tbfilter=True, funcargs=False):
""" return str()able representation of this exception info.
showlocals: show locals per traceback entry
style: long|short|no|native traceback style
tbfilter: hide entries (where __tracebackhide__ is true)
in case of style==native, tbfilter and showlocals is ignored.
"""
if style == 'native':
return ReprExceptionInfo(ReprTracebackNative(
py.std.traceback.format_exception(
self.type,
self.value,
self.traceback[0]._rawentry,
)), self._getreprcrash())
fmt = FormattedExcinfo(showlocals=showlocals, style=style,
abspath=abspath, tbfilter=tbfilter, funcargs=funcargs)
return fmt.repr_excinfo(self)
def __str__(self):
entry = self.traceback[-1]
loc = ReprFileLocation(entry.path, entry.lineno + 1, self.exconly())
return str(loc)
def __unicode__(self):
entry = self.traceback[-1]
loc = ReprFileLocation(entry.path, entry.lineno + 1, self.exconly())
return unicode(loc)
def match(self, regexp):
"""
Match the regular expression 'regexp' on the string representation of
the exception. If it matches then True is returned (so that it is
possible to write 'assert excinfo.match()'). If it doesn't match an
AssertionError is raised.
"""
__tracebackhide__ = True
if not re.search(regexp, str(self.value)):
assert 0, "Pattern '{0!s}' not found in '{1!s}'".format(
regexp, self.value)
return True
class FormattedExcinfo(object):
""" presenting information about failing Functions and Generators. """
# for traceback entries
flow_marker = ">"
fail_marker = "E"
def __init__(self, showlocals=False, style="long", abspath=True, tbfilter=True, funcargs=False):
self.showlocals = showlocals
self.style = style
self.tbfilter = tbfilter
self.funcargs = funcargs
self.abspath = abspath
self.astcache = {}
def _getindent(self, source):
# figure out indent for given source
try:
s = str(source.getstatement(len(source)-1))
except KeyboardInterrupt:
raise
except:
try:
s = str(source[-1])
except KeyboardInterrupt:
raise
except:
return 0
return 4 + (len(s) - len(s.lstrip()))
def _getentrysource(self, entry):
source = entry.getsource(self.astcache)
if source is not None:
source = source.deindent()
return source
def _saferepr(self, obj):
return py.io.saferepr(obj)
def repr_args(self, entry):
if self.funcargs:
args = []
for argname, argvalue in entry.frame.getargs(var=True):
args.append((argname, self._saferepr(argvalue)))
return ReprFuncArgs(args)
def get_source(self, source, line_index=-1, excinfo=None, short=False):
""" return formatted and marked up source lines. """
import _pytest._code
lines = []
if source is None or line_index >= len(source.lines):
source = _pytest._code.Source("???")
line_index = 0
if line_index < 0:
line_index += len(source)
space_prefix = " "
if short:
lines.append(space_prefix + source.lines[line_index].strip())
else:
for line in source.lines[:line_index]:
lines.append(space_prefix + line)
lines.append(self.flow_marker + " " + source.lines[line_index])
for line in source.lines[line_index+1:]:
lines.append(space_prefix + line)
if excinfo is not None:
indent = 4 if short else self._getindent(source)
lines.extend(self.get_exconly(excinfo, indent=indent, markall=True))
return lines
def get_exconly(self, excinfo, indent=4, markall=False):
lines = []
indent = " " * indent
# get the real exception information out
exlines = excinfo.exconly(tryshort=True).split('\n')
failindent = self.fail_marker + indent[1:]
for line in exlines:
lines.append(failindent + line)
if not markall:
failindent = indent
return lines
def repr_locals(self, locals):
if self.showlocals:
lines = []
keys = [loc for loc in locals if loc[0] != "@"]
keys.sort()
for name in keys:
value = locals[name]
if name == '__builtins__':
lines.append("__builtins__ = <builtins>")
else:
# This formatting could all be handled by the
# _repr() function, which is only reprlib.Repr in
# disguise, so is very configurable.
str_repr = self._saferepr(value)
#if len(str_repr) < 70 or not isinstance(value,
# (list, tuple, dict)):
lines.append("%-10s = %s" %(name, str_repr))
#else:
# self._line("%-10s =\\" % (name,))
# # XXX
# py.std.pprint.pprint(value, stream=self.excinfowriter)
return ReprLocals(lines)
def repr_traceback_entry(self, entry, excinfo=None):
import _pytest._code
source = self._getentrysource(entry)
if source is None:
source = _pytest._code.Source("???")
line_index = 0
else:
# entry.getfirstlinesource() can be -1, should be 0 on jython
line_index = entry.lineno - max(entry.getfirstlinesource(), 0)
lines = []
style = entry._repr_style
if style is None:
style = self.style
if style in ("short", "long"):
short = style == "short"
reprargs = self.repr_args(entry) if not short else None
s = self.get_source(source, line_index, excinfo, short=short)
lines.extend(s)
if short:
message = "in %s" %(entry.name)
else:
message = excinfo and excinfo.typename or ""
path = self._makepath(entry.path)
filelocrepr = ReprFileLocation(path, entry.lineno+1, message)
localsrepr = None
if not short:
localsrepr = self.repr_locals(entry.locals)
return ReprEntry(lines, reprargs, localsrepr, filelocrepr, style)
if excinfo:
lines.extend(self.get_exconly(excinfo, indent=4))
return ReprEntry(lines, None, None, None, style)
def _makepath(self, path):
if not self.abspath:
try:
np = py.path.local().bestrelpath(path)
except OSError:
return path
if len(np) < len(str(path)):
path = np
return path
def repr_traceback(self, excinfo):
traceback = excinfo.traceback
if self.tbfilter:
traceback = traceback.filter()
recursionindex = None
if is_recursion_error(excinfo):
recursionindex = traceback.recursionindex()
last = traceback[-1]
entries = []
extraline = None
for index, entry in enumerate(traceback):
einfo = (last == entry) and excinfo or None
reprentry = self.repr_traceback_entry(entry, einfo)
entries.append(reprentry)
if index == recursionindex:
extraline = "!!! Recursion detected (same locals & position)"
break
return ReprTraceback(entries, extraline, style=self.style)
def repr_excinfo(self, excinfo):
if sys.version_info[0] < 3:
reprtraceback = self.repr_traceback(excinfo)
reprcrash = excinfo._getreprcrash()
return ReprExceptionInfo(reprtraceback, reprcrash)
else:
repr_chain = []
e = excinfo.value
descr = None
while e is not None:
if excinfo:
reprtraceback = self.repr_traceback(excinfo)
reprcrash = excinfo._getreprcrash()
else:
# fallback to native repr if the exception doesn't have a traceback:
# ExceptionInfo objects require a full traceback to work
reprtraceback = ReprTracebackNative(py.std.traceback.format_exception(type(e), e, None))
reprcrash = None
repr_chain += [(reprtraceback, reprcrash, descr)]
if e.__cause__ is not None:
e = e.__cause__
excinfo = ExceptionInfo((type(e), e, e.__traceback__)) if e.__traceback__ else None
descr = 'The above exception was the direct cause of the following exception:'
elif e.__context__ is not None:
e = e.__context__
excinfo = ExceptionInfo((type(e), e, e.__traceback__)) if e.__traceback__ else None
descr = 'During handling of the above exception, another exception occurred:'
else:
e = None
repr_chain.reverse()
return ExceptionChainRepr(repr_chain)
class TerminalRepr(object):
def __str__(self):
s = self.__unicode__()
if sys.version_info[0] < 3:
s = s.encode('utf-8')
return s
def __unicode__(self):
# FYI this is called from pytest-xdist's serialization of exception
# information.
io = py.io.TextIO()
tw = py.io.TerminalWriter(file=io)
self.toterminal(tw)
return io.getvalue().strip()
def __repr__(self):
return "<%s instance at %0x>" %(self.__class__, id(self))
class ExceptionRepr(TerminalRepr):
def __init__(self):
self.sections = []
def addsection(self, name, content, sep="-"):
self.sections.append((name, content, sep))
def toterminal(self, tw):
for name, content, sep in self.sections:
tw.sep(sep, name)
tw.line(content)
class ExceptionChainRepr(ExceptionRepr):
def __init__(self, chain):
super(ExceptionChainRepr, self).__init__()
self.chain = chain
# reprcrash and reprtraceback of the outermost (the newest) exception
# in the chain
self.reprtraceback = chain[-1][0]
self.reprcrash = chain[-1][1]
def toterminal(self, tw):
for element in self.chain:
element[0].toterminal(tw)
if element[2] is not None:
tw.line("")
tw.line(element[2], yellow=True)
super(ExceptionChainRepr, self).toterminal(tw)
class ReprExceptionInfo(ExceptionRepr):
def __init__(self, reprtraceback, reprcrash):
super(ReprExceptionInfo, self).__init__()
self.reprtraceback = reprtraceback
self.reprcrash = reprcrash
def toterminal(self, tw):
self.reprtraceback.toterminal(tw)
super(ReprExceptionInfo, self).toterminal(tw)
class ReprTraceback(TerminalRepr):
entrysep = "_ "
def __init__(self, reprentries, extraline, style):
self.reprentries = reprentries
self.extraline = extraline
self.style = style
def toterminal(self, tw):
# the entries might have different styles
for i, entry in enumerate(self.reprentries):
if entry.style == "long":
tw.line("")
entry.toterminal(tw)
if i < len(self.reprentries) - 1:
next_entry = self.reprentries[i+1]
if entry.style == "long" or \
entry.style == "short" and next_entry.style == "long":
tw.sep(self.entrysep)
if self.extraline:
tw.line(self.extraline)
class ReprTracebackNative(ReprTraceback):
def __init__(self, tblines):
self.style = "native"
self.reprentries = [ReprEntryNative(tblines)]
self.extraline = None
class ReprEntryNative(TerminalRepr):
style = "native"
def __init__(self, tblines):
self.lines = tblines
def toterminal(self, tw):
tw.write("".join(self.lines))
class ReprEntry(TerminalRepr):
localssep = "_ "
def __init__(self, lines, reprfuncargs, reprlocals, filelocrepr, style):
self.lines = lines
self.reprfuncargs = reprfuncargs
self.reprlocals = reprlocals
self.reprfileloc = filelocrepr
self.style = style
def toterminal(self, tw):
if self.style == "short":
self.reprfileloc.toterminal(tw)
for line in self.lines:
red = line.startswith("E ")
tw.line(line, bold=True, red=red)
#tw.line("")
return
if self.reprfuncargs:
self.reprfuncargs.toterminal(tw)
for line in self.lines:
red = line.startswith("E ")
tw.line(line, bold=True, red=red)
if self.reprlocals:
#tw.sep(self.localssep, "Locals")
tw.line("")
self.reprlocals.toterminal(tw)
if self.reprfileloc:
if self.lines:
tw.line("")
self.reprfileloc.toterminal(tw)
def __str__(self):
return "%s\n%s\n%s" % ("\n".join(self.lines),
self.reprlocals,
self.reprfileloc)
class ReprFileLocation(TerminalRepr):
def __init__(self, path, lineno, message):
self.path = str(path)
self.lineno = lineno
self.message = message
def toterminal(self, tw):
# filename and lineno output for each entry,
# using an output format that most editors unterstand
msg = self.message
i = msg.find("\n")
if i != -1:
msg = msg[:i]
tw.write(self.path, bold=True, red=True)
tw.line(":%s: %s" % (self.lineno, msg))
class ReprLocals(TerminalRepr):
def __init__(self, lines):
self.lines = lines
def toterminal(self, tw):
for line in self.lines:
tw.line(line)
class ReprFuncArgs(TerminalRepr):
def __init__(self, args):
self.args = args
def toterminal(self, tw):
if self.args:
linesofar = ""
for name, value in self.args:
ns = "%s = %s" %(name, value)
if len(ns) + len(linesofar) + 2 > tw.fullwidth:
if linesofar:
tw.line(linesofar)
linesofar = ns
else:
if linesofar:
linesofar += ", " + ns
else:
linesofar = ns
if linesofar:
tw.line(linesofar)
tw.line("")
def getrawcode(obj, trycall=True):
""" return code object for given function. """
try:
return obj.__code__
except AttributeError:
obj = getattr(obj, 'im_func', obj)
obj = getattr(obj, 'func_code', obj)
obj = getattr(obj, 'f_code', obj)
obj = getattr(obj, '__code__', obj)
if trycall and not hasattr(obj, 'co_firstlineno'):
if hasattr(obj, '__call__') and not py.std.inspect.isclass(obj):
x = getrawcode(obj.__call__, trycall=False)
if hasattr(x, 'co_firstlineno'):
return x
return obj
if sys.version_info[:2] >= (3, 5): # RecursionError introduced in 3.5
def is_recursion_error(excinfo):
return excinfo.errisinstance(RecursionError) # noqa
else:
def is_recursion_error(excinfo):
if not excinfo.errisinstance(RuntimeError):
return False
try:
return "maximum recursion depth exceeded" in str(excinfo.value)
except UnicodeError:
return False

View File

@@ -0,0 +1,414 @@
from __future__ import generators
from bisect import bisect_right
import sys
import inspect, tokenize
import py
cpy_compile = compile
try:
import _ast
from _ast import PyCF_ONLY_AST as _AST_FLAG
except ImportError:
_AST_FLAG = 0
_ast = None
class Source(object):
""" a immutable object holding a source code fragment,
possibly deindenting it.
"""
_compilecounter = 0
def __init__(self, *parts, **kwargs):
self.lines = lines = []
de = kwargs.get('deindent', True)
rstrip = kwargs.get('rstrip', True)
for part in parts:
if not part:
partlines = []
if isinstance(part, Source):
partlines = part.lines
elif isinstance(part, (tuple, list)):
partlines = [x.rstrip("\n") for x in part]
elif isinstance(part, py.builtin._basestring):
partlines = part.split('\n')
if rstrip:
while partlines:
if partlines[-1].strip():
break
partlines.pop()
else:
partlines = getsource(part, deindent=de).lines
if de:
partlines = deindent(partlines)
lines.extend(partlines)
def __eq__(self, other):
try:
return self.lines == other.lines
except AttributeError:
if isinstance(other, str):
return str(self) == other
return False
__hash__ = None
def __getitem__(self, key):
if isinstance(key, int):
return self.lines[key]
else:
if key.step not in (None, 1):
raise IndexError("cannot slice a Source with a step")
newsource = Source()
newsource.lines = self.lines[key.start:key.stop]
return newsource
def __len__(self):
return len(self.lines)
def strip(self):
""" return new source object with trailing
and leading blank lines removed.
"""
start, end = 0, len(self)
while start < end and not self.lines[start].strip():
start += 1
while end > start and not self.lines[end-1].strip():
end -= 1
source = Source()
source.lines[:] = self.lines[start:end]
return source
def putaround(self, before='', after='', indent=' ' * 4):
""" return a copy of the source object with
'before' and 'after' wrapped around it.
"""
before = Source(before)
after = Source(after)
newsource = Source()
lines = [ (indent + line) for line in self.lines]
newsource.lines = before.lines + lines + after.lines
return newsource
def indent(self, indent=' ' * 4):
""" return a copy of the source object with
all lines indented by the given indent-string.
"""
newsource = Source()
newsource.lines = [(indent+line) for line in self.lines]
return newsource
def getstatement(self, lineno, assertion=False):
""" return Source statement which contains the
given linenumber (counted from 0).
"""
start, end = self.getstatementrange(lineno, assertion)
return self[start:end]
def getstatementrange(self, lineno, assertion=False):
""" return (start, end) tuple which spans the minimal
statement region which containing the given lineno.
"""
if not (0 <= lineno < len(self)):
raise IndexError("lineno out of range")
ast, start, end = getstatementrange_ast(lineno, self)
return start, end
def deindent(self, offset=None):
""" return a new source object deindented by offset.
If offset is None then guess an indentation offset from
the first non-blank line. Subsequent lines which have a
lower indentation offset will be copied verbatim as
they are assumed to be part of multilines.
"""
# XXX maybe use the tokenizer to properly handle multiline
# strings etc.pp?
newsource = Source()
newsource.lines[:] = deindent(self.lines, offset)
return newsource
def isparseable(self, deindent=True):
""" return True if source is parseable, heuristically
deindenting it by default.
"""
try:
import parser
except ImportError:
syntax_checker = lambda x: compile(x, 'asd', 'exec')
else:
syntax_checker = parser.suite
if deindent:
source = str(self.deindent())
else:
source = str(self)
try:
#compile(source+'\n', "x", "exec")
syntax_checker(source+'\n')
except KeyboardInterrupt:
raise
except Exception:
return False
else:
return True
def __str__(self):
return "\n".join(self.lines)
def compile(self, filename=None, mode='exec',
flag=generators.compiler_flag,
dont_inherit=0, _genframe=None):
""" return compiled code object. if filename is None
invent an artificial filename which displays
the source/line position of the caller frame.
"""
if not filename or py.path.local(filename).check(file=0):
if _genframe is None:
_genframe = sys._getframe(1) # the caller
fn,lineno = _genframe.f_code.co_filename, _genframe.f_lineno
base = "<%d-codegen " % self._compilecounter
self.__class__._compilecounter += 1
if not filename:
filename = base + '%s:%d>' % (fn, lineno)
else:
filename = base + '%r %s:%d>' % (filename, fn, lineno)
source = "\n".join(self.lines) + '\n'
try:
co = cpy_compile(source, filename, mode, flag)
except SyntaxError:
ex = sys.exc_info()[1]
# re-represent syntax errors from parsing python strings
msglines = self.lines[:ex.lineno]
if ex.offset:
msglines.append(" "*ex.offset + '^')
msglines.append("(code was compiled probably from here: %s)" % filename)
newex = SyntaxError('\n'.join(msglines))
newex.offset = ex.offset
newex.lineno = ex.lineno
newex.text = ex.text
raise newex
else:
if flag & _AST_FLAG:
return co
lines = [(x + "\n") for x in self.lines]
py.std.linecache.cache[filename] = (1, None, lines, filename)
return co
#
# public API shortcut functions
#
def compile_(source, filename=None, mode='exec', flags=
generators.compiler_flag, dont_inherit=0):
""" compile the given source to a raw code object,
and maintain an internal cache which allows later
retrieval of the source code for the code object
and any recursively created code objects.
"""
if _ast is not None and isinstance(source, _ast.AST):
# XXX should Source support having AST?
return cpy_compile(source, filename, mode, flags, dont_inherit)
_genframe = sys._getframe(1) # the caller
s = Source(source)
co = s.compile(filename, mode, flags, _genframe=_genframe)
return co
def getfslineno(obj):
""" Return source location (path, lineno) for the given object.
If the source cannot be determined return ("", -1)
"""
import _pytest._code
try:
code = _pytest._code.Code(obj)
except TypeError:
try:
fn = (py.std.inspect.getsourcefile(obj) or
py.std.inspect.getfile(obj))
except TypeError:
return "", -1
fspath = fn and py.path.local(fn) or None
lineno = -1
if fspath:
try:
_, lineno = findsource(obj)
except IOError:
pass
else:
fspath = code.path
lineno = code.firstlineno
assert isinstance(lineno, int)
return fspath, lineno
#
# helper functions
#
def findsource(obj):
try:
sourcelines, lineno = py.std.inspect.findsource(obj)
except py.builtin._sysex:
raise
except:
return None, -1
source = Source()
source.lines = [line.rstrip() for line in sourcelines]
return source, lineno
def getsource(obj, **kwargs):
import _pytest._code
obj = _pytest._code.getrawcode(obj)
try:
strsrc = inspect.getsource(obj)
except IndentationError:
strsrc = "\"Buggy python version consider upgrading, cannot get source\""
assert isinstance(strsrc, str)
return Source(strsrc, **kwargs)
def deindent(lines, offset=None):
if offset is None:
for line in lines:
line = line.expandtabs()
s = line.lstrip()
if s:
offset = len(line)-len(s)
break
else:
offset = 0
if offset == 0:
return list(lines)
newlines = []
def readline_generator(lines):
for line in lines:
yield line + '\n'
while True:
yield ''
it = readline_generator(lines)
try:
for _, _, (sline, _), (eline, _), _ in tokenize.generate_tokens(lambda: next(it)):
if sline > len(lines):
break # End of input reached
if sline > len(newlines):
line = lines[sline - 1].expandtabs()
if line.lstrip() and line[:offset].isspace():
line = line[offset:] # Deindent
newlines.append(line)
for i in range(sline, eline):
# Don't deindent continuing lines of
# multiline tokens (i.e. multiline strings)
newlines.append(lines[i])
except (IndentationError, tokenize.TokenError):
pass
# Add any lines we didn't see. E.g. if an exception was raised.
newlines.extend(lines[len(newlines):])
return newlines
def get_statement_startend2(lineno, node):
import ast
# flatten all statements and except handlers into one lineno-list
# AST's line numbers start indexing at 1
l = []
for x in ast.walk(node):
if isinstance(x, _ast.stmt) or isinstance(x, _ast.ExceptHandler):
l.append(x.lineno - 1)
for name in "finalbody", "orelse":
val = getattr(x, name, None)
if val:
# treat the finally/orelse part as its own statement
l.append(val[0].lineno - 1 - 1)
l.sort()
insert_index = bisect_right(l, lineno)
start = l[insert_index - 1]
if insert_index >= len(l):
end = None
else:
end = l[insert_index]
return start, end
def getstatementrange_ast(lineno, source, assertion=False, astnode=None):
if astnode is None:
content = str(source)
if sys.version_info < (2,7):
content += "\n"
try:
astnode = compile(content, "source", "exec", 1024) # 1024 for AST
except ValueError:
start, end = getstatementrange_old(lineno, source, assertion)
return None, start, end
start, end = get_statement_startend2(lineno, astnode)
# we need to correct the end:
# - ast-parsing strips comments
# - there might be empty lines
# - we might have lesser indented code blocks at the end
if end is None:
end = len(source.lines)
if end > start + 1:
# make sure we don't span differently indented code blocks
# by using the BlockFinder helper used which inspect.getsource() uses itself
block_finder = inspect.BlockFinder()
# if we start with an indented line, put blockfinder to "started" mode
block_finder.started = source.lines[start][0].isspace()
it = ((x + "\n") for x in source.lines[start:end])
try:
for tok in tokenize.generate_tokens(lambda: next(it)):
block_finder.tokeneater(*tok)
except (inspect.EndOfBlock, IndentationError):
end = block_finder.last + start
except Exception:
pass
# the end might still point to a comment or empty line, correct it
while end:
line = source.lines[end - 1].lstrip()
if line.startswith("#") or not line:
end -= 1
else:
break
return astnode, start, end
def getstatementrange_old(lineno, source, assertion=False):
""" return (start, end) tuple which spans the minimal
statement region which containing the given lineno.
raise an IndexError if no such statementrange can be found.
"""
# XXX this logic is only used on python2.4 and below
# 1. find the start of the statement
from codeop import compile_command
for start in range(lineno, -1, -1):
if assertion:
line = source.lines[start]
# the following lines are not fully tested, change with care
if 'super' in line and 'self' in line and '__init__' in line:
raise IndexError("likely a subclass")
if "assert" not in line and "raise" not in line:
continue
trylines = source.lines[start:lineno+1]
# quick hack to prepare parsing an indented line with
# compile_command() (which errors on "return" outside defs)
trylines.insert(0, 'def xxx():')
trysource = '\n '.join(trylines)
# ^ space here
try:
compile_command(trysource)
except (SyntaxError, OverflowError, ValueError):
continue
# 2. find the end of the statement
for end in range(lineno+1, len(source)+1):
trysource = source[start:end]
if trysource.isparseable():
return start, end
raise SyntaxError("no valid source range around line %d " % (lineno,))

11
lib/spack/external/_pytest/_pluggy.py vendored Normal file
View File

@@ -0,0 +1,11 @@
"""
imports symbols from vendored "pluggy" if available, otherwise
falls back to importing "pluggy" from the default namespace.
"""
try:
from _pytest.vendored_packages.pluggy import * # noqa
from _pytest.vendored_packages.pluggy import __version__ # noqa
except ImportError:
from pluggy import * # noqa
from pluggy import __version__ # noqa

View File

@@ -0,0 +1,164 @@
"""
support for presenting detailed information in failing assertions.
"""
import py
import os
import sys
from _pytest.assertion import util
from _pytest.assertion import rewrite
def pytest_addoption(parser):
group = parser.getgroup("debugconfig")
group.addoption('--assert',
action="store",
dest="assertmode",
choices=("rewrite", "plain",),
default="rewrite",
metavar="MODE",
help="""Control assertion debugging tools. 'plain'
performs no assertion debugging. 'rewrite'
(the default) rewrites assert statements in
test modules on import to provide assert
expression information.""")
def pytest_namespace():
return {'register_assert_rewrite': register_assert_rewrite}
def register_assert_rewrite(*names):
"""Register one or more module names to be rewritten on import.
This function will make sure that this module or all modules inside
the package will get their assert statements rewritten.
Thus you should make sure to call this before the module is
actually imported, usually in your __init__.py if you are a plugin
using a package.
:raise TypeError: if the given module names are not strings.
"""
for name in names:
if not isinstance(name, str):
msg = 'expected module names as *args, got {0} instead'
raise TypeError(msg.format(repr(names)))
for hook in sys.meta_path:
if isinstance(hook, rewrite.AssertionRewritingHook):
importhook = hook
break
else:
importhook = DummyRewriteHook()
importhook.mark_rewrite(*names)
class DummyRewriteHook(object):
"""A no-op import hook for when rewriting is disabled."""
def mark_rewrite(self, *names):
pass
class AssertionState:
"""State for the assertion plugin."""
def __init__(self, config, mode):
self.mode = mode
self.trace = config.trace.root.get("assertion")
self.hook = None
def install_importhook(config):
"""Try to install the rewrite hook, raise SystemError if it fails."""
# Both Jython and CPython 2.6.0 have AST bugs that make the
# assertion rewriting hook malfunction.
if (sys.platform.startswith('java') or
sys.version_info[:3] == (2, 6, 0)):
raise SystemError('rewrite not supported')
config._assertstate = AssertionState(config, 'rewrite')
config._assertstate.hook = hook = rewrite.AssertionRewritingHook(config)
sys.meta_path.insert(0, hook)
config._assertstate.trace('installed rewrite import hook')
def undo():
hook = config._assertstate.hook
if hook is not None and hook in sys.meta_path:
sys.meta_path.remove(hook)
config.add_cleanup(undo)
return hook
def pytest_collection(session):
# this hook is only called when test modules are collected
# so for example not in the master process of pytest-xdist
# (which does not collect test modules)
assertstate = getattr(session.config, '_assertstate', None)
if assertstate:
if assertstate.hook is not None:
assertstate.hook.set_session(session)
def _running_on_ci():
"""Check if we're currently running on a CI system."""
env_vars = ['CI', 'BUILD_NUMBER']
return any(var in os.environ for var in env_vars)
def pytest_runtest_setup(item):
"""Setup the pytest_assertrepr_compare hook
The newinterpret and rewrite modules will use util._reprcompare if
it exists to use custom reporting via the
pytest_assertrepr_compare hook. This sets up this custom
comparison for the test.
"""
def callbinrepr(op, left, right):
"""Call the pytest_assertrepr_compare hook and prepare the result
This uses the first result from the hook and then ensures the
following:
* Overly verbose explanations are dropped unless -vv was used or
running on a CI.
* Embedded newlines are escaped to help util.format_explanation()
later.
* If the rewrite mode is used embedded %-characters are replaced
to protect later % formatting.
The result can be formatted by util.format_explanation() for
pretty printing.
"""
hook_result = item.ihook.pytest_assertrepr_compare(
config=item.config, op=op, left=left, right=right)
for new_expl in hook_result:
if new_expl:
if (sum(len(p) for p in new_expl[1:]) > 80*8 and
item.config.option.verbose < 2 and
not _running_on_ci()):
show_max = 10
truncated_lines = len(new_expl) - show_max
new_expl[show_max:] = [py.builtin._totext(
'Detailed information truncated (%d more lines)'
', use "-vv" to show' % truncated_lines)]
new_expl = [line.replace("\n", "\\n") for line in new_expl]
res = py.builtin._totext("\n~").join(new_expl)
if item.config.getvalue("assertmode") == "rewrite":
res = res.replace("%", "%%")
return res
util._reprcompare = callbinrepr
def pytest_runtest_teardown(item):
util._reprcompare = None
def pytest_sessionfinish(session):
assertstate = getattr(session.config, '_assertstate', None)
if assertstate:
if assertstate.hook is not None:
assertstate.hook.set_session(None)
# Expose this plugin's implementation for the pytest_assertrepr_compare hook
pytest_assertrepr_compare = util.assertrepr_compare

View File

@@ -0,0 +1,945 @@
"""Rewrite assertion AST to produce nice error messages"""
import ast
import _ast
import errno
import itertools
import imp
import marshal
import os
import re
import struct
import sys
import types
from fnmatch import fnmatch
import py
from _pytest.assertion import util
# pytest caches rewritten pycs in __pycache__.
if hasattr(imp, "get_tag"):
PYTEST_TAG = imp.get_tag() + "-PYTEST"
else:
if hasattr(sys, "pypy_version_info"):
impl = "pypy"
elif sys.platform == "java":
impl = "jython"
else:
impl = "cpython"
ver = sys.version_info
PYTEST_TAG = "%s-%s%s-PYTEST" % (impl, ver[0], ver[1])
del ver, impl
PYC_EXT = ".py" + (__debug__ and "c" or "o")
PYC_TAIL = "." + PYTEST_TAG + PYC_EXT
REWRITE_NEWLINES = sys.version_info[:2] != (2, 7) and sys.version_info < (3, 2)
ASCII_IS_DEFAULT_ENCODING = sys.version_info[0] < 3
if sys.version_info >= (3,5):
ast_Call = ast.Call
else:
ast_Call = lambda a,b,c: ast.Call(a, b, c, None, None)
class AssertionRewritingHook(object):
"""PEP302 Import hook which rewrites asserts."""
def __init__(self, config):
self.config = config
self.fnpats = config.getini("python_files")
self.session = None
self.modules = {}
self._rewritten_names = set()
self._register_with_pkg_resources()
self._must_rewrite = set()
def set_session(self, session):
self.session = session
def find_module(self, name, path=None):
state = self.config._assertstate
state.trace("find_module called for: %s" % name)
names = name.rsplit(".", 1)
lastname = names[-1]
pth = None
if path is not None:
# Starting with Python 3.3, path is a _NamespacePath(), which
# causes problems if not converted to list.
path = list(path)
if len(path) == 1:
pth = path[0]
if pth is None:
try:
fd, fn, desc = imp.find_module(lastname, path)
except ImportError:
return None
if fd is not None:
fd.close()
tp = desc[2]
if tp == imp.PY_COMPILED:
if hasattr(imp, "source_from_cache"):
try:
fn = imp.source_from_cache(fn)
except ValueError:
# Python 3 doesn't like orphaned but still-importable
# .pyc files.
fn = fn[:-1]
else:
fn = fn[:-1]
elif tp != imp.PY_SOURCE:
# Don't know what this is.
return None
else:
fn = os.path.join(pth, name.rpartition(".")[2] + ".py")
fn_pypath = py.path.local(fn)
if not self._should_rewrite(name, fn_pypath, state):
return None
self._rewritten_names.add(name)
# The requested module looks like a test file, so rewrite it. This is
# the most magical part of the process: load the source, rewrite the
# asserts, and load the rewritten source. We also cache the rewritten
# module code in a special pyc. We must be aware of the possibility of
# concurrent pytest processes rewriting and loading pycs. To avoid
# tricky race conditions, we maintain the following invariant: The
# cached pyc is always a complete, valid pyc. Operations on it must be
# atomic. POSIX's atomic rename comes in handy.
write = not sys.dont_write_bytecode
cache_dir = os.path.join(fn_pypath.dirname, "__pycache__")
if write:
try:
os.mkdir(cache_dir)
except OSError:
e = sys.exc_info()[1].errno
if e == errno.EEXIST:
# Either the __pycache__ directory already exists (the
# common case) or it's blocked by a non-dir node. In the
# latter case, we'll ignore it in _write_pyc.
pass
elif e in [errno.ENOENT, errno.ENOTDIR]:
# One of the path components was not a directory, likely
# because we're in a zip file.
write = False
elif e in [errno.EACCES, errno.EROFS, errno.EPERM]:
state.trace("read only directory: %r" % fn_pypath.dirname)
write = False
else:
raise
cache_name = fn_pypath.basename[:-3] + PYC_TAIL
pyc = os.path.join(cache_dir, cache_name)
# Notice that even if we're in a read-only directory, I'm going
# to check for a cached pyc. This may not be optimal...
co = _read_pyc(fn_pypath, pyc, state.trace)
if co is None:
state.trace("rewriting %r" % (fn,))
source_stat, co = _rewrite_test(self.config, fn_pypath)
if co is None:
# Probably a SyntaxError in the test.
return None
if write:
_make_rewritten_pyc(state, source_stat, pyc, co)
else:
state.trace("found cached rewritten pyc for %r" % (fn,))
self.modules[name] = co, pyc
return self
def _should_rewrite(self, name, fn_pypath, state):
# always rewrite conftest files
fn = str(fn_pypath)
if fn_pypath.basename == 'conftest.py':
state.trace("rewriting conftest file: %r" % (fn,))
return True
if self.session is not None:
if self.session.isinitpath(fn):
state.trace("matched test file (was specified on cmdline): %r" %
(fn,))
return True
# modules not passed explicitly on the command line are only
# rewritten if they match the naming convention for test files
for pat in self.fnpats:
# use fnmatch instead of fn_pypath.fnmatch because the
# latter might trigger an import to fnmatch.fnmatch
# internally, which would cause this method to be
# called recursively
if fnmatch(fn_pypath.basename, pat):
state.trace("matched test file %r" % (fn,))
return True
for marked in self._must_rewrite:
if name.startswith(marked):
state.trace("matched marked file %r (from %r)" % (name, marked))
return True
return False
def mark_rewrite(self, *names):
"""Mark import names as needing to be re-written.
The named module or package as well as any nested modules will
be re-written on import.
"""
already_imported = set(names).intersection(set(sys.modules))
if already_imported:
for name in already_imported:
if name not in self._rewritten_names:
self._warn_already_imported(name)
self._must_rewrite.update(names)
def _warn_already_imported(self, name):
self.config.warn(
'P1',
'Module already imported so can not be re-written: %s' % name)
def load_module(self, name):
# If there is an existing module object named 'fullname' in
# sys.modules, the loader must use that existing module. (Otherwise,
# the reload() builtin will not work correctly.)
if name in sys.modules:
return sys.modules[name]
co, pyc = self.modules.pop(name)
# I wish I could just call imp.load_compiled here, but __file__ has to
# be set properly. In Python 3.2+, this all would be handled correctly
# by load_compiled.
mod = sys.modules[name] = imp.new_module(name)
try:
mod.__file__ = co.co_filename
# Normally, this attribute is 3.2+.
mod.__cached__ = pyc
mod.__loader__ = self
py.builtin.exec_(co, mod.__dict__)
except:
del sys.modules[name]
raise
return sys.modules[name]
def is_package(self, name):
try:
fd, fn, desc = imp.find_module(name)
except ImportError:
return False
if fd is not None:
fd.close()
tp = desc[2]
return tp == imp.PKG_DIRECTORY
@classmethod
def _register_with_pkg_resources(cls):
"""
Ensure package resources can be loaded from this loader. May be called
multiple times, as the operation is idempotent.
"""
try:
import pkg_resources
# access an attribute in case a deferred importer is present
pkg_resources.__name__
except ImportError:
return
# Since pytest tests are always located in the file system, the
# DefaultProvider is appropriate.
pkg_resources.register_loader_type(cls, pkg_resources.DefaultProvider)
def get_data(self, pathname):
"""Optional PEP302 get_data API.
"""
with open(pathname, 'rb') as f:
return f.read()
def _write_pyc(state, co, source_stat, pyc):
# Technically, we don't have to have the same pyc format as
# (C)Python, since these "pycs" should never be seen by builtin
# import. However, there's little reason deviate, and I hope
# sometime to be able to use imp.load_compiled to load them. (See
# the comment in load_module above.)
try:
fp = open(pyc, "wb")
except IOError:
err = sys.exc_info()[1].errno
state.trace("error writing pyc file at %s: errno=%s" %(pyc, err))
# we ignore any failure to write the cache file
# there are many reasons, permission-denied, __pycache__ being a
# file etc.
return False
try:
fp.write(imp.get_magic())
mtime = int(source_stat.mtime)
size = source_stat.size & 0xFFFFFFFF
fp.write(struct.pack("<ll", mtime, size))
marshal.dump(co, fp)
finally:
fp.close()
return True
RN = "\r\n".encode("utf-8")
N = "\n".encode("utf-8")
cookie_re = re.compile(r"^[ \t\f]*#.*coding[:=][ \t]*[-\w.]+")
BOM_UTF8 = '\xef\xbb\xbf'
def _rewrite_test(config, fn):
"""Try to read and rewrite *fn* and return the code object."""
state = config._assertstate
try:
stat = fn.stat()
source = fn.read("rb")
except EnvironmentError:
return None, None
if ASCII_IS_DEFAULT_ENCODING:
# ASCII is the default encoding in Python 2. Without a coding
# declaration, Python 2 will complain about any bytes in the file
# outside the ASCII range. Sadly, this behavior does not extend to
# compile() or ast.parse(), which prefer to interpret the bytes as
# latin-1. (At least they properly handle explicit coding cookies.) To
# preserve this error behavior, we could force ast.parse() to use ASCII
# as the encoding by inserting a coding cookie. Unfortunately, that
# messes up line numbers. Thus, we have to check ourselves if anything
# is outside the ASCII range in the case no encoding is explicitly
# declared. For more context, see issue #269. Yay for Python 3 which
# gets this right.
end1 = source.find("\n")
end2 = source.find("\n", end1 + 1)
if (not source.startswith(BOM_UTF8) and
cookie_re.match(source[0:end1]) is None and
cookie_re.match(source[end1 + 1:end2]) is None):
if hasattr(state, "_indecode"):
# encodings imported us again, so don't rewrite.
return None, None
state._indecode = True
try:
try:
source.decode("ascii")
except UnicodeDecodeError:
# Let it fail in real import.
return None, None
finally:
del state._indecode
# On Python versions which are not 2.7 and less than or equal to 3.1, the
# parser expects *nix newlines.
if REWRITE_NEWLINES:
source = source.replace(RN, N) + N
try:
tree = ast.parse(source)
except SyntaxError:
# Let this pop up again in the real import.
state.trace("failed to parse: %r" % (fn,))
return None, None
rewrite_asserts(tree, fn, config)
try:
co = compile(tree, fn.strpath, "exec")
except SyntaxError:
# It's possible that this error is from some bug in the
# assertion rewriting, but I don't know of a fast way to tell.
state.trace("failed to compile: %r" % (fn,))
return None, None
return stat, co
def _make_rewritten_pyc(state, source_stat, pyc, co):
"""Try to dump rewritten code to *pyc*."""
if sys.platform.startswith("win"):
# Windows grants exclusive access to open files and doesn't have atomic
# rename, so just write into the final file.
_write_pyc(state, co, source_stat, pyc)
else:
# When not on windows, assume rename is atomic. Dump the code object
# into a file specific to this process and atomically replace it.
proc_pyc = pyc + "." + str(os.getpid())
if _write_pyc(state, co, source_stat, proc_pyc):
os.rename(proc_pyc, pyc)
def _read_pyc(source, pyc, trace=lambda x: None):
"""Possibly read a pytest pyc containing rewritten code.
Return rewritten code if successful or None if not.
"""
try:
fp = open(pyc, "rb")
except IOError:
return None
with fp:
try:
mtime = int(source.mtime())
size = source.size()
data = fp.read(12)
except EnvironmentError as e:
trace('_read_pyc(%s): EnvironmentError %s' % (source, e))
return None
# Check for invalid or out of date pyc file.
if (len(data) != 12 or data[:4] != imp.get_magic() or
struct.unpack("<ll", data[4:]) != (mtime, size)):
trace('_read_pyc(%s): invalid or out of date pyc' % source)
return None
try:
co = marshal.load(fp)
except Exception as e:
trace('_read_pyc(%s): marshal.load error %s' % (source, e))
return None
if not isinstance(co, types.CodeType):
trace('_read_pyc(%s): not a code object' % source)
return None
return co
def rewrite_asserts(mod, module_path=None, config=None):
"""Rewrite the assert statements in mod."""
AssertionRewriter(module_path, config).run(mod)
def _saferepr(obj):
"""Get a safe repr of an object for assertion error messages.
The assertion formatting (util.format_explanation()) requires
newlines to be escaped since they are a special character for it.
Normally assertion.util.format_explanation() does this but for a
custom repr it is possible to contain one of the special escape
sequences, especially '\n{' and '\n}' are likely to be present in
JSON reprs.
"""
repr = py.io.saferepr(obj)
if py.builtin._istext(repr):
t = py.builtin.text
else:
t = py.builtin.bytes
return repr.replace(t("\n"), t("\\n"))
from _pytest.assertion.util import format_explanation as _format_explanation # noqa
def _format_assertmsg(obj):
"""Format the custom assertion message given.
For strings this simply replaces newlines with '\n~' so that
util.format_explanation() will preserve them instead of escaping
newlines. For other objects py.io.saferepr() is used first.
"""
# reprlib appears to have a bug which means that if a string
# contains a newline it gets escaped, however if an object has a
# .__repr__() which contains newlines it does not get escaped.
# However in either case we want to preserve the newline.
if py.builtin._istext(obj) or py.builtin._isbytes(obj):
s = obj
is_repr = False
else:
s = py.io.saferepr(obj)
is_repr = True
if py.builtin._istext(s):
t = py.builtin.text
else:
t = py.builtin.bytes
s = s.replace(t("\n"), t("\n~")).replace(t("%"), t("%%"))
if is_repr:
s = s.replace(t("\\n"), t("\n~"))
return s
def _should_repr_global_name(obj):
return not hasattr(obj, "__name__") and not py.builtin.callable(obj)
def _format_boolop(explanations, is_or):
explanation = "(" + (is_or and " or " or " and ").join(explanations) + ")"
if py.builtin._istext(explanation):
t = py.builtin.text
else:
t = py.builtin.bytes
return explanation.replace(t('%'), t('%%'))
def _call_reprcompare(ops, results, expls, each_obj):
for i, res, expl in zip(range(len(ops)), results, expls):
try:
done = not res
except Exception:
done = True
if done:
break
if util._reprcompare is not None:
custom = util._reprcompare(ops[i], each_obj[i], each_obj[i + 1])
if custom is not None:
return custom
return expl
unary_map = {
ast.Not: "not %s",
ast.Invert: "~%s",
ast.USub: "-%s",
ast.UAdd: "+%s"
}
binop_map = {
ast.BitOr: "|",
ast.BitXor: "^",
ast.BitAnd: "&",
ast.LShift: "<<",
ast.RShift: ">>",
ast.Add: "+",
ast.Sub: "-",
ast.Mult: "*",
ast.Div: "/",
ast.FloorDiv: "//",
ast.Mod: "%%", # escaped for string formatting
ast.Eq: "==",
ast.NotEq: "!=",
ast.Lt: "<",
ast.LtE: "<=",
ast.Gt: ">",
ast.GtE: ">=",
ast.Pow: "**",
ast.Is: "is",
ast.IsNot: "is not",
ast.In: "in",
ast.NotIn: "not in"
}
# Python 3.5+ compatibility
try:
binop_map[ast.MatMult] = "@"
except AttributeError:
pass
# Python 3.4+ compatibility
if hasattr(ast, "NameConstant"):
_NameConstant = ast.NameConstant
else:
def _NameConstant(c):
return ast.Name(str(c), ast.Load())
def set_location(node, lineno, col_offset):
"""Set node location information recursively."""
def _fix(node, lineno, col_offset):
if "lineno" in node._attributes:
node.lineno = lineno
if "col_offset" in node._attributes:
node.col_offset = col_offset
for child in ast.iter_child_nodes(node):
_fix(child, lineno, col_offset)
_fix(node, lineno, col_offset)
return node
class AssertionRewriter(ast.NodeVisitor):
"""Assertion rewriting implementation.
The main entrypoint is to call .run() with an ast.Module instance,
this will then find all the assert statements and re-write them to
provide intermediate values and a detailed assertion error. See
http://pybites.blogspot.be/2011/07/behind-scenes-of-pytests-new-assertion.html
for an overview of how this works.
The entry point here is .run() which will iterate over all the
statements in an ast.Module and for each ast.Assert statement it
finds call .visit() with it. Then .visit_Assert() takes over and
is responsible for creating new ast statements to replace the
original assert statement: it re-writes the test of an assertion
to provide intermediate values and replace it with an if statement
which raises an assertion error with a detailed explanation in
case the expression is false.
For this .visit_Assert() uses the visitor pattern to visit all the
AST nodes of the ast.Assert.test field, each visit call returning
an AST node and the corresponding explanation string. During this
state is kept in several instance attributes:
:statements: All the AST statements which will replace the assert
statement.
:variables: This is populated by .variable() with each variable
used by the statements so that they can all be set to None at
the end of the statements.
:variable_counter: Counter to create new unique variables needed
by statements. Variables are created using .variable() and
have the form of "@py_assert0".
:on_failure: The AST statements which will be executed if the
assertion test fails. This is the code which will construct
the failure message and raises the AssertionError.
:explanation_specifiers: A dict filled by .explanation_param()
with %-formatting placeholders and their corresponding
expressions to use in the building of an assertion message.
This is used by .pop_format_context() to build a message.
:stack: A stack of the explanation_specifiers dicts maintained by
.push_format_context() and .pop_format_context() which allows
to build another %-formatted string while already building one.
This state is reset on every new assert statement visited and used
by the other visitors.
"""
def __init__(self, module_path, config):
super(AssertionRewriter, self).__init__()
self.module_path = module_path
self.config = config
def run(self, mod):
"""Find all assert statements in *mod* and rewrite them."""
if not mod.body:
# Nothing to do.
return
# Insert some special imports at the top of the module but after any
# docstrings and __future__ imports.
aliases = [ast.alias(py.builtin.builtins.__name__, "@py_builtins"),
ast.alias("_pytest.assertion.rewrite", "@pytest_ar")]
expect_docstring = True
pos = 0
lineno = 0
for item in mod.body:
if (expect_docstring and isinstance(item, ast.Expr) and
isinstance(item.value, ast.Str)):
doc = item.value.s
if "PYTEST_DONT_REWRITE" in doc:
# The module has disabled assertion rewriting.
return
lineno += len(doc) - 1
expect_docstring = False
elif (not isinstance(item, ast.ImportFrom) or item.level > 0 or
item.module != "__future__"):
lineno = item.lineno
break
pos += 1
imports = [ast.Import([alias], lineno=lineno, col_offset=0)
for alias in aliases]
mod.body[pos:pos] = imports
# Collect asserts.
nodes = [mod]
while nodes:
node = nodes.pop()
for name, field in ast.iter_fields(node):
if isinstance(field, list):
new = []
for i, child in enumerate(field):
if isinstance(child, ast.Assert):
# Transform assert.
new.extend(self.visit(child))
else:
new.append(child)
if isinstance(child, ast.AST):
nodes.append(child)
setattr(node, name, new)
elif (isinstance(field, ast.AST) and
# Don't recurse into expressions as they can't contain
# asserts.
not isinstance(field, ast.expr)):
nodes.append(field)
def variable(self):
"""Get a new variable."""
# Use a character invalid in python identifiers to avoid clashing.
name = "@py_assert" + str(next(self.variable_counter))
self.variables.append(name)
return name
def assign(self, expr):
"""Give *expr* a name."""
name = self.variable()
self.statements.append(ast.Assign([ast.Name(name, ast.Store())], expr))
return ast.Name(name, ast.Load())
def display(self, expr):
"""Call py.io.saferepr on the expression."""
return self.helper("saferepr", expr)
def helper(self, name, *args):
"""Call a helper in this module."""
py_name = ast.Name("@pytest_ar", ast.Load())
attr = ast.Attribute(py_name, "_" + name, ast.Load())
return ast_Call(attr, list(args), [])
def builtin(self, name):
"""Return the builtin called *name*."""
builtin_name = ast.Name("@py_builtins", ast.Load())
return ast.Attribute(builtin_name, name, ast.Load())
def explanation_param(self, expr):
"""Return a new named %-formatting placeholder for expr.
This creates a %-formatting placeholder for expr in the
current formatting context, e.g. ``%(py0)s``. The placeholder
and expr are placed in the current format context so that it
can be used on the next call to .pop_format_context().
"""
specifier = "py" + str(next(self.variable_counter))
self.explanation_specifiers[specifier] = expr
return "%(" + specifier + ")s"
def push_format_context(self):
"""Create a new formatting context.
The format context is used for when an explanation wants to
have a variable value formatted in the assertion message. In
this case the value required can be added using
.explanation_param(). Finally .pop_format_context() is used
to format a string of %-formatted values as added by
.explanation_param().
"""
self.explanation_specifiers = {}
self.stack.append(self.explanation_specifiers)
def pop_format_context(self, expl_expr):
"""Format the %-formatted string with current format context.
The expl_expr should be an ast.Str instance constructed from
the %-placeholders created by .explanation_param(). This will
add the required code to format said string to .on_failure and
return the ast.Name instance of the formatted string.
"""
current = self.stack.pop()
if self.stack:
self.explanation_specifiers = self.stack[-1]
keys = [ast.Str(key) for key in current.keys()]
format_dict = ast.Dict(keys, list(current.values()))
form = ast.BinOp(expl_expr, ast.Mod(), format_dict)
name = "@py_format" + str(next(self.variable_counter))
self.on_failure.append(ast.Assign([ast.Name(name, ast.Store())], form))
return ast.Name(name, ast.Load())
def generic_visit(self, node):
"""Handle expressions we don't have custom code for."""
assert isinstance(node, ast.expr)
res = self.assign(node)
return res, self.explanation_param(self.display(res))
def visit_Assert(self, assert_):
"""Return the AST statements to replace the ast.Assert instance.
This re-writes the test of an assertion to provide
intermediate values and replace it with an if statement which
raises an assertion error with a detailed explanation in case
the expression is false.
"""
if isinstance(assert_.test, ast.Tuple) and self.config is not None:
fslocation = (self.module_path, assert_.lineno)
self.config.warn('R1', 'assertion is always true, perhaps '
'remove parentheses?', fslocation=fslocation)
self.statements = []
self.variables = []
self.variable_counter = itertools.count()
self.stack = []
self.on_failure = []
self.push_format_context()
# Rewrite assert into a bunch of statements.
top_condition, explanation = self.visit(assert_.test)
# Create failure message.
body = self.on_failure
negation = ast.UnaryOp(ast.Not(), top_condition)
self.statements.append(ast.If(negation, body, []))
if assert_.msg:
assertmsg = self.helper('format_assertmsg', assert_.msg)
explanation = "\n>assert " + explanation
else:
assertmsg = ast.Str("")
explanation = "assert " + explanation
template = ast.BinOp(assertmsg, ast.Add(), ast.Str(explanation))
msg = self.pop_format_context(template)
fmt = self.helper("format_explanation", msg)
err_name = ast.Name("AssertionError", ast.Load())
exc = ast_Call(err_name, [fmt], [])
if sys.version_info[0] >= 3:
raise_ = ast.Raise(exc, None)
else:
raise_ = ast.Raise(exc, None, None)
body.append(raise_)
# Clear temporary variables by setting them to None.
if self.variables:
variables = [ast.Name(name, ast.Store())
for name in self.variables]
clear = ast.Assign(variables, _NameConstant(None))
self.statements.append(clear)
# Fix line numbers.
for stmt in self.statements:
set_location(stmt, assert_.lineno, assert_.col_offset)
return self.statements
def visit_Name(self, name):
# Display the repr of the name if it's a local variable or
# _should_repr_global_name() thinks it's acceptable.
locs = ast_Call(self.builtin("locals"), [], [])
inlocs = ast.Compare(ast.Str(name.id), [ast.In()], [locs])
dorepr = self.helper("should_repr_global_name", name)
test = ast.BoolOp(ast.Or(), [inlocs, dorepr])
expr = ast.IfExp(test, self.display(name), ast.Str(name.id))
return name, self.explanation_param(expr)
def visit_BoolOp(self, boolop):
res_var = self.variable()
expl_list = self.assign(ast.List([], ast.Load()))
app = ast.Attribute(expl_list, "append", ast.Load())
is_or = int(isinstance(boolop.op, ast.Or))
body = save = self.statements
fail_save = self.on_failure
levels = len(boolop.values) - 1
self.push_format_context()
# Process each operand, short-circuting if needed.
for i, v in enumerate(boolop.values):
if i:
fail_inner = []
# cond is set in a prior loop iteration below
self.on_failure.append(ast.If(cond, fail_inner, [])) # noqa
self.on_failure = fail_inner
self.push_format_context()
res, expl = self.visit(v)
body.append(ast.Assign([ast.Name(res_var, ast.Store())], res))
expl_format = self.pop_format_context(ast.Str(expl))
call = ast_Call(app, [expl_format], [])
self.on_failure.append(ast.Expr(call))
if i < levels:
cond = res
if is_or:
cond = ast.UnaryOp(ast.Not(), cond)
inner = []
self.statements.append(ast.If(cond, inner, []))
self.statements = body = inner
self.statements = save
self.on_failure = fail_save
expl_template = self.helper("format_boolop", expl_list, ast.Num(is_or))
expl = self.pop_format_context(expl_template)
return ast.Name(res_var, ast.Load()), self.explanation_param(expl)
def visit_UnaryOp(self, unary):
pattern = unary_map[unary.op.__class__]
operand_res, operand_expl = self.visit(unary.operand)
res = self.assign(ast.UnaryOp(unary.op, operand_res))
return res, pattern % (operand_expl,)
def visit_BinOp(self, binop):
symbol = binop_map[binop.op.__class__]
left_expr, left_expl = self.visit(binop.left)
right_expr, right_expl = self.visit(binop.right)
explanation = "(%s %s %s)" % (left_expl, symbol, right_expl)
res = self.assign(ast.BinOp(left_expr, binop.op, right_expr))
return res, explanation
def visit_Call_35(self, call):
"""
visit `ast.Call` nodes on Python3.5 and after
"""
new_func, func_expl = self.visit(call.func)
arg_expls = []
new_args = []
new_kwargs = []
for arg in call.args:
res, expl = self.visit(arg)
arg_expls.append(expl)
new_args.append(res)
for keyword in call.keywords:
res, expl = self.visit(keyword.value)
new_kwargs.append(ast.keyword(keyword.arg, res))
if keyword.arg:
arg_expls.append(keyword.arg + "=" + expl)
else: ## **args have `arg` keywords with an .arg of None
arg_expls.append("**" + expl)
expl = "%s(%s)" % (func_expl, ', '.join(arg_expls))
new_call = ast.Call(new_func, new_args, new_kwargs)
res = self.assign(new_call)
res_expl = self.explanation_param(self.display(res))
outer_expl = "%s\n{%s = %s\n}" % (res_expl, res_expl, expl)
return res, outer_expl
def visit_Starred(self, starred):
# From Python 3.5, a Starred node can appear in a function call
res, expl = self.visit(starred.value)
return starred, '*' + expl
def visit_Call_legacy(self, call):
"""
visit `ast.Call nodes on 3.4 and below`
"""
new_func, func_expl = self.visit(call.func)
arg_expls = []
new_args = []
new_kwargs = []
new_star = new_kwarg = None
for arg in call.args:
res, expl = self.visit(arg)
new_args.append(res)
arg_expls.append(expl)
for keyword in call.keywords:
res, expl = self.visit(keyword.value)
new_kwargs.append(ast.keyword(keyword.arg, res))
arg_expls.append(keyword.arg + "=" + expl)
if call.starargs:
new_star, expl = self.visit(call.starargs)
arg_expls.append("*" + expl)
if call.kwargs:
new_kwarg, expl = self.visit(call.kwargs)
arg_expls.append("**" + expl)
expl = "%s(%s)" % (func_expl, ', '.join(arg_expls))
new_call = ast.Call(new_func, new_args, new_kwargs,
new_star, new_kwarg)
res = self.assign(new_call)
res_expl = self.explanation_param(self.display(res))
outer_expl = "%s\n{%s = %s\n}" % (res_expl, res_expl, expl)
return res, outer_expl
# ast.Call signature changed on 3.5,
# conditionally change which methods is named
# visit_Call depending on Python version
if sys.version_info >= (3, 5):
visit_Call = visit_Call_35
else:
visit_Call = visit_Call_legacy
def visit_Attribute(self, attr):
if not isinstance(attr.ctx, ast.Load):
return self.generic_visit(attr)
value, value_expl = self.visit(attr.value)
res = self.assign(ast.Attribute(value, attr.attr, ast.Load()))
res_expl = self.explanation_param(self.display(res))
pat = "%s\n{%s = %s.%s\n}"
expl = pat % (res_expl, res_expl, value_expl, attr.attr)
return res, expl
def visit_Compare(self, comp):
self.push_format_context()
left_res, left_expl = self.visit(comp.left)
if isinstance(comp.left, (_ast.Compare, _ast.BoolOp)):
left_expl = "({0})".format(left_expl)
res_variables = [self.variable() for i in range(len(comp.ops))]
load_names = [ast.Name(v, ast.Load()) for v in res_variables]
store_names = [ast.Name(v, ast.Store()) for v in res_variables]
it = zip(range(len(comp.ops)), comp.ops, comp.comparators)
expls = []
syms = []
results = [left_res]
for i, op, next_operand in it:
next_res, next_expl = self.visit(next_operand)
if isinstance(next_operand, (_ast.Compare, _ast.BoolOp)):
next_expl = "({0})".format(next_expl)
results.append(next_res)
sym = binop_map[op.__class__]
syms.append(ast.Str(sym))
expl = "%s %s %s" % (left_expl, sym, next_expl)
expls.append(ast.Str(expl))
res_expr = ast.Compare(left_res, [op], [next_res])
self.statements.append(ast.Assign([store_names[i]], res_expr))
left_res, left_expl = next_res, next_expl
# Use pytest.assertion.util._reprcompare if that's available.
expl_call = self.helper("call_reprcompare",
ast.Tuple(syms, ast.Load()),
ast.Tuple(load_names, ast.Load()),
ast.Tuple(expls, ast.Load()),
ast.Tuple(results, ast.Load()))
if len(comp.ops) > 1:
res = ast.BoolOp(ast.And(), load_names)
else:
res = load_names[0]
return res, self.explanation_param(self.pop_format_context(expl_call))

View File

@@ -0,0 +1,300 @@
"""Utilities for assertion debugging"""
import pprint
import _pytest._code
import py
try:
from collections import Sequence
except ImportError:
Sequence = list
BuiltinAssertionError = py.builtin.builtins.AssertionError
u = py.builtin._totext
# The _reprcompare attribute on the util module is used by the new assertion
# interpretation code and assertion rewriter to detect this plugin was
# loaded and in turn call the hooks defined here as part of the
# DebugInterpreter.
_reprcompare = None
# the re-encoding is needed for python2 repr
# with non-ascii characters (see issue 877 and 1379)
def ecu(s):
try:
return u(s, 'utf-8', 'replace')
except TypeError:
return s
def format_explanation(explanation):
"""This formats an explanation
Normally all embedded newlines are escaped, however there are
three exceptions: \n{, \n} and \n~. The first two are intended
cover nested explanations, see function and attribute explanations
for examples (.visit_Call(), visit_Attribute()). The last one is
for when one explanation needs to span multiple lines, e.g. when
displaying diffs.
"""
explanation = ecu(explanation)
lines = _split_explanation(explanation)
result = _format_lines(lines)
return u('\n').join(result)
def _split_explanation(explanation):
"""Return a list of individual lines in the explanation
This will return a list of lines split on '\n{', '\n}' and '\n~'.
Any other newlines will be escaped and appear in the line as the
literal '\n' characters.
"""
raw_lines = (explanation or u('')).split('\n')
lines = [raw_lines[0]]
for l in raw_lines[1:]:
if l and l[0] in ['{', '}', '~', '>']:
lines.append(l)
else:
lines[-1] += '\\n' + l
return lines
def _format_lines(lines):
"""Format the individual lines
This will replace the '{', '}' and '~' characters of our mini
formatting language with the proper 'where ...', 'and ...' and ' +
...' text, taking care of indentation along the way.
Return a list of formatted lines.
"""
result = lines[:1]
stack = [0]
stackcnt = [0]
for line in lines[1:]:
if line.startswith('{'):
if stackcnt[-1]:
s = u('and ')
else:
s = u('where ')
stack.append(len(result))
stackcnt[-1] += 1
stackcnt.append(0)
result.append(u(' +') + u(' ')*(len(stack)-1) + s + line[1:])
elif line.startswith('}'):
stack.pop()
stackcnt.pop()
result[stack[-1]] += line[1:]
else:
assert line[0] in ['~', '>']
stack[-1] += 1
indent = len(stack) if line.startswith('~') else len(stack) - 1
result.append(u(' ')*indent + line[1:])
assert len(stack) == 1
return result
# Provide basestring in python3
try:
basestring = basestring
except NameError:
basestring = str
def assertrepr_compare(config, op, left, right):
"""Return specialised explanations for some operators/operands"""
width = 80 - 15 - len(op) - 2 # 15 chars indentation, 1 space around op
left_repr = py.io.saferepr(left, maxsize=int(width//2))
right_repr = py.io.saferepr(right, maxsize=width-len(left_repr))
summary = u('%s %s %s') % (ecu(left_repr), op, ecu(right_repr))
issequence = lambda x: (isinstance(x, (list, tuple, Sequence)) and
not isinstance(x, basestring))
istext = lambda x: isinstance(x, basestring)
isdict = lambda x: isinstance(x, dict)
isset = lambda x: isinstance(x, (set, frozenset))
def isiterable(obj):
try:
iter(obj)
return not istext(obj)
except TypeError:
return False
verbose = config.getoption('verbose')
explanation = None
try:
if op == '==':
if istext(left) and istext(right):
explanation = _diff_text(left, right, verbose)
else:
if issequence(left) and issequence(right):
explanation = _compare_eq_sequence(left, right, verbose)
elif isset(left) and isset(right):
explanation = _compare_eq_set(left, right, verbose)
elif isdict(left) and isdict(right):
explanation = _compare_eq_dict(left, right, verbose)
if isiterable(left) and isiterable(right):
expl = _compare_eq_iterable(left, right, verbose)
if explanation is not None:
explanation.extend(expl)
else:
explanation = expl
elif op == 'not in':
if istext(left) and istext(right):
explanation = _notin_text(left, right, verbose)
except Exception:
explanation = [
u('(pytest_assertion plugin: representation of details failed. '
'Probably an object has a faulty __repr__.)'),
u(_pytest._code.ExceptionInfo())]
if not explanation:
return None
return [summary] + explanation
def _diff_text(left, right, verbose=False):
"""Return the explanation for the diff between text or bytes
Unless --verbose is used this will skip leading and trailing
characters which are identical to keep the diff minimal.
If the input are bytes they will be safely converted to text.
"""
from difflib import ndiff
explanation = []
if isinstance(left, py.builtin.bytes):
left = u(repr(left)[1:-1]).replace(r'\n', '\n')
if isinstance(right, py.builtin.bytes):
right = u(repr(right)[1:-1]).replace(r'\n', '\n')
if not verbose:
i = 0 # just in case left or right has zero length
for i in range(min(len(left), len(right))):
if left[i] != right[i]:
break
if i > 42:
i -= 10 # Provide some context
explanation = [u('Skipping %s identical leading '
'characters in diff, use -v to show') % i]
left = left[i:]
right = right[i:]
if len(left) == len(right):
for i in range(len(left)):
if left[-i] != right[-i]:
break
if i > 42:
i -= 10 # Provide some context
explanation += [u('Skipping %s identical trailing '
'characters in diff, use -v to show') % i]
left = left[:-i]
right = right[:-i]
keepends = True
explanation += [line.strip('\n')
for line in ndiff(left.splitlines(keepends),
right.splitlines(keepends))]
return explanation
def _compare_eq_iterable(left, right, verbose=False):
if not verbose:
return [u('Use -v to get the full diff')]
# dynamic import to speedup pytest
import difflib
try:
left_formatting = pprint.pformat(left).splitlines()
right_formatting = pprint.pformat(right).splitlines()
explanation = [u('Full diff:')]
except Exception:
# hack: PrettyPrinter.pformat() in python 2 fails when formatting items that can't be sorted(), ie, calling
# sorted() on a list would raise. See issue #718.
# As a workaround, the full diff is generated by using the repr() string of each item of each container.
left_formatting = sorted(repr(x) for x in left)
right_formatting = sorted(repr(x) for x in right)
explanation = [u('Full diff (fallback to calling repr on each item):')]
explanation.extend(line.strip() for line in difflib.ndiff(left_formatting, right_formatting))
return explanation
def _compare_eq_sequence(left, right, verbose=False):
explanation = []
for i in range(min(len(left), len(right))):
if left[i] != right[i]:
explanation += [u('At index %s diff: %r != %r')
% (i, left[i], right[i])]
break
if len(left) > len(right):
explanation += [u('Left contains more items, first extra item: %s')
% py.io.saferepr(left[len(right)],)]
elif len(left) < len(right):
explanation += [
u('Right contains more items, first extra item: %s') %
py.io.saferepr(right[len(left)],)]
return explanation
def _compare_eq_set(left, right, verbose=False):
explanation = []
diff_left = left - right
diff_right = right - left
if diff_left:
explanation.append(u('Extra items in the left set:'))
for item in diff_left:
explanation.append(py.io.saferepr(item))
if diff_right:
explanation.append(u('Extra items in the right set:'))
for item in diff_right:
explanation.append(py.io.saferepr(item))
return explanation
def _compare_eq_dict(left, right, verbose=False):
explanation = []
common = set(left).intersection(set(right))
same = dict((k, left[k]) for k in common if left[k] == right[k])
if same and not verbose:
explanation += [u('Omitting %s identical items, use -v to show') %
len(same)]
elif same:
explanation += [u('Common items:')]
explanation += pprint.pformat(same).splitlines()
diff = set(k for k in common if left[k] != right[k])
if diff:
explanation += [u('Differing items:')]
for k in diff:
explanation += [py.io.saferepr({k: left[k]}) + ' != ' +
py.io.saferepr({k: right[k]})]
extra_left = set(left) - set(right)
if extra_left:
explanation.append(u('Left contains more items:'))
explanation.extend(pprint.pformat(
dict((k, left[k]) for k in extra_left)).splitlines())
extra_right = set(right) - set(left)
if extra_right:
explanation.append(u('Right contains more items:'))
explanation.extend(pprint.pformat(
dict((k, right[k]) for k in extra_right)).splitlines())
return explanation
def _notin_text(term, text, verbose=False):
index = text.find(term)
head = text[:index]
tail = text[index+len(term):]
correct_text = head + tail
diff = _diff_text(correct_text, text, verbose)
newdiff = [u('%s is contained here:') % py.io.saferepr(term, maxsize=42)]
for line in diff:
if line.startswith(u('Skipping')):
continue
if line.startswith(u('- ')):
continue
if line.startswith(u('+ ')):
newdiff.append(u(' ') + line[2:])
else:
newdiff.append(line)
return newdiff

View File

@@ -0,0 +1,245 @@
"""
merged implementation of the cache provider
the name cache was not choosen to ensure pluggy automatically
ignores the external pytest-cache
"""
import py
import pytest
import json
from os.path import sep as _sep, altsep as _altsep
class Cache(object):
def __init__(self, config):
self.config = config
self._cachedir = config.rootdir.join(".cache")
self.trace = config.trace.root.get("cache")
if config.getvalue("cacheclear"):
self.trace("clearing cachedir")
if self._cachedir.check():
self._cachedir.remove()
self._cachedir.mkdir()
def makedir(self, name):
""" return a directory path object with the given name. If the
directory does not yet exist, it will be created. You can use it
to manage files likes e. g. store/retrieve database
dumps across test sessions.
:param name: must be a string not containing a ``/`` separator.
Make sure the name contains your plugin or application
identifiers to prevent clashes with other cache users.
"""
if _sep in name or _altsep is not None and _altsep in name:
raise ValueError("name is not allowed to contain path separators")
return self._cachedir.ensure_dir("d", name)
def _getvaluepath(self, key):
return self._cachedir.join('v', *key.split('/'))
def get(self, key, default):
""" return cached value for the given key. If no value
was yet cached or the value cannot be read, the specified
default is returned.
:param key: must be a ``/`` separated value. Usually the first
name is the name of your plugin or your application.
:param default: must be provided in case of a cache-miss or
invalid cache values.
"""
path = self._getvaluepath(key)
if path.check():
try:
with path.open("r") as f:
return json.load(f)
except ValueError:
self.trace("cache-invalid at %s" % (path,))
return default
def set(self, key, value):
""" save value for the given key.
:param key: must be a ``/`` separated value. Usually the first
name is the name of your plugin or your application.
:param value: must be of any combination of basic
python types, including nested types
like e. g. lists of dictionaries.
"""
path = self._getvaluepath(key)
try:
path.dirpath().ensure_dir()
except (py.error.EEXIST, py.error.EACCES):
self.config.warn(
code='I9', message='could not create cache path %s' % (path,)
)
return
try:
f = path.open('w')
except py.error.ENOTDIR:
self.config.warn(
code='I9', message='cache could not write path %s' % (path,))
else:
with f:
self.trace("cache-write %s: %r" % (key, value,))
json.dump(value, f, indent=2, sort_keys=True)
class LFPlugin:
""" Plugin which implements the --lf (run last-failing) option """
def __init__(self, config):
self.config = config
active_keys = 'lf', 'failedfirst'
self.active = any(config.getvalue(key) for key in active_keys)
if self.active:
self.lastfailed = config.cache.get("cache/lastfailed", {})
else:
self.lastfailed = {}
def pytest_report_header(self):
if self.active:
if not self.lastfailed:
mode = "run all (no recorded failures)"
else:
mode = "rerun last %d failures%s" % (
len(self.lastfailed),
" first" if self.config.getvalue("failedfirst") else "")
return "run-last-failure: %s" % mode
def pytest_runtest_logreport(self, report):
if report.failed and "xfail" not in report.keywords:
self.lastfailed[report.nodeid] = True
elif not report.failed:
if report.when == "call":
self.lastfailed.pop(report.nodeid, None)
def pytest_collectreport(self, report):
passed = report.outcome in ('passed', 'skipped')
if passed:
if report.nodeid in self.lastfailed:
self.lastfailed.pop(report.nodeid)
self.lastfailed.update(
(item.nodeid, True)
for item in report.result)
else:
self.lastfailed[report.nodeid] = True
def pytest_collection_modifyitems(self, session, config, items):
if self.active and self.lastfailed:
previously_failed = []
previously_passed = []
for item in items:
if item.nodeid in self.lastfailed:
previously_failed.append(item)
else:
previously_passed.append(item)
if not previously_failed and previously_passed:
# running a subset of all tests with recorded failures outside
# of the set of tests currently executing
pass
elif self.config.getvalue("failedfirst"):
items[:] = previously_failed + previously_passed
else:
items[:] = previously_failed
config.hook.pytest_deselected(items=previously_passed)
def pytest_sessionfinish(self, session):
config = self.config
if config.getvalue("cacheshow") or hasattr(config, "slaveinput"):
return
prev_failed = config.cache.get("cache/lastfailed", None) is not None
if (session.testscollected and prev_failed) or self.lastfailed:
config.cache.set("cache/lastfailed", self.lastfailed)
def pytest_addoption(parser):
group = parser.getgroup("general")
group.addoption(
'--lf', '--last-failed', action='store_true', dest="lf",
help="rerun only the tests that failed "
"at the last run (or all if none failed)")
group.addoption(
'--ff', '--failed-first', action='store_true', dest="failedfirst",
help="run all tests but run the last failures first. "
"This may re-order tests and thus lead to "
"repeated fixture setup/teardown")
group.addoption(
'--cache-show', action='store_true', dest="cacheshow",
help="show cache contents, don't perform collection or tests")
group.addoption(
'--cache-clear', action='store_true', dest="cacheclear",
help="remove all cache contents at start of test run.")
def pytest_cmdline_main(config):
if config.option.cacheshow:
from _pytest.main import wrap_session
return wrap_session(config, cacheshow)
@pytest.hookimpl(tryfirst=True)
def pytest_configure(config):
config.cache = Cache(config)
config.pluginmanager.register(LFPlugin(config), "lfplugin")
@pytest.fixture
def cache(request):
"""
Return a cache object that can persist state between testing sessions.
cache.get(key, default)
cache.set(key, value)
Keys must be a ``/`` separated value, where the first part is usually the
name of your plugin or application to avoid clashes with other cache users.
Values can be any object handled by the json stdlib module.
"""
return request.config.cache
def pytest_report_header(config):
if config.option.verbose:
relpath = py.path.local().bestrelpath(config.cache._cachedir)
return "cachedir: %s" % relpath
def cacheshow(config, session):
from pprint import pprint
tw = py.io.TerminalWriter()
tw.line("cachedir: " + str(config.cache._cachedir))
if not config.cache._cachedir.check():
tw.line("cache is empty")
return 0
dummy = object()
basedir = config.cache._cachedir
vdir = basedir.join("v")
tw.sep("-", "cache values")
for valpath in vdir.visit(lambda x: x.isfile()):
key = valpath.relto(vdir).replace(valpath.sep, "/")
val = config.cache.get(key, dummy)
if val is dummy:
tw.line("%s contains unreadable content, "
"will be ignored" % key)
else:
tw.line("%s contains:" % key)
stream = py.io.TextIO()
pprint(val, stream=stream)
for line in stream.getvalue().splitlines():
tw.line(" " + line)
ddir = basedir.join("d")
if ddir.isdir() and ddir.listdir():
tw.sep("-", "cache directories")
for p in basedir.join("d").visit():
#if p.check(dir=1):
# print("%s/" % p.relto(basedir))
if p.isfile():
key = p.relto(basedir)
tw.line("%s is a file of length %d" % (
key, p.size()))
return 0

491
lib/spack/external/_pytest/capture.py vendored Normal file
View File

@@ -0,0 +1,491 @@
"""
per-test stdout/stderr capturing mechanism.
"""
from __future__ import with_statement
import contextlib
import sys
import os
from tempfile import TemporaryFile
import py
import pytest
from py.io import TextIO
unicode = py.builtin.text
patchsysdict = {0: 'stdin', 1: 'stdout', 2: 'stderr'}
def pytest_addoption(parser):
group = parser.getgroup("general")
group._addoption(
'--capture', action="store",
default="fd" if hasattr(os, "dup") else "sys",
metavar="method", choices=['fd', 'sys', 'no'],
help="per-test capturing method: one of fd|sys|no.")
group._addoption(
'-s', action="store_const", const="no", dest="capture",
help="shortcut for --capture=no.")
@pytest.hookimpl(hookwrapper=True)
def pytest_load_initial_conftests(early_config, parser, args):
_readline_workaround()
ns = early_config.known_args_namespace
pluginmanager = early_config.pluginmanager
capman = CaptureManager(ns.capture)
pluginmanager.register(capman, "capturemanager")
# make sure that capturemanager is properly reset at final shutdown
early_config.add_cleanup(capman.reset_capturings)
# make sure logging does not raise exceptions at the end
def silence_logging_at_shutdown():
if "logging" in sys.modules:
sys.modules["logging"].raiseExceptions = False
early_config.add_cleanup(silence_logging_at_shutdown)
# finally trigger conftest loading but while capturing (issue93)
capman.init_capturings()
outcome = yield
out, err = capman.suspendcapture()
if outcome.excinfo is not None:
sys.stdout.write(out)
sys.stderr.write(err)
class CaptureManager:
def __init__(self, method):
self._method = method
def _getcapture(self, method):
if method == "fd":
return MultiCapture(out=True, err=True, Capture=FDCapture)
elif method == "sys":
return MultiCapture(out=True, err=True, Capture=SysCapture)
elif method == "no":
return MultiCapture(out=False, err=False, in_=False)
else:
raise ValueError("unknown capturing method: %r" % method)
def init_capturings(self):
assert not hasattr(self, "_capturing")
self._capturing = self._getcapture(self._method)
self._capturing.start_capturing()
def reset_capturings(self):
cap = self.__dict__.pop("_capturing", None)
if cap is not None:
cap.pop_outerr_to_orig()
cap.stop_capturing()
def resumecapture(self):
self._capturing.resume_capturing()
def suspendcapture(self, in_=False):
self.deactivate_funcargs()
cap = getattr(self, "_capturing", None)
if cap is not None:
try:
outerr = cap.readouterr()
finally:
cap.suspend_capturing(in_=in_)
return outerr
def activate_funcargs(self, pyfuncitem):
capfuncarg = pyfuncitem.__dict__.pop("_capfuncarg", None)
if capfuncarg is not None:
capfuncarg._start()
self._capfuncarg = capfuncarg
def deactivate_funcargs(self):
capfuncarg = self.__dict__.pop("_capfuncarg", None)
if capfuncarg is not None:
capfuncarg.close()
@pytest.hookimpl(hookwrapper=True)
def pytest_make_collect_report(self, collector):
if isinstance(collector, pytest.File):
self.resumecapture()
outcome = yield
out, err = self.suspendcapture()
rep = outcome.get_result()
if out:
rep.sections.append(("Captured stdout", out))
if err:
rep.sections.append(("Captured stderr", err))
else:
yield
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_setup(self, item):
self.resumecapture()
yield
self.suspendcapture_item(item, "setup")
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_call(self, item):
self.resumecapture()
self.activate_funcargs(item)
yield
#self.deactivate_funcargs() called from suspendcapture()
self.suspendcapture_item(item, "call")
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_teardown(self, item):
self.resumecapture()
yield
self.suspendcapture_item(item, "teardown")
@pytest.hookimpl(tryfirst=True)
def pytest_keyboard_interrupt(self, excinfo):
self.reset_capturings()
@pytest.hookimpl(tryfirst=True)
def pytest_internalerror(self, excinfo):
self.reset_capturings()
def suspendcapture_item(self, item, when, in_=False):
out, err = self.suspendcapture(in_=in_)
item.add_report_section(when, "stdout", out)
item.add_report_section(when, "stderr", err)
error_capsysfderror = "cannot use capsys and capfd at the same time"
@pytest.fixture
def capsys(request):
"""Enable capturing of writes to sys.stdout/sys.stderr and make
captured output available via ``capsys.readouterr()`` method calls
which return a ``(out, err)`` tuple.
"""
if "capfd" in request.fixturenames:
raise request.raiseerror(error_capsysfderror)
request.node._capfuncarg = c = CaptureFixture(SysCapture, request)
return c
@pytest.fixture
def capfd(request):
"""Enable capturing of writes to file descriptors 1 and 2 and make
captured output available via ``capfd.readouterr()`` method calls
which return a ``(out, err)`` tuple.
"""
if "capsys" in request.fixturenames:
request.raiseerror(error_capsysfderror)
if not hasattr(os, 'dup'):
pytest.skip("capfd funcarg needs os.dup")
request.node._capfuncarg = c = CaptureFixture(FDCapture, request)
return c
class CaptureFixture:
def __init__(self, captureclass, request):
self.captureclass = captureclass
self.request = request
def _start(self):
self._capture = MultiCapture(out=True, err=True, in_=False,
Capture=self.captureclass)
self._capture.start_capturing()
def close(self):
cap = self.__dict__.pop("_capture", None)
if cap is not None:
self._outerr = cap.pop_outerr_to_orig()
cap.stop_capturing()
def readouterr(self):
try:
return self._capture.readouterr()
except AttributeError:
return self._outerr
@contextlib.contextmanager
def disabled(self):
capmanager = self.request.config.pluginmanager.getplugin('capturemanager')
capmanager.suspendcapture_item(self.request.node, "call", in_=True)
try:
yield
finally:
capmanager.resumecapture()
def safe_text_dupfile(f, mode, default_encoding="UTF8"):
""" return a open text file object that's a duplicate of f on the
FD-level if possible.
"""
encoding = getattr(f, "encoding", None)
try:
fd = f.fileno()
except Exception:
if "b" not in getattr(f, "mode", "") and hasattr(f, "encoding"):
# we seem to have a text stream, let's just use it
return f
else:
newfd = os.dup(fd)
if "b" not in mode:
mode += "b"
f = os.fdopen(newfd, mode, 0) # no buffering
return EncodedFile(f, encoding or default_encoding)
class EncodedFile(object):
errors = "strict" # possibly needed by py3 code (issue555)
def __init__(self, buffer, encoding):
self.buffer = buffer
self.encoding = encoding
def write(self, obj):
if isinstance(obj, unicode):
obj = obj.encode(self.encoding, "replace")
self.buffer.write(obj)
def writelines(self, linelist):
data = ''.join(linelist)
self.write(data)
def __getattr__(self, name):
return getattr(object.__getattribute__(self, "buffer"), name)
class MultiCapture(object):
out = err = in_ = None
def __init__(self, out=True, err=True, in_=True, Capture=None):
if in_:
self.in_ = Capture(0)
if out:
self.out = Capture(1)
if err:
self.err = Capture(2)
def start_capturing(self):
if self.in_:
self.in_.start()
if self.out:
self.out.start()
if self.err:
self.err.start()
def pop_outerr_to_orig(self):
""" pop current snapshot out/err capture and flush to orig streams. """
out, err = self.readouterr()
if out:
self.out.writeorg(out)
if err:
self.err.writeorg(err)
return out, err
def suspend_capturing(self, in_=False):
if self.out:
self.out.suspend()
if self.err:
self.err.suspend()
if in_ and self.in_:
self.in_.suspend()
self._in_suspended = True
def resume_capturing(self):
if self.out:
self.out.resume()
if self.err:
self.err.resume()
if hasattr(self, "_in_suspended"):
self.in_.resume()
del self._in_suspended
def stop_capturing(self):
""" stop capturing and reset capturing streams """
if hasattr(self, '_reset'):
raise ValueError("was already stopped")
self._reset = True
if self.out:
self.out.done()
if self.err:
self.err.done()
if self.in_:
self.in_.done()
def readouterr(self):
""" return snapshot unicode value of stdout/stderr capturings. """
return (self.out.snap() if self.out is not None else "",
self.err.snap() if self.err is not None else "")
class NoCapture:
__init__ = start = done = suspend = resume = lambda *args: None
class FDCapture:
""" Capture IO to/from a given os-level filedescriptor. """
def __init__(self, targetfd, tmpfile=None):
self.targetfd = targetfd
try:
self.targetfd_save = os.dup(self.targetfd)
except OSError:
self.start = lambda: None
self.done = lambda: None
else:
if targetfd == 0:
assert not tmpfile, "cannot set tmpfile with stdin"
tmpfile = open(os.devnull, "r")
self.syscapture = SysCapture(targetfd)
else:
if tmpfile is None:
f = TemporaryFile()
with f:
tmpfile = safe_text_dupfile(f, mode="wb+")
if targetfd in patchsysdict:
self.syscapture = SysCapture(targetfd, tmpfile)
else:
self.syscapture = NoCapture()
self.tmpfile = tmpfile
self.tmpfile_fd = tmpfile.fileno()
def __repr__(self):
return "<FDCapture %s oldfd=%s>" % (self.targetfd, self.targetfd_save)
def start(self):
""" Start capturing on targetfd using memorized tmpfile. """
try:
os.fstat(self.targetfd_save)
except (AttributeError, OSError):
raise ValueError("saved filedescriptor not valid anymore")
os.dup2(self.tmpfile_fd, self.targetfd)
self.syscapture.start()
def snap(self):
f = self.tmpfile
f.seek(0)
res = f.read()
if res:
enc = getattr(f, "encoding", None)
if enc and isinstance(res, bytes):
res = py.builtin._totext(res, enc, "replace")
f.truncate(0)
f.seek(0)
return res
return ''
def done(self):
""" stop capturing, restore streams, return original capture file,
seeked to position zero. """
targetfd_save = self.__dict__.pop("targetfd_save")
os.dup2(targetfd_save, self.targetfd)
os.close(targetfd_save)
self.syscapture.done()
self.tmpfile.close()
def suspend(self):
self.syscapture.suspend()
os.dup2(self.targetfd_save, self.targetfd)
def resume(self):
self.syscapture.resume()
os.dup2(self.tmpfile_fd, self.targetfd)
def writeorg(self, data):
""" write to original file descriptor. """
if py.builtin._istext(data):
data = data.encode("utf8") # XXX use encoding of original stream
os.write(self.targetfd_save, data)
class SysCapture:
def __init__(self, fd, tmpfile=None):
name = patchsysdict[fd]
self._old = getattr(sys, name)
self.name = name
if tmpfile is None:
if name == "stdin":
tmpfile = DontReadFromInput()
else:
tmpfile = TextIO()
self.tmpfile = tmpfile
def start(self):
setattr(sys, self.name, self.tmpfile)
def snap(self):
f = self.tmpfile
res = f.getvalue()
f.truncate(0)
f.seek(0)
return res
def done(self):
setattr(sys, self.name, self._old)
del self._old
self.tmpfile.close()
def suspend(self):
setattr(sys, self.name, self._old)
def resume(self):
setattr(sys, self.name, self.tmpfile)
def writeorg(self, data):
self._old.write(data)
self._old.flush()
class DontReadFromInput:
"""Temporary stub class. Ideally when stdin is accessed, the
capturing should be turned off, with possibly all data captured
so far sent to the screen. This should be configurable, though,
because in automated test runs it is better to crash than
hang indefinitely.
"""
encoding = None
def read(self, *args):
raise IOError("reading from stdin while output is captured")
readline = read
readlines = read
__iter__ = read
def fileno(self):
raise ValueError("redirected Stdin is pseudofile, has no fileno()")
def isatty(self):
return False
def close(self):
pass
@property
def buffer(self):
if sys.version_info >= (3,0):
return self
else:
raise AttributeError('redirected stdin has no attribute buffer')
def _readline_workaround():
"""
Ensure readline is imported so that it attaches to the correct stdio
handles on Windows.
Pdb uses readline support where available--when not running from the Python
prompt, the readline module is not imported until running the pdb REPL. If
running pytest with the --pdb option this means the readline module is not
imported until after I/O capture has been started.
This is a problem for pyreadline, which is often used to implement readline
support on Windows, as it does not attach to the correct handles for stdout
and/or stdin if they have been redirected by the FDCapture mechanism. This
workaround ensures that readline is imported before I/O capture is setup so
that it can attach to the actual stdin/out for the console.
See https://github.com/pytest-dev/pytest/pull/1281
"""
if not sys.platform.startswith('win32'):
return
try:
import readline # noqa
except ImportError:
pass

230
lib/spack/external/_pytest/compat.py vendored Normal file
View File

@@ -0,0 +1,230 @@
"""
python version compatibility code
"""
import sys
import inspect
import types
import re
import functools
import py
import _pytest
try:
import enum
except ImportError: # pragma: no cover
# Only available in Python 3.4+ or as a backport
enum = None
_PY3 = sys.version_info > (3, 0)
_PY2 = not _PY3
NoneType = type(None)
NOTSET = object()
if hasattr(inspect, 'signature'):
def _format_args(func):
return str(inspect.signature(func))
else:
def _format_args(func):
return inspect.formatargspec(*inspect.getargspec(func))
isfunction = inspect.isfunction
isclass = inspect.isclass
# used to work around a python2 exception info leak
exc_clear = getattr(sys, 'exc_clear', lambda: None)
# The type of re.compile objects is not exposed in Python.
REGEX_TYPE = type(re.compile(''))
def is_generator(func):
try:
return _pytest._code.getrawcode(func).co_flags & 32 # generator function
except AttributeError: # builtin functions have no bytecode
# assume them to not be generators
return False
def getlocation(function, curdir):
import inspect
fn = py.path.local(inspect.getfile(function))
lineno = py.builtin._getcode(function).co_firstlineno
if fn.relto(curdir):
fn = fn.relto(curdir)
return "%s:%d" %(fn, lineno+1)
def num_mock_patch_args(function):
""" return number of arguments used up by mock arguments (if any) """
patchings = getattr(function, "patchings", None)
if not patchings:
return 0
mock = sys.modules.get("mock", sys.modules.get("unittest.mock", None))
if mock is not None:
return len([p for p in patchings
if not p.attribute_name and p.new is mock.DEFAULT])
return len(patchings)
def getfuncargnames(function, startindex=None):
# XXX merge with main.py's varnames
#assert not isclass(function)
realfunction = function
while hasattr(realfunction, "__wrapped__"):
realfunction = realfunction.__wrapped__
if startindex is None:
startindex = inspect.ismethod(function) and 1 or 0
if realfunction != function:
startindex += num_mock_patch_args(function)
function = realfunction
if isinstance(function, functools.partial):
argnames = inspect.getargs(_pytest._code.getrawcode(function.func))[0]
partial = function
argnames = argnames[len(partial.args):]
if partial.keywords:
for kw in partial.keywords:
argnames.remove(kw)
else:
argnames = inspect.getargs(_pytest._code.getrawcode(function))[0]
defaults = getattr(function, 'func_defaults',
getattr(function, '__defaults__', None)) or ()
numdefaults = len(defaults)
if numdefaults:
return tuple(argnames[startindex:-numdefaults])
return tuple(argnames[startindex:])
if sys.version_info[:2] == (2, 6):
def isclass(object):
""" Return true if the object is a class. Overrides inspect.isclass for
python 2.6 because it will return True for objects which always return
something on __getattr__ calls (see #1035).
Backport of https://hg.python.org/cpython/rev/35bf8f7a8edc
"""
return isinstance(object, (type, types.ClassType))
if _PY3:
import codecs
STRING_TYPES = bytes, str
def _escape_strings(val):
"""If val is pure ascii, returns it as a str(). Otherwise, escapes
bytes objects into a sequence of escaped bytes:
b'\xc3\xb4\xc5\xd6' -> u'\\xc3\\xb4\\xc5\\xd6'
and escapes unicode objects into a sequence of escaped unicode
ids, e.g.:
'4\\nV\\U00043efa\\x0eMXWB\\x1e\\u3028\\u15fd\\xcd\\U0007d944'
note:
the obvious "v.decode('unicode-escape')" will return
valid utf-8 unicode if it finds them in bytes, but we
want to return escaped bytes for any byte, even if they match
a utf-8 string.
"""
if isinstance(val, bytes):
if val:
# source: http://goo.gl/bGsnwC
encoded_bytes, _ = codecs.escape_encode(val)
return encoded_bytes.decode('ascii')
else:
# empty bytes crashes codecs.escape_encode (#1087)
return ''
else:
return val.encode('unicode_escape').decode('ascii')
else:
STRING_TYPES = bytes, str, unicode
def _escape_strings(val):
"""In py2 bytes and str are the same type, so return if it's a bytes
object, return it unchanged if it is a full ascii string,
otherwise escape it into its binary form.
If it's a unicode string, change the unicode characters into
unicode escapes.
"""
if isinstance(val, bytes):
try:
return val.encode('ascii')
except UnicodeDecodeError:
return val.encode('string-escape')
else:
return val.encode('unicode-escape')
def get_real_func(obj):
""" gets the real function object of the (possibly) wrapped object by
functools.wraps or functools.partial.
"""
while hasattr(obj, "__wrapped__"):
obj = obj.__wrapped__
if isinstance(obj, functools.partial):
obj = obj.func
return obj
def getfslineno(obj):
# xxx let decorators etc specify a sane ordering
obj = get_real_func(obj)
if hasattr(obj, 'place_as'):
obj = obj.place_as
fslineno = _pytest._code.getfslineno(obj)
assert isinstance(fslineno[1], int), obj
return fslineno
def getimfunc(func):
try:
return func.__func__
except AttributeError:
try:
return func.im_func
except AttributeError:
return func
def safe_getattr(object, name, default):
""" Like getattr but return default upon any Exception.
Attribute access can potentially fail for 'evil' Python objects.
See issue214
"""
try:
return getattr(object, name, default)
except Exception:
return default
def _is_unittest_unexpected_success_a_failure():
"""Return if the test suite should fail if a @expectedFailure unittest test PASSES.
From https://docs.python.org/3/library/unittest.html?highlight=unittest#unittest.TestResult.wasSuccessful:
Changed in version 3.4: Returns False if there were any
unexpectedSuccesses from tests marked with the expectedFailure() decorator.
"""
return sys.version_info >= (3, 4)
if _PY3:
def safe_str(v):
"""returns v as string"""
return str(v)
else:
def safe_str(v):
"""returns v as string, converting to ascii if necessary"""
try:
return str(v)
except UnicodeError:
errors = 'replace'
return v.encode('ascii', errors)

1340
lib/spack/external/_pytest/config.py vendored Normal file

File diff suppressed because it is too large Load Diff

124
lib/spack/external/_pytest/debugging.py vendored Normal file
View File

@@ -0,0 +1,124 @@
""" interactive debugging with PDB, the Python Debugger. """
from __future__ import absolute_import
import pdb
import sys
import pytest
def pytest_addoption(parser):
group = parser.getgroup("general")
group._addoption(
'--pdb', dest="usepdb", action="store_true",
help="start the interactive Python debugger on errors.")
group._addoption(
'--pdbcls', dest="usepdb_cls", metavar="modulename:classname",
help="start a custom interactive Python debugger on errors. "
"For example: --pdbcls=IPython.terminal.debugger:TerminalPdb")
def pytest_namespace():
return {'set_trace': pytestPDB().set_trace}
def pytest_configure(config):
if config.getvalue("usepdb") or config.getvalue("usepdb_cls"):
config.pluginmanager.register(PdbInvoke(), 'pdbinvoke')
if config.getvalue("usepdb_cls"):
modname, classname = config.getvalue("usepdb_cls").split(":")
__import__(modname)
pdb_cls = getattr(sys.modules[modname], classname)
else:
pdb_cls = pdb.Pdb
pytestPDB._pdb_cls = pdb_cls
old = (pdb.set_trace, pytestPDB._pluginmanager)
def fin():
pdb.set_trace, pytestPDB._pluginmanager = old
pytestPDB._config = None
pytestPDB._pdb_cls = pdb.Pdb
pdb.set_trace = pytest.set_trace
pytestPDB._pluginmanager = config.pluginmanager
pytestPDB._config = config
config._cleanup.append(fin)
class pytestPDB:
""" Pseudo PDB that defers to the real pdb. """
_pluginmanager = None
_config = None
_pdb_cls = pdb.Pdb
def set_trace(self):
""" invoke PDB set_trace debugging, dropping any IO capturing. """
import _pytest.config
frame = sys._getframe().f_back
if self._pluginmanager is not None:
capman = self._pluginmanager.getplugin("capturemanager")
if capman:
capman.suspendcapture(in_=True)
tw = _pytest.config.create_terminal_writer(self._config)
tw.line()
tw.sep(">", "PDB set_trace (IO-capturing turned off)")
self._pluginmanager.hook.pytest_enter_pdb(config=self._config)
self._pdb_cls().set_trace(frame)
class PdbInvoke:
def pytest_exception_interact(self, node, call, report):
capman = node.config.pluginmanager.getplugin("capturemanager")
if capman:
out, err = capman.suspendcapture(in_=True)
sys.stdout.write(out)
sys.stdout.write(err)
_enter_pdb(node, call.excinfo, report)
def pytest_internalerror(self, excrepr, excinfo):
for line in str(excrepr).split("\n"):
sys.stderr.write("INTERNALERROR> %s\n" %line)
sys.stderr.flush()
tb = _postmortem_traceback(excinfo)
post_mortem(tb)
def _enter_pdb(node, excinfo, rep):
# XXX we re-use the TerminalReporter's terminalwriter
# because this seems to avoid some encoding related troubles
# for not completely clear reasons.
tw = node.config.pluginmanager.getplugin("terminalreporter")._tw
tw.line()
tw.sep(">", "traceback")
rep.toterminal(tw)
tw.sep(">", "entering PDB")
tb = _postmortem_traceback(excinfo)
post_mortem(tb)
rep._pdbshown = True
return rep
def _postmortem_traceback(excinfo):
# A doctest.UnexpectedException is not useful for post_mortem.
# Use the underlying exception instead:
from doctest import UnexpectedException
if isinstance(excinfo.value, UnexpectedException):
return excinfo.value.exc_info[2]
else:
return excinfo._excinfo[2]
def _find_last_non_hidden_frame(stack):
i = max(0, len(stack) - 1)
while i and stack[i][0].f_locals.get("__tracebackhide__", False):
i -= 1
return i
def post_mortem(t):
class Pdb(pytestPDB._pdb_cls):
def get_stack(self, f, t):
stack, i = pdb.Pdb.get_stack(self, f, t)
if f is None:
i = _find_last_non_hidden_frame(stack)
return stack, i
p = Pdb()
p.reset()
p.interaction(None, t)

View File

@@ -0,0 +1,24 @@
"""
This module contains deprecation messages and bits of code used elsewhere in the codebase
that is planned to be removed in the next pytest release.
Keeping it in a central location makes it easy to track what is deprecated and should
be removed when the time comes.
"""
MAIN_STR_ARGS = 'passing a string to pytest.main() is deprecated, ' \
'pass a list of arguments instead.'
YIELD_TESTS = 'yield tests are deprecated, and scheduled to be removed in pytest 4.0'
FUNCARG_PREFIX = (
'{name}: declaring fixtures using "pytest_funcarg__" prefix is deprecated '
'and scheduled to be removed in pytest 4.0. '
'Please remove the prefix and use the @pytest.fixture decorator instead.')
SETUP_CFG_PYTEST = '[pytest] section in setup.cfg files is deprecated, use [tool:pytest] instead.'
GETFUNCARGVALUE = "use of getfuncargvalue is deprecated, use getfixturevalue"
RESULT_LOG = '--result-log is deprecated and scheduled for removal in pytest 4.0'

331
lib/spack/external/_pytest/doctest.py vendored Normal file
View File

@@ -0,0 +1,331 @@
""" discover and run doctests in modules and test files."""
from __future__ import absolute_import
import traceback
import pytest
from _pytest._code.code import ExceptionInfo, ReprFileLocation, TerminalRepr
from _pytest.fixtures import FixtureRequest
DOCTEST_REPORT_CHOICE_NONE = 'none'
DOCTEST_REPORT_CHOICE_CDIFF = 'cdiff'
DOCTEST_REPORT_CHOICE_NDIFF = 'ndiff'
DOCTEST_REPORT_CHOICE_UDIFF = 'udiff'
DOCTEST_REPORT_CHOICE_ONLY_FIRST_FAILURE = 'only_first_failure'
DOCTEST_REPORT_CHOICES = (
DOCTEST_REPORT_CHOICE_NONE,
DOCTEST_REPORT_CHOICE_CDIFF,
DOCTEST_REPORT_CHOICE_NDIFF,
DOCTEST_REPORT_CHOICE_UDIFF,
DOCTEST_REPORT_CHOICE_ONLY_FIRST_FAILURE,
)
def pytest_addoption(parser):
parser.addini('doctest_optionflags', 'option flags for doctests',
type="args", default=["ELLIPSIS"])
group = parser.getgroup("collect")
group.addoption("--doctest-modules",
action="store_true", default=False,
help="run doctests in all .py modules",
dest="doctestmodules")
group.addoption("--doctest-report",
type=str.lower, default="udiff",
help="choose another output format for diffs on doctest failure",
choices=DOCTEST_REPORT_CHOICES,
dest="doctestreport")
group.addoption("--doctest-glob",
action="append", default=[], metavar="pat",
help="doctests file matching pattern, default: test*.txt",
dest="doctestglob")
group.addoption("--doctest-ignore-import-errors",
action="store_true", default=False,
help="ignore doctest ImportErrors",
dest="doctest_ignore_import_errors")
def pytest_collect_file(path, parent):
config = parent.config
if path.ext == ".py":
if config.option.doctestmodules:
return DoctestModule(path, parent)
elif _is_doctest(config, path, parent):
return DoctestTextfile(path, parent)
def _is_doctest(config, path, parent):
if path.ext in ('.txt', '.rst') and parent.session.isinitpath(path):
return True
globs = config.getoption("doctestglob") or ['test*.txt']
for glob in globs:
if path.check(fnmatch=glob):
return True
return False
class ReprFailDoctest(TerminalRepr):
def __init__(self, reprlocation, lines):
self.reprlocation = reprlocation
self.lines = lines
def toterminal(self, tw):
for line in self.lines:
tw.line(line)
self.reprlocation.toterminal(tw)
class DoctestItem(pytest.Item):
def __init__(self, name, parent, runner=None, dtest=None):
super(DoctestItem, self).__init__(name, parent)
self.runner = runner
self.dtest = dtest
self.obj = None
self.fixture_request = None
def setup(self):
if self.dtest is not None:
self.fixture_request = _setup_fixtures(self)
globs = dict(getfixture=self.fixture_request.getfixturevalue)
for name, value in self.fixture_request.getfixturevalue('doctest_namespace').items():
globs[name] = value
self.dtest.globs.update(globs)
def runtest(self):
_check_all_skipped(self.dtest)
self.runner.run(self.dtest)
def repr_failure(self, excinfo):
import doctest
if excinfo.errisinstance((doctest.DocTestFailure,
doctest.UnexpectedException)):
doctestfailure = excinfo.value
example = doctestfailure.example
test = doctestfailure.test
filename = test.filename
if test.lineno is None:
lineno = None
else:
lineno = test.lineno + example.lineno + 1
message = excinfo.type.__name__
reprlocation = ReprFileLocation(filename, lineno, message)
checker = _get_checker()
report_choice = _get_report_choice(self.config.getoption("doctestreport"))
if lineno is not None:
lines = doctestfailure.test.docstring.splitlines(False)
# add line numbers to the left of the error message
lines = ["%03d %s" % (i + test.lineno + 1, x)
for (i, x) in enumerate(lines)]
# trim docstring error lines to 10
lines = lines[example.lineno - 9:example.lineno + 1]
else:
lines = ['EXAMPLE LOCATION UNKNOWN, not showing all tests of that example']
indent = '>>>'
for line in example.source.splitlines():
lines.append('??? %s %s' % (indent, line))
indent = '...'
if excinfo.errisinstance(doctest.DocTestFailure):
lines += checker.output_difference(example,
doctestfailure.got, report_choice).split("\n")
else:
inner_excinfo = ExceptionInfo(excinfo.value.exc_info)
lines += ["UNEXPECTED EXCEPTION: %s" %
repr(inner_excinfo.value)]
lines += traceback.format_exception(*excinfo.value.exc_info)
return ReprFailDoctest(reprlocation, lines)
else:
return super(DoctestItem, self).repr_failure(excinfo)
def reportinfo(self):
return self.fspath, None, "[doctest] %s" % self.name
def _get_flag_lookup():
import doctest
return dict(DONT_ACCEPT_TRUE_FOR_1=doctest.DONT_ACCEPT_TRUE_FOR_1,
DONT_ACCEPT_BLANKLINE=doctest.DONT_ACCEPT_BLANKLINE,
NORMALIZE_WHITESPACE=doctest.NORMALIZE_WHITESPACE,
ELLIPSIS=doctest.ELLIPSIS,
IGNORE_EXCEPTION_DETAIL=doctest.IGNORE_EXCEPTION_DETAIL,
COMPARISON_FLAGS=doctest.COMPARISON_FLAGS,
ALLOW_UNICODE=_get_allow_unicode_flag(),
ALLOW_BYTES=_get_allow_bytes_flag(),
)
def get_optionflags(parent):
optionflags_str = parent.config.getini("doctest_optionflags")
flag_lookup_table = _get_flag_lookup()
flag_acc = 0
for flag in optionflags_str:
flag_acc |= flag_lookup_table[flag]
return flag_acc
class DoctestTextfile(pytest.Module):
obj = None
def collect(self):
import doctest
# inspired by doctest.testfile; ideally we would use it directly,
# but it doesn't support passing a custom checker
text = self.fspath.read()
filename = str(self.fspath)
name = self.fspath.basename
globs = {'__name__': '__main__'}
optionflags = get_optionflags(self)
runner = doctest.DebugRunner(verbose=0, optionflags=optionflags,
checker=_get_checker())
parser = doctest.DocTestParser()
test = parser.get_doctest(text, globs, name, filename, 0)
if test.examples:
yield DoctestItem(test.name, self, runner, test)
def _check_all_skipped(test):
"""raises pytest.skip() if all examples in the given DocTest have the SKIP
option set.
"""
import doctest
all_skipped = all(x.options.get(doctest.SKIP, False) for x in test.examples)
if all_skipped:
pytest.skip('all tests skipped by +SKIP option')
class DoctestModule(pytest.Module):
def collect(self):
import doctest
if self.fspath.basename == "conftest.py":
module = self.config.pluginmanager._importconftest(self.fspath)
else:
try:
module = self.fspath.pyimport()
except ImportError:
if self.config.getvalue('doctest_ignore_import_errors'):
pytest.skip('unable to import module %r' % self.fspath)
else:
raise
# uses internal doctest module parsing mechanism
finder = doctest.DocTestFinder()
optionflags = get_optionflags(self)
runner = doctest.DebugRunner(verbose=0, optionflags=optionflags,
checker=_get_checker())
for test in finder.find(module, module.__name__):
if test.examples: # skip empty doctests
yield DoctestItem(test.name, self, runner, test)
def _setup_fixtures(doctest_item):
"""
Used by DoctestTextfile and DoctestItem to setup fixture information.
"""
def func():
pass
doctest_item.funcargs = {}
fm = doctest_item.session._fixturemanager
doctest_item._fixtureinfo = fm.getfixtureinfo(node=doctest_item, func=func,
cls=None, funcargs=False)
fixture_request = FixtureRequest(doctest_item)
fixture_request._fillfixtures()
return fixture_request
def _get_checker():
"""
Returns a doctest.OutputChecker subclass that takes in account the
ALLOW_UNICODE option to ignore u'' prefixes in strings and ALLOW_BYTES
to strip b'' prefixes.
Useful when the same doctest should run in Python 2 and Python 3.
An inner class is used to avoid importing "doctest" at the module
level.
"""
if hasattr(_get_checker, 'LiteralsOutputChecker'):
return _get_checker.LiteralsOutputChecker()
import doctest
import re
class LiteralsOutputChecker(doctest.OutputChecker):
"""
Copied from doctest_nose_plugin.py from the nltk project:
https://github.com/nltk/nltk
Further extended to also support byte literals.
"""
_unicode_literal_re = re.compile(r"(\W|^)[uU]([rR]?[\'\"])", re.UNICODE)
_bytes_literal_re = re.compile(r"(\W|^)[bB]([rR]?[\'\"])", re.UNICODE)
def check_output(self, want, got, optionflags):
res = doctest.OutputChecker.check_output(self, want, got,
optionflags)
if res:
return True
allow_unicode = optionflags & _get_allow_unicode_flag()
allow_bytes = optionflags & _get_allow_bytes_flag()
if not allow_unicode and not allow_bytes:
return False
else: # pragma: no cover
def remove_prefixes(regex, txt):
return re.sub(regex, r'\1\2', txt)
if allow_unicode:
want = remove_prefixes(self._unicode_literal_re, want)
got = remove_prefixes(self._unicode_literal_re, got)
if allow_bytes:
want = remove_prefixes(self._bytes_literal_re, want)
got = remove_prefixes(self._bytes_literal_re, got)
res = doctest.OutputChecker.check_output(self, want, got,
optionflags)
return res
_get_checker.LiteralsOutputChecker = LiteralsOutputChecker
return _get_checker.LiteralsOutputChecker()
def _get_allow_unicode_flag():
"""
Registers and returns the ALLOW_UNICODE flag.
"""
import doctest
return doctest.register_optionflag('ALLOW_UNICODE')
def _get_allow_bytes_flag():
"""
Registers and returns the ALLOW_BYTES flag.
"""
import doctest
return doctest.register_optionflag('ALLOW_BYTES')
def _get_report_choice(key):
"""
This function returns the actual `doctest` module flag value, we want to do it as late as possible to avoid
importing `doctest` and all its dependencies when parsing options, as it adds overhead and breaks tests.
"""
import doctest
return {
DOCTEST_REPORT_CHOICE_UDIFF: doctest.REPORT_UDIFF,
DOCTEST_REPORT_CHOICE_CDIFF: doctest.REPORT_CDIFF,
DOCTEST_REPORT_CHOICE_NDIFF: doctest.REPORT_NDIFF,
DOCTEST_REPORT_CHOICE_ONLY_FIRST_FAILURE: doctest.REPORT_ONLY_FIRST_FAILURE,
DOCTEST_REPORT_CHOICE_NONE: 0,
}[key]
@pytest.fixture(scope='session')
def doctest_namespace():
"""
Inject names into the doctest namespace.
"""
return dict()

1134
lib/spack/external/_pytest/fixtures.py vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,45 @@
"""
Provides a function to report all internal modules for using freezing tools
pytest
"""
def pytest_namespace():
return {'freeze_includes': freeze_includes}
def freeze_includes():
"""
Returns a list of module names used by py.test that should be
included by cx_freeze.
"""
import py
import _pytest
result = list(_iter_all_modules(py))
result += list(_iter_all_modules(_pytest))
return result
def _iter_all_modules(package, prefix=''):
"""
Iterates over the names of all modules that can be found in the given
package, recursively.
Example:
_iter_all_modules(_pytest) ->
['_pytest.assertion.newinterpret',
'_pytest.capture',
'_pytest.core',
...
]
"""
import os
import pkgutil
if type(package) is not str:
path, prefix = package.__path__[0], package.__name__ + '.'
else:
path = package
for _, name, is_package in pkgutil.iter_modules([path]):
if is_package:
for m in _iter_all_modules(os.path.join(path, name), prefix=name + '.'):
yield prefix + m
else:
yield prefix + name

144
lib/spack/external/_pytest/helpconfig.py vendored Normal file
View File

@@ -0,0 +1,144 @@
""" version info, help messages, tracing configuration. """
import py
import pytest
import os, sys
def pytest_addoption(parser):
group = parser.getgroup('debugconfig')
group.addoption('--version', action="store_true",
help="display pytest lib version and import information.")
group._addoption("-h", "--help", action="store_true", dest="help",
help="show help message and configuration info")
group._addoption('-p', action="append", dest="plugins", default = [],
metavar="name",
help="early-load given plugin (multi-allowed). "
"To avoid loading of plugins, use the `no:` prefix, e.g. "
"`no:doctest`.")
group.addoption('--traceconfig', '--trace-config',
action="store_true", default=False,
help="trace considerations of conftest.py files."),
group.addoption('--debug',
action="store_true", dest="debug", default=False,
help="store internal tracing debug information in 'pytestdebug.log'.")
group._addoption(
'-o', '--override-ini', nargs='*', dest="override_ini",
action="append",
help="override config option with option=value style, e.g. `-o xfail_strict=True`.")
@pytest.hookimpl(hookwrapper=True)
def pytest_cmdline_parse():
outcome = yield
config = outcome.get_result()
if config.option.debug:
path = os.path.abspath("pytestdebug.log")
debugfile = open(path, 'w')
debugfile.write("versions pytest-%s, py-%s, "
"python-%s\ncwd=%s\nargs=%s\n\n" %(
pytest.__version__, py.__version__,
".".join(map(str, sys.version_info)),
os.getcwd(), config._origargs))
config.trace.root.setwriter(debugfile.write)
undo_tracing = config.pluginmanager.enable_tracing()
sys.stderr.write("writing pytestdebug information to %s\n" % path)
def unset_tracing():
debugfile.close()
sys.stderr.write("wrote pytestdebug information to %s\n" %
debugfile.name)
config.trace.root.setwriter(None)
undo_tracing()
config.add_cleanup(unset_tracing)
def pytest_cmdline_main(config):
if config.option.version:
p = py.path.local(pytest.__file__)
sys.stderr.write("This is pytest version %s, imported from %s\n" %
(pytest.__version__, p))
plugininfo = getpluginversioninfo(config)
if plugininfo:
for line in plugininfo:
sys.stderr.write(line + "\n")
return 0
elif config.option.help:
config._do_configure()
showhelp(config)
config._ensure_unconfigure()
return 0
def showhelp(config):
reporter = config.pluginmanager.get_plugin('terminalreporter')
tw = reporter._tw
tw.write(config._parser.optparser.format_help())
tw.line()
tw.line()
tw.line("[pytest] ini-options in the first "
"pytest.ini|tox.ini|setup.cfg file found:")
tw.line()
for name in config._parser._ininames:
help, type, default = config._parser._inidict[name]
if type is None:
type = "string"
spec = "%s (%s)" % (name, type)
line = " %-24s %s" %(spec, help)
tw.line(line[:tw.fullwidth])
tw.line()
tw.line("environment variables:")
vars = [
("PYTEST_ADDOPTS", "extra command line options"),
("PYTEST_PLUGINS", "comma-separated plugins to load during startup"),
("PYTEST_DEBUG", "set to enable debug tracing of pytest's internals")
]
for name, help in vars:
tw.line(" %-24s %s" % (name, help))
tw.line()
tw.line()
tw.line("to see available markers type: pytest --markers")
tw.line("to see available fixtures type: pytest --fixtures")
tw.line("(shown according to specified file_or_dir or current dir "
"if not specified)")
for warningreport in reporter.stats.get('warnings', []):
tw.line("warning : " + warningreport.message, red=True)
return
conftest_options = [
('pytest_plugins', 'list of plugin names to load'),
]
def getpluginversioninfo(config):
lines = []
plugininfo = config.pluginmanager.list_plugin_distinfo()
if plugininfo:
lines.append("setuptools registered plugins:")
for plugin, dist in plugininfo:
loc = getattr(plugin, '__file__', repr(plugin))
content = "%s-%s at %s" % (dist.project_name, dist.version, loc)
lines.append(" " + content)
return lines
def pytest_report_header(config):
lines = []
if config.option.debug or config.option.traceconfig:
lines.append("using: pytest-%s pylib-%s" %
(pytest.__version__,py.__version__))
verinfo = getpluginversioninfo(config)
if verinfo:
lines.extend(verinfo)
if config.option.traceconfig:
lines.append("active plugins:")
items = config.pluginmanager.list_name_plugin()
for name, plugin in items:
if hasattr(plugin, '__file__'):
r = plugin.__file__
else:
r = repr(plugin)
lines.append(" %-20s: %s" %(name, r))
return lines

314
lib/spack/external/_pytest/hookspec.py vendored Normal file
View File

@@ -0,0 +1,314 @@
""" hook specifications for pytest plugins, invoked from main.py and builtin plugins. """
from _pytest._pluggy import HookspecMarker
hookspec = HookspecMarker("pytest")
# -------------------------------------------------------------------------
# Initialization hooks called for every plugin
# -------------------------------------------------------------------------
@hookspec(historic=True)
def pytest_addhooks(pluginmanager):
"""called at plugin registration time to allow adding new hooks via a call to
pluginmanager.add_hookspecs(module_or_class, prefix)."""
@hookspec(historic=True)
def pytest_namespace():
"""return dict of name->object to be made globally available in
the pytest namespace. This hook is called at plugin registration
time.
"""
@hookspec(historic=True)
def pytest_plugin_registered(plugin, manager):
""" a new pytest plugin got registered. """
@hookspec(historic=True)
def pytest_addoption(parser):
"""register argparse-style options and ini-style config values,
called once at the beginning of a test run.
.. note::
This function should be implemented only in plugins or ``conftest.py``
files situated at the tests root directory due to how pytest
:ref:`discovers plugins during startup <pluginorder>`.
:arg parser: To add command line options, call
:py:func:`parser.addoption(...) <_pytest.config.Parser.addoption>`.
To add ini-file values call :py:func:`parser.addini(...)
<_pytest.config.Parser.addini>`.
Options can later be accessed through the
:py:class:`config <_pytest.config.Config>` object, respectively:
- :py:func:`config.getoption(name) <_pytest.config.Config.getoption>` to
retrieve the value of a command line option.
- :py:func:`config.getini(name) <_pytest.config.Config.getini>` to retrieve
a value read from an ini-style file.
The config object is passed around on many internal objects via the ``.config``
attribute or can be retrieved as the ``pytestconfig`` fixture or accessed
via (deprecated) ``pytest.config``.
"""
@hookspec(historic=True)
def pytest_configure(config):
""" called after command line options have been parsed
and all plugins and initial conftest files been loaded.
This hook is called for every plugin.
"""
# -------------------------------------------------------------------------
# Bootstrapping hooks called for plugins registered early enough:
# internal and 3rd party plugins as well as directly
# discoverable conftest.py local plugins.
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_cmdline_parse(pluginmanager, args):
"""return initialized config object, parsing the specified args. """
def pytest_cmdline_preparse(config, args):
"""(deprecated) modify command line arguments before option parsing. """
@hookspec(firstresult=True)
def pytest_cmdline_main(config):
""" called for performing the main command line action. The default
implementation will invoke the configure hooks and runtest_mainloop. """
def pytest_load_initial_conftests(early_config, parser, args):
""" implements the loading of initial conftest files ahead
of command line option parsing. """
# -------------------------------------------------------------------------
# collection hooks
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_collection(session):
""" perform the collection protocol for the given session. """
def pytest_collection_modifyitems(session, config, items):
""" called after collection has been performed, may filter or re-order
the items in-place."""
def pytest_collection_finish(session):
""" called after collection has been performed and modified. """
@hookspec(firstresult=True)
def pytest_ignore_collect(path, config):
""" return True to prevent considering this path for collection.
This hook is consulted for all files and directories prior to calling
more specific hooks.
"""
@hookspec(firstresult=True)
def pytest_collect_directory(path, parent):
""" called before traversing a directory for collection files. """
def pytest_collect_file(path, parent):
""" return collection Node or None for the given path. Any new node
needs to have the specified ``parent`` as a parent."""
# logging hooks for collection
def pytest_collectstart(collector):
""" collector starts collecting. """
def pytest_itemcollected(item):
""" we just collected a test item. """
def pytest_collectreport(report):
""" collector finished collecting. """
def pytest_deselected(items):
""" called for test items deselected by keyword. """
@hookspec(firstresult=True)
def pytest_make_collect_report(collector):
""" perform ``collector.collect()`` and return a CollectReport. """
# -------------------------------------------------------------------------
# Python test function related hooks
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_pycollect_makemodule(path, parent):
""" return a Module collector or None for the given path.
This hook will be called for each matching test module path.
The pytest_collect_file hook needs to be used if you want to
create test modules for files that do not match as a test module.
"""
@hookspec(firstresult=True)
def pytest_pycollect_makeitem(collector, name, obj):
""" return custom item/collector for a python object in a module, or None. """
@hookspec(firstresult=True)
def pytest_pyfunc_call(pyfuncitem):
""" call underlying test function. """
def pytest_generate_tests(metafunc):
""" generate (multiple) parametrized calls to a test function."""
@hookspec(firstresult=True)
def pytest_make_parametrize_id(config, val):
"""Return a user-friendly string representation of the given ``val`` that will be used
by @pytest.mark.parametrize calls. Return None if the hook doesn't know about ``val``.
"""
# -------------------------------------------------------------------------
# generic runtest related hooks
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_runtestloop(session):
""" called for performing the main runtest loop
(after collection finished). """
def pytest_itemstart(item, node):
""" (deprecated, use pytest_runtest_logstart). """
@hookspec(firstresult=True)
def pytest_runtest_protocol(item, nextitem):
""" implements the runtest_setup/call/teardown protocol for
the given test item, including capturing exceptions and calling
reporting hooks.
:arg item: test item for which the runtest protocol is performed.
:arg nextitem: the scheduled-to-be-next test item (or None if this
is the end my friend). This argument is passed on to
:py:func:`pytest_runtest_teardown`.
:return boolean: True if no further hook implementations should be invoked.
"""
def pytest_runtest_logstart(nodeid, location):
""" signal the start of running a single test item. """
def pytest_runtest_setup(item):
""" called before ``pytest_runtest_call(item)``. """
def pytest_runtest_call(item):
""" called to execute the test ``item``. """
def pytest_runtest_teardown(item, nextitem):
""" called after ``pytest_runtest_call``.
:arg nextitem: the scheduled-to-be-next test item (None if no further
test item is scheduled). This argument can be used to
perform exact teardowns, i.e. calling just enough finalizers
so that nextitem only needs to call setup-functions.
"""
@hookspec(firstresult=True)
def pytest_runtest_makereport(item, call):
""" return a :py:class:`_pytest.runner.TestReport` object
for the given :py:class:`pytest.Item` and
:py:class:`_pytest.runner.CallInfo`.
"""
def pytest_runtest_logreport(report):
""" process a test setup/call/teardown report relating to
the respective phase of executing a test. """
# -------------------------------------------------------------------------
# Fixture related hooks
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_fixture_setup(fixturedef, request):
""" performs fixture setup execution. """
def pytest_fixture_post_finalizer(fixturedef):
""" called after fixture teardown, but before the cache is cleared so
the fixture result cache ``fixturedef.cached_result`` can
still be accessed."""
# -------------------------------------------------------------------------
# test session related hooks
# -------------------------------------------------------------------------
def pytest_sessionstart(session):
""" before session.main() is called. """
def pytest_sessionfinish(session, exitstatus):
""" whole test run finishes. """
def pytest_unconfigure(config):
""" called before test process is exited. """
# -------------------------------------------------------------------------
# hooks for customising the assert methods
# -------------------------------------------------------------------------
def pytest_assertrepr_compare(config, op, left, right):
"""return explanation for comparisons in failing assert expressions.
Return None for no custom explanation, otherwise return a list
of strings. The strings will be joined by newlines but any newlines
*in* a string will be escaped. Note that all but the first line will
be indented sligthly, the intention is for the first line to be a summary.
"""
# -------------------------------------------------------------------------
# hooks for influencing reporting (invoked from _pytest_terminal)
# -------------------------------------------------------------------------
def pytest_report_header(config, startdir):
""" return a string to be displayed as header info for terminal reporting."""
@hookspec(firstresult=True)
def pytest_report_teststatus(report):
""" return result-category, shortletter and verbose word for reporting."""
def pytest_terminal_summary(terminalreporter, exitstatus):
""" add additional section in terminal summary reporting. """
@hookspec(historic=True)
def pytest_logwarning(message, code, nodeid, fslocation):
""" process a warning specified by a message, a code string,
a nodeid and fslocation (both of which may be None
if the warning is not tied to a partilar node/location)."""
# -------------------------------------------------------------------------
# doctest hooks
# -------------------------------------------------------------------------
@hookspec(firstresult=True)
def pytest_doctest_prepare_content(content):
""" return processed content for a given doctest"""
# -------------------------------------------------------------------------
# error handling and internal debugging hooks
# -------------------------------------------------------------------------
def pytest_internalerror(excrepr, excinfo):
""" called for internal errors. """
def pytest_keyboard_interrupt(excinfo):
""" called for keyboard interrupt. """
def pytest_exception_interact(node, call, report):
"""called when an exception was raised which can potentially be
interactively handled.
This hook is only called if an exception was raised
that is not an internal exception like ``skip.Exception``.
"""
def pytest_enter_pdb(config):
""" called upon pdb.set_trace(), can be used by plugins to take special
action just before the python debugger enters in interactive mode.
:arg config: pytest config object
:type config: _pytest.config.Config
"""

413
lib/spack/external/_pytest/junitxml.py vendored Normal file
View File

@@ -0,0 +1,413 @@
"""
report test results in JUnit-XML format,
for use with Jenkins and build integration servers.
Based on initial code from Ross Lawley.
"""
# Output conforms to https://github.com/jenkinsci/xunit-plugin/blob/master/
# src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd
import functools
import py
import os
import re
import sys
import time
import pytest
from _pytest.config import filename_arg
# Python 2.X and 3.X compatibility
if sys.version_info[0] < 3:
from codecs import open
else:
unichr = chr
unicode = str
long = int
class Junit(py.xml.Namespace):
pass
# We need to get the subset of the invalid unicode ranges according to
# XML 1.0 which are valid in this python build. Hence we calculate
# this dynamically instead of hardcoding it. The spec range of valid
# chars is: Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
# | [#x10000-#x10FFFF]
_legal_chars = (0x09, 0x0A, 0x0d)
_legal_ranges = (
(0x20, 0x7E), (0x80, 0xD7FF), (0xE000, 0xFFFD), (0x10000, 0x10FFFF),
)
_legal_xml_re = [
unicode("%s-%s") % (unichr(low), unichr(high))
for (low, high) in _legal_ranges if low < sys.maxunicode
]
_legal_xml_re = [unichr(x) for x in _legal_chars] + _legal_xml_re
illegal_xml_re = re.compile(unicode('[^%s]') % unicode('').join(_legal_xml_re))
del _legal_chars
del _legal_ranges
del _legal_xml_re
_py_ext_re = re.compile(r"\.py$")
def bin_xml_escape(arg):
def repl(matchobj):
i = ord(matchobj.group())
if i <= 0xFF:
return unicode('#x%02X') % i
else:
return unicode('#x%04X') % i
return py.xml.raw(illegal_xml_re.sub(repl, py.xml.escape(arg)))
class _NodeReporter(object):
def __init__(self, nodeid, xml):
self.id = nodeid
self.xml = xml
self.add_stats = self.xml.add_stats
self.duration = 0
self.properties = []
self.nodes = []
self.testcase = None
self.attrs = {}
def append(self, node):
self.xml.add_stats(type(node).__name__)
self.nodes.append(node)
def add_property(self, name, value):
self.properties.append((str(name), bin_xml_escape(value)))
def make_properties_node(self):
"""Return a Junit node containing custom properties, if any.
"""
if self.properties:
return Junit.properties([
Junit.property(name=name, value=value)
for name, value in self.properties
])
return ''
def record_testreport(self, testreport):
assert not self.testcase
names = mangle_test_address(testreport.nodeid)
classnames = names[:-1]
if self.xml.prefix:
classnames.insert(0, self.xml.prefix)
attrs = {
"classname": ".".join(classnames),
"name": bin_xml_escape(names[-1]),
"file": testreport.location[0],
}
if testreport.location[1] is not None:
attrs["line"] = testreport.location[1]
self.attrs = attrs
def to_xml(self):
testcase = Junit.testcase(time=self.duration, **self.attrs)
testcase.append(self.make_properties_node())
for node in self.nodes:
testcase.append(node)
return testcase
def _add_simple(self, kind, message, data=None):
data = bin_xml_escape(data)
node = kind(data, message=message)
self.append(node)
def _write_captured_output(self, report):
for capname in ('out', 'err'):
content = getattr(report, 'capstd' + capname)
if content:
tag = getattr(Junit, 'system-' + capname)
self.append(tag(bin_xml_escape(content)))
def append_pass(self, report):
self.add_stats('passed')
self._write_captured_output(report)
def append_failure(self, report):
# msg = str(report.longrepr.reprtraceback.extraline)
if hasattr(report, "wasxfail"):
self._add_simple(
Junit.skipped,
"xfail-marked test passes unexpectedly")
else:
if hasattr(report.longrepr, "reprcrash"):
message = report.longrepr.reprcrash.message
elif isinstance(report.longrepr, (unicode, str)):
message = report.longrepr
else:
message = str(report.longrepr)
message = bin_xml_escape(message)
fail = Junit.failure(message=message)
fail.append(bin_xml_escape(report.longrepr))
self.append(fail)
self._write_captured_output(report)
def append_collect_error(self, report):
# msg = str(report.longrepr.reprtraceback.extraline)
self.append(Junit.error(bin_xml_escape(report.longrepr),
message="collection failure"))
def append_collect_skipped(self, report):
self._add_simple(
Junit.skipped, "collection skipped", report.longrepr)
def append_error(self, report):
if getattr(report, 'when', None) == 'teardown':
msg = "test teardown failure"
else:
msg = "test setup failure"
self._add_simple(
Junit.error, msg, report.longrepr)
self._write_captured_output(report)
def append_skipped(self, report):
if hasattr(report, "wasxfail"):
self._add_simple(
Junit.skipped, "expected test failure", report.wasxfail
)
else:
filename, lineno, skipreason = report.longrepr
if skipreason.startswith("Skipped: "):
skipreason = bin_xml_escape(skipreason[9:])
self.append(
Junit.skipped("%s:%s: %s" % (filename, lineno, skipreason),
type="pytest.skip",
message=skipreason))
self._write_captured_output(report)
def finalize(self):
data = self.to_xml().unicode(indent=0)
self.__dict__.clear()
self.to_xml = lambda: py.xml.raw(data)
@pytest.fixture
def record_xml_property(request):
"""Add extra xml properties to the tag for the calling test.
The fixture is callable with ``(name, value)``, with value being automatically
xml-encoded.
"""
request.node.warn(
code='C3',
message='record_xml_property is an experimental feature',
)
xml = getattr(request.config, "_xml", None)
if xml is not None:
node_reporter = xml.node_reporter(request.node.nodeid)
return node_reporter.add_property
else:
def add_property_noop(name, value):
pass
return add_property_noop
def pytest_addoption(parser):
group = parser.getgroup("terminal reporting")
group.addoption(
'--junitxml', '--junit-xml',
action="store",
dest="xmlpath",
metavar="path",
type=functools.partial(filename_arg, optname="--junitxml"),
default=None,
help="create junit-xml style report file at given path.")
group.addoption(
'--junitprefix', '--junit-prefix',
action="store",
metavar="str",
default=None,
help="prepend prefix to classnames in junit-xml output")
def pytest_configure(config):
xmlpath = config.option.xmlpath
# prevent opening xmllog on slave nodes (xdist)
if xmlpath and not hasattr(config, 'slaveinput'):
config._xml = LogXML(xmlpath, config.option.junitprefix)
config.pluginmanager.register(config._xml)
def pytest_unconfigure(config):
xml = getattr(config, '_xml', None)
if xml:
del config._xml
config.pluginmanager.unregister(xml)
def mangle_test_address(address):
path, possible_open_bracket, params = address.partition('[')
names = path.split("::")
try:
names.remove('()')
except ValueError:
pass
# convert file path to dotted path
names[0] = names[0].replace("/", '.')
names[0] = _py_ext_re.sub("", names[0])
# put any params back
names[-1] += possible_open_bracket + params
return names
class LogXML(object):
def __init__(self, logfile, prefix):
logfile = os.path.expanduser(os.path.expandvars(logfile))
self.logfile = os.path.normpath(os.path.abspath(logfile))
self.prefix = prefix
self.stats = dict.fromkeys([
'error',
'passed',
'failure',
'skipped',
], 0)
self.node_reporters = {} # nodeid -> _NodeReporter
self.node_reporters_ordered = []
self.global_properties = []
def finalize(self, report):
nodeid = getattr(report, 'nodeid', report)
# local hack to handle xdist report order
slavenode = getattr(report, 'node', None)
reporter = self.node_reporters.pop((nodeid, slavenode))
if reporter is not None:
reporter.finalize()
def node_reporter(self, report):
nodeid = getattr(report, 'nodeid', report)
# local hack to handle xdist report order
slavenode = getattr(report, 'node', None)
key = nodeid, slavenode
if key in self.node_reporters:
# TODO: breasks for --dist=each
return self.node_reporters[key]
reporter = _NodeReporter(nodeid, self)
self.node_reporters[key] = reporter
self.node_reporters_ordered.append(reporter)
return reporter
def add_stats(self, key):
if key in self.stats:
self.stats[key] += 1
def _opentestcase(self, report):
reporter = self.node_reporter(report)
reporter.record_testreport(report)
return reporter
def pytest_runtest_logreport(self, report):
"""handle a setup/call/teardown report, generating the appropriate
xml tags as necessary.
note: due to plugins like xdist, this hook may be called in interlaced
order with reports from other nodes. for example:
usual call order:
-> setup node1
-> call node1
-> teardown node1
-> setup node2
-> call node2
-> teardown node2
possible call order in xdist:
-> setup node1
-> call node1
-> setup node2
-> call node2
-> teardown node2
-> teardown node1
"""
if report.passed:
if report.when == "call": # ignore setup/teardown
reporter = self._opentestcase(report)
reporter.append_pass(report)
elif report.failed:
reporter = self._opentestcase(report)
if report.when == "call":
reporter.append_failure(report)
else:
reporter.append_error(report)
elif report.skipped:
reporter = self._opentestcase(report)
reporter.append_skipped(report)
self.update_testcase_duration(report)
if report.when == "teardown":
self.finalize(report)
def update_testcase_duration(self, report):
"""accumulates total duration for nodeid from given report and updates
the Junit.testcase with the new total if already created.
"""
reporter = self.node_reporter(report)
reporter.duration += getattr(report, 'duration', 0.0)
def pytest_collectreport(self, report):
if not report.passed:
reporter = self._opentestcase(report)
if report.failed:
reporter.append_collect_error(report)
else:
reporter.append_collect_skipped(report)
def pytest_internalerror(self, excrepr):
reporter = self.node_reporter('internal')
reporter.attrs.update(classname="pytest", name='internal')
reporter._add_simple(Junit.error, 'internal error', excrepr)
def pytest_sessionstart(self):
self.suite_start_time = time.time()
def pytest_sessionfinish(self):
dirname = os.path.dirname(os.path.abspath(self.logfile))
if not os.path.isdir(dirname):
os.makedirs(dirname)
logfile = open(self.logfile, 'w', encoding='utf-8')
suite_stop_time = time.time()
suite_time_delta = suite_stop_time - self.suite_start_time
numtests = self.stats['passed'] + self.stats['failure'] + self.stats['skipped'] + self.stats['error']
logfile.write('<?xml version="1.0" encoding="utf-8"?>')
logfile.write(Junit.testsuite(
self._get_global_properties_node(),
[x.to_xml() for x in self.node_reporters_ordered],
name="pytest",
errors=self.stats['error'],
failures=self.stats['failure'],
skips=self.stats['skipped'],
tests=numtests,
time="%.3f" % suite_time_delta, ).unicode(indent=0))
logfile.close()
def pytest_terminal_summary(self, terminalreporter):
terminalreporter.write_sep("-",
"generated xml file: %s" % (self.logfile))
def add_global_property(self, name, value):
self.global_properties.append((str(name), bin_xml_escape(value)))
def _get_global_properties_node(self):
"""Return a Junit node containing custom properties, if any.
"""
if self.global_properties:
return Junit.properties(
[
Junit.property(name=name, value=value)
for name, value in self.global_properties
]
)
return ''

762
lib/spack/external/_pytest/main.py vendored Normal file
View File

@@ -0,0 +1,762 @@
""" core implementation of testing process: init, session, runtest loop. """
import functools
import os
import sys
import _pytest
import _pytest._code
import py
import pytest
try:
from collections import MutableMapping as MappingMixin
except ImportError:
from UserDict import DictMixin as MappingMixin
from _pytest.config import directory_arg
from _pytest.runner import collect_one_node
tracebackcutdir = py.path.local(_pytest.__file__).dirpath()
# exitcodes for the command line
EXIT_OK = 0
EXIT_TESTSFAILED = 1
EXIT_INTERRUPTED = 2
EXIT_INTERNALERROR = 3
EXIT_USAGEERROR = 4
EXIT_NOTESTSCOLLECTED = 5
def pytest_addoption(parser):
parser.addini("norecursedirs", "directory patterns to avoid for recursion",
type="args", default=['.*', 'build', 'dist', 'CVS', '_darcs', '{arch}', '*.egg'])
parser.addini("testpaths", "directories to search for tests when no files or directories are given in the command line.",
type="args", default=[])
#parser.addini("dirpatterns",
# "patterns specifying possible locations of test files",
# type="linelist", default=["**/test_*.txt",
# "**/test_*.py", "**/*_test.py"]
#)
group = parser.getgroup("general", "running and selection options")
group._addoption('-x', '--exitfirst', action="store_const",
dest="maxfail", const=1,
help="exit instantly on first error or failed test."),
group._addoption('--maxfail', metavar="num",
action="store", type=int, dest="maxfail", default=0,
help="exit after first num failures or errors.")
group._addoption('--strict', action="store_true",
help="run pytest in strict mode, warnings become errors.")
group._addoption("-c", metavar="file", type=str, dest="inifilename",
help="load configuration from `file` instead of trying to locate one of the implicit configuration files.")
group._addoption("--continue-on-collection-errors", action="store_true",
default=False, dest="continue_on_collection_errors",
help="Force test execution even if collection errors occur.")
group = parser.getgroup("collect", "collection")
group.addoption('--collectonly', '--collect-only', action="store_true",
help="only collect tests, don't execute them."),
group.addoption('--pyargs', action="store_true",
help="try to interpret all arguments as python packages.")
group.addoption("--ignore", action="append", metavar="path",
help="ignore path during collection (multi-allowed).")
# when changing this to --conf-cut-dir, config.py Conftest.setinitial
# needs upgrading as well
group.addoption('--confcutdir', dest="confcutdir", default=None,
metavar="dir", type=functools.partial(directory_arg, optname="--confcutdir"),
help="only load conftest.py's relative to specified dir.")
group.addoption('--noconftest', action="store_true",
dest="noconftest", default=False,
help="Don't load any conftest.py files.")
group.addoption('--keepduplicates', '--keep-duplicates', action="store_true",
dest="keepduplicates", default=False,
help="Keep duplicate tests.")
group = parser.getgroup("debugconfig",
"test session debugging and configuration")
group.addoption('--basetemp', dest="basetemp", default=None, metavar="dir",
help="base temporary directory for this test run.")
def pytest_namespace():
collect = dict(Item=Item, Collector=Collector, File=File, Session=Session)
return dict(collect=collect)
def pytest_configure(config):
pytest.config = config # compatibiltiy
def wrap_session(config, doit):
"""Skeleton command line program"""
session = Session(config)
session.exitstatus = EXIT_OK
initstate = 0
try:
try:
config._do_configure()
initstate = 1
config.hook.pytest_sessionstart(session=session)
initstate = 2
session.exitstatus = doit(config, session) or 0
except pytest.UsageError:
raise
except KeyboardInterrupt:
excinfo = _pytest._code.ExceptionInfo()
if initstate < 2 and isinstance(
excinfo.value, pytest.exit.Exception):
sys.stderr.write('{0}: {1}\n'.format(
excinfo.typename, excinfo.value.msg))
config.hook.pytest_keyboard_interrupt(excinfo=excinfo)
session.exitstatus = EXIT_INTERRUPTED
except:
excinfo = _pytest._code.ExceptionInfo()
config.notify_exception(excinfo, config.option)
session.exitstatus = EXIT_INTERNALERROR
if excinfo.errisinstance(SystemExit):
sys.stderr.write("mainloop: caught Spurious SystemExit!\n")
finally:
excinfo = None # Explicitly break reference cycle.
session.startdir.chdir()
if initstate >= 2:
config.hook.pytest_sessionfinish(
session=session,
exitstatus=session.exitstatus)
config._ensure_unconfigure()
return session.exitstatus
def pytest_cmdline_main(config):
return wrap_session(config, _main)
def _main(config, session):
""" default command line protocol for initialization, session,
running tests and reporting. """
config.hook.pytest_collection(session=session)
config.hook.pytest_runtestloop(session=session)
if session.testsfailed:
return EXIT_TESTSFAILED
elif session.testscollected == 0:
return EXIT_NOTESTSCOLLECTED
def pytest_collection(session):
return session.perform_collect()
def pytest_runtestloop(session):
if (session.testsfailed and
not session.config.option.continue_on_collection_errors):
raise session.Interrupted(
"%d errors during collection" % session.testsfailed)
if session.config.option.collectonly:
return True
for i, item in enumerate(session.items):
nextitem = session.items[i+1] if i+1 < len(session.items) else None
item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
if session.shouldstop:
raise session.Interrupted(session.shouldstop)
return True
def pytest_ignore_collect(path, config):
p = path.dirpath()
ignore_paths = config._getconftest_pathlist("collect_ignore", path=p)
ignore_paths = ignore_paths or []
excludeopt = config.getoption("ignore")
if excludeopt:
ignore_paths.extend([py.path.local(x) for x in excludeopt])
if path in ignore_paths:
return True
# Skip duplicate paths.
keepduplicates = config.getoption("keepduplicates")
duplicate_paths = config.pluginmanager._duplicatepaths
if not keepduplicates:
if path in duplicate_paths:
return True
else:
duplicate_paths.add(path)
return False
class FSHookProxy:
def __init__(self, fspath, pm, remove_mods):
self.fspath = fspath
self.pm = pm
self.remove_mods = remove_mods
def __getattr__(self, name):
x = self.pm.subset_hook_caller(name, remove_plugins=self.remove_mods)
self.__dict__[name] = x
return x
def compatproperty(name):
def fget(self):
import warnings
warnings.warn("This usage is deprecated, please use pytest.{0} instead".format(name),
PendingDeprecationWarning, stacklevel=2)
return getattr(pytest, name)
return property(fget)
class NodeKeywords(MappingMixin):
def __init__(self, node):
self.node = node
self.parent = node.parent
self._markers = {node.name: True}
def __getitem__(self, key):
try:
return self._markers[key]
except KeyError:
if self.parent is None:
raise
return self.parent.keywords[key]
def __setitem__(self, key, value):
self._markers[key] = value
def __delitem__(self, key):
raise ValueError("cannot delete key in keywords dict")
def __iter__(self):
seen = set(self._markers)
if self.parent is not None:
seen.update(self.parent.keywords)
return iter(seen)
def __len__(self):
return len(self.__iter__())
def keys(self):
return list(self)
def __repr__(self):
return "<NodeKeywords for node %s>" % (self.node, )
class Node(object):
""" base class for Collector and Item the test collection tree.
Collector subclasses have children, Items are terminal nodes."""
def __init__(self, name, parent=None, config=None, session=None):
#: a unique name within the scope of the parent node
self.name = name
#: the parent collector node.
self.parent = parent
#: the pytest config object
self.config = config or parent.config
#: the session this node is part of
self.session = session or parent.session
#: filesystem path where this node was collected from (can be None)
self.fspath = getattr(parent, 'fspath', None)
#: keywords/markers collected from all scopes
self.keywords = NodeKeywords(self)
#: allow adding of extra keywords to use for matching
self.extra_keyword_matches = set()
# used for storing artificial fixturedefs for direct parametrization
self._name2pseudofixturedef = {}
@property
def ihook(self):
""" fspath sensitive hook proxy used to call pytest hooks"""
return self.session.gethookproxy(self.fspath)
Module = compatproperty("Module")
Class = compatproperty("Class")
Instance = compatproperty("Instance")
Function = compatproperty("Function")
File = compatproperty("File")
Item = compatproperty("Item")
def _getcustomclass(self, name):
cls = getattr(self, name)
if cls != getattr(pytest, name):
py.log._apiwarn("2.0", "use of node.%s is deprecated, "
"use pytest_pycollect_makeitem(...) to create custom "
"collection nodes" % name)
return cls
def __repr__(self):
return "<%s %r>" %(self.__class__.__name__,
getattr(self, 'name', None))
def warn(self, code, message):
""" generate a warning with the given code and message for this
item. """
assert isinstance(code, str)
fslocation = getattr(self, "location", None)
if fslocation is None:
fslocation = getattr(self, "fspath", None)
else:
fslocation = "%s:%s" % (fslocation[0], fslocation[1] + 1)
self.ihook.pytest_logwarning.call_historic(kwargs=dict(
code=code, message=message,
nodeid=self.nodeid, fslocation=fslocation))
# methods for ordering nodes
@property
def nodeid(self):
""" a ::-separated string denoting its collection tree address. """
try:
return self._nodeid
except AttributeError:
self._nodeid = x = self._makeid()
return x
def _makeid(self):
return self.parent.nodeid + "::" + self.name
def __hash__(self):
return hash(self.nodeid)
def setup(self):
pass
def teardown(self):
pass
def _memoizedcall(self, attrname, function):
exattrname = "_ex_" + attrname
failure = getattr(self, exattrname, None)
if failure is not None:
py.builtin._reraise(failure[0], failure[1], failure[2])
if hasattr(self, attrname):
return getattr(self, attrname)
try:
res = function()
except py.builtin._sysex:
raise
except:
failure = sys.exc_info()
setattr(self, exattrname, failure)
raise
setattr(self, attrname, res)
return res
def listchain(self):
""" return list of all parent collectors up to self,
starting from root of collection tree. """
chain = []
item = self
while item is not None:
chain.append(item)
item = item.parent
chain.reverse()
return chain
def add_marker(self, marker):
""" dynamically add a marker object to the node.
``marker`` can be a string or pytest.mark.* instance.
"""
from _pytest.mark import MarkDecorator
if isinstance(marker, py.builtin._basestring):
marker = MarkDecorator(marker)
elif not isinstance(marker, MarkDecorator):
raise ValueError("is not a string or pytest.mark.* Marker")
self.keywords[marker.name] = marker
def get_marker(self, name):
""" get a marker object from this node or None if
the node doesn't have a marker with that name. """
val = self.keywords.get(name, None)
if val is not None:
from _pytest.mark import MarkInfo, MarkDecorator
if isinstance(val, (MarkDecorator, MarkInfo)):
return val
def listextrakeywords(self):
""" Return a set of all extra keywords in self and any parents."""
extra_keywords = set()
item = self
for item in self.listchain():
extra_keywords.update(item.extra_keyword_matches)
return extra_keywords
def listnames(self):
return [x.name for x in self.listchain()]
def addfinalizer(self, fin):
""" register a function to be called when this node is finalized.
This method can only be called when this node is active
in a setup chain, for example during self.setup().
"""
self.session._setupstate.addfinalizer(fin, self)
def getparent(self, cls):
""" get the next parent node (including ourself)
which is an instance of the given class"""
current = self
while current and not isinstance(current, cls):
current = current.parent
return current
def _prunetraceback(self, excinfo):
pass
def _repr_failure_py(self, excinfo, style=None):
fm = self.session._fixturemanager
if excinfo.errisinstance(fm.FixtureLookupError):
return excinfo.value.formatrepr()
tbfilter = True
if self.config.option.fulltrace:
style="long"
else:
tb = _pytest._code.Traceback([excinfo.traceback[-1]])
self._prunetraceback(excinfo)
if len(excinfo.traceback) == 0:
excinfo.traceback = tb
tbfilter = False # prunetraceback already does it
if style == "auto":
style = "long"
# XXX should excinfo.getrepr record all data and toterminal() process it?
if style is None:
if self.config.option.tbstyle == "short":
style = "short"
else:
style = "long"
try:
os.getcwd()
abspath = False
except OSError:
abspath = True
return excinfo.getrepr(funcargs=True, abspath=abspath,
showlocals=self.config.option.showlocals,
style=style, tbfilter=tbfilter)
repr_failure = _repr_failure_py
class Collector(Node):
""" Collector instances create children through collect()
and thus iteratively build a tree.
"""
class CollectError(Exception):
""" an error during collection, contains a custom message. """
def collect(self):
""" returns a list of children (items and collectors)
for this collection node.
"""
raise NotImplementedError("abstract")
def repr_failure(self, excinfo):
""" represent a collection failure. """
if excinfo.errisinstance(self.CollectError):
exc = excinfo.value
return str(exc.args[0])
return self._repr_failure_py(excinfo, style="short")
def _memocollect(self):
""" internal helper method to cache results of calling collect(). """
return self._memoizedcall('_collected', lambda: list(self.collect()))
def _prunetraceback(self, excinfo):
if hasattr(self, 'fspath'):
traceback = excinfo.traceback
ntraceback = traceback.cut(path=self.fspath)
if ntraceback == traceback:
ntraceback = ntraceback.cut(excludepath=tracebackcutdir)
excinfo.traceback = ntraceback.filter()
class FSCollector(Collector):
def __init__(self, fspath, parent=None, config=None, session=None):
fspath = py.path.local(fspath) # xxx only for test_resultlog.py?
name = fspath.basename
if parent is not None:
rel = fspath.relto(parent.fspath)
if rel:
name = rel
name = name.replace(os.sep, "/")
super(FSCollector, self).__init__(name, parent, config, session)
self.fspath = fspath
def _makeid(self):
relpath = self.fspath.relto(self.config.rootdir)
if os.sep != "/":
relpath = relpath.replace(os.sep, "/")
return relpath
class File(FSCollector):
""" base class for collecting tests from a file. """
class Item(Node):
""" a basic test invocation item. Note that for a single function
there might be multiple test invocation items.
"""
nextitem = None
def __init__(self, name, parent=None, config=None, session=None):
super(Item, self).__init__(name, parent, config, session)
self._report_sections = []
def add_report_section(self, when, key, content):
if content:
self._report_sections.append((when, key, content))
def reportinfo(self):
return self.fspath, None, ""
@property
def location(self):
try:
return self._location
except AttributeError:
location = self.reportinfo()
# bestrelpath is a quite slow function
cache = self.config.__dict__.setdefault("_bestrelpathcache", {})
try:
fspath = cache[location[0]]
except KeyError:
fspath = self.session.fspath.bestrelpath(location[0])
cache[location[0]] = fspath
location = (fspath, location[1], str(location[2]))
self._location = location
return location
class NoMatch(Exception):
""" raised if matching cannot locate a matching names. """
class Interrupted(KeyboardInterrupt):
""" signals an interrupted test run. """
__module__ = 'builtins' # for py3
class Session(FSCollector):
Interrupted = Interrupted
def __init__(self, config):
FSCollector.__init__(self, config.rootdir, parent=None,
config=config, session=self)
self.testsfailed = 0
self.testscollected = 0
self.shouldstop = False
self.trace = config.trace.root.get("collection")
self._norecursepatterns = config.getini("norecursedirs")
self.startdir = py.path.local()
self.config.pluginmanager.register(self, name="session")
def _makeid(self):
return ""
@pytest.hookimpl(tryfirst=True)
def pytest_collectstart(self):
if self.shouldstop:
raise self.Interrupted(self.shouldstop)
@pytest.hookimpl(tryfirst=True)
def pytest_runtest_logreport(self, report):
if report.failed and not hasattr(report, 'wasxfail'):
self.testsfailed += 1
maxfail = self.config.getvalue("maxfail")
if maxfail and self.testsfailed >= maxfail:
self.shouldstop = "stopping after %d failures" % (
self.testsfailed)
pytest_collectreport = pytest_runtest_logreport
def isinitpath(self, path):
return path in self._initialpaths
def gethookproxy(self, fspath):
# check if we have the common case of running
# hooks with all conftest.py filesall conftest.py
pm = self.config.pluginmanager
my_conftestmodules = pm._getconftestmodules(fspath)
remove_mods = pm._conftest_plugins.difference(my_conftestmodules)
if remove_mods:
# one or more conftests are not in use at this fspath
proxy = FSHookProxy(fspath, pm, remove_mods)
else:
# all plugis are active for this fspath
proxy = self.config.hook
return proxy
def perform_collect(self, args=None, genitems=True):
hook = self.config.hook
try:
items = self._perform_collect(args, genitems)
hook.pytest_collection_modifyitems(session=self,
config=self.config, items=items)
finally:
hook.pytest_collection_finish(session=self)
self.testscollected = len(items)
return items
def _perform_collect(self, args, genitems):
if args is None:
args = self.config.args
self.trace("perform_collect", self, args)
self.trace.root.indent += 1
self._notfound = []
self._initialpaths = set()
self._initialparts = []
self.items = items = []
for arg in args:
parts = self._parsearg(arg)
self._initialparts.append(parts)
self._initialpaths.add(parts[0])
rep = collect_one_node(self)
self.ihook.pytest_collectreport(report=rep)
self.trace.root.indent -= 1
if self._notfound:
errors = []
for arg, exc in self._notfound:
line = "(no name %r in any of %r)" % (arg, exc.args[0])
errors.append("not found: %s\n%s" % (arg, line))
#XXX: test this
raise pytest.UsageError(*errors)
if not genitems:
return rep.result
else:
if rep.passed:
for node in rep.result:
self.items.extend(self.genitems(node))
return items
def collect(self):
for parts in self._initialparts:
arg = "::".join(map(str, parts))
self.trace("processing argument", arg)
self.trace.root.indent += 1
try:
for x in self._collect(arg):
yield x
except NoMatch:
# we are inside a make_report hook so
# we cannot directly pass through the exception
self._notfound.append((arg, sys.exc_info()[1]))
self.trace.root.indent -= 1
def _collect(self, arg):
names = self._parsearg(arg)
path = names.pop(0)
if path.check(dir=1):
assert not names, "invalid arg %r" %(arg,)
for path in path.visit(fil=lambda x: x.check(file=1),
rec=self._recurse, bf=True, sort=True):
for x in self._collectfile(path):
yield x
else:
assert path.check(file=1)
for x in self.matchnodes(self._collectfile(path), names):
yield x
def _collectfile(self, path):
ihook = self.gethookproxy(path)
if not self.isinitpath(path):
if ihook.pytest_ignore_collect(path=path, config=self.config):
return ()
return ihook.pytest_collect_file(path=path, parent=self)
def _recurse(self, path):
ihook = self.gethookproxy(path.dirpath())
if ihook.pytest_ignore_collect(path=path, config=self.config):
return
for pat in self._norecursepatterns:
if path.check(fnmatch=pat):
return False
ihook = self.gethookproxy(path)
ihook.pytest_collect_directory(path=path, parent=self)
return True
def _tryconvertpyarg(self, x):
"""Convert a dotted module name to path.
"""
import pkgutil
try:
loader = pkgutil.find_loader(x)
except ImportError:
return x
if loader is None:
return x
# This method is sometimes invoked when AssertionRewritingHook, which
# does not define a get_filename method, is already in place:
try:
path = loader.get_filename(x)
except AttributeError:
# Retrieve path from AssertionRewritingHook:
path = loader.modules[x][0].co_filename
if loader.is_package(x):
path = os.path.dirname(path)
return path
def _parsearg(self, arg):
""" return (fspath, names) tuple after checking the file exists. """
parts = str(arg).split("::")
if self.config.option.pyargs:
parts[0] = self._tryconvertpyarg(parts[0])
relpath = parts[0].replace("/", os.sep)
path = self.config.invocation_dir.join(relpath, abs=True)
if not path.check():
if self.config.option.pyargs:
raise pytest.UsageError("file or package not found: " + arg + " (missing __init__.py?)")
else:
raise pytest.UsageError("file not found: " + arg)
parts[0] = path
return parts
def matchnodes(self, matching, names):
self.trace("matchnodes", matching, names)
self.trace.root.indent += 1
nodes = self._matchnodes(matching, names)
num = len(nodes)
self.trace("matchnodes finished -> ", num, "nodes")
self.trace.root.indent -= 1
if num == 0:
raise NoMatch(matching, names[:1])
return nodes
def _matchnodes(self, matching, names):
if not matching or not names:
return matching
name = names[0]
assert name
nextnames = names[1:]
resultnodes = []
for node in matching:
if isinstance(node, pytest.Item):
if not names:
resultnodes.append(node)
continue
assert isinstance(node, pytest.Collector)
rep = collect_one_node(node)
if rep.passed:
has_matched = False
for x in rep.result:
# TODO: remove parametrized workaround once collection structure contains parametrization
if x.name == name or x.name.split("[")[0] == name:
resultnodes.extend(self.matchnodes([x], nextnames))
has_matched = True
# XXX accept IDs that don't have "()" for class instances
if not has_matched and len(rep.result) == 1 and x.name == "()":
nextnames.insert(0, name)
resultnodes.extend(self.matchnodes([x], nextnames))
node.ihook.pytest_collectreport(report=rep)
return resultnodes
def genitems(self, node):
self.trace("genitems", node)
if isinstance(node, pytest.Item):
node.ihook.pytest_itemcollected(item=node)
yield node
else:
assert isinstance(node, pytest.Collector)
rep = collect_one_node(node)
if rep.passed:
for subnode in rep.result:
for x in self.genitems(subnode):
yield x
node.ihook.pytest_collectreport(report=rep)

328
lib/spack/external/_pytest/mark.py vendored Normal file
View File

@@ -0,0 +1,328 @@
""" generic mechanism for marking and selecting python functions. """
import inspect
class MarkerError(Exception):
"""Error in use of a pytest marker/attribute."""
def pytest_namespace():
return {'mark': MarkGenerator()}
def pytest_addoption(parser):
group = parser.getgroup("general")
group._addoption(
'-k',
action="store", dest="keyword", default='', metavar="EXPRESSION",
help="only run tests which match the given substring expression. "
"An expression is a python evaluatable expression "
"where all names are substring-matched against test names "
"and their parent classes. Example: -k 'test_method or test_"
"other' matches all test functions and classes whose name "
"contains 'test_method' or 'test_other'. "
"Additionally keywords are matched to classes and functions "
"containing extra names in their 'extra_keyword_matches' set, "
"as well as functions which have names assigned directly to them."
)
group._addoption(
"-m",
action="store", dest="markexpr", default="", metavar="MARKEXPR",
help="only run tests matching given mark expression. "
"example: -m 'mark1 and not mark2'."
)
group.addoption(
"--markers", action="store_true",
help="show markers (builtin, plugin and per-project ones)."
)
parser.addini("markers", "markers for test functions", 'linelist')
def pytest_cmdline_main(config):
import _pytest.config
if config.option.markers:
config._do_configure()
tw = _pytest.config.create_terminal_writer(config)
for line in config.getini("markers"):
name, rest = line.split(":", 1)
tw.write("@pytest.mark.%s:" % name, bold=True)
tw.line(rest)
tw.line()
config._ensure_unconfigure()
return 0
pytest_cmdline_main.tryfirst = True
def pytest_collection_modifyitems(items, config):
keywordexpr = config.option.keyword.lstrip()
matchexpr = config.option.markexpr
if not keywordexpr and not matchexpr:
return
# pytest used to allow "-" for negating
# but today we just allow "-" at the beginning, use "not" instead
# we probably remove "-" alltogether soon
if keywordexpr.startswith("-"):
keywordexpr = "not " + keywordexpr[1:]
selectuntil = False
if keywordexpr[-1:] == ":":
selectuntil = True
keywordexpr = keywordexpr[:-1]
remaining = []
deselected = []
for colitem in items:
if keywordexpr and not matchkeyword(colitem, keywordexpr):
deselected.append(colitem)
else:
if selectuntil:
keywordexpr = None
if matchexpr:
if not matchmark(colitem, matchexpr):
deselected.append(colitem)
continue
remaining.append(colitem)
if deselected:
config.hook.pytest_deselected(items=deselected)
items[:] = remaining
class MarkMapping:
"""Provides a local mapping for markers where item access
resolves to True if the marker is present. """
def __init__(self, keywords):
mymarks = set()
for key, value in keywords.items():
if isinstance(value, MarkInfo) or isinstance(value, MarkDecorator):
mymarks.add(key)
self._mymarks = mymarks
def __getitem__(self, name):
return name in self._mymarks
class KeywordMapping:
"""Provides a local mapping for keywords.
Given a list of names, map any substring of one of these names to True.
"""
def __init__(self, names):
self._names = names
def __getitem__(self, subname):
for name in self._names:
if subname in name:
return True
return False
def matchmark(colitem, markexpr):
"""Tries to match on any marker names, attached to the given colitem."""
return eval(markexpr, {}, MarkMapping(colitem.keywords))
def matchkeyword(colitem, keywordexpr):
"""Tries to match given keyword expression to given collector item.
Will match on the name of colitem, including the names of its parents.
Only matches names of items which are either a :class:`Class` or a
:class:`Function`.
Additionally, matches on names in the 'extra_keyword_matches' set of
any item, as well as names directly assigned to test functions.
"""
mapped_names = set()
# Add the names of the current item and any parent items
import pytest
for item in colitem.listchain():
if not isinstance(item, pytest.Instance):
mapped_names.add(item.name)
# Add the names added as extra keywords to current or parent items
for name in colitem.listextrakeywords():
mapped_names.add(name)
# Add the names attached to the current function through direct assignment
if hasattr(colitem, 'function'):
for name in colitem.function.__dict__:
mapped_names.add(name)
mapping = KeywordMapping(mapped_names)
if " " not in keywordexpr:
# special case to allow for simple "-k pass" and "-k 1.3"
return mapping[keywordexpr]
elif keywordexpr.startswith("not ") and " " not in keywordexpr[4:]:
return not mapping[keywordexpr[4:]]
return eval(keywordexpr, {}, mapping)
def pytest_configure(config):
import pytest
if config.option.strict:
pytest.mark._config = config
class MarkGenerator:
""" Factory for :class:`MarkDecorator` objects - exposed as
a ``pytest.mark`` singleton instance. Example::
import pytest
@pytest.mark.slowtest
def test_function():
pass
will set a 'slowtest' :class:`MarkInfo` object
on the ``test_function`` object. """
def __getattr__(self, name):
if name[0] == "_":
raise AttributeError("Marker name must NOT start with underscore")
if hasattr(self, '_config'):
self._check(name)
return MarkDecorator(name)
def _check(self, name):
try:
if name in self._markers:
return
except AttributeError:
pass
self._markers = l = set()
for line in self._config.getini("markers"):
beginning = line.split(":", 1)
x = beginning[0].split("(", 1)[0]
l.add(x)
if name not in self._markers:
raise AttributeError("%r not a registered marker" % (name,))
def istestfunc(func):
return hasattr(func, "__call__") and \
getattr(func, "__name__", "<lambda>") != "<lambda>"
class MarkDecorator:
""" A decorator for test functions and test classes. When applied
it will create :class:`MarkInfo` objects which may be
:ref:`retrieved by hooks as item keywords <excontrolskip>`.
MarkDecorator instances are often created like this::
mark1 = pytest.mark.NAME # simple MarkDecorator
mark2 = pytest.mark.NAME(name1=value) # parametrized MarkDecorator
and can then be applied as decorators to test functions::
@mark2
def test_function():
pass
When a MarkDecorator instance is called it does the following:
1. If called with a single class as its only positional argument and no
additional keyword arguments, it attaches itself to the class so it
gets applied automatically to all test cases found in that class.
2. If called with a single function as its only positional argument and
no additional keyword arguments, it attaches a MarkInfo object to the
function, containing all the arguments already stored internally in
the MarkDecorator.
3. When called in any other case, it performs a 'fake construction' call,
i.e. it returns a new MarkDecorator instance with the original
MarkDecorator's content updated with the arguments passed to this
call.
Note: The rules above prevent MarkDecorator objects from storing only a
single function or class reference as their positional argument with no
additional keyword or positional arguments.
"""
def __init__(self, name, args=None, kwargs=None):
self.name = name
self.args = args or ()
self.kwargs = kwargs or {}
@property
def markname(self):
return self.name # for backward-compat (2.4.1 had this attr)
def __repr__(self):
d = self.__dict__.copy()
name = d.pop('name')
return "<MarkDecorator %r %r>" % (name, d)
def __call__(self, *args, **kwargs):
""" if passed a single callable argument: decorate it with mark info.
otherwise add *args/**kwargs in-place to mark information. """
if args and not kwargs:
func = args[0]
is_class = inspect.isclass(func)
if len(args) == 1 and (istestfunc(func) or is_class):
if is_class:
if hasattr(func, 'pytestmark'):
mark_list = func.pytestmark
if not isinstance(mark_list, list):
mark_list = [mark_list]
# always work on a copy to avoid updating pytestmark
# from a superclass by accident
mark_list = mark_list + [self]
func.pytestmark = mark_list
else:
func.pytestmark = [self]
else:
holder = getattr(func, self.name, None)
if holder is None:
holder = MarkInfo(
self.name, self.args, self.kwargs
)
setattr(func, self.name, holder)
else:
holder.add(self.args, self.kwargs)
return func
kw = self.kwargs.copy()
kw.update(kwargs)
args = self.args + args
return self.__class__(self.name, args=args, kwargs=kw)
def extract_argvalue(maybe_marked_args):
# TODO: incorrect mark data, the old code wanst able to collect lists
# individual parametrized argument sets can be wrapped in a series
# of markers in which case we unwrap the values and apply the mark
# at Function init
newmarks = {}
argval = maybe_marked_args
while isinstance(argval, MarkDecorator):
newmark = MarkDecorator(argval.markname,
argval.args[:-1], argval.kwargs)
newmarks[newmark.markname] = newmark
argval = argval.args[-1]
return argval, newmarks
class MarkInfo:
""" Marking object created by :class:`MarkDecorator` instances. """
def __init__(self, name, args, kwargs):
#: name of attribute
self.name = name
#: positional argument list, empty if none specified
self.args = args
#: keyword argument dictionary, empty if nothing specified
self.kwargs = kwargs.copy()
self._arglist = [(args, kwargs.copy())]
def __repr__(self):
return "<MarkInfo %r args=%r kwargs=%r>" % (
self.name, self.args, self.kwargs
)
def add(self, args, kwargs):
""" add a MarkInfo with the given args and kwargs. """
self._arglist.append((args, kwargs))
self.args += args
self.kwargs.update(kwargs)
def __iter__(self):
""" yield MarkInfo objects each relating to a marking-call. """
for args, kwargs in self._arglist:
yield MarkInfo(self.name, args, kwargs)

View File

@@ -0,0 +1,258 @@
""" monkeypatching and mocking functionality. """
import os, sys
import re
from py.builtin import _basestring
import pytest
RE_IMPORT_ERROR_NAME = re.compile("^No module named (.*)$")
@pytest.fixture
def monkeypatch(request):
"""The returned ``monkeypatch`` fixture provides these
helper methods to modify objects, dictionaries or os.environ::
monkeypatch.setattr(obj, name, value, raising=True)
monkeypatch.delattr(obj, name, raising=True)
monkeypatch.setitem(mapping, name, value)
monkeypatch.delitem(obj, name, raising=True)
monkeypatch.setenv(name, value, prepend=False)
monkeypatch.delenv(name, value, raising=True)
monkeypatch.syspath_prepend(path)
monkeypatch.chdir(path)
All modifications will be undone after the requesting
test function or fixture has finished. The ``raising``
parameter determines if a KeyError or AttributeError
will be raised if the set/deletion operation has no target.
"""
mpatch = MonkeyPatch()
request.addfinalizer(mpatch.undo)
return mpatch
def resolve(name):
# simplified from zope.dottedname
parts = name.split('.')
used = parts.pop(0)
found = __import__(used)
for part in parts:
used += '.' + part
try:
found = getattr(found, part)
except AttributeError:
pass
else:
continue
# we use explicit un-nesting of the handling block in order
# to avoid nested exceptions on python 3
try:
__import__(used)
except ImportError as ex:
# str is used for py2 vs py3
expected = str(ex).split()[-1]
if expected == used:
raise
else:
raise ImportError(
'import error in %s: %s' % (used, ex)
)
found = annotated_getattr(found, part, used)
return found
def annotated_getattr(obj, name, ann):
try:
obj = getattr(obj, name)
except AttributeError:
raise AttributeError(
'%r object at %s has no attribute %r' % (
type(obj).__name__, ann, name
)
)
return obj
def derive_importpath(import_path, raising):
if not isinstance(import_path, _basestring) or "." not in import_path:
raise TypeError("must be absolute import path string, not %r" %
(import_path,))
module, attr = import_path.rsplit('.', 1)
target = resolve(module)
if raising:
annotated_getattr(target, attr, ann=module)
return attr, target
class Notset:
def __repr__(self):
return "<notset>"
notset = Notset()
class MonkeyPatch:
""" Object returned by the ``monkeypatch`` fixture keeping a record of setattr/item/env/syspath changes.
"""
def __init__(self):
self._setattr = []
self._setitem = []
self._cwd = None
self._savesyspath = None
def setattr(self, target, name, value=notset, raising=True):
""" Set attribute value on target, memorizing the old value.
By default raise AttributeError if the attribute did not exist.
For convenience you can specify a string as ``target`` which
will be interpreted as a dotted import path, with the last part
being the attribute name. Example:
``monkeypatch.setattr("os.getcwd", lambda x: "/")``
would set the ``getcwd`` function of the ``os`` module.
The ``raising`` value determines if the setattr should fail
if the attribute is not already present (defaults to True
which means it will raise).
"""
__tracebackhide__ = True
import inspect
if value is notset:
if not isinstance(target, _basestring):
raise TypeError("use setattr(target, name, value) or "
"setattr(target, value) with target being a dotted "
"import string")
value = name
name, target = derive_importpath(target, raising)
oldval = getattr(target, name, notset)
if raising and oldval is notset:
raise AttributeError("%r has no attribute %r" % (target, name))
# avoid class descriptors like staticmethod/classmethod
if inspect.isclass(target):
oldval = target.__dict__.get(name, notset)
self._setattr.append((target, name, oldval))
setattr(target, name, value)
def delattr(self, target, name=notset, raising=True):
""" Delete attribute ``name`` from ``target``, by default raise
AttributeError it the attribute did not previously exist.
If no ``name`` is specified and ``target`` is a string
it will be interpreted as a dotted import path with the
last part being the attribute name.
If ``raising`` is set to False, no exception will be raised if the
attribute is missing.
"""
__tracebackhide__ = True
if name is notset:
if not isinstance(target, _basestring):
raise TypeError("use delattr(target, name) or "
"delattr(target) with target being a dotted "
"import string")
name, target = derive_importpath(target, raising)
if not hasattr(target, name):
if raising:
raise AttributeError(name)
else:
self._setattr.append((target, name, getattr(target, name, notset)))
delattr(target, name)
def setitem(self, dic, name, value):
""" Set dictionary entry ``name`` to value. """
self._setitem.append((dic, name, dic.get(name, notset)))
dic[name] = value
def delitem(self, dic, name, raising=True):
""" Delete ``name`` from dict. Raise KeyError if it doesn't exist.
If ``raising`` is set to False, no exception will be raised if the
key is missing.
"""
if name not in dic:
if raising:
raise KeyError(name)
else:
self._setitem.append((dic, name, dic.get(name, notset)))
del dic[name]
def setenv(self, name, value, prepend=None):
""" Set environment variable ``name`` to ``value``. If ``prepend``
is a character, read the current environment variable value
and prepend the ``value`` adjoined with the ``prepend`` character."""
value = str(value)
if prepend and name in os.environ:
value = value + prepend + os.environ[name]
self.setitem(os.environ, name, value)
def delenv(self, name, raising=True):
""" Delete ``name`` from the environment. Raise KeyError it does not
exist.
If ``raising`` is set to False, no exception will be raised if the
environment variable is missing.
"""
self.delitem(os.environ, name, raising=raising)
def syspath_prepend(self, path):
""" Prepend ``path`` to ``sys.path`` list of import locations. """
if self._savesyspath is None:
self._savesyspath = sys.path[:]
sys.path.insert(0, str(path))
def chdir(self, path):
""" Change the current working directory to the specified path.
Path can be a string or a py.path.local object.
"""
if self._cwd is None:
self._cwd = os.getcwd()
if hasattr(path, "chdir"):
path.chdir()
else:
os.chdir(path)
def undo(self):
""" Undo previous changes. This call consumes the
undo stack. Calling it a second time has no effect unless
you do more monkeypatching after the undo call.
There is generally no need to call `undo()`, since it is
called automatically during tear-down.
Note that the same `monkeypatch` fixture is used across a
single test function invocation. If `monkeypatch` is used both by
the test function itself and one of the test fixtures,
calling `undo()` will undo all of the changes made in
both functions.
"""
for obj, name, value in reversed(self._setattr):
if value is not notset:
setattr(obj, name, value)
else:
delattr(obj, name)
self._setattr[:] = []
for dictionary, name, value in reversed(self._setitem):
if value is notset:
try:
del dictionary[name]
except KeyError:
pass # was already deleted, so we have the desired state
else:
dictionary[name] = value
self._setitem[:] = []
if self._savesyspath is not None:
sys.path[:] = self._savesyspath
self._savesyspath = None
if self._cwd is not None:
os.chdir(self._cwd)
self._cwd = None

71
lib/spack/external/_pytest/nose.py vendored Normal file
View File

@@ -0,0 +1,71 @@
""" run test suites written for nose. """
import sys
import py
import pytest
from _pytest import unittest
def get_skip_exceptions():
skip_classes = set()
for module_name in ('unittest', 'unittest2', 'nose'):
mod = sys.modules.get(module_name)
if hasattr(mod, 'SkipTest'):
skip_classes.add(mod.SkipTest)
return tuple(skip_classes)
def pytest_runtest_makereport(item, call):
if call.excinfo and call.excinfo.errisinstance(get_skip_exceptions()):
# let's substitute the excinfo with a pytest.skip one
call2 = call.__class__(lambda:
pytest.skip(str(call.excinfo.value)), call.when)
call.excinfo = call2.excinfo
@pytest.hookimpl(trylast=True)
def pytest_runtest_setup(item):
if is_potential_nosetest(item):
if isinstance(item.parent, pytest.Generator):
gen = item.parent
if not hasattr(gen, '_nosegensetup'):
call_optional(gen.obj, 'setup')
if isinstance(gen.parent, pytest.Instance):
call_optional(gen.parent.obj, 'setup')
gen._nosegensetup = True
if not call_optional(item.obj, 'setup'):
# call module level setup if there is no object level one
call_optional(item.parent.obj, 'setup')
#XXX this implies we only call teardown when setup worked
item.session._setupstate.addfinalizer((lambda: teardown_nose(item)), item)
def teardown_nose(item):
if is_potential_nosetest(item):
if not call_optional(item.obj, 'teardown'):
call_optional(item.parent.obj, 'teardown')
#if hasattr(item.parent, '_nosegensetup'):
# #call_optional(item._nosegensetup, 'teardown')
# del item.parent._nosegensetup
def pytest_make_collect_report(collector):
if isinstance(collector, pytest.Generator):
call_optional(collector.obj, 'setup')
def is_potential_nosetest(item):
# extra check needed since we do not do nose style setup/teardown
# on direct unittest style classes
return isinstance(item, pytest.Function) and \
not isinstance(item, unittest.TestCaseFunction)
def call_optional(obj, name):
method = getattr(obj, name, None)
isfixture = hasattr(method, "_pytestfixturefunction")
if method is not None and not isfixture and py.builtin.callable(method):
# If there's any problems allow the exception to raise rather than
# silently ignoring them
method()
return True

98
lib/spack/external/_pytest/pastebin.py vendored Normal file
View File

@@ -0,0 +1,98 @@
""" submit failure or test session information to a pastebin service. """
import pytest
import sys
import tempfile
def pytest_addoption(parser):
group = parser.getgroup("terminal reporting")
group._addoption('--pastebin', metavar="mode",
action='store', dest="pastebin", default=None,
choices=['failed', 'all'],
help="send failed|all info to bpaste.net pastebin service.")
@pytest.hookimpl(trylast=True)
def pytest_configure(config):
import py
if config.option.pastebin == "all":
tr = config.pluginmanager.getplugin('terminalreporter')
# if no terminal reporter plugin is present, nothing we can do here;
# this can happen when this function executes in a slave node
# when using pytest-xdist, for example
if tr is not None:
# pastebin file will be utf-8 encoded binary file
config._pastebinfile = tempfile.TemporaryFile('w+b')
oldwrite = tr._tw.write
def tee_write(s, **kwargs):
oldwrite(s, **kwargs)
if py.builtin._istext(s):
s = s.encode('utf-8')
config._pastebinfile.write(s)
tr._tw.write = tee_write
def pytest_unconfigure(config):
if hasattr(config, '_pastebinfile'):
# get terminal contents and delete file
config._pastebinfile.seek(0)
sessionlog = config._pastebinfile.read()
config._pastebinfile.close()
del config._pastebinfile
# undo our patching in the terminal reporter
tr = config.pluginmanager.getplugin('terminalreporter')
del tr._tw.__dict__['write']
# write summary
tr.write_sep("=", "Sending information to Paste Service")
pastebinurl = create_new_paste(sessionlog)
tr.write_line("pastebin session-log: %s\n" % pastebinurl)
def create_new_paste(contents):
"""
Creates a new paste using bpaste.net service.
:contents: paste contents as utf-8 encoded bytes
:returns: url to the pasted contents
"""
import re
if sys.version_info < (3, 0):
from urllib import urlopen, urlencode
else:
from urllib.request import urlopen
from urllib.parse import urlencode
params = {
'code': contents,
'lexer': 'python3' if sys.version_info[0] == 3 else 'python',
'expiry': '1week',
}
url = 'https://bpaste.net'
response = urlopen(url, data=urlencode(params).encode('ascii')).read()
m = re.search(r'href="/raw/(\w+)"', response.decode('utf-8'))
if m:
return '%s/show/%s' % (url, m.group(1))
else:
return 'bad response: ' + response
def pytest_terminal_summary(terminalreporter):
import _pytest.config
if terminalreporter.config.option.pastebin != "failed":
return
tr = terminalreporter
if 'failed' in tr.stats:
terminalreporter.write_sep("=", "Sending information to Paste Service")
for rep in terminalreporter.stats.get('failed'):
try:
msg = rep.longrepr.reprtraceback.reprentries[-1].reprfileloc
except AttributeError:
msg = tr._getfailureheadline(rep)
tw = _pytest.config.create_terminal_writer(terminalreporter.config, stringio=True)
rep.toterminal(tw)
s = tw.stringio.getvalue()
assert len(s)
pastebinurl = create_new_paste(s)
tr.write_line("%s --> %s" %(msg, pastebinurl))

1139
lib/spack/external/_pytest/pytester.py vendored Normal file

File diff suppressed because it is too large Load Diff

1578
lib/spack/external/_pytest/python.py vendored Normal file

File diff suppressed because it is too large Load Diff

226
lib/spack/external/_pytest/recwarn.py vendored Normal file
View File

@@ -0,0 +1,226 @@
""" recording warnings during test function execution. """
import inspect
import _pytest._code
import py
import sys
import warnings
import pytest
@pytest.yield_fixture
def recwarn(request):
"""Return a WarningsRecorder instance that provides these methods:
* ``pop(category=None)``: return last warning matching the category.
* ``clear()``: clear list of warnings
See http://docs.python.org/library/warnings.html for information
on warning categories.
"""
wrec = WarningsRecorder()
with wrec:
warnings.simplefilter('default')
yield wrec
def pytest_namespace():
return {'deprecated_call': deprecated_call,
'warns': warns}
def deprecated_call(func=None, *args, **kwargs):
""" assert that calling ``func(*args, **kwargs)`` triggers a
``DeprecationWarning`` or ``PendingDeprecationWarning``.
This function can be used as a context manager::
>>> import warnings
>>> def api_call_v2():
... warnings.warn('use v3 of this api', DeprecationWarning)
... return 200
>>> with deprecated_call():
... assert api_call_v2() == 200
Note: we cannot use WarningsRecorder here because it is still subject
to the mechanism that prevents warnings of the same type from being
triggered twice for the same module. See #1190.
"""
if not func:
return WarningsChecker(expected_warning=DeprecationWarning)
categories = []
def warn_explicit(message, category, *args, **kwargs):
categories.append(category)
old_warn_explicit(message, category, *args, **kwargs)
def warn(message, category=None, *args, **kwargs):
if isinstance(message, Warning):
categories.append(message.__class__)
else:
categories.append(category)
old_warn(message, category, *args, **kwargs)
old_warn = warnings.warn
old_warn_explicit = warnings.warn_explicit
warnings.warn_explicit = warn_explicit
warnings.warn = warn
try:
ret = func(*args, **kwargs)
finally:
warnings.warn_explicit = old_warn_explicit
warnings.warn = old_warn
deprecation_categories = (DeprecationWarning, PendingDeprecationWarning)
if not any(issubclass(c, deprecation_categories) for c in categories):
__tracebackhide__ = True
raise AssertionError("%r did not produce DeprecationWarning" % (func,))
return ret
def warns(expected_warning, *args, **kwargs):
"""Assert that code raises a particular class of warning.
Specifically, the input @expected_warning can be a warning class or
tuple of warning classes, and the code must return that warning
(if a single class) or one of those warnings (if a tuple).
This helper produces a list of ``warnings.WarningMessage`` objects,
one for each warning raised.
This function can be used as a context manager, or any of the other ways
``pytest.raises`` can be used::
>>> with warns(RuntimeWarning):
... warnings.warn("my warning", RuntimeWarning)
"""
wcheck = WarningsChecker(expected_warning)
if not args:
return wcheck
elif isinstance(args[0], str):
code, = args
assert isinstance(code, str)
frame = sys._getframe(1)
loc = frame.f_locals.copy()
loc.update(kwargs)
with wcheck:
code = _pytest._code.Source(code).compile()
py.builtin.exec_(code, frame.f_globals, loc)
else:
func = args[0]
with wcheck:
return func(*args[1:], **kwargs)
class RecordedWarning(object):
def __init__(self, message, category, filename, lineno, file, line):
self.message = message
self.category = category
self.filename = filename
self.lineno = lineno
self.file = file
self.line = line
class WarningsRecorder(object):
"""A context manager to record raised warnings.
Adapted from `warnings.catch_warnings`.
"""
def __init__(self, module=None):
self._module = sys.modules['warnings'] if module is None else module
self._entered = False
self._list = []
@property
def list(self):
"""The list of recorded warnings."""
return self._list
def __getitem__(self, i):
"""Get a recorded warning by index."""
return self._list[i]
def __iter__(self):
"""Iterate through the recorded warnings."""
return iter(self._list)
def __len__(self):
"""The number of recorded warnings."""
return len(self._list)
def pop(self, cls=Warning):
"""Pop the first recorded warning, raise exception if not exists."""
for i, w in enumerate(self._list):
if issubclass(w.category, cls):
return self._list.pop(i)
__tracebackhide__ = True
raise AssertionError("%r not found in warning list" % cls)
def clear(self):
"""Clear the list of recorded warnings."""
self._list[:] = []
def __enter__(self):
if self._entered:
__tracebackhide__ = True
raise RuntimeError("Cannot enter %r twice" % self)
self._entered = True
self._filters = self._module.filters
self._module.filters = self._filters[:]
self._showwarning = self._module.showwarning
def showwarning(message, category, filename, lineno,
file=None, line=None):
self._list.append(RecordedWarning(
message, category, filename, lineno, file, line))
# still perform old showwarning functionality
self._showwarning(
message, category, filename, lineno, file=file, line=line)
self._module.showwarning = showwarning
# allow the same warning to be raised more than once
self._module.simplefilter('always')
return self
def __exit__(self, *exc_info):
if not self._entered:
__tracebackhide__ = True
raise RuntimeError("Cannot exit %r without entering first" % self)
self._module.filters = self._filters
self._module.showwarning = self._showwarning
class WarningsChecker(WarningsRecorder):
def __init__(self, expected_warning=None, module=None):
super(WarningsChecker, self).__init__(module=module)
msg = ("exceptions must be old-style classes or "
"derived from Warning, not %s")
if isinstance(expected_warning, tuple):
for exc in expected_warning:
if not inspect.isclass(exc):
raise TypeError(msg % type(exc))
elif inspect.isclass(expected_warning):
expected_warning = (expected_warning,)
elif expected_warning is not None:
raise TypeError(msg % type(expected_warning))
self.expected_warning = expected_warning
def __exit__(self, *exc_info):
super(WarningsChecker, self).__exit__(*exc_info)
# only check if we're not currently handling an exception
if all(a is None for a in exc_info):
if self.expected_warning is not None:
if not any(r.category in self.expected_warning for r in self):
__tracebackhide__ = True
pytest.fail("DID NOT WARN")

107
lib/spack/external/_pytest/resultlog.py vendored Normal file
View File

@@ -0,0 +1,107 @@
""" log machine-parseable test session result information in a plain
text file.
"""
import py
import os
def pytest_addoption(parser):
group = parser.getgroup("terminal reporting", "resultlog plugin options")
group.addoption('--resultlog', '--result-log', action="store",
metavar="path", default=None,
help="DEPRECATED path for machine-readable result log.")
def pytest_configure(config):
resultlog = config.option.resultlog
# prevent opening resultlog on slave nodes (xdist)
if resultlog and not hasattr(config, 'slaveinput'):
dirname = os.path.dirname(os.path.abspath(resultlog))
if not os.path.isdir(dirname):
os.makedirs(dirname)
logfile = open(resultlog, 'w', 1) # line buffered
config._resultlog = ResultLog(config, logfile)
config.pluginmanager.register(config._resultlog)
from _pytest.deprecated import RESULT_LOG
config.warn('C1', RESULT_LOG)
def pytest_unconfigure(config):
resultlog = getattr(config, '_resultlog', None)
if resultlog:
resultlog.logfile.close()
del config._resultlog
config.pluginmanager.unregister(resultlog)
def generic_path(item):
chain = item.listchain()
gpath = [chain[0].name]
fspath = chain[0].fspath
fspart = False
for node in chain[1:]:
newfspath = node.fspath
if newfspath == fspath:
if fspart:
gpath.append(':')
fspart = False
else:
gpath.append('.')
else:
gpath.append('/')
fspart = True
name = node.name
if name[0] in '([':
gpath.pop()
gpath.append(name)
fspath = newfspath
return ''.join(gpath)
class ResultLog(object):
def __init__(self, config, logfile):
self.config = config
self.logfile = logfile # preferably line buffered
def write_log_entry(self, testpath, lettercode, longrepr):
py.builtin.print_("%s %s" % (lettercode, testpath), file=self.logfile)
for line in longrepr.splitlines():
py.builtin.print_(" %s" % line, file=self.logfile)
def log_outcome(self, report, lettercode, longrepr):
testpath = getattr(report, 'nodeid', None)
if testpath is None:
testpath = report.fspath
self.write_log_entry(testpath, lettercode, longrepr)
def pytest_runtest_logreport(self, report):
if report.when != "call" and report.passed:
return
res = self.config.hook.pytest_report_teststatus(report=report)
code = res[1]
if code == 'x':
longrepr = str(report.longrepr)
elif code == 'X':
longrepr = ''
elif report.passed:
longrepr = ""
elif report.failed:
longrepr = str(report.longrepr)
elif report.skipped:
longrepr = str(report.longrepr[2])
self.log_outcome(report, code, longrepr)
def pytest_collectreport(self, report):
if not report.passed:
if report.failed:
code = "F"
longrepr = str(report.longrepr)
else:
assert report.skipped
code = "S"
longrepr = "%s:%d: %s" % report.longrepr
self.log_outcome(report, code, longrepr)
def pytest_internalerror(self, excrepr):
reprcrash = getattr(excrepr, 'reprcrash', None)
path = getattr(reprcrash, "path", None)
if path is None:
path = "cwd:%s" % py.path.local()
self.write_log_entry(path, '!', str(excrepr))

578
lib/spack/external/_pytest/runner.py vendored Normal file
View File

@@ -0,0 +1,578 @@
""" basic collect and runtest protocol implementations """
import bdb
import sys
from time import time
import py
import pytest
from _pytest._code.code import TerminalRepr, ExceptionInfo
def pytest_namespace():
return {
'fail' : fail,
'skip' : skip,
'importorskip' : importorskip,
'exit' : exit,
}
#
# pytest plugin hooks
def pytest_addoption(parser):
group = parser.getgroup("terminal reporting", "reporting", after="general")
group.addoption('--durations',
action="store", type=int, default=None, metavar="N",
help="show N slowest setup/test durations (N=0 for all)."),
def pytest_terminal_summary(terminalreporter):
durations = terminalreporter.config.option.durations
if durations is None:
return
tr = terminalreporter
dlist = []
for replist in tr.stats.values():
for rep in replist:
if hasattr(rep, 'duration'):
dlist.append(rep)
if not dlist:
return
dlist.sort(key=lambda x: x.duration)
dlist.reverse()
if not durations:
tr.write_sep("=", "slowest test durations")
else:
tr.write_sep("=", "slowest %s test durations" % durations)
dlist = dlist[:durations]
for rep in dlist:
nodeid = rep.nodeid.replace("::()::", "::")
tr.write_line("%02.2fs %-8s %s" %
(rep.duration, rep.when, nodeid))
def pytest_sessionstart(session):
session._setupstate = SetupState()
def pytest_sessionfinish(session):
session._setupstate.teardown_all()
class NodeInfo:
def __init__(self, location):
self.location = location
def pytest_runtest_protocol(item, nextitem):
item.ihook.pytest_runtest_logstart(
nodeid=item.nodeid, location=item.location,
)
runtestprotocol(item, nextitem=nextitem)
return True
def runtestprotocol(item, log=True, nextitem=None):
hasrequest = hasattr(item, "_request")
if hasrequest and not item._request:
item._initrequest()
rep = call_and_report(item, "setup", log)
reports = [rep]
if rep.passed:
if item.config.option.setupshow:
show_test_item(item)
if not item.config.option.setuponly:
reports.append(call_and_report(item, "call", log))
reports.append(call_and_report(item, "teardown", log,
nextitem=nextitem))
# after all teardown hooks have been called
# want funcargs and request info to go away
if hasrequest:
item._request = False
item.funcargs = None
return reports
def show_test_item(item):
"""Show test function, parameters and the fixtures of the test item."""
tw = item.config.get_terminal_writer()
tw.line()
tw.write(' ' * 8)
tw.write(item._nodeid)
used_fixtures = sorted(item._fixtureinfo.name2fixturedefs.keys())
if used_fixtures:
tw.write(' (fixtures used: {0})'.format(', '.join(used_fixtures)))
def pytest_runtest_setup(item):
item.session._setupstate.prepare(item)
def pytest_runtest_call(item):
try:
item.runtest()
except Exception:
# Store trace info to allow postmortem debugging
type, value, tb = sys.exc_info()
tb = tb.tb_next # Skip *this* frame
sys.last_type = type
sys.last_value = value
sys.last_traceback = tb
del tb # Get rid of it in this namespace
raise
def pytest_runtest_teardown(item, nextitem):
item.session._setupstate.teardown_exact(item, nextitem)
def pytest_report_teststatus(report):
if report.when in ("setup", "teardown"):
if report.failed:
# category, shortletter, verbose-word
return "error", "E", "ERROR"
elif report.skipped:
return "skipped", "s", "SKIPPED"
else:
return "", "", ""
#
# Implementation
def call_and_report(item, when, log=True, **kwds):
call = call_runtest_hook(item, when, **kwds)
hook = item.ihook
report = hook.pytest_runtest_makereport(item=item, call=call)
if log:
hook.pytest_runtest_logreport(report=report)
if check_interactive_exception(call, report):
hook.pytest_exception_interact(node=item, call=call, report=report)
return report
def check_interactive_exception(call, report):
return call.excinfo and not (
hasattr(report, "wasxfail") or
call.excinfo.errisinstance(skip.Exception) or
call.excinfo.errisinstance(bdb.BdbQuit))
def call_runtest_hook(item, when, **kwds):
hookname = "pytest_runtest_" + when
ihook = getattr(item.ihook, hookname)
return CallInfo(lambda: ihook(item=item, **kwds), when=when)
class CallInfo:
""" Result/Exception info a function invocation. """
#: None or ExceptionInfo object.
excinfo = None
def __init__(self, func, when):
#: context of invocation: one of "setup", "call",
#: "teardown", "memocollect"
self.when = when
self.start = time()
try:
self.result = func()
except KeyboardInterrupt:
self.stop = time()
raise
except:
self.excinfo = ExceptionInfo()
self.stop = time()
def __repr__(self):
if self.excinfo:
status = "exception: %s" % str(self.excinfo.value)
else:
status = "result: %r" % (self.result,)
return "<CallInfo when=%r %s>" % (self.when, status)
def getslaveinfoline(node):
try:
return node._slaveinfocache
except AttributeError:
d = node.slaveinfo
ver = "%s.%s.%s" % d['version_info'][:3]
node._slaveinfocache = s = "[%s] %s -- Python %s %s" % (
d['id'], d['sysplatform'], ver, d['executable'])
return s
class BaseReport(object):
def __init__(self, **kw):
self.__dict__.update(kw)
def toterminal(self, out):
if hasattr(self, 'node'):
out.line(getslaveinfoline(self.node))
longrepr = self.longrepr
if longrepr is None:
return
if hasattr(longrepr, 'toterminal'):
longrepr.toterminal(out)
else:
try:
out.line(longrepr)
except UnicodeEncodeError:
out.line("<unprintable longrepr>")
def get_sections(self, prefix):
for name, content in self.sections:
if name.startswith(prefix):
yield prefix, content
@property
def longreprtext(self):
"""
Read-only property that returns the full string representation
of ``longrepr``.
.. versionadded:: 3.0
"""
tw = py.io.TerminalWriter(stringio=True)
tw.hasmarkup = False
self.toterminal(tw)
exc = tw.stringio.getvalue()
return exc.strip()
@property
def capstdout(self):
"""Return captured text from stdout, if capturing is enabled
.. versionadded:: 3.0
"""
return ''.join(content for (prefix, content) in self.get_sections('Captured stdout'))
@property
def capstderr(self):
"""Return captured text from stderr, if capturing is enabled
.. versionadded:: 3.0
"""
return ''.join(content for (prefix, content) in self.get_sections('Captured stderr'))
passed = property(lambda x: x.outcome == "passed")
failed = property(lambda x: x.outcome == "failed")
skipped = property(lambda x: x.outcome == "skipped")
@property
def fspath(self):
return self.nodeid.split("::")[0]
def pytest_runtest_makereport(item, call):
when = call.when
duration = call.stop-call.start
keywords = dict([(x,1) for x in item.keywords])
excinfo = call.excinfo
sections = []
if not call.excinfo:
outcome = "passed"
longrepr = None
else:
if not isinstance(excinfo, ExceptionInfo):
outcome = "failed"
longrepr = excinfo
elif excinfo.errisinstance(pytest.skip.Exception):
outcome = "skipped"
r = excinfo._getreprcrash()
longrepr = (str(r.path), r.lineno, r.message)
else:
outcome = "failed"
if call.when == "call":
longrepr = item.repr_failure(excinfo)
else: # exception in setup or teardown
longrepr = item._repr_failure_py(excinfo,
style=item.config.option.tbstyle)
for rwhen, key, content in item._report_sections:
sections.append(("Captured %s %s" %(key, rwhen), content))
return TestReport(item.nodeid, item.location,
keywords, outcome, longrepr, when,
sections, duration)
class TestReport(BaseReport):
""" Basic test report object (also used for setup and teardown calls if
they fail).
"""
def __init__(self, nodeid, location, keywords, outcome,
longrepr, when, sections=(), duration=0, **extra):
#: normalized collection node id
self.nodeid = nodeid
#: a (filesystempath, lineno, domaininfo) tuple indicating the
#: actual location of a test item - it might be different from the
#: collected one e.g. if a method is inherited from a different module.
self.location = location
#: a name -> value dictionary containing all keywords and
#: markers associated with a test invocation.
self.keywords = keywords
#: test outcome, always one of "passed", "failed", "skipped".
self.outcome = outcome
#: None or a failure representation.
self.longrepr = longrepr
#: one of 'setup', 'call', 'teardown' to indicate runtest phase.
self.when = when
#: list of pairs ``(str, str)`` of extra information which needs to
#: marshallable. Used by pytest to add captured text
#: from ``stdout`` and ``stderr``, but may be used by other plugins
#: to add arbitrary information to reports.
self.sections = list(sections)
#: time it took to run just the test
self.duration = duration
self.__dict__.update(extra)
def __repr__(self):
return "<TestReport %r when=%r outcome=%r>" % (
self.nodeid, self.when, self.outcome)
class TeardownErrorReport(BaseReport):
outcome = "failed"
when = "teardown"
def __init__(self, longrepr, **extra):
self.longrepr = longrepr
self.sections = []
self.__dict__.update(extra)
def pytest_make_collect_report(collector):
call = CallInfo(collector._memocollect, "memocollect")
longrepr = None
if not call.excinfo:
outcome = "passed"
else:
from _pytest import nose
skip_exceptions = (Skipped,) + nose.get_skip_exceptions()
if call.excinfo.errisinstance(skip_exceptions):
outcome = "skipped"
r = collector._repr_failure_py(call.excinfo, "line").reprcrash
longrepr = (str(r.path), r.lineno, r.message)
else:
outcome = "failed"
errorinfo = collector.repr_failure(call.excinfo)
if not hasattr(errorinfo, "toterminal"):
errorinfo = CollectErrorRepr(errorinfo)
longrepr = errorinfo
rep = CollectReport(collector.nodeid, outcome, longrepr,
getattr(call, 'result', None))
rep.call = call # see collect_one_node
return rep
class CollectReport(BaseReport):
def __init__(self, nodeid, outcome, longrepr, result,
sections=(), **extra):
self.nodeid = nodeid
self.outcome = outcome
self.longrepr = longrepr
self.result = result or []
self.sections = list(sections)
self.__dict__.update(extra)
@property
def location(self):
return (self.fspath, None, self.fspath)
def __repr__(self):
return "<CollectReport %r lenresult=%s outcome=%r>" % (
self.nodeid, len(self.result), self.outcome)
class CollectErrorRepr(TerminalRepr):
def __init__(self, msg):
self.longrepr = msg
def toterminal(self, out):
out.line(self.longrepr, red=True)
class SetupState(object):
""" shared state for setting up/tearing down test items or collectors. """
def __init__(self):
self.stack = []
self._finalizers = {}
def addfinalizer(self, finalizer, colitem):
""" attach a finalizer to the given colitem.
if colitem is None, this will add a finalizer that
is called at the end of teardown_all().
"""
assert colitem and not isinstance(colitem, tuple)
assert py.builtin.callable(finalizer)
#assert colitem in self.stack # some unit tests don't setup stack :/
self._finalizers.setdefault(colitem, []).append(finalizer)
def _pop_and_teardown(self):
colitem = self.stack.pop()
self._teardown_with_finalization(colitem)
def _callfinalizers(self, colitem):
finalizers = self._finalizers.pop(colitem, None)
exc = None
while finalizers:
fin = finalizers.pop()
try:
fin()
except Exception:
# XXX Only first exception will be seen by user,
# ideally all should be reported.
if exc is None:
exc = sys.exc_info()
if exc:
py.builtin._reraise(*exc)
def _teardown_with_finalization(self, colitem):
self._callfinalizers(colitem)
if hasattr(colitem, "teardown"):
colitem.teardown()
for colitem in self._finalizers:
assert colitem is None or colitem in self.stack \
or isinstance(colitem, tuple)
def teardown_all(self):
while self.stack:
self._pop_and_teardown()
for key in list(self._finalizers):
self._teardown_with_finalization(key)
assert not self._finalizers
def teardown_exact(self, item, nextitem):
needed_collectors = nextitem and nextitem.listchain() or []
self._teardown_towards(needed_collectors)
def _teardown_towards(self, needed_collectors):
while self.stack:
if self.stack == needed_collectors[:len(self.stack)]:
break
self._pop_and_teardown()
def prepare(self, colitem):
""" setup objects along the collector chain to the test-method
and teardown previously setup objects."""
needed_collectors = colitem.listchain()
self._teardown_towards(needed_collectors)
# check if the last collection node has raised an error
for col in self.stack:
if hasattr(col, '_prepare_exc'):
py.builtin._reraise(*col._prepare_exc)
for col in needed_collectors[len(self.stack):]:
self.stack.append(col)
try:
col.setup()
except Exception:
col._prepare_exc = sys.exc_info()
raise
def collect_one_node(collector):
ihook = collector.ihook
ihook.pytest_collectstart(collector=collector)
rep = ihook.pytest_make_collect_report(collector=collector)
call = rep.__dict__.pop("call", None)
if call and check_interactive_exception(call, rep):
ihook.pytest_exception_interact(node=collector, call=call, report=rep)
return rep
# =============================================================
# Test OutcomeExceptions and helpers for creating them.
class OutcomeException(Exception):
""" OutcomeException and its subclass instances indicate and
contain info about test and collection outcomes.
"""
def __init__(self, msg=None, pytrace=True):
Exception.__init__(self, msg)
self.msg = msg
self.pytrace = pytrace
def __repr__(self):
if self.msg:
val = self.msg
if isinstance(val, bytes):
val = py._builtin._totext(val, errors='replace')
return val
return "<%s instance>" %(self.__class__.__name__,)
__str__ = __repr__
class Skipped(OutcomeException):
# XXX hackish: on 3k we fake to live in the builtins
# in order to have Skipped exception printing shorter/nicer
__module__ = 'builtins'
def __init__(self, msg=None, pytrace=True, allow_module_level=False):
OutcomeException.__init__(self, msg=msg, pytrace=pytrace)
self.allow_module_level = allow_module_level
class Failed(OutcomeException):
""" raised from an explicit call to pytest.fail() """
__module__ = 'builtins'
class Exit(KeyboardInterrupt):
""" raised for immediate program exits (no tracebacks/summaries)"""
def __init__(self, msg="unknown reason"):
self.msg = msg
KeyboardInterrupt.__init__(self, msg)
# exposed helper methods
def exit(msg):
""" exit testing process as if KeyboardInterrupt was triggered. """
__tracebackhide__ = True
raise Exit(msg)
exit.Exception = Exit
def skip(msg=""):
""" skip an executing test with the given message. Note: it's usually
better to use the pytest.mark.skipif marker to declare a test to be
skipped under certain conditions like mismatching platforms or
dependencies. See the pytest_skipping plugin for details.
"""
__tracebackhide__ = True
raise Skipped(msg=msg)
skip.Exception = Skipped
def fail(msg="", pytrace=True):
""" explicitly fail an currently-executing test with the given Message.
:arg pytrace: if false the msg represents the full failure information
and no python traceback will be reported.
"""
__tracebackhide__ = True
raise Failed(msg=msg, pytrace=pytrace)
fail.Exception = Failed
def importorskip(modname, minversion=None):
""" return imported module if it has at least "minversion" as its
__version__ attribute. If no minversion is specified the a skip
is only triggered if the module can not be imported.
"""
__tracebackhide__ = True
compile(modname, '', 'eval') # to catch syntaxerrors
should_skip = False
try:
__import__(modname)
except ImportError:
# Do not raise chained exception here(#1485)
should_skip = True
if should_skip:
raise Skipped("could not import %r" %(modname,), allow_module_level=True)
mod = sys.modules[modname]
if minversion is None:
return mod
verattr = getattr(mod, '__version__', None)
if minversion is not None:
try:
from pkg_resources import parse_version as pv
except ImportError:
raise Skipped("we have a required version for %r but can not import "
"pkg_resources to parse version strings." % (modname,),
allow_module_level=True)
if verattr is None or pv(verattr) < pv(minversion):
raise Skipped("module %r has __version__ %r, required is: %r" %(
modname, verattr, minversion), allow_module_level=True)
return mod

72
lib/spack/external/_pytest/setuponly.py vendored Normal file
View File

@@ -0,0 +1,72 @@
import pytest
import sys
def pytest_addoption(parser):
group = parser.getgroup("debugconfig")
group.addoption('--setuponly', '--setup-only', action="store_true",
help="only setup fixtures, do not execute tests.")
group.addoption('--setupshow', '--setup-show', action="store_true",
help="show setup of fixtures while executing tests.")
@pytest.hookimpl(hookwrapper=True)
def pytest_fixture_setup(fixturedef, request):
yield
config = request.config
if config.option.setupshow:
if hasattr(request, 'param'):
# Save the fixture parameter so ._show_fixture_action() can
# display it now and during the teardown (in .finish()).
if fixturedef.ids:
if callable(fixturedef.ids):
fixturedef.cached_param = fixturedef.ids(request.param)
else:
fixturedef.cached_param = fixturedef.ids[
request.param_index]
else:
fixturedef.cached_param = request.param
_show_fixture_action(fixturedef, 'SETUP')
def pytest_fixture_post_finalizer(fixturedef):
if hasattr(fixturedef, "cached_result"):
config = fixturedef._fixturemanager.config
if config.option.setupshow:
_show_fixture_action(fixturedef, 'TEARDOWN')
if hasattr(fixturedef, "cached_param"):
del fixturedef.cached_param
def _show_fixture_action(fixturedef, msg):
config = fixturedef._fixturemanager.config
capman = config.pluginmanager.getplugin('capturemanager')
if capman:
out, err = capman.suspendcapture()
tw = config.get_terminal_writer()
tw.line()
tw.write(' ' * 2 * fixturedef.scopenum)
tw.write('{step} {scope} {fixture}'.format(
step=msg.ljust(8), # align the output to TEARDOWN
scope=fixturedef.scope[0].upper(),
fixture=fixturedef.argname))
if msg == 'SETUP':
deps = sorted(arg for arg in fixturedef.argnames if arg != 'request')
if deps:
tw.write(' (fixtures used: {0})'.format(', '.join(deps)))
if hasattr(fixturedef, 'cached_param'):
tw.write('[{0}]'.format(fixturedef.cached_param))
if capman:
capman.resumecapture()
sys.stdout.write(out)
sys.stderr.write(err)
@pytest.hookimpl(tryfirst=True)
def pytest_cmdline_main(config):
if config.option.setuponly:
config.option.setupshow = True

23
lib/spack/external/_pytest/setupplan.py vendored Normal file
View File

@@ -0,0 +1,23 @@
import pytest
def pytest_addoption(parser):
group = parser.getgroup("debugconfig")
group.addoption('--setupplan', '--setup-plan', action="store_true",
help="show what fixtures and tests would be executed but "
"don't execute anything.")
@pytest.hookimpl(tryfirst=True)
def pytest_fixture_setup(fixturedef, request):
# Will return a dummy fixture if the setuponly option is provided.
if request.config.option.setupplan:
fixturedef.cached_result = (None, None, None)
return fixturedef.cached_result
@pytest.hookimpl(tryfirst=True)
def pytest_cmdline_main(config):
if config.option.setupplan:
config.option.setuponly = True
config.option.setupshow = True

375
lib/spack/external/_pytest/skipping.py vendored Normal file
View File

@@ -0,0 +1,375 @@
""" support for skip/xfail functions and markers. """
import os
import sys
import traceback
import py
import pytest
from _pytest.mark import MarkInfo, MarkDecorator
def pytest_addoption(parser):
group = parser.getgroup("general")
group.addoption('--runxfail',
action="store_true", dest="runxfail", default=False,
help="run tests even if they are marked xfail")
parser.addini("xfail_strict", "default for the strict parameter of xfail "
"markers when not given explicitly (default: "
"False)",
default=False,
type="bool")
def pytest_configure(config):
if config.option.runxfail:
old = pytest.xfail
config._cleanup.append(lambda: setattr(pytest, "xfail", old))
def nop(*args, **kwargs):
pass
nop.Exception = XFailed
setattr(pytest, "xfail", nop)
config.addinivalue_line("markers",
"skip(reason=None): skip the given test function with an optional reason. "
"Example: skip(reason=\"no way of currently testing this\") skips the "
"test."
)
config.addinivalue_line("markers",
"skipif(condition): skip the given test function if eval(condition) "
"results in a True value. Evaluation happens within the "
"module global context. Example: skipif('sys.platform == \"win32\"') "
"skips the test if we are on the win32 platform. see "
"http://pytest.org/latest/skipping.html"
)
config.addinivalue_line("markers",
"xfail(condition, reason=None, run=True, raises=None, strict=False): "
"mark the the test function as an expected failure if eval(condition) "
"has a True value. Optionally specify a reason for better reporting "
"and run=False if you don't even want to execute the test function. "
"If only specific exception(s) are expected, you can list them in "
"raises, and if the test fails in other ways, it will be reported as "
"a true failure. See http://pytest.org/latest/skipping.html"
)
def pytest_namespace():
return dict(xfail=xfail)
class XFailed(pytest.fail.Exception):
""" raised from an explicit call to pytest.xfail() """
def xfail(reason=""):
""" xfail an executing test or setup functions with the given reason."""
__tracebackhide__ = True
raise XFailed(reason)
xfail.Exception = XFailed
class MarkEvaluator:
def __init__(self, item, name):
self.item = item
self.name = name
@property
def holder(self):
return self.item.keywords.get(self.name)
def __bool__(self):
return bool(self.holder)
__nonzero__ = __bool__
def wasvalid(self):
return not hasattr(self, 'exc')
def invalidraise(self, exc):
raises = self.get('raises')
if not raises:
return
return not isinstance(exc, raises)
def istrue(self):
try:
return self._istrue()
except Exception:
self.exc = sys.exc_info()
if isinstance(self.exc[1], SyntaxError):
msg = [" " * (self.exc[1].offset + 4) + "^",]
msg.append("SyntaxError: invalid syntax")
else:
msg = traceback.format_exception_only(*self.exc[:2])
pytest.fail("Error evaluating %r expression\n"
" %s\n"
"%s"
%(self.name, self.expr, "\n".join(msg)),
pytrace=False)
def _getglobals(self):
d = {'os': os, 'sys': sys, 'config': self.item.config}
d.update(self.item.obj.__globals__)
return d
def _istrue(self):
if hasattr(self, 'result'):
return self.result
if self.holder:
d = self._getglobals()
if self.holder.args or 'condition' in self.holder.kwargs:
self.result = False
# "holder" might be a MarkInfo or a MarkDecorator; only
# MarkInfo keeps track of all parameters it received in an
# _arglist attribute
if hasattr(self.holder, '_arglist'):
arglist = self.holder._arglist
else:
arglist = [(self.holder.args, self.holder.kwargs)]
for args, kwargs in arglist:
if 'condition' in kwargs:
args = (kwargs['condition'],)
for expr in args:
self.expr = expr
if isinstance(expr, py.builtin._basestring):
result = cached_eval(self.item.config, expr, d)
else:
if "reason" not in kwargs:
# XXX better be checked at collection time
msg = "you need to specify reason=STRING " \
"when using booleans as conditions."
pytest.fail(msg)
result = bool(expr)
if result:
self.result = True
self.reason = kwargs.get('reason', None)
self.expr = expr
return self.result
else:
self.result = True
return getattr(self, 'result', False)
def get(self, attr, default=None):
return self.holder.kwargs.get(attr, default)
def getexplanation(self):
expl = getattr(self, 'reason', None) or self.get('reason', None)
if not expl:
if not hasattr(self, 'expr'):
return ""
else:
return "condition: " + str(self.expr)
return expl
@pytest.hookimpl(tryfirst=True)
def pytest_runtest_setup(item):
# Check if skip or skipif are specified as pytest marks
skipif_info = item.keywords.get('skipif')
if isinstance(skipif_info, (MarkInfo, MarkDecorator)):
eval_skipif = MarkEvaluator(item, 'skipif')
if eval_skipif.istrue():
item._evalskip = eval_skipif
pytest.skip(eval_skipif.getexplanation())
skip_info = item.keywords.get('skip')
if isinstance(skip_info, (MarkInfo, MarkDecorator)):
item._evalskip = True
if 'reason' in skip_info.kwargs:
pytest.skip(skip_info.kwargs['reason'])
elif skip_info.args:
pytest.skip(skip_info.args[0])
else:
pytest.skip("unconditional skip")
item._evalxfail = MarkEvaluator(item, 'xfail')
check_xfail_no_run(item)
@pytest.mark.hookwrapper
def pytest_pyfunc_call(pyfuncitem):
check_xfail_no_run(pyfuncitem)
outcome = yield
passed = outcome.excinfo is None
if passed:
check_strict_xfail(pyfuncitem)
def check_xfail_no_run(item):
"""check xfail(run=False)"""
if not item.config.option.runxfail:
evalxfail = item._evalxfail
if evalxfail.istrue():
if not evalxfail.get('run', True):
pytest.xfail("[NOTRUN] " + evalxfail.getexplanation())
def check_strict_xfail(pyfuncitem):
"""check xfail(strict=True) for the given PASSING test"""
evalxfail = pyfuncitem._evalxfail
if evalxfail.istrue():
strict_default = pyfuncitem.config.getini('xfail_strict')
is_strict_xfail = evalxfail.get('strict', strict_default)
if is_strict_xfail:
del pyfuncitem._evalxfail
explanation = evalxfail.getexplanation()
pytest.fail('[XPASS(strict)] ' + explanation, pytrace=False)
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
rep = outcome.get_result()
evalxfail = getattr(item, '_evalxfail', None)
evalskip = getattr(item, '_evalskip', None)
# unitttest special case, see setting of _unexpectedsuccess
if hasattr(item, '_unexpectedsuccess') and rep.when == "call":
from _pytest.compat import _is_unittest_unexpected_success_a_failure
if item._unexpectedsuccess:
rep.longrepr = "Unexpected success: {0}".format(item._unexpectedsuccess)
else:
rep.longrepr = "Unexpected success"
if _is_unittest_unexpected_success_a_failure():
rep.outcome = "failed"
else:
rep.outcome = "passed"
rep.wasxfail = rep.longrepr
elif item.config.option.runxfail:
pass # don't interefere
elif call.excinfo and call.excinfo.errisinstance(pytest.xfail.Exception):
rep.wasxfail = "reason: " + call.excinfo.value.msg
rep.outcome = "skipped"
elif evalxfail and not rep.skipped and evalxfail.wasvalid() and \
evalxfail.istrue():
if call.excinfo:
if evalxfail.invalidraise(call.excinfo.value):
rep.outcome = "failed"
else:
rep.outcome = "skipped"
rep.wasxfail = evalxfail.getexplanation()
elif call.when == "call":
strict_default = item.config.getini('xfail_strict')
is_strict_xfail = evalxfail.get('strict', strict_default)
explanation = evalxfail.getexplanation()
if is_strict_xfail:
rep.outcome = "failed"
rep.longrepr = "[XPASS(strict)] {0}".format(explanation)
else:
rep.outcome = "passed"
rep.wasxfail = explanation
elif evalskip is not None and rep.skipped and type(rep.longrepr) is tuple:
# skipped by mark.skipif; change the location of the failure
# to point to the item definition, otherwise it will display
# the location of where the skip exception was raised within pytest
filename, line, reason = rep.longrepr
filename, line = item.location[:2]
rep.longrepr = filename, line, reason
# called by terminalreporter progress reporting
def pytest_report_teststatus(report):
if hasattr(report, "wasxfail"):
if report.skipped:
return "xfailed", "x", "xfail"
elif report.passed:
return "xpassed", "X", ("XPASS", {'yellow': True})
# called by the terminalreporter instance/plugin
def pytest_terminal_summary(terminalreporter):
tr = terminalreporter
if not tr.reportchars:
#for name in "xfailed skipped failed xpassed":
# if not tr.stats.get(name, 0):
# tr.write_line("HINT: use '-r' option to see extra "
# "summary info about tests")
# break
return
lines = []
for char in tr.reportchars:
if char == "x":
show_xfailed(terminalreporter, lines)
elif char == "X":
show_xpassed(terminalreporter, lines)
elif char in "fF":
show_simple(terminalreporter, lines, 'failed', "FAIL %s")
elif char in "sS":
show_skipped(terminalreporter, lines)
elif char == "E":
show_simple(terminalreporter, lines, 'error', "ERROR %s")
elif char == 'p':
show_simple(terminalreporter, lines, 'passed', "PASSED %s")
if lines:
tr._tw.sep("=", "short test summary info")
for line in lines:
tr._tw.line(line)
def show_simple(terminalreporter, lines, stat, format):
failed = terminalreporter.stats.get(stat)
if failed:
for rep in failed:
pos = terminalreporter.config.cwd_relative_nodeid(rep.nodeid)
lines.append(format %(pos,))
def show_xfailed(terminalreporter, lines):
xfailed = terminalreporter.stats.get("xfailed")
if xfailed:
for rep in xfailed:
pos = terminalreporter.config.cwd_relative_nodeid(rep.nodeid)
reason = rep.wasxfail
lines.append("XFAIL %s" % (pos,))
if reason:
lines.append(" " + str(reason))
def show_xpassed(terminalreporter, lines):
xpassed = terminalreporter.stats.get("xpassed")
if xpassed:
for rep in xpassed:
pos = terminalreporter.config.cwd_relative_nodeid(rep.nodeid)
reason = rep.wasxfail
lines.append("XPASS %s %s" %(pos, reason))
def cached_eval(config, expr, d):
if not hasattr(config, '_evalcache'):
config._evalcache = {}
try:
return config._evalcache[expr]
except KeyError:
import _pytest._code
exprcode = _pytest._code.compile(expr, mode="eval")
config._evalcache[expr] = x = eval(exprcode, d)
return x
def folded_skips(skipped):
d = {}
for event in skipped:
key = event.longrepr
assert len(key) == 3, (event, key)
d.setdefault(key, []).append(event)
l = []
for key, events in d.items():
l.append((len(events),) + key)
return l
def show_skipped(terminalreporter, lines):
tr = terminalreporter
skipped = tr.stats.get('skipped', [])
if skipped:
#if not tr.hasopt('skipped'):
# tr.write_line(
# "%d skipped tests, specify -rs for more info" %
# len(skipped))
# return
fskips = folded_skips(skipped)
if fskips:
#tr.write_sep("_", "skipped test summary")
for num, fspath, lineno, reason in fskips:
if reason.startswith("Skipped: "):
reason = reason[9:]
lines.append("SKIP [%d] %s:%d: %s" %
(num, fspath, lineno, reason))

593
lib/spack/external/_pytest/terminal.py vendored Normal file
View File

@@ -0,0 +1,593 @@
""" terminal reporting of the full testing process.
This is a good source for looking at the various reporting hooks.
"""
from _pytest.main import EXIT_OK, EXIT_TESTSFAILED, EXIT_INTERRUPTED, \
EXIT_USAGEERROR, EXIT_NOTESTSCOLLECTED
import pytest
import py
import sys
import time
import platform
import _pytest._pluggy as pluggy
def pytest_addoption(parser):
group = parser.getgroup("terminal reporting", "reporting", after="general")
group._addoption('-v', '--verbose', action="count",
dest="verbose", default=0, help="increase verbosity."),
group._addoption('-q', '--quiet', action="count",
dest="quiet", default=0, help="decrease verbosity."),
group._addoption('-r',
action="store", dest="reportchars", default='', metavar="chars",
help="show extra test summary info as specified by chars (f)ailed, "
"(E)error, (s)skipped, (x)failed, (X)passed, "
"(p)passed, (P)passed with output, (a)all except pP. "
"The pytest warnings are displayed at all times except when "
"--disable-pytest-warnings is set")
group._addoption('--disable-pytest-warnings', default=False,
dest='disablepytestwarnings', action='store_true',
help='disable warnings summary, overrides -r w flag')
group._addoption('-l', '--showlocals',
action="store_true", dest="showlocals", default=False,
help="show locals in tracebacks (disabled by default).")
group._addoption('--tb', metavar="style",
action="store", dest="tbstyle", default='auto',
choices=['auto', 'long', 'short', 'no', 'line', 'native'],
help="traceback print mode (auto/long/short/line/native/no).")
group._addoption('--fulltrace', '--full-trace',
action="store_true", default=False,
help="don't cut any tracebacks (default is to cut).")
group._addoption('--color', metavar="color",
action="store", dest="color", default='auto',
choices=['yes', 'no', 'auto'],
help="color terminal output (yes/no/auto).")
def pytest_configure(config):
config.option.verbose -= config.option.quiet
reporter = TerminalReporter(config, sys.stdout)
config.pluginmanager.register(reporter, 'terminalreporter')
if config.option.debug or config.option.traceconfig:
def mywriter(tags, args):
msg = " ".join(map(str, args))
reporter.write_line("[traceconfig] " + msg)
config.trace.root.setprocessor("pytest:config", mywriter)
def getreportopt(config):
reportopts = ""
reportchars = config.option.reportchars
if not config.option.disablepytestwarnings and 'w' not in reportchars:
reportchars += 'w'
elif config.option.disablepytestwarnings and 'w' in reportchars:
reportchars = reportchars.replace('w', '')
if reportchars:
for char in reportchars:
if char not in reportopts and char != 'a':
reportopts += char
elif char == 'a':
reportopts = 'fEsxXw'
return reportopts
def pytest_report_teststatus(report):
if report.passed:
letter = "."
elif report.skipped:
letter = "s"
elif report.failed:
letter = "F"
if report.when != "call":
letter = "f"
return report.outcome, letter, report.outcome.upper()
class WarningReport:
def __init__(self, code, message, nodeid=None, fslocation=None):
self.code = code
self.message = message
self.nodeid = nodeid
self.fslocation = fslocation
class TerminalReporter:
def __init__(self, config, file=None):
import _pytest.config
self.config = config
self.verbosity = self.config.option.verbose
self.showheader = self.verbosity >= 0
self.showfspath = self.verbosity >= 0
self.showlongtestinfo = self.verbosity > 0
self._numcollected = 0
self.stats = {}
self.startdir = py.path.local()
if file is None:
file = sys.stdout
self._tw = self.writer = _pytest.config.create_terminal_writer(config,
file)
self.currentfspath = None
self.reportchars = getreportopt(config)
self.hasmarkup = self._tw.hasmarkup
self.isatty = file.isatty()
def hasopt(self, char):
char = {'xfailed': 'x', 'skipped': 's'}.get(char, char)
return char in self.reportchars
def write_fspath_result(self, nodeid, res):
fspath = self.config.rootdir.join(nodeid.split("::")[0])
if fspath != self.currentfspath:
self.currentfspath = fspath
fspath = self.startdir.bestrelpath(fspath)
self._tw.line()
self._tw.write(fspath + " ")
self._tw.write(res)
def write_ensure_prefix(self, prefix, extra="", **kwargs):
if self.currentfspath != prefix:
self._tw.line()
self.currentfspath = prefix
self._tw.write(prefix)
if extra:
self._tw.write(extra, **kwargs)
self.currentfspath = -2
def ensure_newline(self):
if self.currentfspath:
self._tw.line()
self.currentfspath = None
def write(self, content, **markup):
self._tw.write(content, **markup)
def write_line(self, line, **markup):
if not py.builtin._istext(line):
line = py.builtin.text(line, errors="replace")
self.ensure_newline()
self._tw.line(line, **markup)
def rewrite(self, line, **markup):
line = str(line)
self._tw.write("\r" + line, **markup)
def write_sep(self, sep, title=None, **markup):
self.ensure_newline()
self._tw.sep(sep, title, **markup)
def section(self, title, sep="=", **kw):
self._tw.sep(sep, title, **kw)
def line(self, msg, **kw):
self._tw.line(msg, **kw)
def pytest_internalerror(self, excrepr):
for line in py.builtin.text(excrepr).split("\n"):
self.write_line("INTERNALERROR> " + line)
return 1
def pytest_logwarning(self, code, fslocation, message, nodeid):
warnings = self.stats.setdefault("warnings", [])
if isinstance(fslocation, tuple):
fslocation = "%s:%d" % fslocation
warning = WarningReport(code=code, fslocation=fslocation,
message=message, nodeid=nodeid)
warnings.append(warning)
def pytest_plugin_registered(self, plugin):
if self.config.option.traceconfig:
msg = "PLUGIN registered: %s" % (plugin,)
# XXX this event may happen during setup/teardown time
# which unfortunately captures our output here
# which garbles our output if we use self.write_line
self.write_line(msg)
def pytest_deselected(self, items):
self.stats.setdefault('deselected', []).extend(items)
def pytest_runtest_logstart(self, nodeid, location):
# ensure that the path is printed before the
# 1st test of a module starts running
if self.showlongtestinfo:
line = self._locationline(nodeid, *location)
self.write_ensure_prefix(line, "")
elif self.showfspath:
fsid = nodeid.split("::")[0]
self.write_fspath_result(fsid, "")
def pytest_runtest_logreport(self, report):
rep = report
res = self.config.hook.pytest_report_teststatus(report=rep)
cat, letter, word = res
self.stats.setdefault(cat, []).append(rep)
self._tests_ran = True
if not letter and not word:
# probably passed setup/teardown
return
if self.verbosity <= 0:
if not hasattr(rep, 'node') and self.showfspath:
self.write_fspath_result(rep.nodeid, letter)
else:
self._tw.write(letter)
else:
if isinstance(word, tuple):
word, markup = word
else:
if rep.passed:
markup = {'green':True}
elif rep.failed:
markup = {'red':True}
elif rep.skipped:
markup = {'yellow':True}
line = self._locationline(rep.nodeid, *rep.location)
if not hasattr(rep, 'node'):
self.write_ensure_prefix(line, word, **markup)
#self._tw.write(word, **markup)
else:
self.ensure_newline()
if hasattr(rep, 'node'):
self._tw.write("[%s] " % rep.node.gateway.id)
self._tw.write(word, **markup)
self._tw.write(" " + line)
self.currentfspath = -2
def pytest_collection(self):
if not self.isatty and self.config.option.verbose >= 1:
self.write("collecting ... ", bold=True)
def pytest_collectreport(self, report):
if report.failed:
self.stats.setdefault("error", []).append(report)
elif report.skipped:
self.stats.setdefault("skipped", []).append(report)
items = [x for x in report.result if isinstance(x, pytest.Item)]
self._numcollected += len(items)
if self.isatty:
#self.write_fspath_result(report.nodeid, 'E')
self.report_collect()
def report_collect(self, final=False):
if self.config.option.verbose < 0:
return
errors = len(self.stats.get('error', []))
skipped = len(self.stats.get('skipped', []))
if final:
line = "collected "
else:
line = "collecting "
line += str(self._numcollected) + " items"
if errors:
line += " / %d errors" % errors
if skipped:
line += " / %d skipped" % skipped
if self.isatty:
if final:
line += " \n"
self.rewrite(line, bold=True)
else:
self.write_line(line)
def pytest_collection_modifyitems(self):
self.report_collect(True)
@pytest.hookimpl(trylast=True)
def pytest_sessionstart(self, session):
self._sessionstarttime = time.time()
if not self.showheader:
return
self.write_sep("=", "test session starts", bold=True)
verinfo = platform.python_version()
msg = "platform %s -- Python %s" % (sys.platform, verinfo)
if hasattr(sys, 'pypy_version_info'):
verinfo = ".".join(map(str, sys.pypy_version_info[:3]))
msg += "[pypy-%s-%s]" % (verinfo, sys.pypy_version_info[3])
msg += ", pytest-%s, py-%s, pluggy-%s" % (
pytest.__version__, py.__version__, pluggy.__version__)
if self.verbosity > 0 or self.config.option.debug or \
getattr(self.config.option, 'pastebin', None):
msg += " -- " + str(sys.executable)
self.write_line(msg)
lines = self.config.hook.pytest_report_header(
config=self.config, startdir=self.startdir)
lines.reverse()
for line in flatten(lines):
self.write_line(line)
def pytest_report_header(self, config):
inifile = ""
if config.inifile:
inifile = config.rootdir.bestrelpath(config.inifile)
lines = ["rootdir: %s, inifile: %s" %(config.rootdir, inifile)]
plugininfo = config.pluginmanager.list_plugin_distinfo()
if plugininfo:
lines.append(
"plugins: %s" % ", ".join(_plugin_nameversions(plugininfo)))
return lines
def pytest_collection_finish(self, session):
if self.config.option.collectonly:
self._printcollecteditems(session.items)
if self.stats.get('failed'):
self._tw.sep("!", "collection failures")
for rep in self.stats.get('failed'):
rep.toterminal(self._tw)
return 1
return 0
if not self.showheader:
return
#for i, testarg in enumerate(self.config.args):
# self.write_line("test path %d: %s" %(i+1, testarg))
def _printcollecteditems(self, items):
# to print out items and their parent collectors
# we take care to leave out Instances aka ()
# because later versions are going to get rid of them anyway
if self.config.option.verbose < 0:
if self.config.option.verbose < -1:
counts = {}
for item in items:
name = item.nodeid.split('::', 1)[0]
counts[name] = counts.get(name, 0) + 1
for name, count in sorted(counts.items()):
self._tw.line("%s: %d" % (name, count))
else:
for item in items:
nodeid = item.nodeid
nodeid = nodeid.replace("::()::", "::")
self._tw.line(nodeid)
return
stack = []
indent = ""
for item in items:
needed_collectors = item.listchain()[1:] # strip root node
while stack:
if stack == needed_collectors[:len(stack)]:
break
stack.pop()
for col in needed_collectors[len(stack):]:
stack.append(col)
#if col.name == "()":
# continue
indent = (len(stack) - 1) * " "
self._tw.line("%s%s" % (indent, col))
@pytest.hookimpl(hookwrapper=True)
def pytest_sessionfinish(self, exitstatus):
outcome = yield
outcome.get_result()
self._tw.line("")
summary_exit_codes = (
EXIT_OK, EXIT_TESTSFAILED, EXIT_INTERRUPTED, EXIT_USAGEERROR,
EXIT_NOTESTSCOLLECTED)
if exitstatus in summary_exit_codes:
self.config.hook.pytest_terminal_summary(terminalreporter=self,
exitstatus=exitstatus)
self.summary_errors()
self.summary_failures()
self.summary_warnings()
self.summary_passes()
if exitstatus == EXIT_INTERRUPTED:
self._report_keyboardinterrupt()
del self._keyboardinterrupt_memo
self.summary_deselected()
self.summary_stats()
def pytest_keyboard_interrupt(self, excinfo):
self._keyboardinterrupt_memo = excinfo.getrepr(funcargs=True)
def pytest_unconfigure(self):
if hasattr(self, '_keyboardinterrupt_memo'):
self._report_keyboardinterrupt()
def _report_keyboardinterrupt(self):
excrepr = self._keyboardinterrupt_memo
msg = excrepr.reprcrash.message
self.write_sep("!", msg)
if "KeyboardInterrupt" in msg:
if self.config.option.fulltrace:
excrepr.toterminal(self._tw)
else:
self._tw.line("to show a full traceback on KeyboardInterrupt use --fulltrace", yellow=True)
excrepr.reprcrash.toterminal(self._tw)
def _locationline(self, nodeid, fspath, lineno, domain):
def mkrel(nodeid):
line = self.config.cwd_relative_nodeid(nodeid)
if domain and line.endswith(domain):
line = line[:-len(domain)]
l = domain.split("[")
l[0] = l[0].replace('.', '::') # don't replace '.' in params
line += "[".join(l)
return line
# collect_fspath comes from testid which has a "/"-normalized path
if fspath:
res = mkrel(nodeid).replace("::()", "") # parens-normalization
if nodeid.split("::")[0] != fspath.replace("\\", "/"):
res += " <- " + self.startdir.bestrelpath(fspath)
else:
res = "[location]"
return res + " "
def _getfailureheadline(self, rep):
if hasattr(rep, 'location'):
fspath, lineno, domain = rep.location
return domain
else:
return "test session" # XXX?
def _getcrashline(self, rep):
try:
return str(rep.longrepr.reprcrash)
except AttributeError:
try:
return str(rep.longrepr)[:50]
except AttributeError:
return ""
#
# summaries for sessionfinish
#
def getreports(self, name):
l = []
for x in self.stats.get(name, []):
if not hasattr(x, '_pdbshown'):
l.append(x)
return l
def summary_warnings(self):
if self.hasopt("w"):
warnings = self.stats.get("warnings")
if not warnings:
return
self.write_sep("=", "pytest-warning summary")
for w in warnings:
self._tw.line("W%s %s %s" % (w.code,
w.fslocation, w.message))
def summary_passes(self):
if self.config.option.tbstyle != "no":
if self.hasopt("P"):
reports = self.getreports('passed')
if not reports:
return
self.write_sep("=", "PASSES")
for rep in reports:
msg = self._getfailureheadline(rep)
self.write_sep("_", msg)
self._outrep_summary(rep)
def print_teardown_sections(self, rep):
for secname, content in rep.sections:
if 'teardown' in secname:
self._tw.sep('-', secname)
if content[-1:] == "\n":
content = content[:-1]
self._tw.line(content)
def summary_failures(self):
if self.config.option.tbstyle != "no":
reports = self.getreports('failed')
if not reports:
return
self.write_sep("=", "FAILURES")
for rep in reports:
if self.config.option.tbstyle == "line":
line = self._getcrashline(rep)
self.write_line(line)
else:
msg = self._getfailureheadline(rep)
markup = {'red': True, 'bold': True}
self.write_sep("_", msg, **markup)
self._outrep_summary(rep)
for report in self.getreports(''):
if report.nodeid == rep.nodeid and report.when == 'teardown':
self.print_teardown_sections(report)
def summary_errors(self):
if self.config.option.tbstyle != "no":
reports = self.getreports('error')
if not reports:
return
self.write_sep("=", "ERRORS")
for rep in self.stats['error']:
msg = self._getfailureheadline(rep)
if not hasattr(rep, 'when'):
# collect
msg = "ERROR collecting " + msg
elif rep.when == "setup":
msg = "ERROR at setup of " + msg
elif rep.when == "teardown":
msg = "ERROR at teardown of " + msg
self.write_sep("_", msg)
self._outrep_summary(rep)
def _outrep_summary(self, rep):
rep.toterminal(self._tw)
for secname, content in rep.sections:
self._tw.sep("-", secname)
if content[-1:] == "\n":
content = content[:-1]
self._tw.line(content)
def summary_stats(self):
session_duration = time.time() - self._sessionstarttime
(line, color) = build_summary_stats_line(self.stats)
msg = "%s in %.2f seconds" % (line, session_duration)
markup = {color: True, 'bold': True}
if self.verbosity >= 0:
self.write_sep("=", msg, **markup)
if self.verbosity == -1:
self.write_line(msg, **markup)
def summary_deselected(self):
if 'deselected' in self.stats:
self.write_sep("=", "%d tests deselected" % (
len(self.stats['deselected'])), bold=True)
def repr_pythonversion(v=None):
if v is None:
v = sys.version_info
try:
return "%s.%s.%s-%s-%s" % v
except (TypeError, ValueError):
return str(v)
def flatten(l):
for x in l:
if isinstance(x, (list, tuple)):
for y in flatten(x):
yield y
else:
yield x
def build_summary_stats_line(stats):
keys = ("failed passed skipped deselected "
"xfailed xpassed warnings error").split()
key_translation = {'warnings': 'pytest-warnings'}
unknown_key_seen = False
for key in stats.keys():
if key not in keys:
if key: # setup/teardown reports have an empty key, ignore them
keys.append(key)
unknown_key_seen = True
parts = []
for key in keys:
val = stats.get(key, None)
if val:
key_name = key_translation.get(key, key)
parts.append("%d %s" % (len(val), key_name))
if parts:
line = ", ".join(parts)
else:
line = "no tests ran"
if 'failed' in stats or 'error' in stats:
color = 'red'
elif 'warnings' in stats or unknown_key_seen:
color = 'yellow'
elif 'passed' in stats:
color = 'green'
else:
color = 'yellow'
return (line, color)
def _plugin_nameversions(plugininfo):
l = []
for plugin, dist in plugininfo:
# gets us name and version!
name = '{dist.project_name}-{dist.version}'.format(dist=dist)
# questionable convenience, but it keeps things short
if name.startswith("pytest-"):
name = name[7:]
# we decided to print python package names
# they can have more than one plugin
if name not in l:
l.append(name)
return l

124
lib/spack/external/_pytest/tmpdir.py vendored Normal file
View File

@@ -0,0 +1,124 @@
""" support for providing temporary directories to test functions. """
import re
import pytest
import py
from _pytest.monkeypatch import MonkeyPatch
class TempdirFactory:
"""Factory for temporary directories under the common base temp directory.
The base directory can be configured using the ``--basetemp`` option.
"""
def __init__(self, config):
self.config = config
self.trace = config.trace.get("tmpdir")
def ensuretemp(self, string, dir=1):
""" (deprecated) return temporary directory path with
the given string as the trailing part. It is usually
better to use the 'tmpdir' function argument which
provides an empty unique-per-test-invocation directory
and is guaranteed to be empty.
"""
#py.log._apiwarn(">1.1", "use tmpdir function argument")
return self.getbasetemp().ensure(string, dir=dir)
def mktemp(self, basename, numbered=True):
"""Create a subdirectory of the base temporary directory and return it.
If ``numbered``, ensure the directory is unique by adding a number
prefix greater than any existing one.
"""
basetemp = self.getbasetemp()
if not numbered:
p = basetemp.mkdir(basename)
else:
p = py.path.local.make_numbered_dir(prefix=basename,
keep=0, rootdir=basetemp, lock_timeout=None)
self.trace("mktemp", p)
return p
def getbasetemp(self):
""" return base temporary directory. """
try:
return self._basetemp
except AttributeError:
basetemp = self.config.option.basetemp
if basetemp:
basetemp = py.path.local(basetemp)
if basetemp.check():
basetemp.remove()
basetemp.mkdir()
else:
temproot = py.path.local.get_temproot()
user = get_user()
if user:
# use a sub-directory in the temproot to speed-up
# make_numbered_dir() call
rootdir = temproot.join('pytest-of-%s' % user)
else:
rootdir = temproot
rootdir.ensure(dir=1)
basetemp = py.path.local.make_numbered_dir(prefix='pytest-',
rootdir=rootdir)
self._basetemp = t = basetemp.realpath()
self.trace("new basetemp", t)
return t
def finish(self):
self.trace("finish")
def get_user():
"""Return the current user name, or None if getuser() does not work
in the current environment (see #1010).
"""
import getpass
try:
return getpass.getuser()
except (ImportError, KeyError):
return None
# backward compatibility
TempdirHandler = TempdirFactory
def pytest_configure(config):
"""Create a TempdirFactory and attach it to the config object.
This is to comply with existing plugins which expect the handler to be
available at pytest_configure time, but ideally should be moved entirely
to the tmpdir_factory session fixture.
"""
mp = MonkeyPatch()
t = TempdirFactory(config)
config._cleanup.extend([mp.undo, t.finish])
mp.setattr(config, '_tmpdirhandler', t, raising=False)
mp.setattr(pytest, 'ensuretemp', t.ensuretemp, raising=False)
@pytest.fixture(scope='session')
def tmpdir_factory(request):
"""Return a TempdirFactory instance for the test session.
"""
return request.config._tmpdirhandler
@pytest.fixture
def tmpdir(request, tmpdir_factory):
"""Return a temporary directory path object
which is unique to each test function invocation,
created as a sub directory of the base temporary
directory. The returned object is a `py.path.local`_
path object.
"""
name = request.node.name
name = re.sub("[\W]", "_", name)
MAXVAL = 30
if len(name) > MAXVAL:
name = name[:MAXVAL]
x = tmpdir_factory.mktemp(name, numbered=True)
return x

217
lib/spack/external/_pytest/unittest.py vendored Normal file
View File

@@ -0,0 +1,217 @@
""" discovery and running of std-library "unittest" style tests. """
from __future__ import absolute_import
import sys
import traceback
import pytest
# for transfering markers
import _pytest._code
from _pytest.python import transfer_markers
from _pytest.skipping import MarkEvaluator
def pytest_pycollect_makeitem(collector, name, obj):
# has unittest been imported and is obj a subclass of its TestCase?
try:
if not issubclass(obj, sys.modules["unittest"].TestCase):
return
except Exception:
return
# yes, so let's collect it
return UnitTestCase(name, parent=collector)
class UnitTestCase(pytest.Class):
# marker for fixturemanger.getfixtureinfo()
# to declare that our children do not support funcargs
nofuncargs = True
def setup(self):
cls = self.obj
if getattr(cls, '__unittest_skip__', False):
return # skipped
setup = getattr(cls, 'setUpClass', None)
if setup is not None:
setup()
teardown = getattr(cls, 'tearDownClass', None)
if teardown is not None:
self.addfinalizer(teardown)
super(UnitTestCase, self).setup()
def collect(self):
from unittest import TestLoader
cls = self.obj
if not getattr(cls, "__test__", True):
return
self.session._fixturemanager.parsefactories(self, unittest=True)
loader = TestLoader()
module = self.getparent(pytest.Module).obj
foundsomething = False
for name in loader.getTestCaseNames(self.obj):
x = getattr(self.obj, name)
if not getattr(x, '__test__', True):
continue
funcobj = getattr(x, 'im_func', x)
transfer_markers(funcobj, cls, module)
yield TestCaseFunction(name, parent=self)
foundsomething = True
if not foundsomething:
runtest = getattr(self.obj, 'runTest', None)
if runtest is not None:
ut = sys.modules.get("twisted.trial.unittest", None)
if ut is None or runtest != ut.TestCase.runTest:
yield TestCaseFunction('runTest', parent=self)
class TestCaseFunction(pytest.Function):
_excinfo = None
def setup(self):
self._testcase = self.parent.obj(self.name)
self._fix_unittest_skip_decorator()
self._obj = getattr(self._testcase, self.name)
if hasattr(self._testcase, 'setup_method'):
self._testcase.setup_method(self._obj)
if hasattr(self, "_request"):
self._request._fillfixtures()
def _fix_unittest_skip_decorator(self):
"""
The @unittest.skip decorator calls functools.wraps(self._testcase)
The call to functools.wraps() fails unless self._testcase
has a __name__ attribute. This is usually automatically supplied
if the test is a function or method, but we need to add manually
here.
See issue #1169
"""
if sys.version_info[0] == 2:
setattr(self._testcase, "__name__", self.name)
def teardown(self):
if hasattr(self._testcase, 'teardown_method'):
self._testcase.teardown_method(self._obj)
# Allow garbage collection on TestCase instance attributes.
self._testcase = None
self._obj = None
def startTest(self, testcase):
pass
def _addexcinfo(self, rawexcinfo):
# unwrap potential exception info (see twisted trial support below)
rawexcinfo = getattr(rawexcinfo, '_rawexcinfo', rawexcinfo)
try:
excinfo = _pytest._code.ExceptionInfo(rawexcinfo)
except TypeError:
try:
try:
l = traceback.format_exception(*rawexcinfo)
l.insert(0, "NOTE: Incompatible Exception Representation, "
"displaying natively:\n\n")
pytest.fail("".join(l), pytrace=False)
except (pytest.fail.Exception, KeyboardInterrupt):
raise
except:
pytest.fail("ERROR: Unknown Incompatible Exception "
"representation:\n%r" %(rawexcinfo,), pytrace=False)
except KeyboardInterrupt:
raise
except pytest.fail.Exception:
excinfo = _pytest._code.ExceptionInfo()
self.__dict__.setdefault('_excinfo', []).append(excinfo)
def addError(self, testcase, rawexcinfo):
self._addexcinfo(rawexcinfo)
def addFailure(self, testcase, rawexcinfo):
self._addexcinfo(rawexcinfo)
def addSkip(self, testcase, reason):
try:
pytest.skip(reason)
except pytest.skip.Exception:
self._evalskip = MarkEvaluator(self, 'SkipTest')
self._evalskip.result = True
self._addexcinfo(sys.exc_info())
def addExpectedFailure(self, testcase, rawexcinfo, reason=""):
try:
pytest.xfail(str(reason))
except pytest.xfail.Exception:
self._addexcinfo(sys.exc_info())
def addUnexpectedSuccess(self, testcase, reason=""):
self._unexpectedsuccess = reason
def addSuccess(self, testcase):
pass
def stopTest(self, testcase):
pass
def runtest(self):
if self.config.pluginmanager.get_plugin("pdbinvoke") is None:
self._testcase(result=self)
else:
# disables tearDown and cleanups for post mortem debugging (see #1890)
self._testcase.debug()
def _prunetraceback(self, excinfo):
pytest.Function._prunetraceback(self, excinfo)
traceback = excinfo.traceback.filter(
lambda x:not x.frame.f_globals.get('__unittest'))
if traceback:
excinfo.traceback = traceback
@pytest.hookimpl(tryfirst=True)
def pytest_runtest_makereport(item, call):
if isinstance(item, TestCaseFunction):
if item._excinfo:
call.excinfo = item._excinfo.pop(0)
try:
del call.result
except AttributeError:
pass
# twisted trial support
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_protocol(item):
if isinstance(item, TestCaseFunction) and \
'twisted.trial.unittest' in sys.modules:
ut = sys.modules['twisted.python.failure']
Failure__init__ = ut.Failure.__init__
check_testcase_implements_trial_reporter()
def excstore(self, exc_value=None, exc_type=None, exc_tb=None,
captureVars=None):
if exc_value is None:
self._rawexcinfo = sys.exc_info()
else:
if exc_type is None:
exc_type = type(exc_value)
self._rawexcinfo = (exc_type, exc_value, exc_tb)
try:
Failure__init__(self, exc_value, exc_type, exc_tb,
captureVars=captureVars)
except TypeError:
Failure__init__(self, exc_value, exc_type, exc_tb)
ut.Failure.__init__ = excstore
yield
ut.Failure.__init__ = Failure__init__
else:
yield
def check_testcase_implements_trial_reporter(done=[]):
if done:
return
from zope.interface import classImplements
from twisted.trial.itrial import IReporter
classImplements(TestCaseFunction, IReporter)
done.append(1)

View File

@@ -0,0 +1,13 @@
This directory vendors the `pluggy` module.
For a more detailed discussion for the reasons to vendoring this
package, please see [this issue](https://github.com/pytest-dev/pytest/issues/944).
To update the current version, execute:
```
$ pip install -U pluggy==<version> --no-compile --target=_pytest/vendored_packages
```
And commit the modified files. The `pluggy-<version>.dist-info` directory
created by `pip` should be added as well.

Some files were not shown because too many files have changed in this diff Show More